1 /*******************************************************************************
\r
2 * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g3d.toolbar;
\r
14 import java.util.ArrayList;
\r
15 import java.util.Collections;
\r
16 import java.util.List;
\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
32 public class ToolBarCommandRegistry implements IExtensionChangeHandler {
\r
33 private final static String NAMESPACE = Activator.PLUGIN_ID;
\r
35 private final static String EP_NAME = "toolbarCommand";
\r
37 private ExtensionTracker tracker;
\r
39 private List<ToolbarCommandExtension> extensions = new ArrayList<ToolbarCommandExtension>();
\r
42 private static ToolBarCommandRegistry INSTANCE;
\r
44 public static synchronized ToolBarCommandRegistry getInstance() {
\r
45 if (INSTANCE == null)
\r
46 INSTANCE = new ToolBarCommandRegistry();
\r
50 public static synchronized void dispose() {
\r
51 if (INSTANCE != null) {
\r
57 public ToolBarCommandRegistry() {
\r
58 tracker = new ExtensionTracker();
\r
60 IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(NAMESPACE,EP_NAME);
\r
61 loadExtensions(ep.getConfigurationElements());
\r
63 IFilter filter = ExtensionTracker.createExtensionPointFilter(ep);
\r
64 tracker.registerHandler(this, filter);
\r
67 private void close() {
\r
73 public synchronized List<ToolbarCommandExtension> getExtensions() {
\r
74 return Collections.unmodifiableList(extensions);
\r
77 private synchronized void loadExtensions(IConfigurationElement[] elements) {
\r
78 for (IConfigurationElement el : elements) {
\r
79 String commandId = el.getAttribute("commandId");
\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
95 public void addExtension(IExtensionTracker tracker, IExtension extension) {
\r
96 loadExtensions(extension.getConfigurationElements());
\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
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
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
127 this.commandId = commandId;
\r
131 public String toString() {
\r
132 return "ToolbarCommandExtension, commandId= " + commandId + " toolbarId= " + toolbarId + " type= " + type + " value= " + value + " contributor= " + contributorId;
\r