Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java63
1 files changed, 34 insertions, 29 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
index bfe0a2488c..39d5dc2038 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStore.java
@@ -127,6 +127,21 @@ public final class CDOStore implements EStore
return revision.getContainingFeatureID();
}
+ /**
+ * @since 2.0
+ */
+ public InternalEObject getResource(InternalEObject eObject)
+ {
+ InternalCDOObject cdoObject = getCDOObject(eObject);
+ if (TRACER.isEnabled())
+ {
+ TRACER.format("getContainer({0})", cdoObject);
+ }
+
+ InternalCDORevision revision = getRevisionForReading(cdoObject);
+ return (InternalEObject)((CDOViewImpl)cdoObject.cdoView()).convertIDToObject(revision.getResourceID());
+ }
+
@Deprecated
public EStructuralFeature getContainingFeature(InternalEObject eObject)
{
@@ -147,12 +162,7 @@ public final class CDOStore implements EStore
Object value = revision.get(cdoFeature, index);
if (cdoFeature.isReference())
{
- if (value instanceof CDOReferenceProxy)
- {
- value = ((CDOReferenceProxy)value).resolve(getView().getSession().getRevisionManager(), revision, cdoFeature,
- index);
- }
-
+ value = resolveProxy(revision, cdoFeature, index, value);
if (cdoFeature.isMany() && value instanceof CDOID)
{
CDOID id = (CDOID)value;
@@ -299,12 +309,7 @@ public final class CDOStore implements EStore
{
for (int i = 0; i < result.length; i++)
{
- if (result[i] instanceof CDOReferenceProxy)
- {
- result[i] = ((CDOReferenceProxy)result[i]).resolve(getView().getSession().getRevisionManager(), revision,
- cdoFeature, i);
- }
-
+ result[i] = resolveProxy(revision, cdoFeature, i, result[i]);
result[i] = ((CDOViewImpl)cdoObject.cdoView()).convertIDToObject(result[i]);
}
}
@@ -355,11 +360,7 @@ public final class CDOStore implements EStore
if (cdoFeature.isReference())
{
Object oldValue = revision.get(cdoFeature, index);
- if (oldValue instanceof CDOReferenceProxy)
- {
- ((CDOReferenceProxy)oldValue).resolve(getView().getSession().getRevisionManager(), revision, cdoFeature, index);
- }
-
+ oldValue = resolveProxy(revision, cdoFeature, index, oldValue);
value = ((CDOViewImpl)cdoObject.cdoView()).convertObjectToID(value, true);
}
@@ -420,12 +421,7 @@ public final class CDOStore implements EStore
Object result = revision.remove(cdoFeature, index);
if (cdoFeature.isReference())
{
- if (result instanceof CDOReferenceProxy)
- {
- result = ((CDOReferenceProxy)result).resolve(getView().getSession().getRevisionManager(), revision, cdoFeature,
- index);
- }
-
+ result = resolveProxy(revision, cdoFeature, index, result);
result = ((CDOViewImpl)cdoObject.cdoView()).convertIDToObject(result);
}
@@ -461,12 +457,7 @@ public final class CDOStore implements EStore
Object result = revision.move(cdoFeature, target, source);
if (cdoFeature.isReference())
{
- if (result instanceof CDOReferenceProxy)
- {
- result = ((CDOReferenceProxy)result).resolve(getView().getSession().getRevisionManager(), revision, cdoFeature,
- target);
- }
-
+ result = resolveProxy(revision, cdoFeature, target, result);
result = ((CDOViewImpl)cdoObject.cdoView()).convertIDToObject(result);
}
@@ -489,6 +480,20 @@ public final class CDOStore implements EStore
return FSMUtil.adapt(object, view);
}
+ /**
+ * @since 2.0
+ */
+ public Object resolveProxy(InternalCDORevision revision, CDOFeature cdoFeature, int index, Object value)
+ {
+ if (value instanceof CDOReferenceProxy)
+ {
+ value = ((CDOReferenceProxy)value).resolve(getView().getSession().getRevisionManager(), revision, cdoFeature,
+ index);
+ }
+
+ return value;
+ }
+
private CDOFeature getCDOFeature(InternalCDOObject cdoObject, EStructuralFeature eFeature)
{
synchronized (lock)

Back to the top