Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-09-09 08:56:58 +0000
committerEike Stepper2016-09-09 08:56:58 +0000
commit1949a7c63791ce27888aac4c46cbe93147905227 (patch)
treeab961a36f3bc251baabcaa394c691aee1c4efa46 /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal
parent4d1c7d43999b9af0f2103842bb4701844b3c7c51 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java12
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java32
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java17
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
*/

Back to the top