Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-10-05 15:09:22 +0000
committerEike Stepper2016-10-05 15:09:22 +0000
commita4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e (patch)
tree435a881ef124bbf44f9b3ba8828ac1aab4e54906 /plugins/org.eclipse.emf.cdo
parent53a350e8a852a2d448ee2ec755bd35e45545795e (diff)
downloadcdo-a4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e.tar.gz
cdo-a4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e.tar.xz
cdo-a4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e.zip
[503573] Adapt method in CDODeltaNotificationImpl fails to adapt for GregorianCalendar
https://bugs.eclipse.org/bugs/show_bug.cgi?id=503573
Diffstat (limited to 'plugins/org.eclipse.emf.cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDODeltaNotificationImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java22
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java42
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java18
4 files changed, 54 insertions, 38 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDODeltaNotificationImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDODeltaNotificationImpl.java
index 415532febf..47da7389b0 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDODeltaNotificationImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDODeltaNotificationImpl.java
@@ -184,18 +184,12 @@ public class CDODeltaNotificationImpl extends ENotificationImpl implements CDODe
EDataType eAttributeType = ((EAttribute)feature).getEAttributeType();
if (eAttributeType != null)
{
- String stringValue;
if (eAttributeType instanceof EEnum && object instanceof Integer)
{
EEnumLiteral literal = ((EEnum)eAttributeType).getEEnumLiteral((Integer)object);
- stringValue = literal.getLiteral();
+ String stringValue = literal.getLiteral();
+ object = eAttributeType.getEPackage().getEFactoryInstance().createFromString(eAttributeType, stringValue);
}
- else
- {
- stringValue = String.valueOf(object);
- }
-
- object = eAttributeType.getEPackage().getEFactoryInstance().createFromString(eAttributeType, stringValue);
}
}
}
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 978caadc5c..d54811c3f7 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
@@ -3543,13 +3543,14 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
*
* @since 3.0
*/
- /*
- * Synchronized through InvlidationRunner.run()
- */
@Override
- protected Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> invalidate(List<CDORevisionKey> allChangedObjects,
- List<CDOIDAndVersion> allDetachedObjects, List<CDORevisionDelta> deltas,
- Map<CDOObject, CDORevisionDelta> revisionDeltas, Set<CDOObject> detachedObjects)
+ protected Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> invalidate( //
+ List<CDORevisionKey> allChangedObjects, //
+ List<CDOIDAndVersion> allDetachedObjects, //
+ List<CDORevisionDelta> deltas, //
+ Map<CDOObject, CDORevisionDelta> revisionDeltas, //
+ Set<CDOObject> detachedObjects, //
+ Map<CDOID, InternalCDORevision> oldRevisions)
{
if (!allDetachedObjects.isEmpty())
{
@@ -3567,8 +3568,13 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
session.clearCommittedSinceLastRefresh();
}
- Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> conflicts = //
- super.invalidate(allChangedObjects, allDetachedObjects, deltas, revisionDeltas, detachedObjects);
+ Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> conflicts = super.invalidate( //
+ allChangedObjects, //
+ allDetachedObjects, //
+ deltas, //
+ revisionDeltas, //
+ detachedObjects, //
+ oldRevisions);
if (!allChangedObjects.isEmpty())
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
index 0c5d7c6083..de7e0b01dc 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
@@ -2541,9 +2541,13 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
/*
* Synchronized through InvalidationRunner.run()
*/
- protected Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> invalidate(List<CDORevisionKey> allChangedObjects,
- List<CDOIDAndVersion> allDetachedObjects, List<CDORevisionDelta> deltas,
- Map<CDOObject, CDORevisionDelta> revisionDeltas, Set<CDOObject> detachedObjects)
+ protected Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> invalidate( //
+ List<CDORevisionKey> allChangedObjects, //
+ List<CDOIDAndVersion> allDetachedObjects, //
+ List<CDORevisionDelta> deltas, //
+ Map<CDOObject, CDORevisionDelta> revisionDeltas, //
+ Set<CDOObject> detachedObjects, //
+ Map<CDOID, InternalCDORevision> oldRevisions)
{
boolean hasConflictResolvers = this instanceof CDOTransaction
&& ((CDOTransaction)this).options().getConflictResolvers().length != 0;
@@ -2552,15 +2556,15 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
// Bug 363355: manage detached objects before changed objects to avoid issue on eContainer
for (CDOIDAndVersion key : allDetachedObjects)
{
- InternalCDOObject detachedObject = removeObject(key.getID());
+ CDOID id = key.getID();
+
+ InternalCDOObject detachedObject = removeObject(id);
if (detachedObject != null)
{
- Pair<CDORevision, CDORevisionDelta> oldInfo = Pair.create((CDORevision)detachedObject.cdoRevision(),
- CDORevisionDelta.DETACHED);
- // if (!isLocked(detachedObject))
- {
- CDOStateMachine.INSTANCE.detachRemote(detachedObject);
- }
+ CDORevision oldRevision = detachedObject.cdoRevision();
+ oldRevisions.put(id, (InternalCDORevision)oldRevision);
+
+ CDOStateMachine.INSTANCE.detachRemote(detachedObject);
detachedObjects.add(detachedObject);
if (detachedObject.cdoConflict())
@@ -2570,7 +2574,7 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
conflicts = new HashMap<CDOObject, Pair<CDORevision, CDORevisionDelta>>();
}
- conflicts.put(detachedObject, oldInfo);
+ conflicts.put(detachedObject, Pair.create(oldRevision, CDORevisionDelta.DETACHED));
}
}
}
@@ -2581,6 +2585,7 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
if (key instanceof CDORevisionDelta)
{
delta = (CDORevisionDelta)key;
+
// Copy the revision delta so that conflict resolvers can modify it.
if (hasConflictResolvers)
{
@@ -2590,14 +2595,15 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
deltas.add(delta);
}
- CDOObject changedObject = objects.get(key.getID());
+ CDOID id = key.getID();
+
+ CDOObject changedObject = objects.get(id);
if (changedObject != null)
{
- Pair<CDORevision, CDORevisionDelta> oldInfo = Pair.create(changedObject.cdoRevision(), delta);
- // if (!isLocked(changedObject))
- {
- CDOStateMachine.INSTANCE.invalidate((InternalCDOObject)changedObject, key);
- }
+ CDORevision oldRevision = changedObject.cdoRevision();
+ oldRevisions.put(id, (InternalCDORevision)oldRevision);
+
+ CDOStateMachine.INSTANCE.invalidate((InternalCDOObject)changedObject, key);
if (changedObject instanceof CDOResourceNodeImpl)
{
@@ -2615,7 +2621,7 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb
conflicts = new HashMap<CDOObject, Pair<CDORevision, CDORevisionDelta>>();
}
- conflicts.put(changedObject, oldInfo);
+ conflicts.put(changedObject, Pair.create(oldRevision, delta));
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
index 6322ba8f9e..99a21df448 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java
@@ -1218,10 +1218,20 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
List<CDORevisionDelta> deltas = new ArrayList<CDORevisionDelta>();
Map<CDOObject, CDORevisionDelta> revisionDeltas = new HashMap<CDOObject, CDORevisionDelta>();
Set<CDOObject> detachedObjects = new HashSet<CDOObject>();
+ Map<CDOID, InternalCDORevision> oldRevisions = invalidationData.getOldRevisions();
+ if (oldRevisions == null)
+ {
+ oldRevisions = CDOIDUtil.createMap();
+ }
+
+ Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> conflicts = invalidate( //
+ invalidationData.getAllChangedObjects(), //
+ invalidationData.getAllDetachedObjects(), //
+ deltas, //
+ revisionDeltas, //
+ detachedObjects, //
+ oldRevisions);
- Map<CDOObject, Pair<CDORevision, CDORevisionDelta>> conflicts = invalidate(
- invalidationData.getAllChangedObjects(), invalidationData.getAllDetachedObjects(), deltas, revisionDeltas,
- detachedObjects);
handleConflicts(lastUpdateTime, conflicts, deltas);
sendInvalidationNotifications(revisionDeltas.keySet(), detachedObjects);
@@ -1231,7 +1241,7 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv
// Then send the notifications. The deltas could have been modified by the conflict resolvers.
if (!deltas.isEmpty() || !detachedObjects.isEmpty())
{
- sendDeltaNotifications(deltas, detachedObjects, invalidationData.getOldRevisions());
+ sendDeltaNotifications(deltas, detachedObjects, oldRevisions);
}
fireAdaptersNotifiedEvent(lastUpdateTime);

Back to the top