diff options
author | Eike Stepper | 2008-04-21 09:04:53 +0000 |
---|---|---|
committer | Eike Stepper | 2008-04-21 09:04:53 +0000 |
commit | 2124fc5183c3cbec4bb37ecac59e65eb82b4a945 (patch) | |
tree | dbdbe8557bb72be5e31c936e4f1ecf79b2d0e91e /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util | |
parent | b3854060c2186c4f417137665e424bd60ce8d5e7 (diff) | |
download | cdo-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.java | 53 |
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; } |