diff options
author | Eike Stepper | 2016-09-09 08:56:58 +0000 |
---|---|---|
committer | Eike Stepper | 2016-09-09 08:56:58 +0000 |
commit | 1949a7c63791ce27888aac4c46cbe93147905227 (patch) | |
tree | ab961a36f3bc251baabcaa394c691aee1c4efa46 /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal | |
parent | 4d1c7d43999b9af0f2103842bb4701844b3c7c51 (diff) | |
download | cdo-1949a7c63791ce27888aac4c46cbe93147905227.tar.gz cdo-1949a7c63791ce27888aac4c46cbe93147905227.tar.xz cdo-1949a7c63791ce27888aac4c46cbe93147905227.zip |
[469301] Have abillity to lock a set of locally detached objects atomically
https://bugs.eclipse.org/bugs/show_bug.cgi?id=469301
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal')
3 files changed, 38 insertions, 23 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java index ff9c2cf322..466771a7c1 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java @@ -1391,15 +1391,15 @@ public class CDOObjectImpl extends MinimalEStoreEObjectImpl implements InternalC */ public static CDOLockState getLockState(InternalCDOObject object) { - if (!FSMUtil.isTransient(object)) + if (FSMUtil.isTransient(object)) { - InternalCDOView view = object.cdoView(); - CDOID id = object.cdoID(); - - return view.getLockStates(Collections.singletonList(id))[0]; + return null; } - return null; + InternalCDOView view = object.cdoView(); + CDOID id = object.cdoID(); + + return view.getLockStates(Collections.singletonList(id))[0]; } /** diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java index 6ae6b2ce76..11a8184b85 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java @@ -26,6 +26,7 @@ import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDExternal; import org.eclipse.emf.cdo.common.id.CDOIDUtil; import org.eclipse.emf.cdo.common.id.CDOWithID; +import org.eclipse.emf.cdo.common.lock.CDOLockState; import org.eclipse.emf.cdo.common.model.CDOClassifierRef; import org.eclipse.emf.cdo.common.model.CDOModelUtil; import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; @@ -1249,6 +1250,37 @@ public abstract class AbstractCDOView extends CDOCommitHistoryProviderImpl<CDOOb return revision; } + protected InternalCDORevision getRevision(CDOObject object) + { + if (object.cdoState() == CDOState.NEW) + { + return null; + } + + InternalCDORevision revision = (InternalCDORevision)object.cdoRevision(); + if (revision == null) + { + revision = CDOStateMachine.INSTANCE.read((InternalCDOObject)object); + } + + return revision; + } + + public CDOLockState[] getLockStatesOfObjects(Collection<? extends CDOObject> objects) + { + List<CDOID> ids = new ArrayList<CDOID>(); + for (CDOObject object : objects) + { + InternalCDORevision revision = getRevision(object); + if (revision != null) + { + ids.add(revision.getID()); + } + } + + return getLockStates(ids); + } + public List<InternalCDOObject> getObjectsList() { synchronized (getViewMonitor()) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java index 993216aefc..3e76bdc971 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java @@ -14,7 +14,6 @@ package org.eclipse.emf.internal.cdo.view; import org.eclipse.emf.cdo.CDONotification; import org.eclipse.emf.cdo.CDOObject; -import org.eclipse.emf.cdo.CDOState; import org.eclipse.emf.cdo.common.CDOCommonView; import org.eclipse.emf.cdo.common.branch.CDOBranch; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; @@ -613,22 +612,6 @@ public class CDOViewImpl extends AbstractCDOView implements IExecutorServiceProv } } - protected InternalCDORevision getRevision(CDOObject object) - { - if (object.cdoState() == CDOState.NEW) - { - return null; - } - - InternalCDORevision revision = (InternalCDORevision)object.cdoRevision(); - if (revision == null) - { - revision = CDOStateMachine.INSTANCE.read((InternalCDOObject)object); - } - - return revision; - } - /** * @since 2.0 */ |