Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2014-03-05 17:40:50 +0000
committerEike Stepper2014-03-05 17:45:11 +0000
commiteb28a5a11d96db22b435e6635b33d0b45319d815 (patch)
treee3130f976e20ac12163abf1412e875e9ff76d5d2 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse
parentdbcd34266afa9338e4a24996855d727286b22c61 (diff)
downloadcdo-eb28a5a11d96db22b435e6635b33d0b45319d815.tar.gz
cdo-eb28a5a11d96db22b435e6635b33d0b45319d815.tar.xz
cdo-eb28a5a11d96db22b435e6635b33d0b45319d815.zip
[429694] Wrong branch manager is used in SynchronizableRepository.handleCommitInfo()
https://bugs.eclipse.org/bugs/show_bug.cgi?id=429694
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java18
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java9
10 files changed, 115 insertions, 8 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
index 3e80d8a572..9ba4196914 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchVersionImpl.java
@@ -11,14 +11,16 @@
package org.eclipse.emf.cdo.internal.common.branch;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
-public class CDOBranchVersionImpl implements CDOBranchVersion
+public class CDOBranchVersionImpl implements CDOBranchVersion, CDOBranchAdjustable
{
private CDOBranch branch;
@@ -30,6 +32,14 @@ public class CDOBranchVersionImpl implements CDOBranchVersion
this.version = version;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ }
+ }
+
public CDOBranch getBranch()
{
return branch;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
index 2f4d798e80..a114e9fd64 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/lock/CDOLockChangeInfoImpl.java
@@ -4,26 +4,28 @@
* 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:
* Caspar De Groot - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.common.lock;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.lock.CDOLockChangeInfo;
import org.eclipse.emf.cdo.common.lock.CDOLockOwner;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType;
/**
* @author Caspar De Groot
*/
-public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
+public class CDOLockChangeInfoImpl implements CDOLockChangeInfo, CDOBranchAdjustable
{
- private final CDOBranchPoint branchPoint;
+ private CDOBranchPoint branchPoint;
private final CDOLockOwner lockOwner;
@@ -48,7 +50,6 @@ public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
public CDOLockChangeInfoImpl()
{
- branchPoint = null;
lockOwner = null;
lockStates = null;
operation = null;
@@ -56,6 +57,19 @@ public class CDOLockChangeInfoImpl implements CDOLockChangeInfo
isInvalidateAll = true;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branchPoint != null)
+ {
+ CDOBranch branch = branchPoint.getBranch();
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ branchPoint = branch.getPoint(branchPoint.getTimeStamp());
+ }
+ }
+ }
+
public CDOBranch getBranch()
{
return branchPoint == null ? null : branchPoint.getBranch();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
index 3ff303a413..c5a19deade 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/CDOIDAndBranchImpl.java
@@ -11,8 +11,10 @@
package org.eclipse.emf.cdo.internal.common.revision;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.CDOIDAndBranch;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.net4j.util.CheckUtil;
@@ -21,7 +23,7 @@ import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
-public class CDOIDAndBranchImpl implements CDOIDAndBranch
+public class CDOIDAndBranchImpl implements CDOIDAndBranch, CDOBranchAdjustable
{
private CDOID id;
@@ -46,6 +48,12 @@ public class CDOIDAndBranchImpl implements CDOIDAndBranch
return branch;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ CheckUtil.checkArg(branch, "branch");
+ }
+
@Override
public boolean equals(Object obj)
{
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
index 0016b9c401..d33ba02f8a 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/delta/CDORevisionDeltaImpl.java
@@ -13,6 +13,7 @@
package org.eclipse.emf.cdo.internal.common.revision.delta;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.id.CDOWithID;
@@ -34,6 +35,7 @@ import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta;
import org.eclipse.emf.cdo.common.util.PartialCollectionLoadingNotSupportedException;
import org.eclipse.emf.cdo.internal.common.revision.CDOListImpl;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.cdo.spi.common.revision.CDOReferenceAdjuster;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDOFeatureDelta;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -329,6 +331,19 @@ public class CDORevisionDeltaImpl implements InternalCDORevisionDelta
return changed;
}
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ }
+
+ if (target instanceof CDOBranchAdjustable)
+ {
+ ((CDOBranchAdjustable)target).adjustBranches(newBranchManager);
+ }
+ }
+
public void accept(CDOFeatureDeltaVisitor visitor)
{
accept(visitor, Predicates.<EStructuralFeature> alwaysTrue());
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java
new file mode 100644
index 0000000000..ef2d8b39ad
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/branch/CDOBranchAdjustable.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2014 Eike Stepper (Berlin, Germany) and others.
+ * 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
+ */
+package org.eclipse.emf.cdo.spi.common.branch;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+
+/**
+ * @author Eike Stepper
+ * @since 4.3
+ */
+public interface CDOBranchAdjustable
+{
+ public void adjustBranches(CDOBranchManager newBranchManager);
+}
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
index a2331491f6..c37c1e6278 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/BaseCDORevision.java
@@ -13,6 +13,8 @@
*/
package org.eclipse.emf.cdo.spi.common.revision;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -831,6 +833,22 @@ public abstract class BaseCDORevision extends AbstractCDORevision
return changed;
}
+ /**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ if (branchPoint != null)
+ {
+ CDOBranch branch = branchPoint.getBranch();
+ if (branch != null)
+ {
+ branch = newBranchManager.getBranch(branch.getID());
+ branchPoint = branch.getPoint(branchPoint.getTimeStamp());
+ }
+ }
+ }
+
public Object getValue(EStructuralFeature feature)
{
checkReadable(feature);
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
index 454624dd0e..126cb91a7b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/DelegatingCDORevision.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.spi.common.revision;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -71,6 +72,14 @@ public abstract class DelegatingCDORevision implements InternalCDORevision
return getDelegate().adjustReferences(referenceAdjuster);
}
+ /**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ getDelegate().adjustBranches(newBranchManager);
+ }
+
public long getTimeStamp()
{
return getDelegate().getTimeStamp();
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
index fad67927b3..70dcbd085b 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevision.java
@@ -21,6 +21,7 @@ import org.eclipse.emf.cdo.common.revision.CDOList;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.common.security.CDOPermission;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOClassInfo;
@@ -37,7 +38,7 @@ import java.util.List;
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
-public interface InternalCDORevision extends CDORevision, CDORevisionData, CDOReferenceAdjustable
+public interface InternalCDORevision extends CDORevision, CDORevisionData, CDOReferenceAdjustable, CDOBranchAdjustable
{
/**
* @since 4.2
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
index 6cd5d560d6..4cbe718e25 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/InternalCDORevisionDelta.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisable;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOOriginSizeProvider;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchAdjustable;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -28,7 +29,7 @@ import java.util.Map;
* @noextend This interface is not intended to be extended by clients.
* @since 2.0
*/
-public interface InternalCDORevisionDelta extends CDORevisionDelta, CDOReferenceAdjustable
+public interface InternalCDORevisionDelta extends CDORevisionDelta, CDOReferenceAdjustable, CDOBranchAdjustable
{
/**
* @since 3.0
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
index 5a6948f013..72cf9c15b6 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/revision/StubCDORevision.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.emf.cdo.spi.common.revision;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
@@ -294,6 +295,14 @@ public class StubCDORevision extends AbstractCDORevision
}
/**
+ * @since 4.3
+ */
+ public void adjustBranches(CDOBranchManager newBranchManager)
+ {
+ throw new UnsupportedOperationException(getExceptionMessage());
+ }
+
+ /**
* @since 4.2
*/
public EStructuralFeature[] clearValues()

Back to the top