diff options
author | Eike Stepper | 2010-07-07 16:55:10 +0000 |
---|---|---|
committer | Eike Stepper | 2010-07-07 16:55:10 +0000 |
commit | c4d3ed8b70f2118652389b604a48c8846866f0ee (patch) | |
tree | 371a60f9a72c160a7e8ee7868ab2ab6b02a60c21 /plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal | |
parent | e226589b37d964e9d58de60b4ecdc8a66f52a96f (diff) | |
download | cdo-c4d3ed8b70f2118652389b604a48c8846866f0ee.tar.gz cdo-c4d3ed8b70f2118652389b604a48c8846866f0ee.tar.xz cdo-c4d3ed8b70f2118652389b604a48c8846866f0ee.zip |
[319090] Provide a CDOConflictResolver that uses a CDOMerger
https://bugs.eclipse.org/bugs/show_bug.cgi?id=319090
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal')
3 files changed, 24 insertions, 11 deletions
diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java index d89382912e..e7d23897d1 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java @@ -48,6 +48,7 @@ import org.eclipse.net4j.util.io.StringIO; import org.eclipse.net4j.util.om.monitor.OMMonitor; import org.eclipse.net4j.util.om.trace.PerfTracer; +import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.spi.cdo.AbstractQueryIterator; @@ -260,9 +261,9 @@ public class CDOClientProtocol extends SignalProtocol<CDOSession> implements CDO } public CommitTransactionResult commitDelegation(CDOBranch branch, String userID, String comment, - CDOCommitData commitData, OMMonitor monitor) + CDOCommitData commitData, Map<CDOID, EClass> detachedObjectTypes, OMMonitor monitor) { - return send(new CommitDelegationRequest(this, branch, userID, comment, commitData), monitor); + return send(new CommitDelegationRequest(this, branch, userID, comment, commitData, detachedObjectTypes), monitor); } public CommitTransactionResult commitXATransactionPhase1(InternalCDOXACommitContext xaContext, OMMonitor monitor) diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java index 3c90c2573c..37d2687cc9 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitDelegationRequest.java @@ -19,7 +19,10 @@ import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.MetaInstanceMapper; +import org.eclipse.emf.ecore.EClass; + import java.io.IOException; +import java.util.Map; /** * @author Eike Stepper @@ -32,14 +35,17 @@ public class CommitDelegationRequest extends CommitTransactionRequest private String userID; + private Map<CDOID, EClass> detachedObjectTypes; + public CommitDelegationRequest(CDOClientProtocol protocol, CDOBranch branch, String userID, String comment, - CDOCommitData commitData) + CDOCommitData commitData, Map<CDOID, EClass> detachedObjectTypes) { super(protocol, CDOProtocolConstants.SIGNAL_COMMIT_DELEGATION, UNKNOWN_TRANSACTION_ID, comment, false, CDOIDProvider.NOOP, commitData); this.branch = branch; this.userID = userID; + this.detachedObjectTypes = detachedObjectTypes; } @Override @@ -50,6 +56,12 @@ public class CommitDelegationRequest extends CommitTransactionRequest } @Override + protected EClass getObjectType(CDOID id) + { + return detachedObjectTypes.get(id); + } + + @Override protected void remapMetaInstanceID(MetaInstanceMapper metaInstanceMapper, CDOIDTemp oldID, CDOID newID) { // Do nothing diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java index 59a61be615..48110849dc 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java @@ -195,26 +195,26 @@ public class CommitTransactionRequest extends RequestWithMonitoring<CommitTransa TRACER.format("Writing {0} detached objects", detachedObjects.size()); //$NON-NLS-1$ } - CDOTransaction transaction = null; boolean ensuringReferentialIntegrity = getSession().getRepositoryInfo().isEnsuringReferentialIntegrity(); - if (ensuringReferentialIntegrity) - { - transaction = (CDOTransaction)getSession().getView(transactionID); - } - for (CDOIDAndVersion detachedObject : detachedObjects) { CDOID id = detachedObject.getID(); out.writeCDOID(id); if (ensuringReferentialIntegrity) { - CDOObject object = transaction.getObject(id); - EClass eClass = object.eClass(); + EClass eClass = getObjectType(id); out.writeCDOClassifierRef(eClass); } } } + protected EClass getObjectType(CDOID id) + { + CDOTransaction transaction = (CDOTransaction)getSession().getView(transactionID); + CDOObject object = transaction.getObject(id); + return object.eClass(); + } + @Override protected final CommitTransactionResult confirming(ExtendedDataInputStream in, OMMonitor monitor) throws Exception { |