Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java')
-rw-r--r--plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java450
1 files changed, 224 insertions, 226 deletions
diff --git a/plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java b/plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java
index f110f35fbad..27a01c0e489 100644
--- a/plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java
+++ b/plugins/infra/services/org.eclipse.papyrus.infra.services.markerlistener/src/org/eclipse/papyrus/infra/services/markerlistener/MarkersMonitorService.java
@@ -1,226 +1,224 @@
-/*****************************************************************************
- * Copyright (c) 2011, 2013 CEA LIST.
- *
- *
- * 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:
- * Amine EL KOUHEN (CEA LIST/LIFL) - Amine.Elkouhen@cea.fr
- * Arnaud Cuccuru (CEA LIST) - arnaud.cuccuru@cea.fr
- * Christian W. Damus (CEA) - refactor for non-workspace abstraction of problem markers (CDO)
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.infra.services.markerlistener;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.papyrus.infra.core.resource.ModelSet;
-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;
-import org.eclipse.papyrus.infra.services.markerlistener.providers.IMarkerMonitor;
-import org.eclipse.papyrus.infra.services.markerlistener.providers.IMarkerProvider;
-import org.eclipse.papyrus.infra.services.markerlistener.providers.MarkerMonitorRegistry;
-import org.eclipse.papyrus.infra.services.markerlistener.util.MarkerListenerUtils;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class MarkersMonitorService.
- */
-public class MarkersMonitorService implements IService {
-
- /** The services registry. */
- private ServicesRegistry servicesRegistry;
-
- /**
- * The list of registered Marker Event Listeners
- */
- protected List<IMarkerEventListener> registeredMarkerEventListeners;
-
- private List<IMarkerMonitor> monitorExtensions;
-
- private final IMarkerEventListener relay = createRelayListener();
-
- /**
- * Gets the services registry.
- *
- * @return the services registry
- */
- public ServicesRegistry getServicesRegistry() {
- return servicesRegistry;
- }
-
-
- /**
- * Sets the services registry.
- *
- * @param servicesRegistry
- * the new services registry
- */
- public void setServicesRegistry(ServicesRegistry servicesRegistry) {
- this.servicesRegistry = servicesRegistry;
- }
-
-
- /**
- * Instantiates a new markers monitor service.
- */
- public MarkersMonitorService() {
- }
-
- /**
- * @see org.eclipse.papyrus.infra.core.services.IService#init(org.eclipse.papyrus.infra.core.services.ServicesRegistry)
- *
- * @param servicesRegistry
- * @throws ServiceException
- */
-
- public void init(ServicesRegistry servicesRegistry) throws ServiceException {
- this.servicesRegistry = servicesRegistry;
- this.registeredMarkerEventListeners = this.getRegisteredMarkerEventListeners();
- this.monitorExtensions = new MarkerMonitorRegistry().getMarkerMonitors();
-
- checkMarkers();
- }
-
- protected List<IMarkerEventListener> getRegisteredMarkerEventListeners() {
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IConfigurationElement[] config = registry.getConfigurationElementsFor(IMarkerEventListener.MARKER_EVENT_LISTENER_EXTENSION_POINT_ID);
- this.registeredMarkerEventListeners = new ArrayList<IMarkerEventListener>();
- try {
- for (int i = 0; i < config.length; i++) {
- Object o = config[i].createExecutableExtension("class");
- try {
- this.registeredMarkerEventListeners.add((IMarkerEventListener) servicesRegistry.getService(o.getClass()));
- } catch (ServiceException e) {
- e.printStackTrace();
- }
- }
- } catch (CoreException e) {
- e.printStackTrace();
- }
- return this.registeredMarkerEventListeners;
- }
-
- /**
- * @see org.eclipse.papyrus.infra.core.services.IService#startService()
- *
- * @throws ServiceException
- */
- public void startService() throws ServiceException {
- ModelSet modelSet = ServiceUtils.getInstance().getModelSet(servicesRegistry);
-
- for (IMarkerMonitor next : monitorExtensions) {
- try {
- next.initialize(modelSet);
- next.addMarkerEventListener(relay);
- } catch (Exception e) {
- Activator.log.error("Uncaught exception in initialization of marker monitor.", e);
- }
- }
- }
-
- /**
- * @see org.eclipse.papyrus.infra.core.services.IService#disposeService()
- *
- * @throws ServiceException
- */
- public void disposeService() throws ServiceException {
- for (IMarkerMonitor next : monitorExtensions) {
- try {
- next.removeMarkerEventListener(relay);
- next.dispose();
- } catch (Exception e) {
- Activator.log.error("Uncaught exception in initialization of marker monitor.", e);
- }
- }
- }
-
- /**
- * Initial Checking for existing markers in notation.uml.
- */
- void checkMarkers() {
- try {
- EList<Resource> resources = ServiceUtils.getInstance().getModelSet(servicesRegistry).getResources();
- // create a copy of the list, see bug 392194 (avoid concurrent modification exceptions)
- EList<Resource> resourcesCopy = new BasicEList<Resource>(resources);
- // loop over all resources (e.g. error markers are on notation, breakpoints on UML model)
- for (Resource resource : resourcesCopy) {
- try {
- Collection<? extends IPapyrusMarker> markers = getMarkers(resource, null /* all markers */, true);
- for (IPapyrusMarker next : markers) {
- EObject eObjectFromMarker = next.getEObject();
- if (eObjectFromMarker != null && this.registeredMarkerEventListeners != null) {
- for (IMarkerEventListener listener : this.registeredMarkerEventListeners) {
- if (listener.isNotifiedOnInitialMarkerCheck()) {
- listener.notifyMarkerChange(eObjectFromMarker, next, IMarkerEventListener.MARKER_ADDED);
- }
- }
- }
- }
- } catch (CoreException e) {
- Activator.log.error(e.getMessage(), e);
- }
- }
- } catch (ServiceException e1) {
- Activator.log.error(e1.getMessage(), e1);
- }
- }
-
- public Collection<? extends IPapyrusMarker> getMarkers(Resource resource, String type, boolean includeSubtypes) throws CoreException {
- List<IPapyrusMarker> result = new LinkedList<IPapyrusMarker>();
- for (IMarkerProvider provider : MarkerListenerUtils.getMarkerProviders(resource)) {
- result.addAll(provider.getMarkers(resource, type, includeSubtypes));
- }
- return result;
- }
-
- private IMarkerEventListener createRelayListener() {
- return new IMarkerEventListener() {
-
- public void notifyMarkerChange(EObject eObjectOfMarker, IPapyrusMarker marker, int addedOrRemoved) {
-
- for (IMarkerEventListener next : registeredMarkerEventListeners) {
- try {
- next.notifyMarkerChange(eObjectOfMarker, marker, addedOrRemoved);
- } catch (Exception e) {
- Activator.log.error("Uncaught exception in marker listener.", e);
- }
- }
- }
-
- public void startService() {
- // not needed
- }
-
- public void init(ServicesRegistry servicesRegistry) {
- // not needed
- }
-
- public void disposeService() {
- // not needed
- }
-
- public boolean isNotifiedOnInitialMarkerCheck() {
- // not needed
- return false;
- }
- };
- }
-}
+/*****************************************************************************
+ * Copyright (c) 2011, 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * 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:
+ * Amine EL KOUHEN (CEA LIST/LIFL) - Amine.Elkouhen@cea.fr
+ * Arnaud Cuccuru (CEA LIST) - arnaud.cuccuru@cea.fr
+ * Christian W. Damus (CEA) - refactor for non-workspace abstraction of problem markers (CDO)
+ * Christian W. Damus - bug 485220
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.services.markerlistener;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+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;
+import org.eclipse.papyrus.infra.services.markerlistener.providers.IMarkerMonitor;
+import org.eclipse.papyrus.infra.services.markerlistener.providers.IMarkerProvider;
+import org.eclipse.papyrus.infra.services.markerlistener.providers.MarkerMonitorRegistry;
+import org.eclipse.papyrus.infra.services.markerlistener.util.MarkerListenerUtils;
+
+/**
+ * The Class MarkersMonitorService.
+ */
+public class MarkersMonitorService implements IService {
+
+ /** The services registry. */
+ private ServicesRegistry servicesRegistry;
+
+ /**
+ * The list of registered Marker Event Listeners
+ */
+ protected List<IMarkerEventListener> registeredMarkerEventListeners;
+
+ private List<IMarkerMonitor> monitorExtensions;
+
+ private final IMarkerEventListener relay = createRelayListener();
+
+ /**
+ * Gets the services registry.
+ *
+ * @return the services registry
+ */
+ public ServicesRegistry getServicesRegistry() {
+ return servicesRegistry;
+ }
+
+
+ /**
+ * Sets the services registry.
+ *
+ * @param servicesRegistry
+ * the new services registry
+ */
+ public void setServicesRegistry(ServicesRegistry servicesRegistry) {
+ this.servicesRegistry = servicesRegistry;
+ }
+
+
+ /**
+ * Instantiates a new markers monitor service.
+ */
+ public MarkersMonitorService() {
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.core.services.IService#init(org.eclipse.papyrus.infra.core.services.ServicesRegistry)
+ *
+ * @param servicesRegistry
+ * @throws ServiceException
+ */
+
+ public void init(ServicesRegistry servicesRegistry) throws ServiceException {
+ this.servicesRegistry = servicesRegistry;
+ this.registeredMarkerEventListeners = this.getRegisteredMarkerEventListeners();
+ this.monitorExtensions = new MarkerMonitorRegistry().getMarkerMonitors();
+
+ checkMarkers();
+ }
+
+ protected List<IMarkerEventListener> getRegisteredMarkerEventListeners() {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IConfigurationElement[] config = registry.getConfigurationElementsFor(IMarkerEventListener.MARKER_EVENT_LISTENER_EXTENSION_POINT_ID);
+ this.registeredMarkerEventListeners = new ArrayList<IMarkerEventListener>();
+ for (int i = 0; i < config.length; i++) {
+ // Access services by their ID (interface name) rather than create and throw away an instance
+ String serviceClass = config[i].getAttribute("class"); //$NON-NLS-1$
+ try {
+ this.registeredMarkerEventListeners.add((IMarkerEventListener) servicesRegistry.getService(serviceClass));
+ } catch (ClassCastException e) {
+ Activator.log.error("Registered service is not an IMarkerEventListener: " + serviceClass, e); //$NON-NLS-1$
+ } catch (ServiceException e) {
+ Activator.log.error("Failed to access registered service for marker listening", e); //$NON-NLS-1$
+ }
+ }
+ return this.registeredMarkerEventListeners;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.core.services.IService#startService()
+ *
+ * @throws ServiceException
+ */
+ public void startService() throws ServiceException {
+ ModelSet modelSet = ServiceUtils.getInstance().getModelSet(servicesRegistry);
+
+ for (IMarkerMonitor next : monitorExtensions) {
+ try {
+ next.initialize(modelSet);
+ next.addMarkerEventListener(relay);
+ } catch (Exception e) {
+ Activator.log.error("Uncaught exception in initialization of marker monitor.", e);
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.core.services.IService#disposeService()
+ *
+ * @throws ServiceException
+ */
+ public void disposeService() throws ServiceException {
+ for (IMarkerMonitor next : monitorExtensions) {
+ try {
+ next.removeMarkerEventListener(relay);
+ next.dispose();
+ } catch (Exception e) {
+ Activator.log.error("Uncaught exception in initialization of marker monitor.", e);
+ }
+ }
+ }
+
+ /**
+ * Initial Checking for existing markers in notation.uml.
+ */
+ void checkMarkers() {
+ try {
+ EList<Resource> resources = ServiceUtils.getInstance().getModelSet(servicesRegistry).getResources();
+ // create a copy of the list, see bug 392194 (avoid concurrent modification exceptions)
+ EList<Resource> resourcesCopy = new BasicEList<Resource>(resources);
+ // loop over all resources (e.g. error markers are on notation, breakpoints on UML model)
+ for (Resource resource : resourcesCopy) {
+ try {
+ Collection<? extends IPapyrusMarker> markers = getMarkers(resource, null /* all markers */, true);
+ for (IPapyrusMarker next : markers) {
+ EObject eObjectFromMarker = next.getEObject();
+ if (eObjectFromMarker != null && this.registeredMarkerEventListeners != null) {
+ for (IMarkerEventListener listener : this.registeredMarkerEventListeners) {
+ if (listener.isNotifiedOnInitialMarkerCheck()) {
+ listener.notifyMarkerChange(eObjectFromMarker, next, IMarkerEventListener.MARKER_ADDED);
+ }
+ }
+ }
+ }
+ } catch (CoreException e) {
+ Activator.log.error(e.getMessage(), e);
+ }
+ }
+ } catch (ServiceException e1) {
+ Activator.log.error(e1.getMessage(), e1);
+ }
+ }
+
+ public Collection<? extends IPapyrusMarker> getMarkers(Resource resource, String type, boolean includeSubtypes) throws CoreException {
+ List<IPapyrusMarker> result = new LinkedList<IPapyrusMarker>();
+ for (IMarkerProvider provider : MarkerListenerUtils.getMarkerProviders(resource)) {
+ result.addAll(provider.getMarkers(resource, type, includeSubtypes));
+ }
+ return result;
+ }
+
+ private IMarkerEventListener createRelayListener() {
+ return new IMarkerEventListener() {
+
+ public void notifyMarkerChange(EObject eObjectOfMarker, IPapyrusMarker marker, int addedOrRemoved) {
+
+ for (IMarkerEventListener next : registeredMarkerEventListeners) {
+ try {
+ next.notifyMarkerChange(eObjectOfMarker, marker, addedOrRemoved);
+ } catch (Exception e) {
+ Activator.log.error("Uncaught exception in marker listener.", e);
+ }
+ }
+ }
+
+ public void startService() {
+ // not needed
+ }
+
+ public void init(ServicesRegistry servicesRegistry) {
+ // not needed
+ }
+
+ public void disposeService() {
+ // not needed
+ }
+
+ public boolean isNotifiedOnInitialMarkerCheck() {
+ // not needed
+ return false;
+ }
+ };
+ }
+}

Back to the top