blob: 429d7eb3693c7af68dd3af0e3889fc0b3828a3c7 [file] [log] [blame]
/*
* Copyright (c) 2005, 2018 IBM Corporation, CEA, and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM - initial API and implementation
* Kenn Hussey (CEA) - 327039, 418466, 451350, 485756
* Christian W. Damus (CEA) - 251963
* Kenn Hussey - 535301
*
*/
package org.eclipse.uml2.uml;
import java.util.Map;
import org.eclipse.emf.common.util.DiagnosticChain;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
/**
* <!-- begin-user-doc -->
* A representation of the model object '<em><b>Profile</b></em>'.
* <!-- end-user-doc -->
*
* <!-- begin-model-doc -->
* A profile defines limited extensions to a reference metamodel with the purpose of adapting the metamodel to a specific platform or domain.
* <p>From package UML::Packages.</p>
* <!-- end-model-doc -->
*
* <p>
* The following features are supported:
* </p>
* <ul>
* <li>{@link org.eclipse.uml2.uml.Profile#getMetaclassReferences <em>Metaclass Reference</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Profile#getMetamodelReferences <em>Metamodel Reference</em>}</li>
* </ul>
*
* @see org.eclipse.uml2.uml.UMLPackage#getProfile()
* @model
* @generated
*/
public interface Profile
extends org.eclipse.uml2.uml.Package {
/**
* Returns the value of the '<em><b>Metaclass Reference</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.ElementImport}.
* <p>
* This feature subsets the following features:
* </p>
* <ul>
* <li>'{@link org.eclipse.uml2.uml.Namespace#getElementImports() <em>Element Import</em>}'</li>
* </ul>
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References a metaclass that may be extended.
* <p>From package UML::Packages.</p>
* <!-- end-model-doc -->
* @return the value of the '<em>Metaclass Reference</em>' reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getProfile_MetaclassReference()
* @model ordered="false"
* @generated
*/
EList<ElementImport> getMetaclassReferences();
/**
* Creates a new {@link org.eclipse.uml2.uml.ElementImport}, with the specified '<em><b>Imported Element</b></em>', and appends it to the '<em><b>Metaclass Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedElement The '<em><b>Imported Element</b></em>' for the new {@link org.eclipse.uml2.uml.ElementImport}, or <code>null</code>.
* @return The new {@link org.eclipse.uml2.uml.ElementImport}.
* @see #getMetaclassReferences()
* @generated
*/
ElementImport createMetaclassReference(PackageableElement importedElement);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.ElementImport} with the specified '<em><b>Imported Element</b></em>' from the '<em><b>Metaclass Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedElement The '<em><b>Imported Element</b></em>' of the {@link org.eclipse.uml2.uml.ElementImport} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.ElementImport} with the specified '<em><b>Imported Element</b></em>', or <code>null</code>.
* @see #getMetaclassReferences()
* @generated
*/
ElementImport getMetaclassReference(PackageableElement importedElement);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.ElementImport} with the specified '<em><b>Imported Element</b></em>' from the '<em><b>Metaclass Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedElement The '<em><b>Imported Element</b></em>' of the {@link org.eclipse.uml2.uml.ElementImport} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.ElementImport} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.ElementImport} with the specified '<em><b>Imported Element</b></em>', or <code>null</code>.
* @see #getMetaclassReferences()
* @generated
*/
ElementImport getMetaclassReference(PackageableElement importedElement,
boolean createOnDemand);
/**
* Returns the value of the '<em><b>Metamodel Reference</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.PackageImport}.
* <p>
* This feature subsets the following features:
* </p>
* <ul>
* <li>'{@link org.eclipse.uml2.uml.Namespace#getPackageImports() <em>Package Import</em>}'</li>
* </ul>
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References a package containing (directly or indirectly) metaclasses that may be extended.
* <p>From package UML::Packages.</p>
* <!-- end-model-doc -->
* @return the value of the '<em>Metamodel Reference</em>' reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getProfile_MetamodelReference()
* @model ordered="false"
* @generated
*/
EList<PackageImport> getMetamodelReferences();
/**
* Creates a new {@link org.eclipse.uml2.uml.PackageImport}, with the specified '<em><b>Imported Package</b></em>', and appends it to the '<em><b>Metamodel Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedPackage The '<em><b>Imported Package</b></em>' for the new {@link org.eclipse.uml2.uml.PackageImport}, or <code>null</code>.
* @return The new {@link org.eclipse.uml2.uml.PackageImport}.
* @see #getMetamodelReferences()
* @generated
*/
PackageImport createMetamodelReference(
org.eclipse.uml2.uml.Package importedPackage);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageImport} with the specified '<em><b>Imported Package</b></em>' from the '<em><b>Metamodel Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedPackage The '<em><b>Imported Package</b></em>' of the {@link org.eclipse.uml2.uml.PackageImport} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.PackageImport} with the specified '<em><b>Imported Package</b></em>', or <code>null</code>.
* @see #getMetamodelReferences()
* @generated
*/
PackageImport getMetamodelReference(
org.eclipse.uml2.uml.Package importedPackage);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageImport} with the specified '<em><b>Imported Package</b></em>' from the '<em><b>Metamodel Reference</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param importedPackage The '<em><b>Imported Package</b></em>' of the {@link org.eclipse.uml2.uml.PackageImport} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.PackageImport} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.PackageImport} with the specified '<em><b>Imported Package</b></em>', or <code>null</code>.
* @see #getMetamodelReferences()
* @generated
*/
PackageImport getMetamodelReference(
org.eclipse.uml2.uml.Package importedPackage,
boolean createOnDemand);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* An element imported as a metaclassReference is not specialized or generalized in a Profile.
* metaclassReference.importedElement->
* select(c | c.oclIsKindOf(Classifier) and
* (c.oclAsType(Classifier).allParents()->collect(namespace)->includes(self)))->isEmpty()
* and
* packagedElement->
* select(oclIsKindOf(Classifier))->collect(oclAsType(Classifier).allParents())->
* intersection(metaclassReference.importedElement->select(oclIsKindOf(Classifier))->collect(oclAsType(Classifier)))->isEmpty()
* @param diagnostics The chain of diagnostics to which problems are to be appended.
* @param context The cache of context-specific information.
* <!-- end-model-doc -->
* @model
* @generated
*/
boolean validateMetaclassReferenceNotSpecialized(
DiagnosticChain diagnostics, Map<Object, Object> context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* All elements imported either as metaclassReferences or through metamodelReferences are members of the same base reference metamodel.
* metamodelReference.importedPackage.elementImport.importedElement.allOwningPackages()->
* union(metaclassReference.importedElement.allOwningPackages() )->notEmpty()
* @param diagnostics The chain of diagnostics to which problems are to be appended.
* @param context The cache of context-specific information.
* <!-- end-model-doc -->
* @model
* @generated
*/
boolean validateReferencesSameMetamodel(DiagnosticChain diagnostics,
Map<Object, Object> context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Creates and returns an instance of (the Ecore representation of) the specified classifier defined in this profile.
* @param classifier The classifier of which to create an instance.
* <!-- end-model-doc -->
* @model required="true" ordered="false" classifierRequired="true" classifierOrdered="false"
* @generated
*/
EObject create(Classifier classifier);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Determines whether this profile is defined.
* <!-- end-model-doc -->
* @model kind="operation" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
* @generated
*/
boolean isDefined();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Defines this profile by (re)creating Ecore representations of its current contents.
* <!-- end-model-doc -->
* @model ordered="false"
* @generated
*/
EPackage define();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Defines this profile by (re)creating Ecore representations of its current contents, using the specified options, diagnostics, and context.
* @param options The options to use.
* @param diagnostics The chain of diagnostics to which problems are to be appended.
* @param context The cache of context-specific information.
* <!-- end-model-doc -->
* @model required="true" ordered="false" optionsRequired="true" optionsOrdered="false" diagnosticsRequired="true" diagnosticsOrdered="false" contextRequired="true" contextOrdered="false"
* @generated
*/
EPackage define(Map<String, String> options, DiagnosticChain diagnostics,
Map<Object, Object> context);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Retrieves the current definition (Ecore representation) of this profile.
* <!-- end-model-doc -->
* @model kind="operation" ordered="false"
* @generated
*/
EPackage getDefinition();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Retrieves the current definition (Ecore representation) of the specified named element in this profile.
* @param namedElement The named element whose definition to retrieve.
* <!-- end-model-doc -->
* @model ordered="false" namedElementRequired="true" namedElementOrdered="false"
* @generated
*/
ENamedElement getDefinition(NamedElement namedElement);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Retrieves the metaclasses referenced by this profile.
* <!-- end-model-doc -->
* @model kind="operation" ordered="false"
* @generated
*/
EList<org.eclipse.uml2.uml.Class> getReferencedMetaclasses();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Retrieves the metamodels referenced by this profile.
* <!-- end-model-doc -->
* @model kind="operation" ordered="false"
* @generated
*/
EList<Model> getReferencedMetamodels();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Retrieves the extensions owned by this profile, excluding non-required extensions if indicated.
* @param requiredOnly Whether to retrieve only required extensions.
* <!-- end-model-doc -->
* @model ordered="false" requiredOnlyDataType="org.eclipse.uml2.types.Boolean" requiredOnlyRequired="true" requiredOnlyOrdered="false"
* @generated
*/
EList<Extension> getOwnedExtensions(boolean requiredOnly);
} // Profile