diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/RepositoryConfigurator.java | 101 |
1 files changed, 101 insertions, 0 deletions
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 b9f206a472..07450bc700 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 @@ -23,6 +23,9 @@ import org.eclipse.emf.cdo.server.IStoreFactory; import org.eclipse.net4j.util.ObjectUtil; import org.eclipse.net4j.util.StringUtil; import org.eclipse.net4j.util.container.IManagedContainer; +import org.eclipse.net4j.util.container.IManagedContainer.ContainerAware; +import org.eclipse.net4j.util.factory.ProductCreationException; +import org.eclipse.net4j.util.factory.PropertiesFactory; import org.eclipse.net4j.util.om.OMPlatform; import org.eclipse.net4j.util.om.trace.ContextTracer; import org.eclipse.net4j.util.security.AuthenticatorFactory; @@ -136,6 +139,11 @@ public class RepositoryConfigurator if (container != null) { CDOServerUtil.addRepository(container, repository); + OM.LOG.info("CDO repository " + repository.getName() + " started"); + } + else + { + OM.LOG.info("CDO repository " + repository.getName() + " added"); } } @@ -207,6 +215,7 @@ public class RepositoryConfigurator setUserManager(repository, repositoryConfig); setAuthenticator(repository, repositoryConfig); + setActivityLog(repository, repositoryConfig); EPackage[] initialPackages = getInitialPackages(repositoryConfig); if (initialPackages.length != 0) @@ -339,6 +348,27 @@ public class RepositoryConfigurator } } + /** + * @since 4.7 + */ + protected void setActivityLog(InternalRepository repository, Element repositoryConfig) + { + NodeList activityLogConfig = repositoryConfig.getElementsByTagName("activityLog"); //$NON-NLS-1$ + if (activityLogConfig.getLength() > 1) + { + String repositoryName = repositoryConfig.getAttribute("name"); //$NON-NLS-1$ + throw new IllegalStateException("At most one activity log must be configured for repository " + repositoryName); //$NON-NLS-1$ + } + + if (activityLogConfig.getLength() > 0) + { + Element activityLogElement = (Element)activityLogConfig.item(0); + + RepositoryActivityLog activityLog = getContainerElement(activityLogElement, RepositoryActivityLog.Rolling.Factory.TYPE); + activityLog.setRepository(repository); + } + } + protected EPackage[] getInitialPackages(Element repositoryConfig) { List<EPackage> result = new ArrayList<EPackage>(); @@ -400,6 +430,30 @@ public class RepositoryConfigurator return storeFactory.createStore(repositoryName, repositoryProperties, storeConfig); } + /** + * @since 4.7 + */ + protected <T> T getContainerElement(Element element, String defaultType) + { + String type = element.getAttribute("type"); //$NON-NLS-1$ + if (StringUtil.isEmpty(type)) + { + type = defaultType; + } + + String description = element.getAttribute("description"); //$NON-NLS-1$ + if (StringUtil.isEmpty(description)) + { + Map<String, String> properties = getProperties(element, 1); + description = PropertiesFactory.createDescription(properties); + } + + @SuppressWarnings("unchecked") + T containerElement = (T)container.getElement(RepositoryActivityLog.Factory.PRODUCT_GROUP, type, description); + + return containerElement; + } + public static Map<String, String> getProperties(Element element, int levels) { Map<String, String> properties = new HashMap<String, String>(); @@ -454,4 +508,51 @@ public class RepositoryConfigurator return null; } + + /** + * @author Eike Stepper + * @since 4.7 + */ + public static abstract class Factory extends org.eclipse.net4j.util.factory.Factory implements ContainerAware + { + public static final String PRODUCT_GROUP = "org.eclipse.emf.cdo.server.repositoryConfigurators"; //$NON-NLS-1$ + + private IManagedContainer container; + + public Factory(String type) + { + super(PRODUCT_GROUP, type); + } + + public void setManagedContainer(IManagedContainer container) + { + this.container = container; + } + + public final RepositoryConfigurator create(String description) throws ProductCreationException + { + return create(container, description); + } + + public abstract RepositoryConfigurator create(IManagedContainer container, String description) throws ProductCreationException; + + /** + * @author Eike Stepper + */ + public static final class Default extends Factory + { + public static final String TYPE = "default"; //$NON-NLS-1$ + + public Default() + { + super(TYPE); + } + + @Override + public RepositoryConfigurator create(IManagedContainer container, String description) throws ProductCreationException + { + return new RepositoryConfigurator(container); + } + } + } } |