Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/facet/org.eclipse.papyrus.emf.facet.util.emf.core/src/org/eclipse/emf/facet/util/emf/core/internal/registry/BrowserRegistry.java')
-rw-r--r--plugins/facet/org.eclipse.papyrus.emf.facet.util.emf.core/src/org/eclipse/emf/facet/util/emf/core/internal/registry/BrowserRegistry.java212
1 files changed, 212 insertions, 0 deletions
diff --git a/plugins/facet/org.eclipse.papyrus.emf.facet.util.emf.core/src/org/eclipse/emf/facet/util/emf/core/internal/registry/BrowserRegistry.java b/plugins/facet/org.eclipse.papyrus.emf.facet.util.emf.core/src/org/eclipse/emf/facet/util/emf/core/internal/registry/BrowserRegistry.java
new file mode 100644
index 00000000000..d3748194ac3
--- /dev/null
+++ b/plugins/facet/org.eclipse.papyrus.emf.facet.util.emf.core/src/org/eclipse/emf/facet/util/emf/core/internal/registry/BrowserRegistry.java
@@ -0,0 +1,212 @@
+/**********************************************************************************
+ * Copyright (c) 2011 Mia-Software.
+ * 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:
+ * Nicolas Guyomar (Mia-Software) - Bug 333652 Extension point offering the possibility to declare an EPackage browser
+ * Nicolas Bros (Mia-Software) - Bug 335218 - Extension point for registering EObject, EPackage, model editor
+ * Laurent Pichierri (Soft-Maint) - Bug 371204 - Compatibility with Helios
+ ***********************************************************************************/
+package org.eclipse.emf.facet.util.emf.core.internal.registry;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.facet.util.core.Logger;
+import org.eclipse.emf.facet.util.emf.core.IBrowserRegistry;
+import org.eclipse.emf.facet.util.emf.core.IEObjectBrowserOpener;
+import org.eclipse.emf.facet.util.emf.core.IEPackageBrowserOpener;
+import org.eclipse.emf.facet.util.emf.core.IResourceBrowserOpener;
+import org.eclipse.emf.facet.util.emf.core.internal.Activator;
+import org.eclipse.emf.facet.util.emf.core.internal.preferences.PreferenceConstants;
+
+/** A registry for the EObject, EPackage, and Resource browser opener extension point. */
+public class BrowserRegistry implements IBrowserRegistry {
+
+ private static final String EXTENSION_POINT_RESOURCE_VIEWER_ELT = "resourceViewer"; //$NON-NLS-1$
+ private static final String EXTENSION_POINT_EOBJECT_VIEWER_ELT = "eObjectViewer"; //$NON-NLS-1$
+ private static final String EXTENSION_POINT_EPACKAGE_VIEWER_ELT = "ePackageViewer"; //$NON-NLS-1$
+ private final List<IEPackageBrowserOpener> epackageBrowserOpeners;
+ private final List<IEObjectBrowserOpener> eobjectBrowserOpeners;
+ private final List<IResourceBrowserOpener> resourceBrowserOpeners;
+
+ public static final String EXTENSION_POINT_MODEL_VIEWER_ID = "org.eclipse.emf.facet.util.emf.core.modelViewer"; //$NON-NLS-1$
+
+ public static final String CLASS = "class"; //$NON-NLS-1$
+
+ public BrowserRegistry() {
+ this.epackageBrowserOpeners = new ArrayList<IEPackageBrowserOpener>();
+ this.eobjectBrowserOpeners = new ArrayList<IEObjectBrowserOpener>();
+ this.resourceBrowserOpeners = new ArrayList<IResourceBrowserOpener>();
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint extensionPoint = registry
+ .getExtensionPoint(BrowserRegistry.EXTENSION_POINT_MODEL_VIEWER_ID);
+ if (extensionPoint != null) {
+ for (IExtension ext : extensionPoint.getExtensions()) {
+ for (IConfigurationElement configElt : ext.getConfigurationElements()) {
+
+ String kind = configElt.getName();
+ String classID = configElt.getAttribute(BrowserRegistry.CLASS);
+ try {
+ if (classID != null) {
+ if (kind.equals(BrowserRegistry.EXTENSION_POINT_EPACKAGE_VIEWER_ELT)) {
+ this.epackageBrowserOpeners.add((IEPackageBrowserOpener) configElt
+ .createExecutableExtension(BrowserRegistry.CLASS));
+ } else if (kind
+ .equals(BrowserRegistry.EXTENSION_POINT_EOBJECT_VIEWER_ELT)) {
+ this.eobjectBrowserOpeners.add((IEObjectBrowserOpener) configElt
+ .createExecutableExtension(BrowserRegistry.CLASS));
+ } else if (kind
+ .equals(BrowserRegistry.EXTENSION_POINT_RESOURCE_VIEWER_ELT)) {
+ this.resourceBrowserOpeners.add((IResourceBrowserOpener) configElt
+ .createExecutableExtension(BrowserRegistry.CLASS));
+ }
+ }
+ } catch (CoreException e) {
+ Logger.logError(e, Activator.getDefault());
+ }
+ }
+ }
+ } else {
+ Logger.logError(
+ "Extension point not found: " + BrowserRegistry.EXTENSION_POINT_MODEL_VIEWER_ID, //$NON-NLS-1$
+ Activator.getDefault());
+ }
+ }
+
+ public void browseEPackage(final EPackage ePackage) {
+ if (ePackage == null) {
+ throw new IllegalArgumentException();
+ }
+ IEPackageBrowserOpener opener = getDefaultEPackageBrowserOpener();
+ if (opener != null) {
+ opener.openEPackage(ePackage);
+ } else {
+ Logger.logWarning(
+ "No epackage browser opener is registered to open ePackage " + ePackage.getNsURI(), Activator.getDefault()); //$NON-NLS-1$
+ }
+ }
+
+ public void browseResource(final Resource resource) {
+ if (resource == null) {
+ throw new IllegalArgumentException();
+ }
+ IResourceBrowserOpener opener = getDefaultResourceBrowserOpener();
+ if (opener != null) {
+ opener.openResource(resource);
+ } else {
+ Logger.logWarning(
+ "No resource browser opener is registered to open " + resource.getURI(), Activator.getDefault()); //$NON-NLS-1$
+ }
+ }
+
+ public void browseEObject(final EObject eObject) {
+ if (eObject == null) {
+ throw new IllegalArgumentException();
+ }
+ IEObjectBrowserOpener opener = getDefaultEObjectBrowserOpener();
+ if (opener != null) {
+ opener.openEObject(eObject);
+ } else {
+ Logger.logWarning(
+ "No eobject browser opener is registered to open " + eObject.toString(), Activator.getDefault()); //$NON-NLS-1$
+ }
+ }
+
+ public List<IEPackageBrowserOpener> getAllRegisteredEPackageBrowsers() {
+ return Collections.unmodifiableList(this.epackageBrowserOpeners);
+ }
+
+ public List<IEObjectBrowserOpener> getAllRegisteredEObjectBrowsers() {
+ return Collections.unmodifiableList(this.eobjectBrowserOpeners);
+ }
+
+ public List<IResourceBrowserOpener> getAllRegisteredResourceBrowsers() {
+ return Collections.unmodifiableList(this.resourceBrowserOpeners);
+ }
+
+ /**
+ * @return the default EPackage browser opener, can be null
+ */
+ public IEPackageBrowserOpener getDefaultEPackageBrowserOpener() {
+ IEclipsePreferences preferenceNode = new InstanceScope().getNode(Activator.PLUGIN_ID);
+ String className = preferenceNode.get(PreferenceConstants.P_DEFAULT_EPACKAGE_VIEWER, null);
+ if (className != null) {
+ for (IEPackageBrowserOpener ePackageBrowserFactory : this.epackageBrowserOpeners) {
+ if (ePackageBrowserFactory.getClass().getName().equals(className)) {
+ return ePackageBrowserFactory;
+ }
+ }
+ }
+ // By default return the first editor registered through the extension
+ // point org.eclipse.emf.facet.util.emf.core.modelViewer
+ if (!this.epackageBrowserOpeners.isEmpty()) {
+ return this.epackageBrowserOpeners.get(0);
+ }
+
+ return null;
+
+ }
+
+ /**
+ * @return the default EObject browser opener, can be null
+ */
+ public IEObjectBrowserOpener getDefaultEObjectBrowserOpener() {
+ IEclipsePreferences preferenceNode = new InstanceScope().getNode(Activator.PLUGIN_ID);
+ String className = preferenceNode.get(PreferenceConstants.P_DEFAULT_EOBJECT_VIEWER, null);
+ if (className != null) {
+ for (IEObjectBrowserOpener eObjectBrowserFactory : this.eobjectBrowserOpeners) {
+ if (eObjectBrowserFactory.getClass().getName().equals(className)) {
+ return eObjectBrowserFactory;
+ }
+ }
+ }
+ // By default return the first editor registered through the extension
+ // point org.eclipse.emf.facet.util.emf.core.modelViewer
+ if (!this.eobjectBrowserOpeners.isEmpty()) {
+ return this.eobjectBrowserOpeners.get(0);
+ }
+
+ return null;
+
+ }
+
+ /**
+ * @return the default Resource browser opener, can be <code>null</code>
+ */
+ public IResourceBrowserOpener getDefaultResourceBrowserOpener() {
+ IEclipsePreferences preferenceNode = new InstanceScope().getNode(Activator.PLUGIN_ID);
+ String className = preferenceNode.get(PreferenceConstants.P_DEFAULT_RESOURCE_VIEWER, null);
+ if (className != null) {
+ for (IResourceBrowserOpener resourceBrowserOpener : this.resourceBrowserOpeners) {
+ if (resourceBrowserOpener.getClass().getName().equals(className)) {
+ return resourceBrowserOpener;
+ }
+ }
+ }
+ // By default return the first editor registered through the extension
+ // point org.eclipse.emf.facet.util.emf.core.modelViewer
+ if (!this.resourceBrowserOpeners.isEmpty()) {
+ return this.resourceBrowserOpeners.get(0);
+ }
+
+ return null;
+ }
+
+}

Back to the top