gate.creole
Interface CustomDuplication

All Known Implementing Classes:
ConditionalSerialAnalyserController, ConditionalSerialController, CorpusImpl, DefaultGazetteer, Morph, RealtimeCorpusController, SerialAnalyserController, SerialController, SerialCorpusImpl, SharedDefaultGazetteer

public interface CustomDuplication

Interface which should be implemented by any Resource type which cannot be duplicated in the standard way (see Factory.duplicate). If a Resource class requires custom duplication logic it should implement this interface and provide a method to create a new resource instance that has the same behaviour as this.

Author:
ian

Method Summary
 Resource duplicate(Factory.DuplicationContext ctx)
           Create a duplicate of this resource.
 

Method Detail

duplicate

Resource duplicate(Factory.DuplicationContext ctx)
                   throws ResourceInstantiationException

Create a duplicate of this resource. The object returned need not be of the same concrete class as this, but should behave the same and implement the same set of GATE core interfaces, i.e. if this implements ProcessingResource then the duplicate should also implement ProcessingResource, if this implements LanguageAnalyser then the duplicate should also implement LanguageAnalyser, etc.

Typical uses for resource duplication are multi-threaded applications that require a number of identical resources for concurrent use in different threads. Therefore it is important that duplicates created by this method should be safe for concurrent use in multiple threads - in some cases it may be appropriate for the duplicate to share some state with the original object, but this must be handled in a thread-safe manner.

Implementors of this interface should not use covariant return types, as to do so may limit the flexibility of subclasses to implement duplication in the most efficient manner.

NOTE this method cannot be called directly, use Factory.duplicate(Resource) instead.

Parameters:
ctx - the current duplication context. If an implementation of this method needs to duplicate any other resources as part of the custom duplication process it should pass this context back to the two-argument form of Factory.duplicate rather than using the single-argument form.
Returns:
an independent copy of this resource.
Throws:
ResourceInstantiationException