diff options
author | Eike Stepper | 2014-03-05 17:40:50 +0000 |
---|---|---|
committer | Eike Stepper | 2014-03-05 17:45:11 +0000 |
commit | eb28a5a11d96db22b435e6635b33d0b45319d815 (patch) | |
tree | e3130f976e20ac12163abf1412e875e9ff76d5d2 /plugins/org.eclipse.emf.cdo.common/src/org/eclipse | |
parent | dbcd34266afa9338e4a24996855d727286b22c61 (diff) | |
download | cdo-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')
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() |