/* * 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.metamodel; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.EPackage; import org.teiid.designer.core.ModelInitializer; import org.teiid.designer.core.metamodel.aspect.MetamodelAspectFactory; import org.teiid.designer.metamodels.core.ModelType; /** * Descriptor * * @since 8.0 */ public interface MetamodelDescriptor { /** * Return the identifier of the metamodel extension * @return the identifier, or null if no extension ID exists. */ String getExtensionID(); /** * Return the name of the metamodel * @return String or null if no name exists. */ String getName(); /** * Return the display name of the metamodel * @return String or null if no display name exists. */ String getDisplayName(); /** * Return the address of the metamodel in the form * of a URI. * @return URI or null if no URI exists. */ String getNamespaceURI(); /** * Return the list of alternate addresses of the metamodel in the form * of URIs. * @return List of alternate URIs that exist (if any). */ String[] getAlternateNamespaceURIs(); /** * Return the namespace prefix associated with this metamodel * @return String or null if no prefix exists. */ String getNamespacePrefix(); /** * Return true if this descriptor is for a primary (non-participatory only) metamodel * @return true if this descriptor is for a primary (non-participatory only) metamodel */ boolean isPrimary(); /** * Return true if this metamodel supports extension * @return true if this metamodel supports extension */ boolean supportsExtension(); /** * Return true if this metamodel supports diagramming * @return true if this metamodel supports diagramming */ boolean supportsDiagrams(); /** * Returns true if this metamodel can be used to create a * new model instances. * @return */ boolean supportsNewModel(); /** * Return the file extension to be used when creating a * {@link org.eclipse.emf.ecore.resource.Resource} for storing * an new instance of this metamodel. Note - the file extension * string <b>will</b> be prefixed by a period (e.g. ".xmi"). * * @return the file extension */ String getFileExtension(); /** * Returns an instance of the loaded class for this extension using the plug-in * class loader specified when the ExtensionDescriptor was constructed. * The successful loading of the class will <b>always activate</b> the * corresponding plug-in. The <b>same</b> instance will returned for all calls * to this method. * @return an instance of the loaded class or null if the class * could not be loaded or an instance could not be created. */ EPackage getEPackage(); /** * Return an array of ModelType instances representing the set * of permissible types for instances of this metamodel. * @return */ ModelType[] getAllowableModelTypes(); /** * Returns the names of available ModelInitializers that may be used to initialize an empty * model when this metamodel is the primary metamodel. * @return the ordered list of String names; may be empty, but never null * @see #getModelInitializer(String) * @see #getModelInitializerDescription(String)(String) */ List getModelInitializerNames(); /** * Return the description for the ModelInitializer with the supplied name. * @return the description; null if there is no initializer with that name * @see #getModelInitializerNames() * @see #getModelInitializer(String) */ String getModelInitializerDescription( String name ); /** * Return the ModelInitializer with the supplied name. The ModelInitializer may be used to initialize * an empty model when this metamodel is the primary metamodel. * @return the ModelInitializer; null if there is no initializer with that name * @see #getModelInitializerNames() * @see #getModelInitializerDescription(String)(String) */ ModelInitializer getModelInitializer( String name ); /** * Return an array of MetamodelRootClassDescriptor instances representing the * allowable EClass that can be used as roots to a model of this metamodel type * @return * @since 5.0 */ MetamodelRootClassDescriptor[] getRootClassDescriptors(); /** * Return an array of AdapterFactory instances associated with this metamodel. * @return * @since 5.0 */ AdapterFactory[] getAdapterFactories(); /** * Return an array of MetamodelAspectFactory instances associated with this metamodel. * @return * @since 5.0 */ MetamodelAspectFactory[] getAspectFactories(); /** * Return the MetamodelAspectFactory for the specified aspect type. If no * MetamodelAspectFactory exists for this type then null is returned. The * type is expected to be one of the following: * <p> * <li> org.teiid.designer.core.metamodel.aspect.SqlAspect * <li> org.teiid.designer.core.metamodel.aspect.UmlDiagramAspect * <li> org.teiid.designer.core.metamodel.aspect.ValidationAspect * <li> org.teiid.designer.core.metamodel.aspect.DependencyAspect * <li> org.teiid.designer.core.metamodel.aspect.FeatureConstraintAspect * <li> org.teiid.designer.core.metamodel.aspect.ImportsAspect * <li> org.teiid.designer.core.metamodel.aspect.RelationshipMetamodelAspect * </p> * @param type the key indicating the type of MetamodelAspectFactory to return; may not be null * @return the MetamodelAspectFactory */ MetamodelAspectFactory getAspectFactory(Class type); /** * Return the MetamodelAspectFactory for the specified aspect type identifier. If no * MetamodelAspectFactory exists for this identifier then null is returned. The identifier * is expected to be one of the following: * <p> * <li> ModelerCore.EXTENSION_POINT.SQL_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.UML_DIAGRAM_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.VALIDATION_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.DEPENDENCY_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.FEATURE_CONSTRAINT_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.IMPORT_ASPECT.ID * <li> ModelerCore.EXTENSION_POINT.RELATIONSHIP_ASPECT.ID * </p> * @param extensionID the key indicating the type of MetamodelAspectFactory to return; may not be null * @return the MetamodelAspectFactory */ MetamodelAspectFactory getAspectFactory(String extensionID); }