Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/pasteInNewTable/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/ServiceUtilsForResourceInitializerService.java')
-rw-r--r--sandbox/pasteInNewTable/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/ServiceUtilsForResourceInitializerService.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/sandbox/pasteInNewTable/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/ServiceUtilsForResourceInitializerService.java b/sandbox/pasteInNewTable/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/ServiceUtilsForResourceInitializerService.java
new file mode 100644
index 00000000000..25eba9bb364
--- /dev/null
+++ b/sandbox/pasteInNewTable/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/ServiceUtilsForResourceInitializerService.java
@@ -0,0 +1,97 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.emf.utils;
+
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.BadStateException;
+import org.eclipse.papyrus.infra.core.services.IService;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
+
+/**
+ * This service register inside the ResourceSet an AdapterFactory referencing the ServiceRegistry.
+ * This will allows to get the ServicesRegistry from any EMF object (see {@link ServiceUtilsForResource}.
+ * The AdapterFactory can't provide Adapters. It is only used to hold a reference on the ServiceRegistry.
+ *
+ * This service depends on the ModelSet service.
+ *
+ *
+ * @see ServiceRegistryAdapterFactory
+ * @see ServiceUtilsForResource
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceUtilsForResourceInitializerService implements IService {
+
+ ServicesRegistry servicesRegistry;
+
+ /**
+ * Create a {@link ServiceRegistryAdapterFactory} and associate it to the ResourceSet.
+ *
+ */
+ public void init(ServicesRegistry servicesRegistry) throws ServiceException {
+
+ this.servicesRegistry = servicesRegistry;
+ ModelSet modelSet = ServiceUtils.getInstance().getModelSet(servicesRegistry);
+
+ // Check if the Adapter Factory is already attached.
+ if( lookupServiceRegistryAdapterFactory(modelSet) != null ) {
+ return;
+ }
+
+ // Attach the adapter
+ ServiceRegistryAdapterFactory factory = new ServiceRegistryAdapterFactory(servicesRegistry);
+ modelSet.getAdapterFactories().add(factory);
+
+ }
+
+ /**
+ * Return the AdapterFactory, or null if none is found.
+ * @param resourceSet
+ * @return
+ */
+ private ServiceRegistryAdapterFactory lookupServiceRegistryAdapterFactory(ResourceSet resourceSet) {
+ ServiceRegistryAdapterFactory factory = (ServiceRegistryAdapterFactory)EcoreUtil.getAdapterFactory(resourceSet.getAdapterFactories(), ServiceRegistryAdapterFactory.TYPE_ID);
+
+ return factory;
+ }
+
+ /**
+ *
+ */
+ public void startService() throws ServiceException {
+ // Do nothing
+
+ }
+
+ /**
+ * Detach the Adapter from the resourceSet
+ */
+ public void disposeService() throws ServiceException {
+
+ try {
+ ModelSet modelSet = ServiceUtils.getInstance().getModelSet(servicesRegistry);
+ ServiceRegistryAdapterFactory factory = lookupServiceRegistryAdapterFactory(modelSet);
+
+ modelSet.getAdapterFactories().remove(factory);
+ } catch (BadStateException e) {
+ // ModelSet is already disposed. Do nothing
+ }
+ }
+
+}

Back to the top