blob: 06570ccb04e2b77084eca961701d7ebeebafecee [file] [log] [blame]
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;
}
}