Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-04-21 09:04:53 +0000
committerEike Stepper2008-04-21 09:04:53 +0000
commit2124fc5183c3cbec4bb37ecac59e65eb82b4a945 (patch)
treedbdbe8557bb72be5e31c936e4f1ecf79b2d0e91e /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util
parentb3854060c2186c4f417137665e424bd60ce8d5e7 (diff)
downloadcdo-2124fc5183c3cbec4bb37ecac59e65eb82b4a945.tar.gz
cdo-2124fc5183c3cbec4bb37ecac59e65eb82b4a945.tar.xz
cdo-2124fc5183c3cbec4bb37ecac59e65eb82b4a945.zip
[226233] Issues with EPackages having inter-dependencies
https://bugs.eclipse.org/bugs/show_bug.cgi?id=226233
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java53
1 files changed, 45 insertions, 8 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
index 2d4caa2428..c01db7c935 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/ModelUtil.java
@@ -30,6 +30,7 @@ import org.eclipse.emf.cdo.util.EMFUtil;
import org.eclipse.emf.internal.cdo.CDOFactoryImpl;
import org.eclipse.emf.internal.cdo.CDOPackageRegistryImpl;
+import org.eclipse.emf.internal.cdo.CDOSessionImpl;
import org.eclipse.emf.internal.cdo.CDOSessionPackageManagerImpl;
import org.eclipse.emf.internal.cdo.bundle.OM;
@@ -64,6 +65,12 @@ public final class ModelUtil
return parentURI;
}
+ public static EPackage getTopLevelPackage(EPackage ePackage)
+ {
+ EPackage superPackage = ePackage.getESuperPackage();
+ return superPackage == null ? ePackage : getTopLevelPackage(superPackage);
+ }
+
public static CDOType getCDOType(EStructuralFeature eFeature)
{
if (eFeature instanceof EReference)
@@ -132,8 +139,16 @@ public final class ModelUtil
CDOPackage cdoPackage = packageManager.lookupPackage(packageURI);
if (cdoPackage == null)
{
- cdoPackage = createCDOPackage(ePackage, packageManager);
- packageManager.addPackage(cdoPackage);
+ EPackage topLevelPackage = getTopLevelPackage(ePackage);
+ if (topLevelPackage != ePackage)
+ {
+ getCDOPackage(topLevelPackage, packageManager);
+ cdoPackage = packageManager.lookupPackage(packageURI);
+ }
+ else
+ {
+ cdoPackage = addCDOPackage(topLevelPackage, packageManager);
+ }
}
return cdoPackage;
@@ -151,22 +166,44 @@ public final class ModelUtil
return cdoClass.lookupFeature(eFeature.getFeatureID());
}
+ private static CDOPackage addCDOPackage(EPackage ePackage, CDOSessionPackageManagerImpl packageManager)
+ {
+ CDOPackage cdoPackage = createCDOPackage(ePackage, packageManager);
+ packageManager.addPackage(cdoPackage);
+
+ for (EPackage subPackage : ePackage.getESubpackages())
+ {
+ addCDOPackage(subPackage, packageManager);
+ }
+
+ return cdoPackage;
+ }
+
/**
* @see EMFUtil#getPersistentFeatures(org.eclipse.emf.common.util.EList)
* @see http://www.eclipse.org/newsportal/article.php?id=26780&group=eclipse.tools.emf#26780
*/
private static CDOPackage createCDOPackage(EPackage ePackage, CDOSessionPackageManagerImpl packageManager)
{
- String packageURI = ePackage.getNsURI();
+ CDOSessionImpl session = packageManager.getSession();
+ String uri = ePackage.getNsURI();
String parentURI = getParentURI(ePackage);
String name = ePackage.getName();
boolean dynamic = EMFUtil.isDynamicEPackage(ePackage);
- String ecore = parentURI == null || EcorePackage.eINSTANCE.getNsURI().equals(packageURI) ? null : EMFUtil
- .ePackageToString(ePackage, packageManager.getSession().getPackageRegistry());
- CDOIDMetaRange idRange = packageManager.getSession().registerEPackage(ePackage);
+ String ecore = null;
+ CDOIDMetaRange idRange = null;
+
+ if (parentURI == null)
+ {
+ if (!EcorePackage.eINSTANCE.getNsURI().equals(uri))
+ {
+ ecore = EMFUtil.ePackageToString(ePackage, session.getPackageRegistry());
+ }
+
+ idRange = session.registerEPackage(ePackage);
+ }
- CDOPackage cdoPackage = CDOModelUtil.createPackage(packageManager, packageURI, name, ecore, dynamic, idRange,
- parentURI);
+ CDOPackage cdoPackage = CDOModelUtil.createPackage(packageManager, uri, name, ecore, dynamic, idRange, parentURI);
initializeCDOPackage(ePackage, cdoPackage);
return cdoPackage;
}

Back to the top