--- /dev/null
+package org.simantics.ui.toolbar;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.runtime.IConfigurationElement;\r
+import org.eclipse.core.runtime.IExtension;\r
+import org.eclipse.core.runtime.IExtensionPoint;\r
+import org.eclipse.core.runtime.Platform;\r
+import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;\r
+import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;\r
+import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;\r
+import org.eclipse.core.runtime.dynamichelpers.IFilter;\r
+import org.simantics.ui.internal.Activator;\r
+\r
+\r
+\r
+\r
+\r
+public class ToolBarCommandRegistry implements IExtensionChangeHandler {\r
+ private final static String NAMESPACE = Activator.PLUGIN_ID;\r
+\r
+ private final static String EP_NAME = "toolbarCommand";\r
+ \r
+ private ExtensionTracker tracker;\r
+ \r
+ private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();\r
+ \r
+ \r
+ private static ToolBarCommandRegistry INSTANCE;\r
+ \r
+ public static synchronized ToolBarCommandRegistry getInstance() {\r
+ if (INSTANCE == null)\r
+ INSTANCE = new ToolBarCommandRegistry();\r
+ return INSTANCE;\r
+ }\r
+ \r
+ public static synchronized void dispose() {\r
+ if (INSTANCE != null) {\r
+ INSTANCE.close();\r
+ INSTANCE = null;\r
+ } \r
+ }\r
+ \r
+ public ToolBarCommandRegistry() {\r
+ tracker = new ExtensionTracker();\r
+ \r
+ IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);\r
+ loadExtensions(ep.getConfigurationElements());\r
+ \r
+ IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);\r
+ tracker.registerHandler(this, filter);\r
+ }\r
+ \r
+ private void close() {\r
+ tracker.close();\r
+ tracker = null;\r
+ extensions.clear();\r
+ }\r
+ \r
+ public synchronized List<ToolbarCommandExtension> getExtensions() {\r
+ return Collections.unmodifiableList(extensions);\r
+ }\r
+ \r
+ private synchronized void loadExtensions(IConfigurationElement[] elements) {\r
+ for (IConfigurationElement el : elements) {\r
+ String commandId = el.getAttribute("commandId");\r
+ \r
+ ToolbarCommandExtension ext = new ToolbarCommandExtension(commandId);\r
+ ext.toolbarId = el.getAttribute("toolbarId");\r
+ ext.image = el.getAttribute("image");\r
+ ext.name = el.getAttribute("name");\r
+ ext.type = el.getAttribute("type");\r
+ ext.value = el.getAttribute("value");\r
+ ext.contributorId = el.getContributor().getName();\r
+ tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);\r
+ extensions.add(ext);\r
+ \r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void addExtension(IExtensionTracker tracker, IExtension extension) {\r
+ loadExtensions(extension.getConfigurationElements());\r
+ }\r
+ \r
+ @Override\r
+ public synchronized void removeExtension(IExtension extension, Object[] objects) {\r
+ for (Object o : objects) {\r
+ ToolbarCommandExtension ext = (ToolbarCommandExtension) o;\r
+ tracker.unregisterObject(extension, ext);\r
+ extensions.remove(ext);\r
+ }\r
+ }\r
+ \r
+ public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {\r
+ List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();\r
+ for (ToolbarCommandExtension ext : extensions)\r
+ if (ext.toolbarId.equals(toolbarId))\r
+ list.add(ext);\r
+ return list;\r
+ \r
+ }\r
+ \r
+ public class ToolbarCommandExtension {\r
+ public String commandId;\r
+ public String toolbarId;\r
+ public String name;\r
+ public String type;\r
+ public String value;\r
+ public String image;\r
+ public String contributorId;\r
+ public ToolbarCommandExtension(String commandId) {\r
+ super();\r
+ this.commandId = commandId;\r
+ }\r
+ \r
+ @Override\r
+ public String toString() {\r
+ return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;\r
+ }\r
+ }\r
+ \r
+ \r
+}\r