| package org.eclipse.dltk.tcl.internal.parser.ext; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.dltk.core.DLTKCore; |
| import org.eclipse.dltk.core.PriorityDLTKExtensionManager; |
| import org.eclipse.dltk.core.SimpleClassNewInstanceDLTKExtensionManager; |
| import org.eclipse.dltk.core.SimpleDLTKExtensionManager.ElementInfo; |
| import org.eclipse.dltk.tcl.core.ITclCommandDetector; |
| import org.eclipse.dltk.tcl.core.ITclCommandProcessor; |
| import org.eclipse.dltk.tcl.core.TclPlugin; |
| |
| public class CommandManager { |
| private static final String ID_ATTR = "id"; |
| private static final String EXTENSION_PROCESSOR = TclPlugin.PLUGIN_ID |
| + ".tclCommandProcessor"; |
| private static final String EXTENSION_DETECTOR = TclPlugin.PLUGIN_ID |
| + ".tclCommandDetector"; |
| private static final String CLASS_ATTR = "class"; |
| |
| private static class SimpleExtensionManager |
| extends PriorityDLTKExtensionManager { |
| public SimpleExtensionManager(String extensionPoint) { |
| super(extensionPoint, ID_ATTR); |
| } |
| |
| public Object getInitObject(ElementInfo ext) { |
| try { |
| if (ext != null) { |
| IConfigurationElement cfg = ext.config; |
| return createObject(cfg); |
| } |
| } catch (CoreException e) { |
| if (DLTKCore.DEBUG) { |
| e.printStackTrace(); |
| } |
| } |
| return null; |
| } |
| |
| protected Object createObject(IConfigurationElement cfg) |
| throws CoreException { |
| return cfg.createExecutableExtension(CLASS_ATTR); |
| } |
| |
| public Object get(String name) { |
| return getInitObject(getElementInfo(name)); |
| } |
| |
| } |
| |
| private SimpleExtensionManager commands = new SimpleExtensionManager( |
| EXTENSION_PROCESSOR); |
| private SimpleClassNewInstanceDLTKExtensionManager detectors = new SimpleClassNewInstanceDLTKExtensionManager( |
| EXTENSION_DETECTOR); |
| |
| public ITclCommandProcessor getProcessor(String name) { |
| return (ITclCommandProcessor) commands.get(name); |
| } |
| |
| public ITclCommandDetector[] getDetectors() { |
| ElementInfo[] objects = detectors.getElementInfos(); |
| ITclCommandDetector[] results = new ITclCommandDetector[objects.length]; |
| for (int i = 0; i < objects.length; i++) { |
| try { |
| results[i] = (ITclCommandDetector) detectors |
| .createObject(objects[i]); |
| } catch (CoreException e) { |
| if (DLTKCore.DEBUG) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| return results; |
| } |
| |
| private static CommandManager sInstance = null; |
| |
| public static synchronized CommandManager getInstance() { |
| if (sInstance == null) { |
| sInstance = new CommandManager(); |
| } |
| return sInstance; |
| } |
| } |