org.electrocodeogram.cpc.merge.api.strategy
Interface ICloneObjectExtensionMergeStrategy


public interface ICloneObjectExtensionMergeStrategy

A special support API which allows ICloneObjectExtensions and other modules to contribute special handling code for merging of ICloneObjectExtension data.

Every implementation needs to provide a no-argument constructor.

Implementations of this interface are treated as Singletons. An instance of each strategy will be generated at startup and will then be reused whenever needed.

Author:
vw
See Also:
IMergeProvider, MergeProvider, ICloneObjectExtension

Nested Class Summary
static class ICloneObjectExtensionMergeStrategy.Status
          Return status indicator for merge(IReadableMergeTask, IMergeResult, ICloneObject, ICloneObject, ICloneObject, ICloneObject, LinkedList, LinkedList, LinkedList).
 
Method Summary
 ICloneObjectExtensionMergeStrategy.Status merge(IReadableMergeTask mergeTask, IMergeResult mergeResult, ICloneObject localCloneObject, ICloneObject remoteCloneObject, ICloneObject baseCloneObject, ICloneObject mergedCloneObject, java.util.LinkedList<ICloneObjectExtension> pendingLocalExtensions, java.util.LinkedList<ICloneObjectExtension> pendingRemoteExtensions, java.util.LinkedList<ICloneObjectExtension> pendingBaseExtensions)
          Takes a local and remote version of an ICloneObject instance with extensions and an optional base version and merges the data of supported extensions.
 

Method Detail

merge

ICloneObjectExtensionMergeStrategy.Status merge(IReadableMergeTask mergeTask,
                                                IMergeResult mergeResult,
                                                ICloneObject localCloneObject,
                                                ICloneObject remoteCloneObject,
                                                ICloneObject baseCloneObject,
                                                ICloneObject mergedCloneObject,
                                                java.util.LinkedList<ICloneObjectExtension> pendingLocalExtensions,
                                                java.util.LinkedList<ICloneObjectExtension> pendingRemoteExtensions,
                                                java.util.LinkedList<ICloneObjectExtension> pendingBaseExtensions)
Takes a local and remote version of an ICloneObject instance with extensions and an optional base version and merges the data of supported extensions.

The result is directly written to the given merged version of the clone object.

The pending base clone object list does not need to be completely processed. The pending local and remote clone object lists should be empty once all strategies have been executed.
Usually the last ("fallback") strategy will take care of all remaining, pending local and remote clone objects.

Parameters:
mergeTask - the current merge task for which this merging is taking place, must not be modified in any way, never null.
mergeResult - the current merge result, this may not yet be the final merge result, must not be modified in any way, never null.
localCloneObject - the former local version of the clone object, must not be modified, never null.
remoteCloneObject - the former remote version of the clone object, must not be modified, never null.
baseCloneObject - an optional base version of the clone object, must not be modified, may be NULL.
mergedCloneObject - the new, merged version of the clone object, may be modified, never null.
pendingLocalExtensions - a list of so far unhandled former local extension objects, may be empty, may be modified, never null.
pendingRemoteExtensions - a list of so far unhandled former remote extension objects, may be empty, may be modified, never null.
pendingBaseExtensions - a list of so far unhandled base extension objects, may be empty, may be modified, never null.
Returns:
the status of this merge operations, see: ICloneObjectExtensionMergeStrategy.Status