1 package org.simantics.ui.toolbar;
3 import java.util.ArrayList;
4 import java.util.Collections;
7 import org.eclipse.core.runtime.IConfigurationElement;
8 import org.eclipse.core.runtime.IExtension;
9 import org.eclipse.core.runtime.IExtensionPoint;
10 import org.eclipse.core.runtime.Platform;
11 import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;
12 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;
13 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;
14 import org.eclipse.core.runtime.dynamichelpers.IFilter;
15 import org.simantics.ui.internal.Activator;
21 public class ToolBarCommandRegistry implements IExtensionChangeHandler {
22 private final static String NAMESPACE = Activator.PLUGIN_ID;
24 private final static String EP_NAME = "toolbarCommand";
26 private ExtensionTracker tracker;
28 private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();
31 private static ToolBarCommandRegistry INSTANCE;
33 public static synchronized ToolBarCommandRegistry getInstance() {
35 INSTANCE = new ToolBarCommandRegistry();
39 public static synchronized void dispose() {
40 if (INSTANCE != null) {
46 public ToolBarCommandRegistry() {
47 tracker = new ExtensionTracker();
49 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);
50 loadExtensions(ep.getConfigurationElements());
52 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);
53 tracker.registerHandler(this, filter);
56 private void close() {
62 public synchronized List<ToolbarCommandExtension> getExtensions() {
63 return Collections.unmodifiableList(extensions);
66 private synchronized void loadExtensions(IConfigurationElement[] elements) {
67 for (IConfigurationElement el : elements) {
68 String commandId = el.getAttribute("commandId");
70 ToolbarCommandExtension ext = new ToolbarCommandExtension(commandId);
71 ext.toolbarId = el.getAttribute("toolbarId");
72 ext.image = el.getAttribute("image");
73 ext.name = el.getAttribute("name");
74 ext.type = el.getAttribute("type");
75 ext.value = el.getAttribute("value");
76 ext.contributorId = el.getContributor().getName();
77 for (IConfigurationElement param : el.getChildren("parameter")) {
78 Parameter parameter = new Parameter();
79 parameter.name = param.getAttribute("name");
80 parameter.value = param.getAttribute("value");
81 ext.parameters.add(parameter);
83 tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);
90 public void addExtension(IExtensionTracker tracker, IExtension extension) {
91 loadExtensions(extension.getConfigurationElements());
95 public synchronized void removeExtension(IExtension extension, Object[] objects) {
96 for (Object o : objects) {
97 ToolbarCommandExtension ext = (ToolbarCommandExtension) o;
98 tracker.unregisterObject(extension, ext);
99 extensions.remove(ext);
103 public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {
104 List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();
105 for (ToolbarCommandExtension ext : extensions)
106 if (ext.toolbarId.equals(toolbarId))
112 public class ToolbarCommandExtension {
113 public String commandId;
114 public String toolbarId;
119 public String contributorId;
120 public List<Parameter> parameters = new ArrayList<>();
121 public ToolbarCommandExtension(String commandId) {
123 this.commandId = commandId;
127 public String toString() {
128 return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;
132 public class Parameter {