]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / toolbar / ToolBarCommandRegistry.java
diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java b/bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java
new file mode 100644 (file)
index 0000000..7287c5a
--- /dev/null
@@ -0,0 +1,126 @@
+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