Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2010-03-07 10:46:57 +0000
committerEike Stepper2010-03-07 10:46:57 +0000
commit4b8cd43eb95a4fd0dac890ae9627118a5f931cb1 (patch)
treef69919f42cc6a4d12bfdb061d034f015c3d93122 /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi
parent6e5220b78daf815b4165fe7d0be0dd050edc3d69 (diff)
downloadcdo-4b8cd43eb95a4fd0dac890ae9627118a5f931cb1.tar.gz
cdo-4b8cd43eb95a4fd0dac890ae9627118a5f931cb1.tar.xz
cdo-4b8cd43eb95a4fd0dac890ae9627118a5f931cb1.zip
[256936] Support for Offline Mode
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256936
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/DefaultCDOMerger.java74
1 files changed, 51 insertions, 23 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/DefaultCDOMerger.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/DefaultCDOMerger.java
index 9c0fffd1a2..7d93365809 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/DefaultCDOMerger.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/DefaultCDOMerger.java
@@ -549,6 +549,35 @@ public class DefaultCDOMerger implements CDOMerger
protected CDOFeatureDelta changedInSourceAndTarget(CDOFeatureDelta targetFeatureDelta,
CDOFeatureDelta sourceFeatureDelta)
{
+ EStructuralFeature feature = targetFeatureDelta.getFeature();
+ if (feature.isMany())
+ {
+ return changedInSourceAndTargetManyValued(feature, targetFeatureDelta, sourceFeatureDelta);
+ }
+
+ return changedInSourceAndTargetSingleValued(feature, targetFeatureDelta, sourceFeatureDelta);
+ }
+
+ /**
+ * @return the result feature delta, or <code>null</code> to indicate an unresolved conflict.
+ */
+ protected CDOFeatureDelta changedInSourceAndTargetManyValued(EStructuralFeature feature,
+ CDOFeatureDelta targetFeatureDelta, CDOFeatureDelta sourceFeatureDelta)
+ {
+ return null;
+ }
+
+ /**
+ * @return the result feature delta, or <code>null</code> to indicate an unresolved conflict.
+ */
+ protected CDOFeatureDelta changedInSourceAndTargetSingleValued(EStructuralFeature feature,
+ CDOFeatureDelta targetFeatureDelta, CDOFeatureDelta sourceFeatureDelta)
+ {
+ if (targetFeatureDelta.equals(sourceFeatureDelta))
+ {
+ return targetFeatureDelta;
+ }
+
return null;
}
@@ -562,31 +591,27 @@ public class DefaultCDOMerger implements CDOMerger
}
@Override
- protected CDOFeatureDelta changedInSourceAndTarget(CDOFeatureDelta targetFeatureDelta,
- CDOFeatureDelta sourceFeatureDelta)
+ protected CDOFeatureDelta changedInSourceAndTargetManyValued(EStructuralFeature feature,
+ CDOFeatureDelta targetFeatureDelta, CDOFeatureDelta sourceFeatureDelta)
{
- EStructuralFeature feature = targetFeatureDelta.getFeature();
- if (feature.isMany())
+ if (targetFeatureDelta instanceof CDOListFeatureDelta && sourceFeatureDelta instanceof CDOListFeatureDelta)
{
- if (targetFeatureDelta instanceof CDOListFeatureDelta && sourceFeatureDelta instanceof CDOListFeatureDelta)
- {
- CDOListFeatureDelta targetListDelta = (CDOListFeatureDelta)targetFeatureDelta;
- CDOListFeatureDelta sourceListDelta = (CDOListFeatureDelta)((InternalCDOFeatureDelta)sourceFeatureDelta)
- .copy();
+ CDOListFeatureDelta targetListDelta = (CDOListFeatureDelta)targetFeatureDelta;
+ CDOListFeatureDelta sourceListDelta = (CDOListFeatureDelta)((InternalCDOFeatureDelta)sourceFeatureDelta)
+ .copy();
- CDOListFeatureDelta result = createResult(feature);
- List<CDOFeatureDelta> resultChanges = result.getListChanges();
+ CDOListFeatureDelta result = createResult(feature);
+ List<CDOFeatureDelta> resultChanges = result.getListChanges();
- List<CDOFeatureDelta> targetChanges = targetListDelta.getListChanges();
- List<CDOFeatureDelta> sourceChanges = sourceListDelta.getListChanges();
+ List<CDOFeatureDelta> targetChanges = targetListDelta.getListChanges();
+ List<CDOFeatureDelta> sourceChanges = sourceListDelta.getListChanges();
- handleListDelta(resultChanges, targetChanges, sourceChanges);
- handleListDelta(resultChanges, sourceChanges, null);
- return result;
- }
+ handleListDelta(resultChanges, targetChanges, sourceChanges);
+ handleListDelta(resultChanges, sourceChanges, null);
+ return result;
}
- return null;
+ return super.changedInSourceAndTargetManyValued(feature, targetFeatureDelta, sourceFeatureDelta);
}
protected CDOListFeatureDelta createResult(EStructuralFeature feature)
@@ -621,12 +646,15 @@ public class DefaultCDOMerger implements CDOMerger
protected void handleListDeltaAdd(List<CDOFeatureDelta> resultList, CDOAddFeatureDelta addDelta,
List<CDOFeatureDelta> listToAdjust)
{
- Object value = addDelta.getValue();
- if (getTargetMap().get(value) instanceof CDORevision && getSourceMap().get(value) instanceof CDORevision)
+ if (listToAdjust == null)
{
- // Remove ADD deltas for objects that have been added to source and target.
- // This can for example happen if a source is re-merged to target.
- return;
+ Object value = addDelta.getValue();
+ if (getTargetMap().get(value) instanceof CDORevision && getSourceMap().get(value) instanceof CDORevision)
+ {
+ // Remove ADD deltas for objects that have been added to source and target.
+ // This can for example happen if a source is re-merged to target.
+ return;
+ }
}
resultList.add(addDelta);

Back to the top