diff options
author | Eike Stepper | 2011-05-14 09:39:06 +0000 |
---|---|---|
committer | Eike Stepper | 2011-05-14 09:39:06 +0000 |
commit | ec6daa8f2571b5564de44e0aa7c0d008f0bdce6c (patch) | |
tree | 636b00354ceceec646a92d2049a8a6197c19c424 /plugins/org.eclipse.emf.cdo.server/src/org | |
parent | db7ed5f0823af6da1fb2334257cc65c8120aac57 (diff) | |
download | cdo-ec6daa8f2571b5564de44e0aa7c0d008f0bdce6c.tar.gz cdo-ec6daa8f2571b5564de44e0aa7c0d008f0bdce6c.tar.xz cdo-ec6daa8f2571b5564de44e0aa7c0d008f0bdce6c.zip |
[345431] Make it possible to preregister epackages drops/4.0-I201105140431
https://bugs.eclipse.org/bugs/show_bug.cgi?id=345431
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org')
3 files changed, 69 insertions, 9 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java index e15b918470..431a81d273 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java @@ -160,6 +160,8 @@ public class Repository extends Container<Object> implements InternalRepository private List<CDOCommitInfoHandler> commitInfoHandlers = new ArrayList<CDOCommitInfoHandler>(); + private EPackage[] initialPackages; + // Bugzilla 297940 private TimeStampAuthority timeStampAuthority = new TimeStampAuthority(this); @@ -1069,6 +1071,12 @@ public class Repository extends Container<Object> implements InternalRepository } } + public void setInitialPackages(EPackage... initialPackages) + { + checkInactive(); + this.initialPackages = initialPackages; + } + public CDOReplicationInfo replicateRaw(CDODataOutput out, int lastReplicatedBranchID, long lastReplicatedCommitTime) throws IOException { @@ -1345,11 +1353,23 @@ public class Repository extends Container<Object> implements InternalRepository try { - InternalCDOPackageUnit ecoreUnit = initSystemPackage(EcorePackage.eINSTANCE); - InternalCDOPackageUnit eresourceUnit = initSystemPackage(EresourcePackage.eINSTANCE); - InternalCDOPackageUnit etypesUnit = initSystemPackage(EtypesPackage.eINSTANCE); + List<InternalCDOPackageUnit> units = new ArrayList<InternalCDOPackageUnit>(); + units.add(initSystemPackage(EcorePackage.eINSTANCE)); + units.add(initSystemPackage(EresourcePackage.eINSTANCE)); + units.add(initSystemPackage(EtypesPackage.eINSTANCE)); + + if (initialPackages != null) + { + for (EPackage initialPackage : initialPackages) + { + if (!packageRegistry.containsKey(initialPackage.getNsURI())) + { + units.add(initSystemPackage(initialPackage)); + } + } + } - InternalCDOPackageUnit[] systemUnits = { ecoreUnit, eresourceUnit, etypesUnit }; + InternalCDOPackageUnit[] systemUnits = units.toArray(new InternalCDOPackageUnit[units.size()]); writer.writePackageUnits(systemUnits, new Monitor()); writer.commit(new Monitor()); } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java index a38b9bf7d2..25c32cff84 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java @@ -20,6 +20,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionManager; import org.eclipse.net4j.util.container.IContainer; import org.eclipse.net4j.util.om.monitor.OMMonitor; +import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EPackage.Registry; import java.util.List; @@ -109,6 +110,11 @@ public interface IRepository extends CDOCommonRepository, IQueryHandlerProvider, public void removeHandler(Handler handler); /** + * @since 4.0 + */ + public void setInitialPackages(EPackage... initialPackages); + + /** * A marker interface to indicate valid arguments to {@link IRepository#addHandler(Handler)} and * {@link IRepository#removeHandler(Handler)}. * diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java index 7eaf3a37ce..981c74dee1 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java @@ -25,6 +25,8 @@ import org.eclipse.net4j.util.container.IManagedContainer; import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.net4j.util.security.IUserManager; +import org.eclipse.emf.ecore.EPackage; + import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; @@ -163,6 +165,12 @@ public class RepositoryConfigurator } } + EPackage[] initialPackages = getInitialPackages(repositoryConfig); + if (initialPackages.length != 0) + { + repository.setInitialPackages(initialPackages); + } + return repository; } @@ -202,14 +210,40 @@ public class RepositoryConfigurator return userManager; } + protected EPackage[] getInitialPackages(Element repositoryConfig) + { + List<EPackage> result = new ArrayList<EPackage>(); + + NodeList initialPackagesConfig = repositoryConfig.getElementsByTagName("initialPackage"); //$NON-NLS-1$ + for (int i = 0; i < initialPackagesConfig.getLength(); i++) + { + Element initialPackageConfig = (Element)initialPackagesConfig.item(i); + String nsURI = initialPackageConfig.getAttribute("nsURI"); //$NON-NLS-1$ + if (nsURI == null) + { + throw new IllegalStateException("nsURI missing for initialPackage element"); //$NON-NLS-1$ + } + + EPackage initialPackage = EPackage.Registry.INSTANCE.getEPackage(nsURI); + if (initialPackage == null) + { + throw new IllegalStateException("Initial package not found in global package registry: " + nsURI); //$NON-NLS-1$ + } + + result.add(initialPackage); + } + + return result.toArray(new EPackage[result.size()]); + } + protected Element getStoreConfig(Element repositoryConfig) { NodeList storeConfigs = repositoryConfig.getElementsByTagName("store"); //$NON-NLS-1$ - // if (storeConfigs.getLength() != 1) - // { - // String repositoryName = repositoryConfig.getAttribute("name"); //$NON-NLS-1$ - // throw new IllegalStateException("Exactly one store must be configured for repository " + repositoryName); //$NON-NLS-1$ - // } + if (storeConfigs.getLength() == 0) + { + String repositoryName = repositoryConfig.getAttribute("name"); //$NON-NLS-1$ + throw new IllegalStateException("A store must be configured for repository " + repositoryName); //$NON-NLS-1$ + } return (Element)storeConfigs.item(0); } |