]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java
7287c5ae3b3d2c3d52990219f5ff564ccb809ea0
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / toolbar / ToolBarCommandRegistry.java
1 package org.simantics.ui.toolbar;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \r
7 import org.eclipse.core.runtime.IConfigurationElement;\r
8 import org.eclipse.core.runtime.IExtension;\r
9 import org.eclipse.core.runtime.IExtensionPoint;\r
10 import org.eclipse.core.runtime.Platform;\r
11 import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;\r
12 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;\r
13 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;\r
14 import org.eclipse.core.runtime.dynamichelpers.IFilter;\r
15 import org.simantics.ui.internal.Activator;\r
16 \r
17 \r
18 \r
19 \r
20 \r
21 public class ToolBarCommandRegistry implements IExtensionChangeHandler {\r
22         private final static String NAMESPACE = Activator.PLUGIN_ID;\r
23 \r
24         private final static String EP_NAME = "toolbarCommand";\r
25         \r
26         private ExtensionTracker tracker;\r
27         \r
28         private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();\r
29         \r
30         \r
31         private static ToolBarCommandRegistry INSTANCE;\r
32         \r
33         public static synchronized ToolBarCommandRegistry getInstance() {\r
34                 if (INSTANCE == null)\r
35                         INSTANCE = new ToolBarCommandRegistry();\r
36                 return INSTANCE;\r
37         }\r
38         \r
39         public static synchronized void dispose() {\r
40                 if (INSTANCE != null) {\r
41                         INSTANCE.close();\r
42                         INSTANCE = null;\r
43                 }       \r
44         }\r
45         \r
46         public ToolBarCommandRegistry() {\r
47                 tracker = new ExtensionTracker();\r
48                 \r
49                 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);\r
50                 loadExtensions(ep.getConfigurationElements());\r
51                 \r
52                 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);\r
53                 tracker.registerHandler(this, filter);\r
54         }\r
55         \r
56         private void close() {\r
57                 tracker.close();\r
58                 tracker = null;\r
59                 extensions.clear();\r
60         }\r
61         \r
62         public synchronized List<ToolbarCommandExtension> getExtensions() {\r
63                 return Collections.unmodifiableList(extensions);\r
64         }\r
65         \r
66         private synchronized void loadExtensions(IConfigurationElement[] elements) {\r
67                 for (IConfigurationElement el : elements) {\r
68                         String commandId = el.getAttribute("commandId");\r
69                         \r
70                         ToolbarCommandExtension ext = new ToolbarCommandExtension(commandId);\r
71                         ext.toolbarId = el.getAttribute("toolbarId");\r
72                         ext.image = el.getAttribute("image");\r
73                         ext.name = el.getAttribute("name");\r
74                         ext.type = el.getAttribute("type");\r
75                         ext.value = el.getAttribute("value");\r
76                         ext.contributorId = el.getContributor().getName();\r
77                         tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);\r
78                         extensions.add(ext);\r
79                         \r
80                 }\r
81         }\r
82         \r
83         @Override\r
84     public void addExtension(IExtensionTracker tracker, IExtension extension) {\r
85         loadExtensions(extension.getConfigurationElements());\r
86     }\r
87         \r
88         @Override\r
89         public synchronized void removeExtension(IExtension extension, Object[] objects) {\r
90                 for (Object o : objects) {\r
91                         ToolbarCommandExtension ext = (ToolbarCommandExtension) o;\r
92                         tracker.unregisterObject(extension, ext);\r
93                         extensions.remove(ext);\r
94                 }\r
95         }\r
96         \r
97         public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {\r
98                 List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();\r
99                 for (ToolbarCommandExtension ext : extensions)\r
100                         if (ext.toolbarId.equals(toolbarId))\r
101                                 list.add(ext);\r
102                 return list;\r
103                 \r
104         }\r
105         \r
106         public class ToolbarCommandExtension {\r
107                 public String commandId;\r
108                 public String toolbarId;\r
109                 public String name;\r
110                 public String type;\r
111                 public String value;\r
112                 public String image;\r
113                 public String contributorId;\r
114                 public ToolbarCommandExtension(String commandId) {\r
115                         super();\r
116                         this.commandId = commandId;\r
117                 }\r
118                 \r
119                 @Override\r
120                 public String toString() {\r
121                         return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;\r
122                 }\r
123         }\r
124         \r
125         \r
126 }\r