Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Fluegge2010-01-09 09:27:30 +0000
committerMartin Fluegge2010-01-09 09:27:30 +0000
commit140bb8a7cc10c7d31bdb9371d3809101ed035d95 (patch)
tree4f721a9fe8f5ceb1c5025c0cad374c4b56a3fddf /plugins
parent0d0de7d8baeb0be4c9c4c7304dbc55c23b58d095 (diff)
downloadcdo-140bb8a7cc10c7d31bdb9371d3809101ed035d95.tar.gz
cdo-140bb8a7cc10c7d31bdb9371d3809101ed035d95.tar.xz
cdo-140bb8a7cc10c7d31bdb9371d3809101ed035d95.zip
[247226] Transparently support legacy models (CDOLegacyAdapter)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=247226
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java65
1 files changed, 31 insertions, 34 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
index 791aca54d5..b4c609a06f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java
@@ -77,12 +77,12 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
* This local ThreadMap stores all pre-registered objects. This avoids a neverending loop when setting the container
* for the object.
*/
- private static ThreadLocal<Map<CDOID, EObject>> preRegisteredObjects = new InheritableThreadLocal<Map<CDOID, EObject>>()
+ private static ThreadLocal<Map<CDOID, CDOLegacyWrapper>> wrapperRegistry = new InheritableThreadLocal<Map<CDOID, CDOLegacyWrapper>>()
{
@Override
- protected Map<CDOID, EObject> initialValue()
+ protected Map<CDOID, CDOLegacyWrapper> initialValue()
{
- return new HashMap<CDOID, EObject>();
+ return new HashMap<CDOID, CDOLegacyWrapper>();
}
};
@@ -285,7 +285,7 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
Counter counter = recursionCounter.get();
try
{
- preRegisterObject(this);
+ registerWrapper(this);
counter.increment();
revisionToInstanceContainment();
@@ -308,25 +308,11 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
}
counter.decrement();
- unregister(this);
+ unregisterWrapper(this);
underConstruction = false;
}
}
- /**
- * adds an object to the pre-registered objects list which hold all created objects even if they are not registered in
- * the view
- */
- private void preRegisterObject(CDOLegacyWrapper wrapper)
- {
- getPreRegisteredObjects().put(wrapper.cdoID(), wrapper);
- }
-
- private void unregister(CDOLegacyWrapper wrapper)
- {
- getPreRegisteredObjects().remove(wrapper.cdoID());
- }
-
protected void revisionToInstanceContainment()
{
CDOID resourceID = revision.getResourceID();
@@ -341,15 +327,6 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
/**
* @since 3.0
*/
- public static Map<CDOID, EObject> getPreRegisteredObjects()
- {
- return preRegisteredObjects.get();
- }
-
- /**
- * @since 3.0
- */
-
protected void revisionToInstanceFeature(EStructuralFeature feature)
{
if (feature.isMany())
@@ -514,7 +491,7 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
return null;
}
- object = getPreRegisteredObjects().get(id);
+ object = getRegisteredWrapper(id);
if (object != null)
{
return ((CDOLegacyWrapper)object).cdoInternalInstance();
@@ -579,13 +556,14 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
protected InternalEObject getEObjectFromPotentialID(InternalCDOView view, EStructuralFeature feature,
Object potentialID)
{
- if (getPreRegisteredObjects().get(potentialID) != null)
+ CDOLegacyWrapper wrapper;
+ if (potentialID instanceof CDOID && (wrapper = getRegisteredWrapper((CDOID)potentialID)) != null)
{
- potentialID = ((CDOLegacyWrapper)getPreRegisteredObjects().get(potentialID)).instance;
+ potentialID = wrapper.instance;
if (TRACER.isEnabled())
{
- TRACER.format(("getting Object (" + potentialID + ") from localThread instead of the view"));
+ TRACER.format("getting Object (" + potentialID + ") from localThread instead of the view");
}
}
else
@@ -769,6 +747,11 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
}
}
+ public static boolean isLegacyProxy(Object object)
+ {
+ return object instanceof LegacyProxy;
+ }
+
protected static int getEFlagMask(Class<?> instanceClass, String flagName)
{
Field field = ReflectUtil.getField(instanceClass, flagName);
@@ -787,9 +770,23 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper
}
}
- public static boolean isLegacyProxy(Object object)
+ private static CDOLegacyWrapper getRegisteredWrapper(CDOID id)
{
- return object instanceof LegacyProxy;
+ return wrapperRegistry.get().get(id);
+ }
+
+ /**
+ * adds an object to the pre-registered objects list which hold all created objects even if they are not registered in
+ * the view
+ */
+ private static void registerWrapper(CDOLegacyWrapper wrapper)
+ {
+ wrapperRegistry.get().put(wrapper.cdoID(), wrapper);
+ }
+
+ private static void unregisterWrapper(CDOLegacyWrapper wrapper)
+ {
+ wrapperRegistry.get().remove(wrapper.cdoID());
}
/**

Back to the top