Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java130
1 files changed, 91 insertions, 39 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java
index 86652e5b69..bcf882c937 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/EMFUtil.java
@@ -13,23 +13,23 @@ package org.eclipse.emf.internal.cdo.util;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.cdo.internal.protocol.bundle.CDOProtocol;
import org.eclipse.emf.cdo.internal.protocol.model.CDOClassImpl;
+import org.eclipse.emf.cdo.internal.protocol.model.CDOClassProxy;
import org.eclipse.emf.cdo.internal.protocol.model.CDOClassRefImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOFeatureImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageManagerImpl;
import org.eclipse.emf.cdo.internal.protocol.model.CDOTypeImpl;
import org.eclipse.emf.cdo.internal.protocol.model.core.CDOCorePackageImpl;
-import org.eclipse.emf.cdo.internal.protocol.model.core.CDOObjectClassImpl;
-import org.eclipse.emf.cdo.internal.protocol.model.resource.CDOContentsFeatureImpl;
-import org.eclipse.emf.cdo.internal.protocol.model.resource.CDOPathFeatureImpl;
import org.eclipse.emf.cdo.internal.protocol.model.resource.CDOResourceClassImpl;
import org.eclipse.emf.cdo.internal.protocol.model.resource.CDOResourcePackageImpl;
import org.eclipse.emf.cdo.protocol.model.CDOClass;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
+import org.eclipse.emf.cdo.protocol.util.ImplementationError;
import org.eclipse.net4j.util.om.trace.ContextTracer;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EPackage;
@@ -45,7 +45,7 @@ import java.util.List;
*/
public final class EMFUtil
{
- private static final CDOPackageManagerImpl PACKAGE_MANAGER = CDOPackageManagerImpl.INSTANCE;
+ public static final CDOPackageManagerImpl PACKAGE_MANAGER = new CDOPackageManagerImpl();
@SuppressWarnings("unused")
private static final ContextTracer TRACER = new ContextTracer(CDOProtocol.DEBUG_MODEL, EMFUtil.class);
@@ -80,10 +80,10 @@ public final class EMFUtil
return result;
}
- public static List<EStructuralFeature> getPersistentFeatures(EClass eClass)
+ public static List<EStructuralFeature> getPersistentFeatures(EList<EStructuralFeature> eFeatues)
{
List<EStructuralFeature> result = new ArrayList();
- for (EStructuralFeature feature : eClass.getEStructuralFeatures())
+ for (EStructuralFeature feature : eFeatues)
{
if (!feature.isTransient())
{
@@ -152,28 +152,28 @@ public final class EMFUtil
return CDOTypeImpl.STRING;
}
- public static CDOPackageImpl getCDOPackage(EPackage ePackage)
+ public static CDOPackageImpl getCDOPackage(EPackage ePackage, CDOPackageManagerImpl packageManager)
{
String packageURI = ePackage.getNsURI();
- CDOPackageImpl cdoPackage = PACKAGE_MANAGER.lookupPackage(packageURI);
+ CDOPackageImpl cdoPackage = packageManager.lookupPackage(packageURI);
if (cdoPackage == null)
{
- cdoPackage = convertPackage(ePackage);
- PACKAGE_MANAGER.addPackage(cdoPackage);
+ cdoPackage = convertPackage(ePackage, packageManager);
+ packageManager.addPackage(cdoPackage);
}
return cdoPackage;
}
- public static CDOClassImpl getCDOClass(EClass eClass)
+ public static CDOClassImpl getCDOClass(EClass eClass, CDOPackageManagerImpl packageManager)
{
- CDOPackageImpl cdoPackage = getCDOPackage(eClass.getEPackage());
+ CDOPackageImpl cdoPackage = getCDOPackage(eClass.getEPackage(), packageManager);
return cdoPackage.lookupClass(eClass.getClassifierID());
}
- public static CDOFeatureImpl getCDOFeature(EStructuralFeature eFeature)
+ public static CDOFeatureImpl getCDOFeature(EStructuralFeature eFeature, CDOPackageManagerImpl packageManager)
{
- CDOClassImpl cdoClass = getCDOClass(eFeature.getEContainingClass());
+ CDOClassImpl cdoClass = getCDOClass(eFeature.getEContainingClass(), packageManager);
return cdoClass.lookupFeature(eFeature.getFeatureID());
}
@@ -192,74 +192,89 @@ public final class EMFUtil
return (EStructuralFeature)cdoFeature.getClientInfo();
}
- public static void addModelInfos()
+ public static void addModelInfos(CDOPackageManagerImpl packageManager)
{
// Ecore
- CDOCorePackageImpl.INSTANCE.setClientInfo(EcorePackage.eINSTANCE);
- CDOObjectClassImpl.INSTANCE.setClientInfo(EcorePackage.eINSTANCE.getEObject());
+ CDOCorePackageImpl corePackage = packageManager.getCDOCorePackage();
+ corePackage.setClientInfo(EcorePackage.eINSTANCE);
+ corePackage.getCDOObjectClass().setClientInfo(EcorePackage.eINSTANCE.getEObject());
// Eresource
- CDOResourcePackageImpl.INSTANCE.setClientInfo(EresourcePackage.eINSTANCE);
- CDOResourceClassImpl.INSTANCE.setClientInfo(EresourcePackage.eINSTANCE.getCDOResource());
- CDOContentsFeatureImpl.INSTANCE.setClientInfo(EresourcePackage.eINSTANCE.getCDOResource_Contents());
- CDOPathFeatureImpl.INSTANCE.setClientInfo(EresourcePackage.eINSTANCE.getCDOResource_Path());
+ CDOResourcePackageImpl resourcePackage = packageManager.getCDOResourcePackage();
+ resourcePackage.setClientInfo(EresourcePackage.eINSTANCE);
+ CDOResourceClassImpl resourceClass = resourcePackage.getCDOResourceClass();
+ resourceClass.setClientInfo(EresourcePackage.eINSTANCE.getCDOResource());
+ resourceClass.getCDOContentsFeature().setClientInfo(EresourcePackage.eINSTANCE.getCDOResource_Contents());
+ resourceClass.getCDOPathFeature().setClientInfo(EresourcePackage.eINSTANCE.getCDOResource_Path());
}
- public static void removeModelInfos()
+ public static void removeModelInfos(CDOPackageManagerImpl packageManager)
{
// Ecore
- CDOCorePackageImpl.INSTANCE.setClientInfo(null);
- CDOObjectClassImpl.INSTANCE.setClientInfo(null);
+ CDOCorePackageImpl corePackage = packageManager.getCDOCorePackage();
+ corePackage.setClientInfo(null);
+ corePackage.getCDOObjectClass().setClientInfo(null);
// Eresource
- CDOResourcePackageImpl.INSTANCE.setClientInfo(null);
- CDOResourceClassImpl.INSTANCE.setClientInfo(null);
- CDOContentsFeatureImpl.INSTANCE.setClientInfo(null);
- CDOPathFeatureImpl.INSTANCE.setClientInfo(null);
+ CDOResourcePackageImpl resourcePackage = packageManager.getCDOResourcePackage();
+ resourcePackage.setClientInfo(null);
+ CDOResourceClassImpl resourceClass = resourcePackage.getCDOResourceClass();
+ resourceClass.setClientInfo(null);
+ resourceClass.getCDOContentsFeature().setClientInfo(null);
+ resourceClass.getCDOPathFeature().setClientInfo(null);
}
- private static CDOPackageImpl convertPackage(EPackage ePackage)
+ private static CDOPackageImpl convertPackage(EPackage ePackage, CDOPackageManagerImpl packageManager)
{
- CDOPackageImpl cdoPackage = new CDOPackageImpl(ePackage.getNsURI(), ePackage.getName());
+ CDOPackageImpl cdoPackage = new CDOPackageImpl(packageManager, ePackage.getNsURI(), ePackage.getName());
cdoPackage.setClientInfo(ePackage);
for (EClass eClass : getPersistentClasses(ePackage))
{
- CDOClassImpl cdoClass = convertClass(eClass);
+ CDOClassImpl cdoClass = convertClass(eClass, packageManager);
cdoPackage.addClass(cdoClass);
}
return cdoPackage;
}
- private static CDOClassImpl convertClass(EClass eClass)
+ private static CDOClassImpl convertClass(EClass eClass, CDOPackageManagerImpl packageManager)
{
CDOClassImpl cdoClass = new CDOClassImpl(eClass.getClassifierID(), eClass.getName(), eClass.isAbstract());
cdoClass.setClientInfo(eClass);
- for (EStructuralFeature eFeature : getPersistentFeatures(eClass))
+
+ for (EClass superEClass : eClass.getESuperTypes())
+ {
+ CDOClassRefImpl classRef = createClassRef(superEClass);
+ cdoClass.addSuperType(classRef);
+ }
+
+ for (EStructuralFeature eFeature : getPersistentFeatures(eClass.getEStructuralFeatures()))
{
- CDOFeatureImpl cdoFeature = convertFeature(eFeature);
+ CDOFeatureImpl cdoFeature = convertFeature(eFeature, packageManager);
cdoClass.addFeature(cdoFeature);
}
+ initAllSuperTypes(cdoClass, packageManager);
+ initAllFeatures(cdoClass, packageManager);
return cdoClass;
}
- private static CDOFeatureImpl convertFeature(EStructuralFeature eFeature)
+ private static CDOFeatureImpl convertFeature(EStructuralFeature eFeature, CDOPackageManagerImpl packageManager)
{
- CDOFeatureImpl cdoFeature = //
- isReference(eFeature) ? convertReference(eFeature) : convertAttribute(eFeature);
+ CDOFeatureImpl cdoFeature = isReference(eFeature) ? convertReference(eFeature, packageManager)
+ : convertAttribute(eFeature);
cdoFeature.setClientInfo(eFeature);
return cdoFeature;
}
- private static CDOFeatureImpl convertReference(EStructuralFeature eFeature)
+ private static CDOFeatureImpl convertReference(EStructuralFeature eFeature, CDOPackageManagerImpl packageManager)
{
int featureID = eFeature.getFeatureID();
String name = eFeature.getName();
CDOClassRefImpl classRef = createClassRef(eFeature.getEType());
boolean many = eFeature.isMany();
boolean containment = isContainment(eFeature);
- return new CDOFeatureImpl(featureID, name, classRef, many, containment);
+ return new CDOFeatureImpl(featureID, name, new CDOClassProxy(classRef, packageManager), many, containment);
}
private static CDOFeatureImpl convertAttribute(EStructuralFeature eFeature)
@@ -271,6 +286,43 @@ public final class EMFUtil
return new CDOFeatureImpl(featureID, name, type, many);
}
+ private static void initAllSuperTypes(CDOClassImpl cdoClass, CDOPackageManagerImpl packageManager)
+ {
+ EClass eClass = getEClass(cdoClass);
+ EList<EClass> eClasses = eClass.getEAllSuperTypes();
+ CDOClassImpl[] allSuperTypes = new CDOClassImpl[eClasses.size()];
+
+ int i = 0;
+ for (EClass superEClass : eClasses)
+ {
+ CDOClassImpl superType = getCDOClass(superEClass, packageManager);
+ allSuperTypes[i++] = superType;
+ }
+
+ cdoClass.setAllSuperTypes(allSuperTypes);
+ }
+
+ private static void initAllFeatures(CDOClassImpl cdoClass, CDOPackageManagerImpl packageManager)
+ {
+ EClass eClass = getEClass(cdoClass);
+ List<EStructuralFeature> eFeatures = getPersistentFeatures(eClass.getEAllStructuralFeatures());
+ CDOFeatureImpl[] allFeatures = new CDOFeatureImpl[eFeatures.size()];
+
+ int i = 0;
+ for (EStructuralFeature eFeature : eFeatures)
+ {
+ CDOFeatureImpl cdoFeature = getCDOFeature(eFeature, packageManager);
+ if (cdoFeature.getFeatureID() != i)
+ {
+ throw new ImplementationError("Wrong featureID: " + cdoFeature);
+ }
+
+ allFeatures[i++] = cdoFeature;
+ }
+
+ cdoClass.setAllFeatures(allFeatures);
+ }
+
// public static List<Change> analyzeListDifferences(CDORevisionImpl
// oldRevision,
// CDORevisionImpl newRevision, CDOFeatureImpl feature)

Back to the top