/* * 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.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; import org.teiid.core.designer.plugin.PluginUtilities; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.association.AssociationDescriptor; import org.teiid.designer.core.container.ResourceDescriptor; import org.teiid.designer.core.container.ResourceDescriptorImpl; import org.teiid.designer.core.metamodel.MetamodelDescriptor; import org.teiid.designer.core.metamodel.MetamodelDescriptorImpl; import org.teiid.designer.core.metamodel.MetamodelRootClassDescriptorImpl; /** * EclipseConfigurationBuilder * * @since 8.0 */ public class EclipseConfigurationBuilder { /** * @param config */ public static void build( Configuration config ) { // Add all of the metamodel descriptors ... final boolean addAspects = true; final List descriptors = readMetamodelDescriptors(addAspects); config.getMetamodelDescriptors().addAll(descriptors); // Add all of the resource descriptors ... final List resourceDescriptors = readResourceDescriptors(); config.getResourceDescriptors().addAll(resourceDescriptors); // Add all of the validation descriptors ... final List validationDescriptors = readValidationDescriptors(); config.getValidationDescriptors().addAll(validationDescriptors); // Add all of the association provider descriptors ... final List associationProviderDescriptors = readAssociationProviderDescriptors(); config.getAssociationProviderDescriptors().addAll(associationProviderDescriptors); // // Add all of the model container initializer descriptors ... // final List modelContainerInitializerDescriptors = readModelContainerInitializerDescriptors(); // config.getModelContainerInitializerDescriptors().addAll(modelContainerInitializerDescriptors); // Add all of the model object resolvers ... final List modelObjectResolverDescriptors = readModelObjectResolverDescriptors(); config.getMappingAdapterDescriptors().addAll(modelObjectResolverDescriptors); // Add all of the datatype manager descriptors ... final List datatypeManagerDescriptors = readDatatypeManagerDescriptors(); config.getDatatypeManagerDescriptors().addAll(datatypeManagerDescriptors); // Add all of the external resource descriptors ... final List externalResourceDescriptors = readExternalResourceDescriptors(); config.getExternalResourceDescriptors().addAll(externalResourceDescriptors); // Add all of the external resource set descriptors ... final List externalResourceSetDescriptors = readExternalResourceSetDescriptors(); config.getExternalResourceSetDescriptors().addAll(externalResourceSetDescriptors); // Add all of the invocation factory helper descriptors ... final List invocationFactoryHelperDescriptors = readInvocationFactoryHelperDescriptors(); config.getInvocationFactoryHelpers().addAll(invocationFactoryHelperDescriptors); // Add all of the invocation factory helper descriptors ... final List resourceLoadOptionDescriptors = readResourceLoadOptionDescriptors(); config.getResourceLoadOptions().addAll(resourceLoadOptionDescriptors); } /** * Scan the plugin registry and return a {@link MappingAdapterDescriptor} instance for each model object resolver found in the * plugin registry * * @return list of {@link MappingAdapterDescriptor} instances that are representative of what can be found in the plugin * registry */ public static List readModelObjectResolverDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createModelObjectResolverDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ExtensionDescriptor} instance for each datatype manager extension found in the * plugin registry * * @return list of {@link ExtensionDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readDatatypeManagerDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createDatatypeManagerDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ExtensionDescriptor} instance for each external resource set extension found * in the plugin registry * * @return list of {@link ExtensionDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readExternalResourceSetDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createExternalResourceSetDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ExternalResourceDescriptor} instance for each external resource extension * found in the plugin registry * * @return list of {@link ExternalResourceDescriptor} instances that are representative of what can be found in the plugin * registry */ public static List readExternalResourceDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { IExtension extension = extensions[i]; ExternalResourceDescriptor descriptor = createExternalResourceDescriptor(extension); result.add(descriptor); } // Sort the ExternalResourceDescriptor based on their priority values - // the external resource with the highest priority value will be loaded // first while the resource with the lowest priority value will be loaded last. Collections.sort(result, new ExternalResourceDescriptorComparator()); return result; } /** * Scan the plugin registry and return a {@link ExtensionDescriptor} instance for each metamodel found in the plugin registry * * @return list of {@link ExtensionDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readAssociationProviderDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createAssociationProviderDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ValidationDescriptor} instance for each metamodel found in the plugin registry * * @return list of {@link ValidationDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readValidationDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.VALIDATION.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; result.addAll(createValidationDescriptor(extension)); } return result; } /** * Scan the plugin registry and return a {@link ExtensionDescriptor} instance for each InvocationFactoryHelper extension found * in the plugin registry * * @return list of {@link ExtensionDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readInvocationFactoryHelperDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createInvocationFactoryHelperDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ExtensionDescriptor} instance for each resource load options extension found * in the plugin registry * * @return list of {@link ExtensionDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readResourceLoadOptionDescriptors() { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final ExtensionDescriptor descriptor = createResourceLoadOptionDescriptor(extension); result.add(descriptor); } return result; } /** * Scan the plugin registry and return a {@link ResourceDescriptor} instance for each metamodel found in the plugin registry * * @return list of {@link ResourceDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readResourceDescriptors() { final List result = new ArrayList(); // Find all of the ResourceFactory extensions ... final IExtensionPoint resourceFactoryExtension = Platform.getExtensionRegistry().getExtensionPoint(ModelerCore.PLUGIN_ID, ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.ID); if (resourceFactoryExtension == null) { final String extensionPointID = ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.UNIQUE_ID; CoreArgCheck.isNotNull(resourceFactoryExtension, ModelerCore.Util.getString("EclipseConfigurationBuilder.Extension_point_not_defined", //$NON-NLS-1$ extensionPointID)); } // Go through all the extensions and build descriptors ... final IExtension[] factoryExtensions = resourceFactoryExtension.getExtensions(); for (int i = 0; i < factoryExtensions.length; i++) { final IExtension factoryExtension = factoryExtensions[i]; final String factoryExtensionID = factoryExtension.getUniqueIdentifier(); // Get the info about each factory ... boolean error = false; final ResourceDescriptorImpl descriptor = new ResourceDescriptorImpl(factoryExtensionID); List fileExtensions = descriptor.getExtensions(); List protocols = descriptor.getProtocols(); final IConfigurationElement[] elements = factoryExtension.getConfigurationElements(); for (int j = 0; j < elements.length; j++) { final IConfigurationElement iConfigurationElement = elements[j]; if (iConfigurationElement.getName().equals(ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.ELEMENTS.FILE_EXTENSION)) { final String value = iConfigurationElement.getValue(); if (value != null && value.trim().length() != 0) { fileExtensions.add(value); } else { if (ModelerCore.DEBUG) { ModelerCore.Util.log(IStatus.WARNING, ModelerCore.Util.getString("EclipseConfigurationBuilder.Ignoring_null_or_zero-length_file_extension_value_on_extension", factoryExtensionID)); //$NON-NLS-1$ } } } if (iConfigurationElement.getName().equals(ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.ELEMENTS.PROTOCOL)) { final String value = iConfigurationElement.getValue(); if (value != null && value.trim().length() != 0) { protocols.add(value); } else { if (ModelerCore.DEBUG) { ModelerCore.Util.log(IStatus.WARNING, ModelerCore.Util.getString("EclipseConfigurationBuilder.Ignoring_null_or_zero-length_protocol_value_on_extension", factoryExtensionID)); //$NON-NLS-1$ } } } if (iConfigurationElement.getName().equals(ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.ELEMENTS.CLASS)) { final String className = iConfigurationElement.getAttribute(ModelerCore.EXTENSION_POINT.RESOURCE_FACTORY.ATTRIBUTES.NAME); if (className != null && className.trim().length() != 0) { final Bundle bundle = Platform.getBundle(factoryExtension.getNamespaceIdentifier()); descriptor.setResourceFactoryClass(className, bundle); } else { if (ModelerCore.DEBUG) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.A_class_name_must_be_specified_on_extension", factoryExtensionID)); //$NON-NLS-1$ error = true; } } } } if (!error) { result.add(descriptor); } } return result; } /** * Scan the plugin registry and return a {@link MetamodelDescriptor} instance for each metamodel found in the plugin registry * * @param addAspects flag specifying whether to add aspects ... * @return list of {@link MetamodelDescriptor} instances that are representative of what can be found in the plugin registry */ public static List readMetamodelDescriptors( final boolean addAspects ) { final List result = new ArrayList(); final IExtension[] extensions = PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.METAMODEL.UNIQUE_ID); for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; final MetamodelDescriptor descriptor = createMetamodelDescriptor(extension); result.add(descriptor); } // Add aspects ... if (addAspects) { final List aspectExtensions = getMetamodelAspectExtensions(); for (Iterator iter = aspectExtensions.iterator(); iter.hasNext();) { final IExtension extension = (IExtension)iter.next(); // Iterate over the descriptors ... final Iterator descIter = result.iterator(); while (descIter.hasNext()) { final MetamodelDescriptor descriptor = (MetamodelDescriptor)descIter.next(); addMetamodelAspect(descriptor, extension); } } } return result; } /** * Return a {@link AssociationDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER</code> extension point. * * @param extension */ public static ExtensionDescriptor createAssociationProviderDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.ELEMENTS.PROVIDER_CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.ASSOCIATION_PROVIDER.ATTRIBUTES.NAME); } } // Create the ExtensionDescriptor instance final ExtensionDescriptorImpl descriptor = new ExtensionDescriptorImpl(extensionId, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExtensionDescriptorImpl_instance_id,_classname,_bundle}_1", params)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link MappingAdapterDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY</code> extension point. * * @param extension */ public static MappingAdapterDescriptor createModelObjectResolverDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.ELEMENTS.CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.EOBJECT_MATCHER_FACTORY.ATTRIBUTES.NAME); } } // Create the ExtensionDescriptor instance final MappingAdapterDescriptorImpl descriptor = new MappingAdapterDescriptorImpl(extensionId, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ModelObjectResolverDescriptorImpl_instance", params)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ExtensionDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER</code> extension point. * * @param extension */ public static ExtensionDescriptor createDatatypeManagerDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.ELEMENTS.CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER.ATTRIBUTES.NAME); } } // Create the ExtensionDescriptor instance final ExtensionDescriptorImpl descriptor = new ExtensionDescriptorImpl(extensionId, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExtensionDescriptorImpl_instance_1", params)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ExtensionDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.DATATYPE_MANAGER</code> extension point. * * @param extension */ public static ExtensionDescriptor createInvocationFactoryHelperDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.ELEMENTS.CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.INVOCATION_FACTORY_HELPER.ATTRIBUTES.NAME); } } // Create the ExtensionDescriptor instance final ExtensionDescriptorImpl descriptor = new ExtensionDescriptorImpl(extensionId, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExtensionDescriptorImpl_instance_1", params)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ExtensionDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS</code> extension point. * * @param extension */ public static ExtensionDescriptor createResourceLoadOptionDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.ELEMENTS.CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.RESOURCE_LOAD_OPTIONS.ATTRIBUTES.NAME); } } // Create the ExtensionDescriptor instance final ExtensionDescriptorImpl descriptor = new ExtensionDescriptorImpl(extensionId, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExtensionDescriptorImpl_instance_1", params)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ExtensionDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET</code> extension point. * * @param extension */ public static ExtensionDescriptor createExternalResourceSetDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); final Properties properties = new Properties(); String extensionId = extension.getSimpleIdentifier(); String className = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.ELEMENTS.CLASS)) { className = elem.getAttribute(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.ATTRIBUTES.NAME); } else if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE_SET.ELEMENTS.PROPERTIES)) { final String[] propNames = elem.getAttributeNames(); for (int i = 0; i < propNames.length; i++) { final String name = propNames[i]; final String value = elem.getAttribute(name); properties.setProperty(name, value); } } } // Create the ExternalResourceSetDescriptor instance final ExternalResourceSetDescriptorImpl descriptor = new ExternalResourceSetDescriptorImpl(extensionId, className, bundle); descriptor.setProperties(properties); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extensionId, className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExternalResourceSetDescriptorImpl_instance__id,_classname,_bundle_1", params)); //$NON-NLS-1$ ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Set_ExternalResourceSetDescriptorImpl_properties_to_2", properties)); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ExternalResourceDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE</code> extension point. * * @param extension */ public static ExternalResourceDescriptor createExternalResourceDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.UNIQUE_ID, uniqueId)); } // Create the ExternalResourceDescriptor instance final ExternalResourceDescriptorImpl descriptor = new ExternalResourceDescriptorImpl(); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ExternalResourceDescriptorImpl_instance_1")); //$NON-NLS-1$ } // Set the plugin ID final String pluginId = extension.getNamespaceIdentifier(); descriptor.setPluginID(pluginId); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_plugin_ID_to_2", pluginId)); //$NON-NLS-1$ } // Set the extension ID descriptor.setExtensionID(extension.getSimpleIdentifier()); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_extension_ID_to_3", extension.getSimpleIdentifier())); //$NON-NLS-1$ } final Properties properties = new Properties(); final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); final String elemValue = elem.getValue(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.ELEMENTS.RESOURCE_NAME) && elemValue != null) { descriptor.setResourceName(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_external_resource_name_to_4", elemValue)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.ELEMENTS.RESOURCE_URL) && elemValue != null) { descriptor.setResourceUrl(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_external_resource_URL_to_5", elemValue)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.ELEMENTS.INTERNAL_URI) && elemValue != null) { descriptor.setInternalUri(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_external_resource_URI_to_6", elemValue)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.ELEMENTS.PRIORITY) && elemValue != null) { descriptor.setPriority(Integer.parseInt(elemValue)); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_external_resource_priority_to_7", elemValue)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.EXTERNAL_RESOURCE.ELEMENTS.PROPERTIES)) { final String[] propNames = elem.getAttributeNames(); for (int i = 0; i < propNames.length; i++) { final String name = propNames[i]; final String value = elem.getAttribute(name); properties.setProperty(name, value); } descriptor.setProperties(properties); } } // Check for required descriptor values if (descriptor.getResourceUrl() == null || descriptor.getResourceUrl().length() == 0) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.Error_the_external_resource_URL_was_not_defined_in_the_extension_1", extension.getSimpleIdentifier())); //$NON-NLS-1$ } if (descriptor.getResourceName() == null || descriptor.getResourceName().length() == 0) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.Error_the_external_resource_name_was_not_defined_in_the_extension_2", extension.getSimpleIdentifier())); //$NON-NLS-1$ } // Define the resource location in terms of the declaring plugin location on the a file system URL resourceURL = null; String resource = null; final Bundle bundle = Platform.getBundle(pluginId); try { final URL installURL = bundle.getEntry("/"); //$NON-NLS-1$ resourceURL = bundle.getResource(descriptor.getResourceUrl()); if (resourceURL == null) { resource = FileLocator.toFileURL(new URL(installURL, descriptor.getResourceUrl())).getFile(); if (resource == null || resource.length() == 0) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.Unable_to_create_an_absolute_path_to_the_resource_1", descriptor.getResourceUrl())); //$NON-NLS-1$ if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_external_resource_URL_to_5", descriptor.getResourceUrl())); //$NON-NLS-1$ } } } else { resource = resourceURL.toString(); } if (resource != null) { descriptor.setResourceUrl(resource); } } catch (Throwable t) { ModelerCore.Util.log(IStatus.ERROR, t, ModelerCore.Util.getString("EclipseConfigurationBuilder.Error_creating_local_URL_for_2", descriptor.getResourceUrl())); //$NON-NLS-1$ } // Define the temporary working directory location in terms of the declaring plugin location on the a file system String tempDirPath = null; try { tempDirPath = Platform.getStateLocation(bundle).toOSString(); if (tempDirPath == null || tempDirPath.length() == 0) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.Unable_to_create_an_absolute_path_to_the_data_directory_for_resource_1", descriptor.getResourceUrl())); //$NON-NLS-1$ if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_temporary_directory_path_to_1", tempDirPath)); //$NON-NLS-1$ } } else { descriptor.setTempDirectoryPath(tempDirPath); } } catch (Throwable t) { ModelerCore.Util.log(IStatus.ERROR, ModelerCore.Util.getString("EclipseConfigurationBuilder.Error_creating_the_absolute_path_to_the_data_directory_for_resource_2", descriptor.getResourceUrl())); //$NON-NLS-1$ } return descriptor; } /** * Return a {@link ValidationDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.VALIDATION</code> extension point. * * @param extension */ public static List createValidationDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.VALIDATION.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.VALIDATION.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.VALIDATION.UNIQUE_ID, uniqueId)); } if (ModelerCore.DEBUG_VALIDATION) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_ValidationDescriptorImpl_instance_1")); //$NON-NLS-1$ } if (ModelerCore.DEBUG_VALIDATION) { final Object[] params = new Object[] {extension.getSimpleIdentifier()}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_extension_ID_to", params)); //$NON-NLS-1$ } final IConfigurationElement[] elems = extension.getConfigurationElements(); List descriptors = new ArrayList(elems.length); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.VALIDATION.ELEMENTS.PREFERENCE)) { final String prefName = elem.getAttribute(ModelerCore.EXTENSION_POINT.VALIDATION.ATTRIBUTES.NAME); final String prefLabel = elem.getAttribute(ModelerCore.EXTENSION_POINT.VALIDATION.ATTRIBUTES.LABEL); final String prefCategory = elem.getAttribute(ModelerCore.EXTENSION_POINT.VALIDATION.ATTRIBUTES.CATEGORY); final String prefToolTip = elem.getAttribute(ModelerCore.EXTENSION_POINT.VALIDATION.ATTRIBUTES.TOOL_TIP); final String defaultValue = elem.getAttribute(ModelerCore.EXTENSION_POINT.VALIDATION.ATTRIBUTES.DEFAULT); if (prefName == null) { continue; } // Create the MetamodelDescriptor instance final ValidationDescriptorImpl descriptor = new ValidationDescriptorImpl(); // Set the extension ID descriptor.setExtensionID(extension.getSimpleIdentifier()); descriptor.setPrefernceName(prefName); descriptor.setPrefernceLabel(prefLabel); descriptor.setPrefernceCategory(prefCategory); descriptor.setPrefernceToolTip(prefToolTip); descriptor.setDefaultOption(defaultValue); if (ModelerCore.DEBUG_VALIDATION) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_NAME_to", new Object[] {prefName})); //$NON-NLS-1$ ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_LABEL_to", new Object[] {prefLabel})); //$NON-NLS-1$ if (prefCategory != null) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_CATEGORY_to", new Object[] {prefCategory})); //$NON-NLS-1$ } if (prefToolTip != null) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_TOOLTIP_to", new Object[] {prefToolTip})); //$NON-NLS-1$ } if (defaultValue != null) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Set_the_DEFAULT_OPTION_to_1", new Object[] {defaultValue})); //$NON-NLS-1$ } } descriptors.add(descriptor); } } return descriptors; } /** * Return a {@link MetamodelDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.METAMODEL</code> extension point. * * @param extension */ public static MetamodelDescriptor createMetamodelDescriptor( final IExtension extension ) { if (extension == null) { CoreArgCheck.isNotNull(extension, ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_reference_may_not_be_null_1")); //$NON-NLS-1$ } final String uniqueId = extension.getExtensionPointUniqueIdentifier(); if (!ModelerCore.EXTENSION_POINT.METAMODEL.UNIQUE_ID.equals(uniqueId)) { CoreArgCheck.isTrue(ModelerCore.EXTENSION_POINT.METAMODEL.UNIQUE_ID.equals(uniqueId), ModelerCore.Util.getString("EclipseConfigurationBuilder.The_IExtension_must_be_an_extension_for_the_point", //$NON-NLS-1$ ModelerCore.EXTENSION_POINT.METAMODEL.UNIQUE_ID, uniqueId)); } final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); final Properties properties = new Properties(); // Create the MetamodelDescriptor instance String namespaceURI = null; String ePackageClassName = null; final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); final String elemValue = elem.getValue(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.URI) && elemValue != null) { namespaceURI = elemValue; } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.PACKAGE_CLASS)) { ePackageClassName = elem.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.NAME); } } final MetamodelDescriptorImpl descriptor = new MetamodelDescriptorImpl(namespaceURI, ePackageClassName, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Created_new_MetamodelDescriptorImpl_instance_1")); //$NON-NLS-1$ Object[] params = new Object[] {namespaceURI}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_URI_to", params)); //$NON-NLS-1$ params = new Object[] {ePackageClassName, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_EPackage_class_name_to,_and_the_bundle_to", params)); //$NON-NLS-1$ } // Set the extension ID descriptor.setExtensionID(extension.getSimpleIdentifier()); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extension.getSimpleIdentifier()}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_extension_ID_to", params)); //$NON-NLS-1$ } // Set the metamodel display name to initially be the extension name descriptor.setDisplayName(extension.getLabel()); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {extension.getLabel()}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_name_to", params)); //$NON-NLS-1$ } for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); final String elemValue = elem.getValue(); if (elemName == null) { continue; } if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.ALTERNATE_URI) && elemValue != null) { descriptor.addAlternateNamespaceURI(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {elemValue}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Adding_alternate_URI_1", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.DISPLAY_NAME) && elemValue != null) { descriptor.setDisplayName(elemValue); } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.FILE_EXTENSION) && elemValue != null) { descriptor.setFileExtension(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {elemValue}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Setting_file_extension_to_1", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.ADAPTER_CLASS)) { final String className = elem.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.NAME); descriptor.addAdapterFactoryBundle(className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Set_the_AdapterFactory_class_name_to,_and_the_bundle_to", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.ALLOWABLE_MODEL_TYPE) && elemValue != null) { descriptor.addAllowableModelType(elemValue); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {elemValue}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Adding_model_type_1", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.ROOT_ENTITY_CLASS)) { final String className = elem.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.NAME); final String maxOccurs = elem.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.ROOT_ENTITY_MAX_OCCURS); final MetamodelRootClassDescriptorImpl rootDescriptor = new MetamodelRootClassDescriptorImpl(uniqueId, className, bundle); rootDescriptor.setMaxOccurs(maxOccurs); descriptor.addRootClassDescriptor(rootDescriptor); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {className, bundle}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Added_root_entity_class_name,_and_bundle_1", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.PROPERTIES)) { final String[] propNames = elem.getAttributeNames(); for (int i = 0; i < propNames.length; i++) { final String name = propNames[i]; final String value = elem.getAttribute(name); properties.setProperty(name, value); } descriptor.setProperties(properties); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {properties}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.Set_metamodel_properties_to_2", params)); //$NON-NLS-1$ } } else if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.INITIALIZERS)) { final IConfigurationElement[] initializers = elem.getChildren(); for (int i = 0; i < initializers.length; ++i) { final IConfigurationElement initializer = initializers[i]; final String initializerTagName = initializer.getName(); if (initializerTagName.equals(ModelerCore.EXTENSION_POINT.METAMODEL.ELEMENTS.INITIALIZER)) { // Get the attributes ... final String name = initializer.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.NAME); final String desc = initializer.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.DESCRIPTION); final String className = initializer.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL.ATTRIBUTES.CLASS); descriptor.addModelInitializer(name, desc, className, bundle); } } } } return descriptor; } private static List getMetamodelAspectExtensions() { // Add to the UML diagram MetamodelAspect extensions final List extensions = new ArrayList(); addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.UML_DIAGRAM_ASPECT.UNIQUE_ID), extensions); // Add to the item provider MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.ITEM_PROVIDER_ASPECT.UNIQUE_ID), extensions); // Add to the dependency MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.DEPENDENCY_ASPECT.UNIQUE_ID), extensions); // Add to the validation MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.VALIDATION_ASPECT.UNIQUE_ID), extensions); // Add to the feature constraint MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.FEATURE_CONSTRAINT_ASPECT.UNIQUE_ID), extensions); // Add to the sql MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.SQL_ASPECT.UNIQUE_ID), extensions); // Add to the relationship MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.RELATIONSHIP_ASPECT.UNIQUE_ID), extensions); // Add to the imports MetamodelAspect extensions addExtensionsToList(PluginUtilities.getExtensions(ModelerCore.EXTENSION_POINT.IMPORT_ASPECT.UNIQUE_ID), extensions); return extensions; } private static void addExtensionsToList( final IExtension[] extensions, final List extensionList ) { for (int i = 0; i < extensions.length; i++) { final IExtension extension = extensions[i]; if (!extensionList.contains(extension)) { extensionList.add(extension); } } } /** * Return a {@link MetamodelDescriptor} instance for the specified {@link IExtension} representing an extension to the * <code>ModelerCore.EXTENSION_POINT.METAMODEL</code> extension point. * * @param extension */ private static void addMetamodelAspect( final MetamodelDescriptor descriptor, final IExtension extension ) { // If the IExtension is a valid MetamodelAspect extension ... if (validMetamodelAspect(descriptor, extension)) { final Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier()); // Get the extension point ID for the aspect (e.g. "org.teiid.designer.core.umlDiagramAspect") final String uniqueExtensionPointID = extension.getExtensionPointUniqueIdentifier(); // Extract information from the extension ... final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL_ASPECT.ELEMENTS.FACTORY_CLASS)) { final String className = elem.getAttribute(ModelerCore.EXTENSION_POINT.METAMODEL_ASPECT.ATTRIBUTES.NAME); ((MetamodelDescriptorImpl)descriptor).addAspectFactoryBundle(uniqueExtensionPointID, className, bundle); if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {className, bundle, uniqueExtensionPointID}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Added_the_MetamodelAspect,_bundle,_extension_point_ID", params)); //$NON-NLS-1$ } } } } } /** * Returns true if the specified IExtension represents MetamodelAspect extension applicable to this MetamodelDescriptor */ private static boolean validMetamodelAspect( final MetamodelDescriptor descriptor, final IExtension extension ) { if (descriptor == null || extension == null) { return false; } // Get the extension point ID for the aspect (e.g. "org.teiid.designer.core.umlDiagramAspect") final String uniqueExtensionPointID = extension.getExtensionPointUniqueIdentifier(); // Check if the extension is not a known metamodel aspect extension ... if (!uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.UML_DIAGRAM_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.ITEM_PROVIDER_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.DEPENDENCY_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.VALIDATION_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.SQL_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.RELATIONSHIP_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.IMPORT_ASPECT.UNIQUE_ID) && !uniqueExtensionPointID.equals(ModelerCore.EXTENSION_POINT.FEATURE_CONSTRAINT_ASPECT.UNIQUE_ID)) { return false; } // Extract information from the extension ... final IConfigurationElement[] elems = extension.getConfigurationElements(); for (int j = 0; j < elems.length; j++) { final IConfigurationElement elem = elems[j]; final String elemName = elem.getName(); final String elemValue = elem.getValue(); if (elemName.equals(ModelerCore.EXTENSION_POINT.METAMODEL_ASPECT.ELEMENTS.METAMODEL_REF_ID) && elemValue != null) { final String aspectMetamodelID = elemValue; // If this aspect refers to the same metamodel as this descriptor, return true if (aspectMetamodelID.equals(descriptor.getExtensionID())) { if (ModelerCore.DEBUG_MODELER_CORE_INIT) { final Object[] params = new Object[] {descriptor.getExtensionID(), uniqueExtensionPointID}; ModelerCore.Util.log(IStatus.INFO, ModelerCore.Util.getString("EclipseConfigurationBuilder.DEBUG.__Found_valid_MetamodelAspect_IExtension_for_the_metamodel.__The_extension_point_ID", params)); //$NON-NLS-1$ } return true; } } } return false; } /** * Sort ExternalResourceDescriptor instances */ static class ExternalResourceDescriptorComparator implements Comparator { @Override public int compare( Object obj1, Object obj2 ) { if (obj1 == null && obj2 == null) { return 0; } else if (obj1 == null && obj2 != null) { return 1; } else if (obj1 != null && obj2 == null) { return -1; } ExternalResourceDescriptor descriptor1 = (ExternalResourceDescriptor)obj1; ExternalResourceDescriptor descriptor2 = (ExternalResourceDescriptor)obj2; int value1 = descriptor1.getPriority(); int value2 = descriptor2.getPriority(); if (value1 < value2) { return 1; } else if (value1 > value2) { return -1; } return 0; } } }