Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransaction.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java5
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFeatureAnalyzer.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFetchRuleManager.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCallbackImpl.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOInvalidationNotificationImpl.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyImpl.java9
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java39
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java37
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java41
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java8
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAbstractFeatureRuleAnalyzer.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAnalyzerFeatureInfo.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOClusterOfFetchRule.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerModelBased.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerUI.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchFeatureInfo.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchRuleManagerThreadLocal.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFeatureAnalyzer.java1
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFetchRuleManager.java4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java20
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CrossReferencesPackageClosure.java2
25 files changed, 149 insertions, 54 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java
index f099d7ce74..e2ff82f691 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOInvalidationNotification.java
@@ -15,7 +15,6 @@ import org.eclipse.emf.common.notify.Notification;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public interface CDOInvalidationNotification extends Notification
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransaction.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransaction.java
index ee4a56bdae..f641012152 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransaction.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransaction.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.cdo;
@@ -14,6 +15,7 @@ import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOClass;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDORevisionDelta;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
@@ -55,4 +57,6 @@ public interface CDOTransaction extends CDOView
public Map<CDOID, CDOObject> getNewObjects();
public Map<CDOID, CDOObject> getDirtyObjects();
+
+ public Map<CDOID, CDORevisionDelta> getRevisionDeltas();
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java
index 8769fa518e..2014c79899 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOTransactionHandler.java
@@ -7,9 +7,12 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.cdo;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDOFeatureDelta;
+
/**
* @author Eike Stepper
*/
@@ -27,7 +30,7 @@ public interface CDOTransactionHandler
* <p>
* Note: This method will be called at most once per object until the associated transaction is committed.
*/
- public void modifyingObject(CDOTransaction transaction, CDOObject object);
+ public void modifyingObject(CDOTransaction transaction, CDOObject object, CDOFeatureDelta featureDelta);
/**
* Called by a <code>CDOTransaction</code> <b>before</b> it is being committed. The implementor of this method is
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java
index 9b1b798c70..6ea8fb345e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOView.java
@@ -7,7 +7,8 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
- * Simon McDuff - EMF invalidation notifications
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201997
**************************************************************************/
package org.eclipse.emf.cdo;
@@ -22,7 +23,6 @@ import org.eclipse.net4j.util.event.INotifier;
/**
* @author Eike Stepper
- * @author Simon McDuff
*/
public interface CDOView extends INotifier
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFeatureAnalyzer.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFeatureAnalyzer.java
index ff2230b1c7..2c4c3cac64 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFeatureAnalyzer.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFeatureAnalyzer.java
@@ -18,7 +18,6 @@ import org.eclipse.emf.internal.cdo.analyzer.NOOPFeatureAnalyzer;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public interface CDOFeatureAnalyzer
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFetchRuleManager.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFetchRuleManager.java
index 17965be5e4..2af0390db3 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFetchRuleManager.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/analyzer/CDOFetchRuleManager.java
@@ -21,7 +21,6 @@ import java.util.List;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public interface CDOFetchRuleManager
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCallbackImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCallbackImpl.java
index bee9cc8f9f..8c1620d11f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCallbackImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOCallbackImpl.java
@@ -44,6 +44,7 @@ public class CDOCallbackImpl extends CDOLegacyImpl implements CDOCallback
CDOStateMachine.INSTANCE.write(this);
}
+ @Override
public boolean isAdapterForType(Object type)
{
return type == CDOCallbackImpl.class;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOInvalidationNotificationImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOInvalidationNotificationImpl.java
index e651892654..0f42bbd559 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOInvalidationNotificationImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOInvalidationNotificationImpl.java
@@ -18,7 +18,6 @@ import org.eclipse.emf.ecore.EObject;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOInvalidationNotificationImpl implements CDOInvalidationNotification
{
@@ -56,26 +55,22 @@ public class CDOInvalidationNotificationImpl implements CDOInvalidationNotificat
public boolean wasSet()
{
- // TODO Clarify return value or throw UOE
throw new UnsupportedOperationException();
}
public boolean isReset()
{
- // TODO Clarify return value or throw UOE
throw new UnsupportedOperationException();
}
public boolean isTouch()
{
- // TODO Clarify return value or throw UOE
- return false;
+ throw new UnsupportedOperationException();
}
public boolean merge(Notification notification)
{
- // TODO Clarify return value or throw UOE
- return false;
+ throw new UnsupportedOperationException();
}
public boolean getNewBooleanValue()
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyImpl.java
index 0ad8d3c729..9aa3653ace 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyImpl.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.internal.cdo;
@@ -162,6 +163,14 @@ public abstract class CDOLegacyImpl extends CDOWrapperImpl implements Adapter.In
public void cdoInternalPreCommit()
{
transferInstanceToRevision();
+
+ CDORevisionManagerImpl revisionManager = view.getSession().getRevisionManager();
+ CDORevisionImpl revision = cdoRevision();
+ CDORevisionImpl originRevision = revisionManager.getRevisionByVersion(revision.getID(), CDORevision.UNCHUNKED,
+ revision.getVersion() - 1, false);
+
+ CDOTransactionImpl transaction = cdoView().toTransaction();
+ transaction.registerRevisionDelta(this.cdoRevision().createDelta(originRevision));
}
public void cdoInternalPostLoad()
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
index 8fcd5c12d6..e2a8e774fe 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDORevisionManagerImpl.java
@@ -18,6 +18,7 @@ import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl.MoveableLi
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.revision.CDOReferenceProxy;
+import org.eclipse.emf.cdo.protocol.revision.CDORevision;
import org.eclipse.emf.cdo.protocol.util.TransportException;
import org.eclipse.emf.internal.cdo.bundle.OM;
@@ -64,7 +65,7 @@ public class CDORevisionManagerImpl extends CDORevisionResolverImpl implements C
// Get appropriate chunk size
int chunkSize = session.getReferenceChunkSize();
- if (chunkSize == CDORevisionImpl.UNCHUNKED)
+ if (chunkSize == CDORevision.UNCHUNKED)
{
// Can happen if CDOSession.setReferenceChunkSize() was called meanwhile
chunkSize = Integer.MAX_VALUE;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
index e839a364fa..f4bf2733cf 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java
@@ -1,3 +1,14 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
+ **************************************************************************/
package org.eclipse.emf.internal.cdo;
import org.eclipse.emf.cdo.CDOSession;
@@ -8,6 +19,7 @@ import org.eclipse.emf.cdo.internal.protocol.model.CDOClassImpl;
import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.protocol.util.TransportException;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.util.ServerException;
@@ -94,7 +106,7 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
init(CDOState.DIRTY, CDOEvent.ATTACH, FAIL);
init(CDOState.DIRTY, CDOEvent.DETACH, FAIL);
init(CDOState.DIRTY, CDOEvent.READ, IGNORE);
- init(CDOState.DIRTY, CDOEvent.WRITE, IGNORE);
+ init(CDOState.DIRTY, CDOEvent.WRITE, new RewriteTransition());
init(CDOState.DIRTY, CDOEvent.INVALIDATE, new ConflictTransition());
init(CDOState.DIRTY, CDOEvent.RELOAD, new ReloadTransition());
init(CDOState.DIRTY, CDOEvent.COMMIT, new CommitTransition());
@@ -151,8 +163,13 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
public void write(InternalCDOObject object)
{
+ write(object, null);
+ }
+
+ public void write(InternalCDOObject object, CDOFeatureDelta featureChange)
+ {
if (TRACER.isEnabled()) trace(object, CDOEvent.WRITE);
- process(object, CDOEvent.WRITE, null);
+ process(object, CDOEvent.WRITE, featureChange);
}
public void reload(InternalCDOObject... objects)
@@ -387,7 +404,7 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
*/
private final class WriteTransition implements ITransition<CDOState, CDOEvent, InternalCDOObject, Object>
{
- public void execute(InternalCDOObject object, CDOState state, CDOEvent event, Object NULL)
+ public void execute(InternalCDOObject object, CDOState state, CDOEvent event, Object featureChange)
{
// Copy revision
CDORevisionImpl revision = new CDORevisionImpl((CDORevisionImpl)object.cdoRevision());
@@ -396,13 +413,25 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
CDOViewImpl view = (CDOViewImpl)object.cdoView();
CDOTransactionImpl transaction = view.toTransaction();
- transaction.registerDirty(object);
-
+ transaction.registerDirty(object, (CDOFeatureDelta)featureChange);
changeState(object, CDOState.DIRTY);
}
}
/**
+ * @author Simon McDuff
+ */
+ private final class RewriteTransition implements ITransition<CDOState, CDOEvent, InternalCDOObject, Object>
+ {
+ public void execute(InternalCDOObject object, CDOState state, CDOEvent event, Object featureChange)
+ {
+ CDOViewImpl view = (CDOViewImpl)object.cdoView();
+ CDOTransactionImpl transaction = view.toTransaction();
+ transaction.registerFeatureDelta(object, (CDOFeatureDelta)featureChange);
+ }
+ }
+
+ /**
* @author Eike Stepper
*/
private final class ReloadTransition implements ITransition<CDOState, CDOEvent, InternalCDOObject, Object>
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
index 8eaf1cf050..42f5aecfb3 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
@@ -7,15 +7,24 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.internal.cdo;
import org.eclipse.emf.cdo.internal.protocol.model.CDOFeatureImpl;
import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl;
import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl.MoveableList;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOAddFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOClearFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOContainerFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOMoveFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORemoveFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOSetFeatureDeltaImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDOUnsetFeatureDeltaImpl;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.revision.CDOReferenceProxy;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
@@ -61,7 +70,8 @@ public final class CDOStore implements EStore
CDOID containerID = (CDOID)((CDOViewImpl)cdoObject.cdoView()).convertObjectToID(newContainer);
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOContainerFeatureDeltaImpl delta = new CDOContainerFeatureDeltaImpl(containerID, newContainerFeatureID);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
revision.setContainerID(containerID);
revision.setContainingFeature(newContainerFeatureID);
}
@@ -338,7 +348,8 @@ public final class CDOStore implements EStore
TRACER.format("set({0}, {1}, {2}, {3})", cdoObject, cdoFeature, index, value);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOSetFeatureDeltaImpl delta = new CDOSetFeatureDeltaImpl(cdoFeature, index, value);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
if (cdoFeature.isReference())
{
Object oldValue = revision.get(cdoFeature, index);
@@ -351,11 +362,10 @@ public final class CDOStore implements EStore
{
handleContainmentAdd(cdoObject, cdoFeature, value);
}
-
- value = ((CDOViewImpl)cdoObject.cdoView()).convertObjectToID(value);
}
Object result = revision.set(cdoFeature, index, value);
+
if (cdoFeature.isReference())
{
result = ((CDOViewImpl)cdoObject.cdoView()).convertIDToObject(result);
@@ -373,7 +383,8 @@ public final class CDOStore implements EStore
TRACER.format("unset({0}, {1})", cdoObject, cdoFeature);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOUnsetFeatureDeltaImpl delta = new CDOUnsetFeatureDeltaImpl(cdoFeature);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
revision.unset(cdoFeature);
}
@@ -396,7 +407,8 @@ public final class CDOStore implements EStore
value = ((CDOViewImpl)cdoObject.cdoView()).convertObjectToID(value);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOAddFeatureDeltaImpl delta = new CDOAddFeatureDeltaImpl(cdoFeature, index, value);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
revision.add(cdoFeature, index, value);
}
@@ -409,7 +421,8 @@ public final class CDOStore implements EStore
TRACER.format("remove({0}, {1}, {2})", cdoObject, cdoFeature, index);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDORemoveFeatureDeltaImpl delta = new CDORemoveFeatureDeltaImpl(cdoFeature, index);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
Object result = revision.remove(cdoFeature, index);
if (cdoFeature.isReference())
{
@@ -433,7 +446,8 @@ public final class CDOStore implements EStore
TRACER.format("clear({0}, {1})", cdoObject, cdoFeature);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOClearFeatureDeltaImpl delta = new CDOClearFeatureDeltaImpl(cdoFeature);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
revision.clear(cdoFeature);
}
@@ -446,7 +460,8 @@ public final class CDOStore implements EStore
TRACER.format("move({0}, {1}, {2}, {3})", cdoObject, cdoFeature, target, source);
}
- CDORevisionImpl revision = getRevisionForWriting(cdoObject);
+ CDOMoveFeatureDeltaImpl delta = new CDOMoveFeatureDeltaImpl(cdoFeature, target, source);
+ CDORevisionImpl revision = getRevisionForWriting(cdoObject, delta);
Object result = revision.move(cdoFeature, target, source);
if (cdoFeature.isReference())
{
@@ -495,9 +510,9 @@ public final class CDOStore implements EStore
return getRevision(cdoObject);
}
- private static CDORevisionImpl getRevisionForWriting(InternalCDOObject cdoObject)
+ private static CDORevisionImpl getRevisionForWriting(InternalCDOObject cdoObject, CDOFeatureDelta delta)
{
- CDOStateMachine.INSTANCE.write(cdoObject);
+ CDOStateMachine.INSTANCE.write(cdoObject, delta);
return getRevision(cdoObject);
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
index 151e54f427..eff78dbb58 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOTransactionImpl.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.internal.cdo;
@@ -20,8 +21,11 @@ import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
import org.eclipse.emf.cdo.internal.protocol.CDOIDImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionDeltaImpl;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDOFeatureDelta;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.common.util.URI;
@@ -72,6 +76,8 @@ public class CDOTransactionImpl extends CDOViewImpl implements CDOTransaction
private Map<CDOID, CDOObject> dirtyObjects = new HashMap<CDOID, CDOObject>();
+ private Map<CDOID, CDORevisionDelta> revisionDeltas = new HashMap<CDOID, CDORevisionDelta>();
+
private boolean dirty;
private boolean conflict;
@@ -150,6 +156,11 @@ public class CDOTransactionImpl extends CDOViewImpl implements CDOTransaction
return dirtyObjects;
}
+ public Map<CDOID, CDORevisionDelta> getRevisionDeltas()
+ {
+ return revisionDeltas;
+ }
+
public CDOID getNextTemporaryID()
{
long id = nextTemporaryID;
@@ -298,18 +309,39 @@ public class CDOTransactionImpl extends CDOViewImpl implements CDOTransaction
}
}
- public void registerDirty(InternalCDOObject object)
+ public void registerFeatureDelta(InternalCDOObject object, CDOFeatureDelta featureDelta)
{
- if (TRACER.isEnabled())
+ CDORevisionDeltaImpl revisionDelta = (CDORevisionDeltaImpl)revisionDeltas.get(object.cdoID());
+ if (revisionDelta == null)
{
- TRACER.format("Registering dirty object {0}", object);
+ revisionDelta = new CDORevisionDeltaImpl(object.cdoRevision());
+ revisionDeltas.put(object.cdoID(), revisionDelta);
}
+ revisionDelta.addFeatureDelta(featureDelta);
for (CDOTransactionHandler handler : getHandlers())
{
- handler.modifyingObject(this, object);
+ handler.modifyingObject(this, object, featureDelta);
+ }
+ }
+
+ public void registerRevisionDelta(CDORevisionDelta delta)
+ {
+ CDORevisionDelta changeSet = revisionDeltas.get(delta.getId());
+ if (changeSet == null)
+ {
+ revisionDeltas.put(delta.getId(), changeSet);
+ }
+ }
+
+ public void registerDirty(InternalCDOObject object, CDOFeatureDelta featureDelta)
+ {
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("Registering dirty object {0}", object);
}
+ registerFeatureDelta(object, featureDelta);
register(dirtyObjects, object);
}
@@ -402,6 +434,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements CDOTransaction
newResources.clear();
newObjects.clear();
dirtyObjects.clear();
+ revisionDeltas.clear();
dirty = false;
conflict = false;
nextTemporaryID = INITIAL_TEMPORARY_ID;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
index b20ce0e2ca..64b3b9d00a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOViewImpl.java
@@ -7,9 +7,10 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
- * Simon McDuff - EMF invalidation notifications,
- * IFeatureAnalyzer,
- * LoadRevisionCollectionChunk
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201265
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201997
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=202064
**************************************************************************/
package org.eclipse.emf.internal.cdo;
@@ -64,7 +65,6 @@ import java.util.concurrent.ConcurrentMap;
/**
* @author Eike Stepper
- * @author Simon McDuff
*/
public class CDOViewImpl extends org.eclipse.net4j.internal.util.event.Notifier implements CDOView, CDOIDProvider,
Adapter.Internal
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAbstractFeatureRuleAnalyzer.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAbstractFeatureRuleAnalyzer.java
index a45c11eec4..72b2915186 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAbstractFeatureRuleAnalyzer.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAbstractFeatureRuleAnalyzer.java
@@ -22,7 +22,6 @@ import org.eclipse.net4j.internal.util.om.trace.ContextTracer;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public abstract class CDOAbstractFeatureRuleAnalyzer implements CDOFeatureAnalyzer, CDOFetchRuleManager
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAnalyzerFeatureInfo.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAnalyzerFeatureInfo.java
index e202fdcf3c..ab32620eee 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAnalyzerFeatureInfo.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOAnalyzerFeatureInfo.java
@@ -26,7 +26,6 @@ import java.util.Map;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOAnalyzerFeatureInfo
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOClusterOfFetchRule.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOClusterOfFetchRule.java
index 803d30c6ba..2c4c5be2fe 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOClusterOfFetchRule.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOClusterOfFetchRule.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.protocol.model.CDOFeature;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOClusterOfFetchRule
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerModelBased.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerModelBased.java
index afda4ae2b3..43693275be 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerModelBased.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerModelBased.java
@@ -11,7 +11,6 @@
**************************************************************************/
package org.eclipse.emf.internal.cdo.analyzer;
-import org.eclipse.emf.cdo.internal.protocol.CDOIDNull;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.analyzer.CDOFetchRule;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
@@ -24,7 +23,6 @@ import java.util.List;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOFeatureAnalyzerModelBased extends CDOAbstractFeatureRuleAnalyzer
{
@@ -50,7 +48,7 @@ public class CDOFeatureAnalyzerModelBased extends CDOAbstractFeatureRuleAnalyzer
public CDOID getContext()
{
- return CDOIDNull.NULL;
+ return CDOID.NULL;
}
public List<CDOFetchRule> getFetchRules(Collection<CDOID> ids)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerUI.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerUI.java
index bc529144ec..bb68698f91 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerUI.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFeatureAnalyzerUI.java
@@ -11,7 +11,6 @@
**************************************************************************/
package org.eclipse.emf.internal.cdo.analyzer;
-import org.eclipse.emf.cdo.internal.protocol.CDOIDNull;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.analyzer.CDOFetchRule;
import org.eclipse.emf.cdo.protocol.model.CDOClass;
@@ -27,7 +26,6 @@ import java.util.Map;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOFeatureAnalyzerUI extends CDOAbstractFeatureRuleAnalyzer
{
@@ -53,7 +51,7 @@ public class CDOFeatureAnalyzerUI extends CDOAbstractFeatureRuleAnalyzer
{
if (this.lastTraverseFeature.isMany())
{
- return CDOIDNull.NULL;
+ return CDOID.NULL;
}
return lastTraverseCDOObject.cdoID();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchFeatureInfo.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchFeatureInfo.java
index 7d71f4fe6e..42a22efbfa 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchFeatureInfo.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchFeatureInfo.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.protocol.model.CDOFeature;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOFetchFeatureInfo
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchRuleManagerThreadLocal.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchRuleManagerThreadLocal.java
index b7b74076a5..e2d8eb181b 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchRuleManagerThreadLocal.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/CDOFetchRuleManagerThreadLocal.java
@@ -20,7 +20,6 @@ import java.util.List;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class CDOFetchRuleManagerThreadLocal implements CDOFetchRuleManager
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFeatureAnalyzer.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFeatureAnalyzer.java
index dbd06acc79..dc4672ec73 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFeatureAnalyzer.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFeatureAnalyzer.java
@@ -18,7 +18,6 @@ import org.eclipse.emf.internal.cdo.InternalCDOObject;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class NOOPFeatureAnalyzer implements CDOFeatureAnalyzer
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFetchRuleManager.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFetchRuleManager.java
index 067a75f493..583f627f07 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFetchRuleManager.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/analyzer/NOOPFetchRuleManager.java
@@ -12,7 +12,6 @@
package org.eclipse.emf.internal.cdo.analyzer;
import org.eclipse.emf.cdo.analyzer.CDOFetchRuleManager;
-import org.eclipse.emf.cdo.internal.protocol.CDOIDNull;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.analyzer.CDOFetchRule;
@@ -21,7 +20,6 @@ import java.util.List;
/**
* @author Simon McDuff
- * @author Eike Stepper
*/
public class NOOPFetchRuleManager implements CDOFetchRuleManager
{
@@ -31,7 +29,7 @@ public class NOOPFetchRuleManager implements CDOFetchRuleManager
public CDOID getContext()
{
- return CDOIDNull.NULL;
+ return CDOID.NULL;
}
public List<CDOFetchRule> getFetchRules(Collection<CDOID> ids)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
index 5381d3b0a1..e8d87173e9 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/protocol/CommitTransactionRequest.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Simon McDuff - https://bugs.eclipse.org/bugs/show_bug.cgi?id=201266
**************************************************************************/
package org.eclipse.emf.internal.cdo.protocol;
@@ -16,11 +17,13 @@ import org.eclipse.emf.cdo.internal.protocol.CDOIDImpl;
import org.eclipse.emf.cdo.internal.protocol.CDOIDRangeImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl;
import org.eclipse.emf.cdo.internal.protocol.revision.CDORevisionImpl;
+import org.eclipse.emf.cdo.internal.protocol.revision.delta.CDORevisionDeltaImpl;
import org.eclipse.emf.cdo.protocol.CDOID;
import org.eclipse.emf.cdo.protocol.CDOIDRange;
import org.eclipse.emf.cdo.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
import org.eclipse.emf.cdo.protocol.revision.CDORevision;
+import org.eclipse.emf.cdo.protocol.revision.delta.CDORevisionDelta;
import org.eclipse.emf.internal.cdo.CDOTransactionImpl;
import org.eclipse.emf.internal.cdo.InternalCDOObject;
@@ -64,7 +67,7 @@ public class CommitTransactionRequest extends CDOClientRequest<CommitTransaction
writeNewPackages(out);
writeNewResources(out);
writeNewObjects(out);
- writeDirtyObjects(out);
+ writeRevisionDeltas(out);
}
@Override
@@ -159,6 +162,21 @@ public class CommitTransactionRequest extends CDOClientRequest<CommitTransaction
writeRevisions(out, dirtyObjects);
}
+ private void writeRevisionDeltas(ExtendedDataOutputStream out) throws IOException
+ {
+ Collection<CDORevisionDelta> revisionDeltas = transaction.getRevisionDeltas().values();
+ if (PROTOCOL.isEnabled())
+ {
+ PROTOCOL.format("Writing {0} revision deltas", revisionDeltas.size());
+ }
+
+ out.writeInt(revisionDeltas.size());
+ for (CDORevisionDelta revisionDelta : revisionDeltas)
+ {
+ ((CDORevisionDeltaImpl)revisionDelta).write(out, transaction);
+ }
+ }
+
private void writeRevisions(ExtendedDataOutputStream out, Collection<?> objects) throws IOException
{
out.writeInt(objects.size());
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CrossReferencesPackageClosure.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CrossReferencesPackageClosure.java
index b56dbeaab8..6998d77fe7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CrossReferencesPackageClosure.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CrossReferencesPackageClosure.java
@@ -27,6 +27,7 @@ public class CrossReferencesPackageClosure extends PackageClosure
{
}
+ @Override
public Set<EPackage> calculate(EPackage ePackage)
{
Set<EPackage> visited = new HashSet<EPackage>();
@@ -34,6 +35,7 @@ public class CrossReferencesPackageClosure extends PackageClosure
return visited;
}
+ @Override
protected void collectContents(EPackage ePackage, Set<EPackage> visited)
{
visited.add(ePackage);

Back to the top