]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java
Sync git svn branch with SVN repository r33198.
[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                         for (IConfigurationElement param : el.getChildren("parameter")) {\r
78                                 Parameter parameter = new Parameter();\r
79                                 parameter.name = param.getAttribute("name");\r
80                                 parameter.value = param.getAttribute("value");\r
81                                 ext.parameters.add(parameter);\r
82                         }\r
83                         tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);\r
84                         extensions.add(ext);\r
85                         \r
86                 }\r
87         }\r
88         \r
89         @Override\r
90     public void addExtension(IExtensionTracker tracker, IExtension extension) {\r
91         loadExtensions(extension.getConfigurationElements());\r
92     }\r
93         \r
94         @Override\r
95         public synchronized void removeExtension(IExtension extension, Object[] objects) {\r
96                 for (Object o : objects) {\r
97                         ToolbarCommandExtension ext = (ToolbarCommandExtension) o;\r
98                         tracker.unregisterObject(extension, ext);\r
99                         extensions.remove(ext);\r
100                 }\r
101         }\r
102         \r
103         public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {\r
104                 List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();\r
105                 for (ToolbarCommandExtension ext : extensions)\r
106                         if (ext.toolbarId.equals(toolbarId))\r
107                                 list.add(ext);\r
108                 return list;\r
109                 \r
110         }\r
111         \r
112         public class ToolbarCommandExtension {\r
113                 public String commandId;\r
114                 public String toolbarId;\r
115                 public String name;\r
116                 public String type;\r
117                 public String value;\r
118                 public String image;\r
119                 public String contributorId;\r
120                 public List<Parameter> parameters = new ArrayList<>();\r
121                 public ToolbarCommandExtension(String commandId) {\r
122                         super();\r
123                         this.commandId = commandId;\r
124                 }\r
125                 \r
126                 @Override\r
127                 public String toString() {\r
128                         return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;\r
129                 }\r
130         }\r
131         \r
132         public class Parameter {\r
133                 public String name;\r
134                 public String value;\r
135         }\r
136         \r
137         \r
138 }\r