diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java | 167 |
1 files changed, 100 insertions, 67 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java index 9d8f7d738b..df21a13308 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/ResourceSetConfigurer.java @@ -10,14 +10,19 @@ */ package org.eclipse.emf.cdo.common.util; +import org.eclipse.emf.cdo.internal.common.bundle.OM; + import org.eclipse.net4j.util.container.IManagedContainer; import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.factory.ProductCreationException; import org.eclipse.net4j.util.lifecycle.IDeactivateable; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; +import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -32,71 +37,6 @@ public interface ResourceSetConfigurer /** * @author Eike Stepper */ - public static final class ResourceSetConfiguration implements IDeactivateable - { - private final ResourceSet resourceSet; - - private final Object context; - - private final IManagedContainer container; - - private final Map<String, Object> configurerResults = new HashMap<>(); - - private ResourceSetConfiguration(ResourceSet resourceSet, Object context, IManagedContainer container) - { - this.resourceSet = resourceSet; - this.context = context; - this.container = container; - } - - public ResourceSet getResourceSet() - { - return resourceSet; - } - - public Object getContext() - { - return context; - } - - public IManagedContainer getContainer() - { - return container; - } - - public Map<String, Object> getConfigurerResults() - { - return configurerResults; - } - - @Override - public Exception deactivate() - { - Exception exception = null; - - try - { - for (Object configurerResult : configurerResults.values()) - { - Exception ex = LifecycleUtil.deactivate(configurerResult); - if (ex != null && exception == null) - { - exception = ex; - } - } - } - finally - { - configurerResults.clear(); - } - - return exception; - } - } - - /** - * @author Eike Stepper - */ public static abstract class Factory extends org.eclipse.net4j.util.factory.Factory { public static final String PRODUCT_GROUP = "org.eclipse.emf.cdo.common.ResourceSetConfigurers"; @@ -129,7 +69,6 @@ public interface ResourceSetConfigurer public ResourceSetConfiguration configureResourceSet(ResourceSet resourceSet, Object context, IManagedContainer container) { ResourceSetConfiguration configuration = new ResourceSetConfiguration(resourceSet, context, container); - Map<String, Object> configurerResults = configuration.getConfigurerResults(); for (String type : container.getFactoryTypes(Factory.PRODUCT_GROUP)) { @@ -138,7 +77,7 @@ public interface ResourceSetConfigurer Object configurerResult = configurer.configureResourceSet(resourceSet, context, container); if (configurerResult != null) { - configurerResults.put(type, configurerResult); + configuration.configurerResults.put(type, configurerResult); } } @@ -149,5 +88,99 @@ public interface ResourceSetConfigurer { return configureResourceSet(resourceSet, context, IPluginContainer.INSTANCE); } + + /** + * @author Eike Stepper + */ + public static final class ResourceSetConfiguration extends AdapterImpl implements IDeactivateable + { + private final ResourceSet resourceSet; + + private final Object context; + + private final IManagedContainer container; + + private final Map<String, Object> configurerResults = new HashMap<>(); + + private ResourceSetConfiguration(ResourceSet resourceSet, Object context, IManagedContainer container) + { + this.resourceSet = resourceSet; + this.context = context; + this.container = container; + + resourceSet.eAdapters().add(this); + } + + public ResourceSet getResourceSet() + { + return resourceSet; + } + + public Object getContext() + { + return context; + } + + public IManagedContainer getContainer() + { + return container; + } + + public Map<String, Object> getConfigurerResults() + { + return Collections.unmodifiableMap(configurerResults); + } + + @Override + public Exception deactivate() + { + resourceSet.eAdapters().remove(this); + + Exception exception = null; + + try + { + for (Object configurerResult : configurerResults.values()) + { + Exception ex = LifecycleUtil.deactivate(configurerResult); + if (ex != null) + { + OM.LOG.error(ex); + + if (exception == null) + { + exception = ex; + } + } + } + } + catch (Exception ex) + { + OM.LOG.error(ex); + + if (exception == null) + { + exception = ex; + } + } + finally + { + configurerResults.clear(); + } + + return exception; + } + + @Override + public boolean isAdapterForType(Object type) + { + return type == ResourceSetConfiguration.class; + } + + public static ResourceSetConfiguration of(ResourceSet resourceSet) + { + return (ResourceSetConfiguration)EcoreUtil.getAdapter(resourceSet.eAdapters(), ResourceSetConfiguration.class); + } + } } } |