]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d/src/org/simantics/g3d/toolbar/ToolBarCommandRegistry.java
Copyrights
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / toolbar / ToolBarCommandRegistry.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.g3d.toolbar;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collections;\r
16 import java.util.List;\r
17 \r
18 import org.eclipse.core.runtime.IConfigurationElement;\r
19 import org.eclipse.core.runtime.IExtension;\r
20 import org.eclipse.core.runtime.IExtensionPoint;\r
21 import org.eclipse.core.runtime.Platform;\r
22 import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker;\r
23 import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler;\r
24 import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker;\r
25 import org.eclipse.core.runtime.dynamichelpers.IFilter;\r
26 import org.simantics.g3d.Activator;\r
27 \r
28 \r
29 \r
30 \r
31 \r
32 public class ToolBarCommandRegistry implements IExtensionChangeHandler {\r
33         private final static String NAMESPACE = Activator.PLUGIN_ID;\r
34 \r
35         private final static String EP_NAME = "toolbarCommand";\r
36         \r
37         private ExtensionTracker tracker;\r
38         \r
39         private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();\r
40         \r
41         \r
42         private static ToolBarCommandRegistry INSTANCE;\r
43         \r
44         public static synchronized ToolBarCommandRegistry getInstance() {\r
45                 if (INSTANCE == null)\r
46                         INSTANCE = new ToolBarCommandRegistry();\r
47                 return INSTANCE;\r
48         }\r
49         \r
50         public static synchronized void dispose() {\r
51                 if (INSTANCE != null) {\r
52                         INSTANCE.close();\r
53                         INSTANCE = null;\r
54                 }       \r
55         }\r
56         \r
57         public ToolBarCommandRegistry() {\r
58                 tracker = new ExtensionTracker();\r
59                 \r
60                 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);\r
61                 loadExtensions(ep.getConfigurationElements());\r
62                 \r
63                 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);\r
64                 tracker.registerHandler(this, filter);\r
65         }\r
66         \r
67         private void close() {\r
68                 tracker.close();\r
69                 tracker = null;\r
70                 extensions.clear();\r
71         }\r
72         \r
73         public synchronized List<ToolbarCommandExtension> getExtensions() {\r
74                 return Collections.unmodifiableList(extensions);\r
75         }\r
76         \r
77         private synchronized void loadExtensions(IConfigurationElement[] elements) {\r
78                 for (IConfigurationElement el : elements) {\r
79                         String commandId = el.getAttribute("commandId");\r
80                         \r
81                         ToolbarCommandExtension ext = new ToolbarCommandExtension(commandId);\r
82                         ext.toolbarId = el.getAttribute("toolbarId");\r
83                         ext.image = el.getAttribute("image");\r
84                         ext.name = el.getAttribute("name");\r
85                         ext.type = el.getAttribute("type");\r
86                         ext.value = el.getAttribute("value");\r
87                         ext.contributorId = el.getContributor().getName();\r
88                         tracker.registerObject(el.getDeclaringExtension(), ext, IExtensionTracker.REF_STRONG);\r
89                         extensions.add(ext);\r
90                         \r
91                 }\r
92         }\r
93         \r
94         @Override\r
95     public void addExtension(IExtensionTracker tracker, IExtension extension) {\r
96         loadExtensions(extension.getConfigurationElements());\r
97     }\r
98         \r
99         @Override\r
100         public synchronized void removeExtension(IExtension extension, Object[] objects) {\r
101                 for (Object o : objects) {\r
102                         ToolbarCommandExtension ext = (ToolbarCommandExtension) o;\r
103                         tracker.unregisterObject(extension, ext);\r
104                         extensions.remove(ext);\r
105                 }\r
106         }\r
107         \r
108         public synchronized List<ToolbarCommandExtension> getExtensions(String toolbarId) {\r
109                 List<ToolbarCommandExtension> list = new ArrayList<ToolbarCommandExtension>();\r
110                 for (ToolbarCommandExtension ext : extensions)\r
111                         if (ext.toolbarId.equals(toolbarId))\r
112                                 list.add(ext);\r
113                 return list;\r
114                 \r
115         }\r
116         \r
117         public class ToolbarCommandExtension {\r
118                 public String commandId;\r
119                 public String toolbarId;\r
120                 public String name;\r
121                 public String type;\r
122                 public String value;\r
123                 public String image;\r
124                 public String contributorId;\r
125                 public ToolbarCommandExtension(String commandId) {\r
126                         super();\r
127                         this.commandId = commandId;\r
128                 }\r
129                 \r
130                 @Override\r
131                 public String toString() {\r
132                         return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;\r
133                 }\r
134         }\r
135         \r
136         \r
137 }\r