Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-05-14 09:39:06 +0000
committerEike Stepper2011-05-14 09:39:06 +0000
commitec6daa8f2571b5564de44e0aa7c0d008f0bdce6c (patch)
tree636b00354ceceec646a92d2049a8a6197c19c424 /plugins/org.eclipse.emf.cdo.server/src/org
parentdb7ed5f0823af6da1fb2334257cc65c8120aac57 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java44
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);
}

Back to the top