diff options
author | Eike Stepper | 2016-10-05 16:51:41 +0000 |
---|---|---|
committer | Eike Stepper | 2016-10-05 16:51:41 +0000 |
commit | 26485b4d8db6c6912579b2ccdf90b85884b6cdf0 (patch) | |
tree | e3f4ba2f42558bf7878092e9791803856d3f06d2 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision | |
parent | a4d4b343dce31f29ac4bf477e63cbb4f9d0eba7e (diff) | |
download | cdo-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')
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) { |