public class EMFResourceMappingMerger extends Object implements org.eclipse.team.core.mapping.IResourceMappingMerger
EMFResourceMapping
s. This will use EMF Compare to recompute the logical
model of the mappings it needs to merge, then merge everything to the left model if there are no conflicts,
stopping dead if there is any conflict.
Mapping mergers are usually retrieved through an adapter registered on the ModelProvider. In this case,
org.eclipse.core.runtime.Platform.getAdapterManager().getAdapter(emfModelProvider, IResourceMappingMerger.class)
.
EMFLogicalModelAdapterFactory
Modifier and Type | Class and Description |
---|---|
protected static class |
EMFResourceMappingMerger.ResourceAdditionAndDeletionTracker |
Modifier and Type | Field and Description |
---|---|
protected static IMerger.Registry2 |
MERGER_REGISTRY
The merger registry.
|
Constructor and Description |
---|
EMFResourceMappingMerger() |
Modifier and Type | Method and Description |
---|---|
protected Set<URI> |
collectConflictingResources(Iterator<Diff> diffIterator)
Iterates over the given diffs to collect the resources they impact.
|
protected void |
delegateMergeOfUnmergedResourcesAndMarkDiffsAsMerged(SynchronizationModel syncModel,
org.eclipse.team.core.mapping.IMergeContext mergeContext,
EMFResourceMappingMerger.ResourceAdditionAndDeletionTracker resourceTracker,
org.eclipse.core.runtime.SubMonitor subMonitor)
Delegates the merge of so far non-merged resource additions and deletions and marks all other already
merged resources as merged.
|
org.eclipse.core.runtime.jobs.ISchedulingRule |
getMergeRule(org.eclipse.team.core.mapping.IMergeContext context) |
protected void |
markAsMerged(org.eclipse.team.core.diff.IDiff diff,
org.eclipse.team.core.mapping.IMergeContext mergeContext,
org.eclipse.core.runtime.SubMonitor subMonitor)
Marks the given
diff as merged. |
protected void |
markResourcesAsMerged(org.eclipse.team.core.mapping.IMergeContext context,
Set<org.eclipse.core.resources.IResource> resources,
Set<URI> conflictingURIs,
org.eclipse.core.runtime.SubMonitor subMonitor)
Marks the resources as merged if their URIs are not included in the given set of known
conflictingURIs . |
protected void |
merge(org.eclipse.team.core.diff.IDiff diff,
org.eclipse.team.core.mapping.IMergeContext mergeContext,
org.eclipse.core.runtime.SubMonitor subMonitor)
Merges the given
diff . |
org.eclipse.core.runtime.IStatus |
merge(org.eclipse.team.core.mapping.IMergeContext mergeContext,
org.eclipse.core.runtime.IProgressMonitor monitor) |
protected void |
mergeMapping(org.eclipse.core.resources.mapping.ResourceMapping mapping,
org.eclipse.team.core.mapping.IMergeContext mergeContext,
Set<org.eclipse.core.resources.mapping.ResourceMapping> failingMappings,
org.eclipse.core.runtime.IProgressMonitor monitor)
Merges one mapping.
|
protected void |
removeNonExistingStorages(StorageTraversal traversal)
Removes storages that do not exist from the specified
traversal . |
protected void |
save(Notifier notifier,
StorageTraversal leftTraversal,
StorageTraversal rightTraversal,
StorageTraversal originTraversal)
Saves the given notifier to disk after a successful merge.
|
org.eclipse.core.runtime.IStatus |
validateMerge(org.eclipse.team.core.mapping.IMergeContext mergeContext,
org.eclipse.core.runtime.IProgressMonitor monitor) |
protected static final IMerger.Registry2 MERGER_REGISTRY
public org.eclipse.core.runtime.IStatus merge(org.eclipse.team.core.mapping.IMergeContext mergeContext, org.eclipse.core.runtime.IProgressMonitor monitor) throws org.eclipse.core.runtime.CoreException
merge
in interface org.eclipse.team.core.mapping.IResourceMappingMerger
org.eclipse.core.runtime.CoreException
protected void mergeMapping(org.eclipse.core.resources.mapping.ResourceMapping mapping, org.eclipse.team.core.mapping.IMergeContext mergeContext, Set<org.eclipse.core.resources.mapping.ResourceMapping> failingMappings, org.eclipse.core.runtime.IProgressMonitor monitor) throws org.eclipse.core.runtime.CoreException
mapping
- The mapping to mergemergeContext
- The merge contextfailingMappings
- The set of failing mappingsmonitor
- The progress monitor to use, 10 ticks will be consumedorg.eclipse.core.runtime.CoreException
protected void removeNonExistingStorages(StorageTraversal traversal)
traversal
.
In the current implementation, the check for existence is based on the assumption that the storage is
an IFile
. This is fine, since we currently need it on the local side only anyways.
traversal
- The traversal to remove non-existing storages from.protected Set<URI> collectConflictingResources(Iterator<Diff> diffIterator)
diffIterator
- Iterator over the conflicting differences and their dependent diffs.protected void markResourcesAsMerged(org.eclipse.team.core.mapping.IMergeContext context, Set<org.eclipse.core.resources.IResource> resources, Set<URI> conflictingURIs, org.eclipse.core.runtime.SubMonitor subMonitor)
conflictingURIs
.context
- The current merge context.resources
- The resources to be marked as merged.conflictingURIs
- The set of known conflictingURIs
.subMonitor
- Monitor on which to report progress to the user.protected void delegateMergeOfUnmergedResourcesAndMarkDiffsAsMerged(SynchronizationModel syncModel, org.eclipse.team.core.mapping.IMergeContext mergeContext, EMFResourceMappingMerger.ResourceAdditionAndDeletionTracker resourceTracker, org.eclipse.core.runtime.SubMonitor subMonitor) throws org.eclipse.core.runtime.CoreException
syncModel
- The synchronization model to obtain the storages.mergeContext
- The merge context.resourceTracker
- The tracker that tracked already merged file additions and deletions.subMonitor
- The progress monitor to use.org.eclipse.core.runtime.CoreException
protected void merge(org.eclipse.team.core.diff.IDiff diff, org.eclipse.team.core.mapping.IMergeContext mergeContext, org.eclipse.core.runtime.SubMonitor subMonitor)
diff
.diff
- The difference to be merged.mergeContext
- The merge context.subMonitor
- The process monitor to use.protected void markAsMerged(org.eclipse.team.core.diff.IDiff diff, org.eclipse.team.core.mapping.IMergeContext mergeContext, org.eclipse.core.runtime.SubMonitor subMonitor)
diff
as merged.diff
- The difference to be marked as merge.mergeContext
- The merge context.subMonitor
- The progress monitor to use.protected void save(Notifier notifier, StorageTraversal leftTraversal, StorageTraversal rightTraversal, StorageTraversal originTraversal)
notifier
- The notifier.leftTraversal
- The traversal corresponding to the left side.rightTraversal
- The traversal corresponding to the right side.originTraversal
- The traversal corresponding to the common ancestor of both other side. Can be
null
.public org.eclipse.core.runtime.jobs.ISchedulingRule getMergeRule(org.eclipse.team.core.mapping.IMergeContext context)
getMergeRule
in interface org.eclipse.team.core.mapping.IResourceMappingMerger
public org.eclipse.core.runtime.IStatus validateMerge(org.eclipse.team.core.mapping.IMergeContext mergeContext, org.eclipse.core.runtime.IProgressMonitor monitor)
validateMerge
in interface org.eclipse.team.core.mapping.IResourceMappingMerger
Copyright (c) 2006, 2015 Obeo and others. All rights reserved.