]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/toolbar/ToolBarCommandRegistry.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / toolbar / ToolBarCommandRegistry.java
1 package org.simantics.ui.toolbar;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
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;
16
17
18
19
20
21 public class ToolBarCommandRegistry implements IExtensionChangeHandler {
22         private final static String NAMESPACE = Activator.PLUGIN_ID;
23
24         private final static String EP_NAME = "toolbarCommand";
25         
26         private ExtensionTracker tracker;
27         
28         private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();
29         
30         
31         private static ToolBarCommandRegistry INSTANCE;
32         
33         public static synchronized ToolBarCommandRegistry getInstance() {
34                 if (INSTANCE == null)
35                         INSTANCE = new ToolBarCommandRegistry();
36                 return INSTANCE;
37         }
38         
39         public static synchronized void dispose() {
40                 if (INSTANCE != null) {
41                         INSTANCE.close();
42                         INSTANCE = null;
43                 }       
44         }
45         
46         public ToolBarCommandRegistry() {
47                 tracker = new ExtensionTracker();
48                 
49                 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);
50                 loadExtensions(ep.getConfigurationElements());
51                 
52                 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);
53                 tracker.registerHandler(this, filter);
54         }
55         
56         private void close() {
57                 tracker.close();
58                 tracker = null;
59                 extensions.clear();
60         }
61         
62         public synchronized List<ToolbarCommandExtension> getExtensions() {
63                 return Collections.unmodifiableList(extensions);
64         }
65         
66         private synchronized void loadExtensions(IConfigurationElement[] elements) {
67                 for (IConfigurationElement el : elements) {
68                         String commandId = el.getAttribute("commandId");
69                         
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);
82                         }
83                         tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);
84                         extensions.add(ext);
85                         
86                 }
87         }
88         
89         @Override
90     public void addExtension(IExtensionTracker tracker, IExtension extension) {
91         loadExtensions(extension.getConfigurationElements());
92     }
93         
94         @Override
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);
100                 }
101         }
102         
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))
107                                 list.add(ext);
108                 return list;
109                 
110         }
111         
112         public class ToolbarCommandExtension {
113                 public String commandId;
114                 public String toolbarId;
115                 public String name;
116                 public String type;
117                 public String value;
118                 public String image;
119                 public String contributorId;
120                 public List<Parameter> parameters = new ArrayList<>();
121                 public ToolbarCommandExtension(String commandId) {
122                         super();
123                         this.commandId = commandId;
124                 }
125                 
126                 @Override
127                 public String toString() {
128                         return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;
129                 }
130         }
131         
132         public class Parameter {
133                 public String name;
134                 public String value;
135         }
136         
137         
138 }