From 3a07f3fa1239ec029a8be1206a473cdb3c64922c Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Thu, 1 Nov 2007 17:21:38 +0000 Subject: [208378] Develop a CDO Migrator Utility https://bugs.eclipse.org/bugs/show_bug.cgi?id=208378 --- .../META-INF/CDO.MF | 1 + plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch | 70 ++++++++++---------- plugins/org.eclipse.emf.cdo.ui/CDOClient2.launch | 70 ++++++++++---------- .../src/org/eclipse/emf/cdo/util/CDOUtil.java | 76 ++++++++++++---------- 4 files changed, 114 insertions(+), 103 deletions(-) create mode 100644 plugins/org.eclipse.emf.cdo.tests.model1/META-INF/CDO.MF diff --git a/plugins/org.eclipse.emf.cdo.tests.model1/META-INF/CDO.MF b/plugins/org.eclipse.emf.cdo.tests.model1/META-INF/CDO.MF new file mode 100644 index 0000000000..bbfa1b0550 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.model1/META-INF/CDO.MF @@ -0,0 +1 @@ +This is a marker file for bundles with CDO native models. diff --git a/plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch b/plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch index 97b251930d..14101303f4 100644 --- a/plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch +++ b/plugins/org.eclipse.emf.cdo.ui/CDOClient1.launch @@ -24,7 +24,7 @@ - + @@ -39,8 +39,8 @@ - + @@ -53,8 +53,8 @@ - + @@ -64,11 +64,11 @@ - + - + @@ -78,15 +78,15 @@ - + - + @@ -98,8 +98,8 @@ - + @@ -113,11 +113,11 @@ - + - + @@ -126,17 +126,17 @@ - - + + - - + + @@ -147,26 +147,26 @@ - + - + - + - + - + @@ -177,11 +177,11 @@ - + - + @@ -207,8 +207,8 @@ - + @@ -220,12 +220,12 @@ - + - + @@ -246,11 +246,11 @@ - + - + @@ -266,16 +266,16 @@ - + - + - + @@ -293,16 +293,16 @@ - + - + - + @@ -313,10 +313,10 @@ - - + + @@ -334,8 +334,8 @@ - + diff --git a/plugins/org.eclipse.emf.cdo.ui/CDOClient2.launch b/plugins/org.eclipse.emf.cdo.ui/CDOClient2.launch index 7d8293a239..e5d8d2e150 100644 --- a/plugins/org.eclipse.emf.cdo.ui/CDOClient2.launch +++ b/plugins/org.eclipse.emf.cdo.ui/CDOClient2.launch @@ -24,7 +24,7 @@ - + @@ -39,8 +39,8 @@ - + @@ -53,8 +53,8 @@ - + @@ -64,11 +64,11 @@ - + - + @@ -78,15 +78,15 @@ - + - + @@ -98,8 +98,8 @@ - + @@ -113,11 +113,11 @@ - + - + @@ -126,17 +126,17 @@ - - + + - - + + @@ -147,26 +147,26 @@ - + - + - + - + - + @@ -177,11 +177,11 @@ - + - + @@ -207,8 +207,8 @@ - + @@ -220,12 +220,12 @@ - + - + @@ -246,11 +246,11 @@ - + - + @@ -266,16 +266,16 @@ - + - + - + @@ -293,16 +293,16 @@ - + - + - + @@ -313,10 +313,10 @@ - - + + @@ -334,8 +334,8 @@ - + diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java index f84e677245..3bbb4e2928 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java @@ -18,13 +18,6 @@ import org.eclipse.emf.cdo.internal.protocol.CDOIDImpl; import org.eclipse.emf.cdo.protocol.CDOID; import org.eclipse.emf.cdo.protocol.CDOProtocolConstants; -import org.eclipse.net4j.ConnectorException; -import org.eclipse.net4j.IConnector; -import org.eclipse.net4j.signal.IFailOverStrategy; -import org.eclipse.net4j.util.StringUtil; -import org.eclipse.net4j.util.container.IManagedContainer; -import org.eclipse.net4j.util.lifecycle.LifecycleUtil; - import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; @@ -46,10 +39,16 @@ import org.eclipse.emf.internal.cdo.CDOStateMachine; import org.eclipse.emf.internal.cdo.CDOViewImpl; import org.eclipse.emf.internal.cdo.InternalCDOObject; import org.eclipse.emf.internal.cdo.LegacyObjectDisabler; -import org.eclipse.emf.internal.cdo.bundle.OM; import org.eclipse.emf.internal.cdo.protocol.CDOClientProtocolFactory; import org.eclipse.emf.internal.cdo.util.FSMUtil; +import org.eclipse.net4j.ConnectorException; +import org.eclipse.net4j.IConnector; +import org.eclipse.net4j.signal.IFailOverStrategy; +import org.eclipse.net4j.util.StringUtil; +import org.eclipse.net4j.util.container.IManagedContainer; +import org.eclipse.net4j.util.lifecycle.LifecycleUtil; + import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; @@ -67,8 +66,6 @@ import java.util.Map; */ public final class CDOUtil { - public static final String EXT_POINT_NAME = "persistent_package"; - private static Map packageTypes; public static final String CDO_VERSION_SUFFIX = "-CDO"; @@ -84,43 +81,56 @@ public final class CDOUtil { if (packageTypes == null) { - packageTypes = new HashMap(); - IExtensionRegistry registry = Platform.getExtensionRegistry(); + packageTypes = analyzePackageTypes(); + } - // Collect native packages - for (IConfigurationElement element : registry.getConfigurationElementsFor(OM.BUNDLE_ID, EXT_POINT_NAME)) - { - String uri = element.getAttribute("uri"); - if (!StringUtil.isEmpty(uri) && !uri.equals(EresourcePackage.eINSTANCE.getNsURI())) - { - packageTypes.put(uri, CDOPackageType.NATIVE); - } - } + return packageTypes; + } - // Collect legacy and converted packages - for (IConfigurationElement element : registry.getConfigurationElementsFor(EcorePlugin.getPlugin().getBundle() - .getSymbolicName(), EcorePlugin.GENERATED_PACKAGE_PPID)) + private static HashMap analyzePackageTypes() + { + HashMap bundles = new HashMap(); + HashMap result = new HashMap(); + + IExtensionRegistry registry = Platform.getExtensionRegistry(); + String ecoreID = EcorePlugin.getPlugin().getBundle().getSymbolicName(); + String extPoint = EcorePlugin.GENERATED_PACKAGE_PPID; + IConfigurationElement[] elements = registry.getConfigurationElementsFor(ecoreID, extPoint); + for (IConfigurationElement element : elements) + { + String uri = element.getAttribute("uri"); + if (!StringUtil.isEmpty(uri) && !uri.equals(EresourcePackage.eINSTANCE.getNsURI())) { - String uri = element.getAttribute("uri"); - if (!StringUtil.isEmpty(uri) && !packageTypes.containsKey(uri) - && !uri.equals(EresourcePackage.eINSTANCE.getNsURI())) + String bundleName = element.getContributor().getName(); + CDOPackageType packageType = bundles.get(bundleName); + if (packageType == null) { - String bundleName = element.getContributor().getName(); Bundle bundle = Platform.getBundle(bundleName); - String version = (String)bundle.getHeaders().get(Constants.BUNDLE_VERSION); - if (version.endsWith(CDOUtil.CDO_VERSION_SUFFIX)) + if (bundle.getEntry("META-INF/CDO.MF") != null) { - packageTypes.put(uri, CDOPackageType.CONVERTED); + packageType = CDOPackageType.NATIVE; } else { - packageTypes.put(uri, CDOPackageType.LEGACY); + String version = (String)bundle.getHeaders().get(Constants.BUNDLE_VERSION); + if (version.endsWith(CDOUtil.CDO_VERSION_SUFFIX)) + { + packageType = CDOPackageType.CONVERTED; + } + else + { + packageType = CDOPackageType.LEGACY; + } } + + bundles.put(bundleName, packageType); } + + result.put(uri, packageType); } } - return packageTypes; + return result; } public static CDOSession openSession(IConnector connector, String repositoryName, boolean disableLegacyObjects, -- cgit v1.2.3