/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IExtension; import org.teiid.core.designer.ModelerCoreException; import org.teiid.core.designer.plugin.PluginUtilities; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.reader.StreamReader; import org.teiid.designer.core.writer.StreamWriter; /** * * @since 8.0 */ public class MetabaseToolKitPlugin /*extends Plugin*/ { // public static String PLUGIN_ID = ModelerCore.PLUGIN_ID; // private static Registry theRegistry; private static Map streamReaderExtensions; private static Map streamWriterExtensions; // static { // // Initialize the Registry with the default implementation // theRegistry = new FlatRegistry(); // } // /** // * Constructor for MetabaseToolKitPlugin. // * @param arg0 // */ // public MetabaseToolKitPlugin(IPluginDescriptor arg0) { // super(arg0); // } // // /** // * Create a new Container instance by loading and activating the specified // * extension. This method ensures that the Container instance has been // * registered with the Registry. // * @param containerExtensionID the complete ID of the extension that should // * be activated (e.g., "<code>com.mycompany.myPlugin.myContainer</code>"); // * @return the new Container instance // * @throws ModelerCoreException if there is an error initializing the Container // * @throws CoreException if there is an error activating the specified // * extension. // */ // public static Container createContainer( final String containerName, // final String containerExtensionID ) // throws ModelerCoreException, CoreException { // // Load the container with the extension ID ... // final Container container = (Container) PluginUtilities.createExecutableExtension(containerExtensionID,"class","name"); //$NON-NLS-1$ //$NON-NLS-2$ // if ( container == null ) { // throw new ModelerCoreException(ModelerCore.Util.getString("MetabaseToolKitPlugin.Unable_to_find,_activate_and_load_container_extension___14") + containerExtensionID + "\""); //$NON-NLS-1$ //$NON-NLS-2$ // } // // // Set the name ... // container.setName(containerName); // // // Ensure the container is registered with its name ... // final String name = container.getName(); // if ( name != null && name.length() != 0 ) { // getRegistry().register(name,container); // } // // return container; // } // // /** // * Return the Registry. // * @return the Registry instance. // */ // public static Registry getRegistry() { // return theRegistry; // } /** * Return an {@link StreamReader} for the specified reader name. * @return the StreamReader instance. */ public static StreamReader createStreamReaderService(final String uniqueID) throws ModelerCoreException { if(uniqueID == null){ CoreArgCheck.isNotNull(uniqueID,ModelerCore.Util.getString("MetabaseToolKitPlugin.The_unique_identifier_for_the_Service_may_not_be_null_24")); //$NON-NLS-1$ } // Initialize the map of streamReader extensions if (streamReaderExtensions == null) { streamReaderExtensions = new HashMap(); final String extensionID = ModelerCore.EXTENSION_POINT.STREAM_READER.UNIQUE_ID; loadExtensionMap(extensionID,streamReaderExtensions); } // Attempt to create an instance the streamReader extension by name return (StreamReader) createExtensionInstance(uniqueID,streamReaderExtensions); } /** * Return an {@link StreamWriter} for the specified writer name. * @return the StreamWriter instance. */ public static StreamWriter createStreamWriterService(final String uniqueID) throws ModelerCoreException { if(uniqueID == null){ CoreArgCheck.isNotNull(uniqueID,ModelerCore.Util.getString("MetabaseToolKitPlugin.The_unique_identifier_for_the_Service_may_not_be_null_26")); //$NON-NLS-1$ } // Initialize the map of streamReader extensions if (streamWriterExtensions == null) { streamWriterExtensions = new HashMap(); final String extensionID = ModelerCore.EXTENSION_POINT.STREAM_WRITER.UNIQUE_ID; loadExtensionMap(extensionID,streamWriterExtensions); } // Attempt to create an instance the streamReader extension by name return (StreamWriter) createExtensionInstance(uniqueID,streamWriterExtensions); } /** * Load the given Map with all extensions for the specified extension point. * Each extension will be loaded into the map using the extension label as * the key. * @param extensionPointID * @param extensionMap the map into which all extensions will be loaded */ private static void loadExtensionMap(final String extensionPointID, final Map extensionMap) { if(extensionPointID == null){ CoreArgCheck.isNotNull(extensionPointID, ModelerCore.Util.getString("MetabaseToolKitPlugin.The_extension_ID_may_not_be_null_28")); //$NON-NLS-1$ } if(extensionMap == null){ CoreArgCheck.isNotNull(extensionMap,ModelerCore.Util.getString("MetabaseToolKitPlugin.The_Map_reference_may_not_be_null_29")); //$NON-NLS-1$ } //System.err.println("loadExtensionMap for ID \""+extensionPointID+"\""); final IExtension[] extensions = PluginUtilities.getExtensions(extensionPointID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final String uniqueID = extension.getUniqueIdentifier(); //System.err.println("Loading extension with uniqueID \""+uniqueID+"\""); extensionMap.put(uniqueID,extension); } } /** * Load the given Map with all extensions for the specified extension point. * Each extension will be loaded into the map using the extension label as * the key. * @param extensionPointID * @param extensionMap the map into which all extensions will be loaded */ private static Object createExtensionInstance(final String uniqueID, final Map extensionMap) throws ModelerCoreException { if(uniqueID == null){ CoreArgCheck.isNotNull(uniqueID, ModelerCore.Util.getString("MetabaseToolKitPlugin.The_extension_uniqueID_may_not_be_null_30")); //$NON-NLS-1$ } if(extensionMap == null){ CoreArgCheck.isNotNull(extensionMap,ModelerCore.Util.getString("MetabaseToolKitPlugin.The_Map_reference_may_not_be_null_31")); //$NON-NLS-1$ } // Attempt to lookup the extension by name IExtension extension = (IExtension) extensionMap.get(uniqueID); if (extension == null) { throw new ModelerCoreException(ModelerCore.Util.getString("MetabaseToolKitPlugin.Unable_to_find_an_extension_with_unique_ID___32")+uniqueID+"\""); //$NON-NLS-1$ //$NON-NLS-2$ } // Activate the extension ... return createExecutableExtension(extension); } private static Object createExecutableExtension(IExtension extension) throws ModelerCoreException { if(extension == null){ CoreArgCheck.isNotNull(extension,ModelerCore.Util.getString("MetabaseToolKitPlugin.The_IExtension_reference_may_not_be_null_34")); //$NON-NLS-1$ } try { return PluginUtilities.createExecutableExtension(extension,"class","name"); //$NON-NLS-1$ //$NON-NLS-2$ } catch (CoreException e) { throw new ModelerCoreException(e,ModelerCore.Util.getString("MetabaseToolKitPlugin.Error_creating_instance_of_extension_with_ID___37")+extension.getUniqueIdentifier()+"\""); //$NON-NLS-1$ //$NON-NLS-2$ } } // /** // * Starts up this plug-in. // * <p> // * This method should be overridden in subclasses that need to do something // * when this plug-in is started. Implementors should call the inherited method // * to ensure that any system requirements can be met. // * </p> // * <p> // * If this method throws an exception, it is taken as an indication that // * plug-in initialization has failed; as a result, the plug-in will not // * be activated; moreover, the plug-in will be marked as disabled and // * ineligible for activation for the duration. // * </p> // * <p> // * Plug-in startup code should be robust. In the event of a startup failure, // * the plug-in's <code>shutdown</code> method will be invoked automatically, // * in an attempt to close open files, etc. // * </p> // * <p> // * Note 1: This method is automatically invoked by the platform // * the first time any code in the plug-in is executed. // * </p> // * <p> // * Note 2: This method is intended to perform simple initialization // * of the plug-in environment. The platform may terminate initializers // * that do not complete in a timely fashion. // * </p> // * <p> // * Note 3: The class loader typically has monitors acquired during invocation of this method. It is // * strongly recommended that this method avoid synchronized blocks or other thread locking mechanisms, // * as this would lead to deadlock vulnerability. // * </p> // * <b>Clients must never explicitly call this method.</b> // * // * @exception CoreException if this plug-in did not start up properly // * @see org.eclipse.core.runtime.Plugin#startup() // */ // public void startup() throws CoreException { // super.startup(); // // // Look up the DEFAULT configuration to use ... // final IExtension configExtension = Platform.getPluginRegistry().getExtension(PLUGIN_ID, ModelerCore.EXTENSION_POINT.CONFIGURATION.ID, ModelerCore.EXTENSION.DEFAULT_CONFIG_ID); // final IConfigurationElement[] elements = configExtension.getConfigurationElements(); // // // Extract the information for the configuration ... // String registryExtensionID = ModelerCore.EXTENSION.FLAT_REGISTRY_ID; // for (int i = 0; i < elements.length; i++) { // final IConfigurationElement iConfigurationElement = elements[i]; // if ( iConfigurationElement.getName().equals(ModelerCore.EXTENSION_POINT.REGISTRY.ID) ) { //$NON-NLS-1$ // registryExtensionID = iConfigurationElement.getAttribute("id"); //$NON-NLS-1$ // } // } // // // Activate the Registry extension ... // final Registry registry = (Registry) PluginUtilities.createExecutableExtension(registryExtensionID, "class", "name"); //$NON-NLS-1$ //$NON-NLS-2$ // theRegistry = registry; // // } }