Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-10-05 16:51:41 +0000
committerEike Stepper2016-10-05 16:51:41 +0000
commit26485b4d8db6c6912579b2ccdf90b85884b6cdf0 (patch)
treee3f4ba2f42558bf7878092e9791803856d3f06d2 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision
parenta4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e (diff)
downloadcdo-26485b4d8db6c6912579b2ccdf90b85884b6cdf0.tar.gz
cdo-26485b4d8db6c6912579b2ccdf90b85884b6cdf0.tar.xz
cdo-26485b4d8db6c6912579b2ccdf90b85884b6cdf0.zip
[395685] CDORevisionDelta.getOldValue() always returns CDOSetFeatureDelta.UNSPECIFIED
https://bugs.eclipse.org/bugs/show_bug.cgi?id=395685
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java31
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java5
2 files changed, 36 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
index 8d18a126a9..d6a9a40e88 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSetFeatureDeltaImpl.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.internal.common.revision.delta;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
+import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor;
@@ -31,6 +32,8 @@ import java.text.MessageFormat;
public class CDOSetFeatureDeltaImpl extends CDOSingleValueFeatureDeltaImpl
implements CDOSetFeatureDelta, ListTargetAdding
{
+ private static final ThreadLocal<Boolean> TRANSFER_OLD_VALUE = new ThreadLocal<Boolean>();
+
private Object oldValue = UNKNOWN_VALUE;
public CDOSetFeatureDeltaImpl(EStructuralFeature feature, int index, Object value)
@@ -47,6 +50,22 @@ public class CDOSetFeatureDeltaImpl extends CDOSingleValueFeatureDeltaImpl
public CDOSetFeatureDeltaImpl(CDODataInput in, EClass eClass) throws IOException
{
super(in, eClass);
+
+ if (TRANSFER_OLD_VALUE.get() == Boolean.TRUE)
+ {
+ oldValue = readValue(in, eClass);
+ }
+ }
+
+ @Override
+ public void write(CDODataOutput out, EClass eClass) throws IOException
+ {
+ super.write(out, eClass);
+
+ if (TRANSFER_OLD_VALUE.get() == Boolean.TRUE)
+ {
+ writeValue(out, eClass, oldValue);
+ }
}
public Type getType()
@@ -89,4 +108,16 @@ public class CDOSetFeatureDeltaImpl extends CDOSingleValueFeatureDeltaImpl
{
return super.toStringAdditional() + MessageFormat.format(", oldValue={0}", oldValue); //$NON-NLS-1$
}
+
+ public static void transferOldValue(boolean on)
+ {
+ if (on)
+ {
+ TRANSFER_OLD_VALUE.set(Boolean.TRUE);
+ }
+ else
+ {
+ TRANSFER_OLD_VALUE.remove();
+ }
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
index 57feddb85c..f3703c4f5d 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDOSingleValueFeatureDeltaImpl.java
@@ -63,6 +63,11 @@ public abstract class CDOSingleValueFeatureDeltaImpl extends CDOFeatureDeltaImpl
protected void writeValue(CDODataOutput out, EClass eClass) throws IOException
{
+ writeValue(out, eClass, value);
+ }
+
+ protected void writeValue(CDODataOutput out, EClass eClass, Object value) throws IOException
+ {
Object valueToWrite = value;
if (valueToWrite == UNKNOWN_VALUE)
{

Back to the top