Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-11-23 06:06:15 +0000
committerEike Stepper2011-11-23 06:06:15 +0000
commite835f5cf38ba2d8ce92ee8de53bf36ba84dcfefc (patch)
tree9b12f2e7d3b74c85748ce0fbae380642525780c5 /plugins/org.eclipse.emf.cdo/src/org
parent0d28396e1e124fc719bf178f995194f47bbbc99e (diff)
downloadcdo-e835f5cf38ba2d8ce92ee8de53bf36ba84dcfefc.tar.gz
cdo-e835f5cf38ba2d8ce92ee8de53bf36ba84dcfefc.tar.xz
cdo-e835f5cf38ba2d8ce92ee8de53bf36ba84dcfefc.zip
[359966] Issues when trying to import changes from PushTransaction in legacy mode
https://bugs.eclipse.org/bugs/show_bug.cgi?id=359966
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java34
1 files changed, 32 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 7b0be52c57..7d6ee2c417 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -1809,10 +1809,23 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
};
List<CDOSavepoint> savepoints = new ArrayList<CDOSavepoint>();
+ int totalNewObjects = 0;
+
InternalCDOSavepoint savepoint = firstSavepoint;
while (savepoint != null)
{
Collection<CDOObject> newObjects = savepoint.getNewObjects().values();
+ totalNewObjects += newObjects.size();
+
+ savepoint = savepoint.getNextSavepoint();
+ }
+
+ out.writeInt(totalNewObjects);
+
+ savepoint = firstSavepoint;
+ while (savepoint != null)
+ {
+ Collection<CDOObject> newObjects = savepoint.getNewObjects().values();
Collection<CDORevisionDelta> revisionDeltas = savepoint.getRevisionDeltas().values();
if (newObjects.isEmpty() && revisionDeltas.isEmpty())
{
@@ -1887,6 +1900,13 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
};
+ // Increase the internal tempID counter to prevent ID collisions during mapping
+ int totalNewObjects = in.readInt();
+ for (int i = 0; i < totalNewObjects; i++)
+ {
+ createIDForNewObject(null);
+ }
+
Map<CDOID, CDOID> idMappings = new HashMap<CDOID, CDOID>();
while (in.readBoolean())
{
@@ -1914,11 +1934,20 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
}
// Create new objects
+ List<InternalCDOObject> newObjects = new ArrayList<InternalCDOObject>();
for (InternalCDORevision revision : revisions)
{
InternalCDOObject object = newInstance(revision);
registerObject(object);
registerAttached(object, true);
+
+ newObjects.add(object);
+ }
+
+ // Post-load new objects (important for legacy objects!)
+ for (InternalCDOObject object : newObjects)
+ {
+ object.cdoInternalPostLoad();
}
// Apply deltas
@@ -1926,12 +1955,13 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
for (InternalCDORevisionDelta delta : revisionDeltas)
{
InternalCDOObject object = getObject(delta.getID());
- CDORevision revision = object.cdoRevision().copy();
+ int oldVersion = object.cdoRevision().getVersion();
+
merger.merge(object, delta);
registerRevisionDelta(delta);
registerDirty(object, null);
- if (delta.getVersion() < revision.getVersion())
+ if (delta.getVersion() < oldVersion)
{
setConflict(object);
}

Back to the top