package com.swtworkbench.community.xswt; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.ui.plugin.*; import org.osgi.framework.BundleContext; import com.swtworkbench.community.xswt.dataparser.DataParser; import com.swtworkbench.community.xswt.dataparser.IDataParser; import com.swtworkbench.community.xswt.metalogger.EclipseLogger; import com.swtworkbench.community.xswt.metalogger.Logger; import com.swtworkbench.community.xswt.scripting.ScriptingEngine; import java.util.*; /** * The main plugin class to be used in the desktop. */ public class XswtPlugin extends AbstractUIPlugin { //The shared instance. private static XswtPlugin plugin; //Resource bundle. private ResourceBundle resourceBundle; /** * The constructor. */ public XswtPlugin() { super(); plugin = this; try { resourceBundle = ResourceBundle.getBundle("com.swtworkbench.community.xswt.XswtPluginResources"); } catch (MissingResourceException x) { resourceBundle = null; } Logger.setLogger(new EclipseLogger(this)); Logger.log().setDebug(false); } /** * This method is called upon plug-in activation */ public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ public void stop(BundleContext context) throws Exception { super.stop(context); } /** * Returns the shared instance. */ public static XswtPlugin getDefault() { return plugin; } /** * Returns the string from the plugin's resource bundle, * or 'key' if not found. */ public static String getResourceString(String key) { ResourceBundle bundle = XswtPlugin.getDefault().getResourceBundle(); try { return (bundle != null) ? bundle.getString(key) : key; } catch (MissingResourceException e) { return key; } } private Iterator getConfigurationElements(String extensionPoint, String elementName) { IExtensionPoint ep = Platform.getExtensionRegistry().getExtensionPoint(getBundle().getSymbolicName(), extensionPoint); if (ep == null) { return new LinkedList().iterator(); } IExtension[] extensions = ep.getExtensions(); List elements = new ArrayList(); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] ces = extensions[i].getConfigurationElements(); for (int j = 0; j < ces.length; j++) { if (elementName.equals(ces[j].getName())) { elements.add(ces[j]); } } } return elements.iterator(); } private XSWT.Configuration xswtConfig; /* private List dataParsers; public void addDataParsers(DataParser parsers) { if (dataParsers == null) { dataParsers = new ArrayList(); processDataParserExtensions(); } for (int i = 0; i < dataParsers.size(); i += 2) { try { Class klass = Class.forName((String)dataParsers.get(i)); parsers.addDataParser(klass, (IDataParser)dataParsers.get(i + 1)); } catch (ClassNotFoundException e) { } } } */ // private boolean dataParserExtensionsProcessed = false; private void processDataParserExtensions() { // if (dataParserExtensionsProcessed) { // return; // } // dataParserExtensionsProcessed = true; Iterator it = getConfigurationElements("dataParser", "data-parser"); while (it.hasNext()) { IConfigurationElement element = (IConfigurationElement)it.next(); IDataParser parser = null; try { parser = (IDataParser)element.createExecutableExtension("data-parser-class"); } catch (CoreException ce) { } if (parser != null) { xswtConfig.addDataParser(element.getAttribute("data-class"), parser); // DataParser.addExtensionDataParser(element.getAttribute("data-class"), parser); // dataParsers.add(element.getAttribute("data-class")); // dataParsers.add(parser); } } } /* private List classBuilderPackages; private List classBuilderClasses; public void importPackages(ClassBuilder builder) { if (classBuilderPackages == null) { classBuilderPackages = new ArrayList(); classBuilderClasses = new ArrayList(); processClassBuilderExtensions(); } for (int i = 0; i < classBuilderPackages.size(); i++) { builder.importPackage((String)classBuilderPackages.get(i)); } } public void importClasses(ClassBuilder builder) { if (classBuilderClasses == null) { classBuilderPackages = new ArrayList(); classBuilderClasses = new ArrayList(); processClassBuilderExtensions(); } for (int i = 0; i < classBuilderClasses.size(); i++) { builder.importClass((String)classBuilderClasses.get(i)); } } */ // private boolean classBuilderExtensionsProcessed = false; private void processClassBuilderExtensions() { // if (classBuilderExtensionsProcessed) { // return; // } // classBuilderExtensionsProcessed = true; Iterator it = getConfigurationElements("classBuilder", "import"); while (it.hasNext()) { IConfigurationElement element = (IConfigurationElement)it.next(); String packages = element.getAttribute("packages"); if (packages != null) { StringTokenizer tokens = new StringTokenizer(packages, " ,;"); while (tokens.hasMoreTokens()) { xswtConfig.addPackageImports(tokens.nextToken()); // ClassBuilder.addDefaultPackageImports(tokens.nextToken()); // classBuilderPackages.add(tokens.nextToken()); } } String classes = element.getAttribute("classes"); if (classes != null) { StringTokenizer tokens = new StringTokenizer(classes, " ,;"); while (tokens.hasMoreTokens()) { xswtConfig.addClassImports(tokens.nextToken()); // ClassBuilder.addDefaultClassImports(tokens.nextToken()); // classBuilderClasses.add(tokens.nextToken()); } } } } /* private List scriptingEngines; public ScriptingEngine getScriptingEngine(String name) { if (scriptingEngines == null) { scriptingEngines = new ArrayList(); processScriptingEngineExtensions(); } int pos = scriptingEngines.indexOf(name); return (pos >= 0 ? (ScriptingEngine)scriptingEngines.get(pos + 1) : null); } public ScriptingEngine getDefaultScriptingEngine() { if (scriptingEngines == null) { scriptingEngines = new ArrayList(); processScriptingEngineExtensions(); } if (scriptingEngines.size() > 1) { return (ScriptingEngine)scriptingEngines.get(1); } return null; } */ // private boolean scriptingEngineExtensionsProcessed = false; private void processScriptingEngineExtensions() { // if (scriptingEngineExtensionsProcessed) { // return; // } // scriptingEngineExtensionsProcessed = true; Iterator it = getConfigurationElements("scriptingEngine", "scripting-engine"); while (it.hasNext()) { IConfigurationElement element = (IConfigurationElement)it.next(); String name = element.getAttribute("name"); boolean isDefault = "true".equals(element.getAttribute("is-default")); try { ScriptingEngine engine = (ScriptingEngine)element.createExecutableExtension("engine-class"); xswtConfig.addScriptingEngine(name, engine, isDefault); // XSWT.addScriptingEngine(name, engine, isDefault); // int pos = (isDefault ? 0 : scriptingEngines.size()); // scriptingEngines.add(pos, engine); // scriptingEngines.add(pos, name); } catch (CoreException e) { System.err.println(e); } } } public XSWT.Configuration getXSWTConfiguration() { if (xswtConfig == null) { xswtConfig = new XSWT.Configuration(); processClassBuilderExtensions(); processDataParserExtensions(); processScriptingEngineExtensions(); } return xswtConfig; } /** * Returns the plugin's resource bundle, */ public ResourceBundle getResourceBundle() { return resourceBundle; } }