1 /*******************************************************************************
2 * Copyright (c) 2012, 2022 Obeo and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * Obeo - initial API and implementation
10 * Stefan Dirix - Bug 456699
11 * Michael Borkowski - Bug 462863
12 * Martin Fleck - Bug 512562
13 * Martin Fleck - Bug 578422
14 *******************************************************************************/
15 package org
.eclipse
.emf
.compare
.ide
.ui
.internal
;
17 import java
.util
.HashMap
;
18 import java
.util
.Iterator
;
21 import org
.eclipse
.compare
.internal
.CompareEditor
;
22 import org
.eclipse
.core
.runtime
.IExtensionRegistry
;
23 import org
.eclipse
.core
.runtime
.IStatus
;
24 import org
.eclipse
.core
.runtime
.Platform
;
25 import org
.eclipse
.core
.runtime
.Status
;
26 import org
.eclipse
.emf
.compare
.ide
.ui
.dependency
.ModelDependencyProviderRegistry
;
27 import org
.eclipse
.emf
.compare
.ide
.ui
.dependency
.ModelDependencyProviderRegistryListener
;
28 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.editor
.PropertySheetAdapterFactory
;
29 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.ModelMinimizerRegistry
;
30 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.ModelMinimizerRegistryListener
;
31 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.resolver
.registry
.ModelResolverRegistry
;
32 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.resolver
.registry
.ModelResolverRegistryListener
;
33 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.view
.registry
.LogicalModelViewHandlerRegistry
;
34 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.logical
.view
.registry
.LogicalModelViewHandlerRegistryListener
;
35 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.mergeresolution
.MergeResolutionListenerRegistry
;
36 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.mergeresolution
.MergeResolutionListenerRegistryListener
;
37 import org
.eclipse
.emf
.compare
.ide
.ui
.internal
.subscriber
.SubscriberProviderRegistryListener
;
38 import org
.eclipse
.emf
.compare
.ide
.ui
.logical
.IModelMinimizer
;
39 import org
.eclipse
.emf
.compare
.ide
.ui
.subscriber
.SubscriberProviderRegistry
;
40 import org
.eclipse
.emf
.compare
.rcp
.extension
.AbstractRegistryEventListener
;
41 import org
.eclipse
.jface
.resource
.ImageDescriptor
;
42 import org
.eclipse
.swt
.graphics
.Image
;
43 import org
.eclipse
.ui
.plugin
.AbstractUIPlugin
;
44 import org
.osgi
.framework
.BundleContext
;
47 * The activator class, controls the plug-in life cycle.
49 * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
51 @SuppressWarnings("restriction")
52 public class EMFCompareIDEUIPlugin
extends AbstractUIPlugin
{
54 public static final String PLUGIN_ID
= "org.eclipse.emf.compare.ide.ui"; //$NON-NLS-1$
56 /** Plug-in's shared instance. */
57 private static EMFCompareIDEUIPlugin plugin
;
59 /** Model resolvers extension point. */
60 private static final String MODEL_RESOLVER_PPID
= "modelResolvers"; //$NON-NLS-1$
62 /** Logical Model Editors Handlers extension point. */
63 private static final String LOGICAL_MODEL_VIEW_HANDLERS_PPID
= "logicalModelViewHandlers"; //$NON-NLS-1$
65 /** Model Minimizers extension point. */
66 private static final String MODEL_MINIMIZERS_PPID
= "modelMinimizers"; //$NON-NLS-1$
68 /** Model dependency providers extension point. */
69 private static final String MODEL_DEPENDENCY_PROVIDER_PPID
= "modelDependencyProvider"; //$NON-NLS-1$
71 /** Merge resolution listener extension point. */
72 private static final String MERGE_RESOLUTION_PPID
= "mergeResolutionListener"; //$NON-NLS-1$
74 /** Subscriber provider extension point. */
75 private static final String SUBSCRIBER_PROVIDER_PPID
= "subscriberProvider"; //$NON-NLS-1$
77 /** keep track of resources that should be freed when exiting. */
78 private static Map
<String
, Image
> resourcesMapper
= new HashMap
<String
, Image
>();
80 /** Listener for the model resolver extension point. */
81 private AbstractRegistryEventListener modelResolverRegistryListener
;
83 /** Listener for the merge resolution listener extension point. */
84 private MergeResolutionListenerRegistryListener mergeResolutionListenerRegistryListener
;
86 /** Registry of model resolvers. */
87 private ModelResolverRegistry modelResolverRegistry
;
89 /** Listener for the Logical Model View Handlers extension point. */
90 private AbstractRegistryEventListener logicalModelViewHandlerRegistryListener
;
92 /** Registry of Logical Model View Handlers. */
93 private LogicalModelViewHandlerRegistry logicalModelViewHandlerRegistry
;
95 /** Listener for the model dependency provider extension point. */
96 private AbstractRegistryEventListener modelDependencyProviderRegistryListener
;
98 /** Registry of model dependency providers. */
99 private ModelDependencyProviderRegistry modelDependencyProviderRegistry
;
101 /** Registry for the model minimizers. */
102 private ModelMinimizerRegistry modelMinimizerRegistry
;
104 /** Listener for the model minimizers extension point. */
105 private ModelMinimizerRegistryListener modelMinimizerRegistryListener
;
107 /** Registry for the merge resolution listener extension point. */
108 private MergeResolutionListenerRegistry mergeResolutionListenerRegistry
;
110 /** Registry for the subscriber provider extension point. */
111 private SubscriberProviderRegistry subscriberProviderRegistry
;
113 /** Listener for the subscriber provider extension point. */
114 private SubscriberProviderRegistryListener subscriberProviderRegistryListener
;
116 /** Default constructor. */
117 public EMFCompareIDEUIPlugin() {
124 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
127 public void start(BundleContext context
) throws Exception
{
128 super.start(context
);
131 modelDependencyProviderRegistry
= new ModelDependencyProviderRegistry();
132 modelResolverRegistry
= new ModelResolverRegistry();
133 logicalModelViewHandlerRegistry
= new LogicalModelViewHandlerRegistry();
134 modelMinimizerRegistry
= new ModelMinimizerRegistry();
135 mergeResolutionListenerRegistry
= new MergeResolutionListenerRegistry();
136 subscriberProviderRegistry
= new SubscriberProviderRegistry();
138 final IExtensionRegistry globalRegistry
= Platform
.getExtensionRegistry();
140 modelDependencyProviderRegistryListener
= new ModelDependencyProviderRegistryListener(PLUGIN_ID
,
141 MODEL_DEPENDENCY_PROVIDER_PPID
, getLog(), modelDependencyProviderRegistry
);
142 globalRegistry
.addListener(modelDependencyProviderRegistryListener
);
143 modelDependencyProviderRegistryListener
.readRegistry(globalRegistry
);
145 modelResolverRegistryListener
= new ModelResolverRegistryListener(PLUGIN_ID
, MODEL_RESOLVER_PPID
,
146 getLog(), modelResolverRegistry
);
147 globalRegistry
.addListener(modelResolverRegistryListener
);
148 modelResolverRegistryListener
.readRegistry(globalRegistry
);
150 mergeResolutionListenerRegistryListener
= new MergeResolutionListenerRegistryListener(PLUGIN_ID
,
151 MERGE_RESOLUTION_PPID
, getLog(), mergeResolutionListenerRegistry
);
152 globalRegistry
.addListener(mergeResolutionListenerRegistryListener
);
153 mergeResolutionListenerRegistryListener
.readRegistry(globalRegistry
);
155 logicalModelViewHandlerRegistryListener
= new LogicalModelViewHandlerRegistryListener(PLUGIN_ID
,
156 LOGICAL_MODEL_VIEW_HANDLERS_PPID
, getLog(), logicalModelViewHandlerRegistry
);
157 globalRegistry
.addListener(logicalModelViewHandlerRegistryListener
);
158 logicalModelViewHandlerRegistryListener
.readRegistry(globalRegistry
);
160 modelMinimizerRegistryListener
= new ModelMinimizerRegistryListener(PLUGIN_ID
, MODEL_MINIMIZERS_PPID
,
161 getLog(), modelMinimizerRegistry
);
162 globalRegistry
.addListener(modelMinimizerRegistryListener
);
163 modelMinimizerRegistryListener
.readRegistry(globalRegistry
);
165 subscriberProviderRegistryListener
= new SubscriberProviderRegistryListener(PLUGIN_ID
,
166 SUBSCRIBER_PROVIDER_PPID
, getLog(), subscriberProviderRegistry
);
167 globalRegistry
.addListener(subscriberProviderRegistryListener
);
168 subscriberProviderRegistryListener
.readRegistry(globalRegistry
);
170 Platform
.getAdapterManager().registerAdapters(new PropertySheetAdapterFactory(), CompareEditor
.class);
176 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
179 public void stop(BundleContext context
) throws Exception
{
180 final IExtensionRegistry globalRegistry
= Platform
.getExtensionRegistry();
181 globalRegistry
.removeListener(logicalModelViewHandlerRegistryListener
);
182 logicalModelViewHandlerRegistry
.clear();
183 globalRegistry
.removeListener(modelResolverRegistryListener
);
184 modelResolverRegistry
.clear();
185 globalRegistry
.removeListener(modelDependencyProviderRegistryListener
);
186 modelDependencyProviderRegistry
.clear();
187 globalRegistry
.removeListener(subscriberProviderRegistryListener
);
188 subscriberProviderRegistry
.clear();
194 * Returns the shared instance.
196 * @return the shared instance.
198 public static EMFCompareIDEUIPlugin
getDefault() {
204 * returns a plugin image. The returned image does not need to be explicitly disposed.
208 * : plugin relative path to the image
209 * @return Image : plugin hosted image
211 public static Image
getImage(String imagePath
) {
212 Image image
= resourcesMapper
.get(imagePath
);
214 ImageDescriptor imageDescriptor
= imageDescriptorFromPlugin(PLUGIN_ID
, imagePath
);
215 image
= imageDescriptor
.createImage();
216 resourcesMapper
.put(imagePath
, image
);
223 * returns a plugin image descriptor.
227 * : plugin relative path to the image
228 * @return ImageDescriptor : image descriptor.
230 public static ImageDescriptor
getImageDescriptor(String imagePath
) {
231 return imageDescriptorFromPlugin(PLUGIN_ID
, imagePath
);
235 * Dispose image with the given id.
238 * : dispose system resources associated with the image with the given id.
240 public static void disposeImage(String id
) {
241 Image image
= resourcesMapper
.remove(id
);
248 * dispose system resources associated with cached images.
250 public static void disposeCachedImages() {
251 Iterator
<Image
> iterator
= resourcesMapper
.values().iterator();
252 while (iterator
.hasNext()) {
253 iterator
.next().dispose();
255 resourcesMapper
.clear();
259 * Returns the registry containing all known model resolvers.
261 * @return The registry containing all known model resolvers.
263 public ModelResolverRegistry
getModelResolverRegistry() {
264 return modelResolverRegistry
;
268 * Returns the registry containing all known Logical Model View handlers.
270 * @return The registry containing all known Logical Model View handlers.
272 public LogicalModelViewHandlerRegistry
getLogicalModelViewHandlerRegistry() {
273 return logicalModelViewHandlerRegistry
;
277 * Returns the registry containing all known model minimizers.
279 * @return The registry containing all known model minimiers.
281 public IModelMinimizer
.Registry
getModelMinimizerRegistry() {
282 return modelMinimizerRegistry
;
286 * Returns the registry containing all known dependency providers.
288 * @return The registry containing all known dependency providers.
290 public ModelDependencyProviderRegistry
getModelDependencyProviderRegistry() {
291 return modelDependencyProviderRegistry
;
295 * Returns the registry containing all known merge resolution listeners.
297 * @return the registry containing all known merge resolution listeners.
299 public MergeResolutionListenerRegistry
getMergeResolutionListenerRegistry() {
300 return mergeResolutionListenerRegistry
;
304 * Returns the registry containing all known subscriber providers.
306 * @return The registry containing all known subscriber providers.
308 public SubscriberProviderRegistry
getSubscriberProviderRegistry() {
309 return subscriberProviderRegistry
;
313 * Log an {@link Exception} in the {@link #getLog() current logger}.
316 * the exception to be logged.
318 public void log(Throwable e
) {
319 getLog().log(new Status(IStatus
.ERROR
, PLUGIN_ID
, e
.getMessage(), e
));
323 * Log the given message with the give severity level. Severity is one of {@link IStatus#INFO},
324 * {@link IStatus#WARNING} and {@link IStatus#ERROR}.
327 * the severity of the message
331 public void log(int severity
, String message
) {
332 getLog().log(new Status(severity
, PLUGIN_ID
, message
));