Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-05-17 07:08:12 +0000
committerEike Stepper2015-05-17 07:08:12 +0000
commite993693885652bc67ae69ea1a4d9202123172f35 (patch)
treec1e00ff9d72fba78a1f9db9c9d18da55d564992a /plugins/org.eclipse.emf.cdo.ui
parent95d2be88f607c6b94bfaab37e988366e729b25c8 (diff)
downloadcdo-e993693885652bc67ae69ea1a4d9202123172f35.tar.gz
cdo-e993693885652bc67ae69ea1a4d9202123172f35.tar.xz
cdo-e993693885652bc67ae69ea1a4d9202123172f35.zip
[467442] Add Interactive Transaction Conflict Resolution
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=467442
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.ui')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/.project5
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/build.properties6
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/plugin.xml16
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/schema/editorOpeners.exsd139
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java27
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorOpener.java475
7 files changed, 653 insertions, 18 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/.project b/plugins/org.eclipse.emf.cdo.ui/.project
index f02e9d860a..662261f2be 100644
--- a/plugins/org.eclipse.emf.cdo.ui/.project
+++ b/plugins/org.eclipse.emf.cdo.ui/.project
@@ -15,6 +15,11 @@
<arguments>
</arguments>
</buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
<buildCommand>
<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
<arguments>
diff --git a/plugins/org.eclipse.emf.cdo.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.emf.cdo.ui/.settings/org.eclipse.core.resources.prefs
index 4f61cd36ae..b19315ec0a 100644
--- a/plugins/org.eclipse.emf.cdo.ui/.settings/org.eclipse.core.resources.prefs
+++ b/plugins/org.eclipse.emf.cdo.ui/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,2 @@
-#Mon Jul 04 13:02:52 CEST 2011
eclipse.preferences.version=1
-
+encoding//schema/editorOpeners.exsd=UTF-8
diff --git a/plugins/org.eclipse.emf.cdo.ui/build.properties b/plugins/org.eclipse.emf.cdo.ui/build.properties
index 4feac8c666..ba0d650b0c 100644
--- a/plugins/org.eclipse.emf.cdo.ui/build.properties
+++ b/plugins/org.eclipse.emf.cdo.ui/build.properties
@@ -18,10 +18,12 @@ bin.includes = META-INF/,\
model/,\
.options,\
about.html,\
- icons/
+ icons/,\
+ schema/
src.includes = about.html,\
CDOClient1.launch,\
- CDOClient2.launch
+ CDOClient2.launch,\
+ component.ext
doc.project = org.eclipse.emf.cdo.doc
diff --git a/plugins/org.eclipse.emf.cdo.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.ui/plugin.xml
index 3fe932e05c..935e547609 100644
--- a/plugins/org.eclipse.emf.cdo.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.ui/plugin.xml
@@ -14,10 +14,12 @@
<plugin>
- <extension
+ <extension-point id="editorOpeners" name="Editor Openers" schema="schema/editorOpeners.exsd"/>
+
+ <extension
point="org.eclipse.net4j.util.elementProcessors">
<elementProcessor class="org.eclipse.emf.cdo.ui.CDOInteractiveExceptionHandler"/>
- </extension>
+ </extension>
<extension
point="org.eclipse.net4j.util.factories">
@@ -95,14 +97,14 @@
</editor>
</extension>
- <extension
+ <extension
point="org.eclipse.ui.importWizards">
<category
id="org.eclipse.emf.cdo.category"
name="CDO">
</category>
</extension>
-
+
<extension
point="org.eclipse.ui.newWizards">
<category
@@ -215,7 +217,7 @@
</filesystem>
</extension>
-->
-
+
<extension
point="org.eclipse.ui.editors.documentProviders">
<provider
@@ -317,7 +319,7 @@
</enablement>
</objectContribution>
</extension-->
-
+
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
adaptable="true"
@@ -334,7 +336,7 @@
</action>
</objectContribution>
</extension>
-
+
<extension point="org.eclipse.ui.commands">
<command
id="org.eclipse.emf.cdo.ui.CreateBranch"
diff --git a/plugins/org.eclipse.emf.cdo.ui/schema/editorOpeners.exsd b/plugins/org.eclipse.emf.cdo.ui/schema/editorOpeners.exsd
new file mode 100644
index 0000000000..0257f98f5a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/schema/editorOpeners.exsd
@@ -0,0 +1,139 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.emf.cdo.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.emf.cdo.ui" id="editorOpeners" name="Editor Openers"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="editorOpener"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="editorOpener">
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="icon" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="resource"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="regex" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string" use="default" value="500">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.emf.cdo.ui.CDOEditorOpener"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
index 4c8e745c1d..bdbf740b46 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
@@ -11,6 +11,7 @@
*/
package org.eclipse.emf.cdo.internal.ui.bundle;
+import org.eclipse.emf.cdo.ui.CDOEditorOpener;
import org.eclipse.emf.cdo.ui.CDOLabelDecorator;
import org.eclipse.emf.cdo.ui.OverlayImage;
@@ -49,25 +50,25 @@ public abstract class OM
public static final OMPreferences PREFS = BUNDLE.preferences();
public static final OMPreference<String> PREF_LABEL_DECORATION = //
- PREFS.init("PREF_LABEL_DECORATION", CDOLabelDecorator.DEFAULT_DECORATION); //$NON-NLS-1$
+ PREFS.init("PREF_LABEL_DECORATION", CDOLabelDecorator.DEFAULT_DECORATION); //$NON-NLS-1$
public static final OMPreference<String[]> PREF_HISTORY_SELECT_PACKAGES = //
- PREFS.initArray("PREF_HISTORY_SELECT_PACKAGES"); //$NON-NLS-1$
+ PREFS.initArray("PREF_HISTORY_SELECT_PACKAGES"); //$NON-NLS-1$
public static final OMPreference<String[]> PREF_HISTORY_CONNECTORS = //
- PREFS.init("PREF_HISTORY_CONNECTORS", new String[] { "tcp://localhost" }); //$NON-NLS-1$
+ PREFS.init("PREF_HISTORY_CONNECTORS", new String[] { "tcp://localhost" }); //$NON-NLS-1$
public static final OMPreference<String[]> PREF_HISTORY_REPOSITORIES = //
- PREFS.init("PREF_HISTORY_REPOSITORIES", new String[] { "repo1" }); //$NON-NLS-1$
+ PREFS.init("PREF_HISTORY_REPOSITORIES", new String[] { "repo1" }); //$NON-NLS-1$
public static final OMPreference<Boolean> PREF_AUTOMATIC_PACKAGE_REGISTRY = //
- PREFS.init("PREF_AUTOMATIC_PACKAGE_REGISTRY", true); //$NON-NLS-1$
+ PREFS.init("PREF_AUTOMATIC_PACKAGE_REGISTRY", true); //$NON-NLS-1$
public static final OMPreference<Boolean> PREF_LEGACY_MODE_DEFAULT = //
- PREFS.init("PREF_LEGACY_MODE_DEFAULT", true); //$NON-NLS-1$
+ PREFS.init("PREF_LEGACY_MODE_DEFAULT", true); //$NON-NLS-1$
public static final OMPreference<Boolean> PREF_EDITOR_AUTO_RELOAD = //
- PREFS.init("PREF_EDITOR_AUTO_RELOAD", true); //$NON-NLS-1$
+ PREFS.init("PREF_EDITOR_AUTO_RELOAD", true); //$NON-NLS-1$
public static Image getOverlayImage(Object image, Object overlayImage, int x, int y)
{
@@ -102,5 +103,17 @@ public abstract class OM
super(BUNDLE);
INSTANCE = this;
}
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ CDOEditorOpener.Registry.INSTANCE.activate();
+ }
+
+ @Override
+ protected void doStop() throws Exception
+ {
+ CDOEditorOpener.Registry.INSTANCE.deactivate();
+ }
}
}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorOpener.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorOpener.java
new file mode 100644
index 0000000000..f0ac5cfad3
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorOpener.java
@@ -0,0 +1,475 @@
+/*
+ * Copyright (c) 2009, 2011, 2012 Eike Stepper (Berlin, Germany) 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.ui;
+
+import org.eclipse.emf.cdo.internal.ui.bundle.OM;
+
+import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.container.Container;
+import org.eclipse.net4j.util.om.OMPlatform;
+
+import org.eclipse.emf.common.util.URI;
+
+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.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Eike Stepper
+ * @since 4.4
+ */
+public interface CDOEditorOpener
+{
+ public static final int DEFAULT_PRIORITY = 500;
+
+ public String getID();
+
+ public String getName();
+
+ public ImageDescriptor getIcon();
+
+ /**
+ * Returns the priority of this editor opener. Usually used to choose between several editor openers that
+ * match the same repository URI.
+ */
+ public int getPriority();
+
+ /**
+ * Returns the regular expression that determines if the editor opener can open a certain URI.
+ */
+ public String getRegex();
+
+ /**
+ * Checks if the URI matches the regular expression of this editor opener.
+ */
+ public boolean matchesRegex(URI uri);
+
+ public IEditorPart openEditor(IWorkbenchPage page, URI uri);
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class Default implements CDOEditorOpener
+ {
+ private String id;
+
+ private String name;
+
+ private ImageDescriptor icon;
+
+ private String regex;
+
+ private int priority = DEFAULT_PRIORITY;
+
+ @ExcludeFromDump
+ private transient Pattern pattern;
+
+ public Default()
+ {
+ }
+
+ public Default(String id, String name, ImageDescriptor icon, String regex, int priority)
+ {
+ this.id = id;
+ this.name = name;
+ this.icon = icon;
+ this.regex = regex;
+ this.priority = priority;
+ }
+
+ public String getID()
+ {
+ return id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public ImageDescriptor getIcon()
+ {
+ return icon;
+ }
+
+ public final int getPriority()
+ {
+ return priority;
+ }
+
+ public final String getRegex()
+ {
+ return regex;
+ }
+
+ public final boolean matchesRegex(URI uri)
+ {
+ synchronized (regex)
+ {
+ if (pattern == null)
+ {
+ pattern = Pattern.compile(regex);
+ }
+ }
+
+ Matcher matcher = pattern.matcher(uri.toString());
+ return matcher.matches();
+ }
+
+ public IEditorPart openEditor(final IWorkbenchPage page, URI uri)
+ {
+ final Set<IEditorPart> editors = new HashSet<IEditorPart>();
+ final IEditorPart[] editor = { null };
+
+ IPartListener partListener = new IPartListener()
+ {
+ public void partClosed(IWorkbenchPart part)
+ {
+ if (part == editor[0])
+ {
+ try
+ {
+ // view.close();
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ finally
+ {
+ page.removePartListener(this);
+ }
+ }
+ }
+
+ public void partOpened(IWorkbenchPart part)
+ {
+ // Do nothing.
+ }
+
+ public void partDeactivated(IWorkbenchPart part)
+ {
+ // Do nothing.
+ }
+
+ public void partBroughtToTop(IWorkbenchPart part)
+ {
+ // Do nothing.
+ }
+
+ public void partActivated(IWorkbenchPart part)
+ {
+ // Do nothing.
+ }
+ };
+
+ page.addPartListener(partListener);
+ editor[0] = doOpenEditor(page, uri);
+
+ if (!editors.contains(editor))
+ {
+ // The editor must have been open already and someone else will handle close.
+ page.removePartListener(partListener);
+ }
+
+ return editor[0];
+ }
+
+ protected abstract IEditorPart doOpenEditor(IWorkbenchPage page, URI uri);
+
+ @Override
+ public String toString()
+ {
+ return id + "[" + regex + "]";
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ * @since 4.4
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+ public static class Registry extends Container<CDOEditorOpener>
+ {
+ public static final Registry INSTANCE = new Registry();
+
+ private static final String EXT_POINT = "editorOpeners"; //$NON-NLS-1$
+
+ private final Map<String, CDOEditorOpener> editorOpeners = new HashMap<String, CDOEditorOpener>();
+
+ public Registry()
+ {
+ }
+
+ public IEditorPart openEditor(IWorkbenchPage page, URI uri)
+ {
+ if (uri == null)
+ {
+ return null;
+ }
+
+ for (CDOEditorOpener editorOpener : getEditorOpeners(uri))
+ {
+ IEditorPart editor = editorOpener.openEditor(page, uri);
+ if (editor != null)
+ {
+ return editor;
+ }
+ }
+
+ return null;
+ }
+
+ public CDOEditorOpener getEditorOpener(String id)
+ {
+ synchronized (editorOpeners)
+ {
+ return editorOpeners.get(id);
+ }
+ }
+
+ public CDOEditorOpener[] getEditorOpeners(URI uri)
+ {
+ List<CDOEditorOpener> result = new ArrayList<CDOEditorOpener>();
+
+ synchronized (editorOpeners)
+ {
+ for (CDOEditorOpener editorOpener : editorOpeners.values())
+ {
+ if (editorOpener.matchesRegex(uri))
+ {
+ result.add(editorOpener);
+ }
+ }
+ }
+
+ // Sort highest priority first
+ Collections.sort(result, new Comparator<CDOEditorOpener>()
+ {
+ public int compare(CDOEditorOpener o1, CDOEditorOpener o2)
+ {
+ return -Integer.valueOf(o1.getPriority()).compareTo(o2.getPriority());
+ }
+ });
+
+ return result.toArray(new CDOEditorOpener[result.size()]);
+ }
+
+ public void addEditorOpener(CDOEditorOpener editorOpener)
+ {
+ boolean added;
+ synchronized (editorOpeners)
+ {
+ String id = editorOpener.getID();
+ added = !editorOpeners.containsKey(id);
+ if (added)
+ {
+ editorOpeners.put(id, editorOpener);
+ }
+ }
+
+ if (added)
+ {
+ fireElementAddedEvent(editorOpener);
+ }
+ }
+
+ public void removeEditorOpener(CDOEditorOpener editorOpener)
+ {
+ boolean removed;
+ synchronized (editorOpeners)
+ {
+ String id = editorOpener.getID();
+ removed = editorOpeners.remove(id) != null;
+ }
+
+ if (removed)
+ {
+ fireElementRemovedEvent(editorOpener);
+ }
+ }
+
+ public CDOEditorOpener[] getElements()
+ {
+ synchronized (editorOpeners)
+ {
+ return editorOpeners.values().toArray(new CDOEditorOpener[editorOpeners.size()]);
+ }
+ }
+
+ @Override
+ public boolean isEmpty()
+ {
+ synchronized (editorOpeners)
+ {
+ return editorOpeners.isEmpty();
+ }
+ }
+
+ @Override
+ protected void doActivate() throws Exception
+ {
+ super.doActivate();
+ if (OMPlatform.INSTANCE.isOSGiRunning())
+ {
+ try
+ {
+ readExtensions();
+ }
+ catch (Throwable t)
+ {
+ OM.LOG.error(t);
+ }
+ }
+ }
+
+ public void readExtensions()
+ {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IConfigurationElement[] configurationElements = registry.getConfigurationElementsFor(OM.BUNDLE_ID, EXT_POINT);
+ for (IConfigurationElement element : configurationElements)
+ {
+ try
+ {
+ EditorOpenerDescriptor descriptor = new EditorOpenerDescriptor(element);
+ addEditorOpener(descriptor);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class EditorOpenerDescriptor extends CDOEditorOpener.Default
+ {
+ private IConfigurationElement element;
+
+ public EditorOpenerDescriptor(IConfigurationElement element)
+ {
+ super(getID(element), getName(element), getIcon(element), getRegex(element), getPriority(element));
+ this.element = element;
+
+ if (StringUtil.isEmpty(element.getAttribute("class"))) //$NON-NLS-1$
+ {
+ throw new IllegalArgumentException(MessageFormat.format("Class not defined for extension {0}", element)); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ protected IEditorPart doOpenEditor(IWorkbenchPage page, URI uri)
+ {
+ return getEditorOpener().openEditor(page, uri);
+ }
+
+ private CDOEditorOpener getEditorOpener()
+ {
+ try
+ {
+ return (CDOEditorOpener)element.createExecutableExtension("class"); //$NON-NLS-1$
+ }
+ catch (CoreException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ private static String getID(IConfigurationElement element)
+ {
+ String value = element.getAttribute("id"); //$NON-NLS-1$
+ if (StringUtil.isEmpty(value))
+ {
+ throw new IllegalArgumentException(MessageFormat.format("ID not defined for extension {0}", element)); //$NON-NLS-1$
+ }
+
+ return value;
+ }
+
+ private static String getName(IConfigurationElement element)
+ {
+ String value = element.getAttribute("name"); //$NON-NLS-1$
+ if (StringUtil.isEmpty(value))
+ {
+ throw new IllegalArgumentException(MessageFormat.format("Name not defined for extension {0}", element)); //$NON-NLS-1$
+ }
+
+ return value;
+ }
+
+ private static ImageDescriptor getIcon(IConfigurationElement element)
+ {
+ String icon = element.getAttribute("icon"); //$NON-NLS-1$
+ if (icon != null)
+ {
+ try
+ {
+ return AbstractUIPlugin.imageDescriptorFromPlugin(element.getNamespaceIdentifier(), icon);
+ }
+ catch (Exception ex)
+ {
+ //$FALL-THROUGH$
+ }
+ }
+
+ return null;
+ }
+
+ private static String getRegex(IConfigurationElement element)
+ {
+ String value = element.getAttribute("regex"); //$NON-NLS-1$
+ if (StringUtil.isEmpty(value))
+ {
+ throw new IllegalArgumentException(MessageFormat.format("Regex not defined for extension {0}", element)); //$NON-NLS-1$
+ }
+
+ return value;
+ }
+
+ private static int getPriority(IConfigurationElement element)
+ {
+ try
+ {
+ String value = element.getAttribute("priority"); //$NON-NLS-1$
+ return Integer.parseInt(value);
+ }
+ catch (Exception ex)
+ {
+ return DEFAULT_PRIORITY;
+ }
+ }
+ }
+ }
+}

Back to the top