blob: 1d9129a5e6649016cf60b5fae8a26a50d62642a0 [file] [log] [blame]
/*
* Copyright (c) 2005, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - initial API and implementation
*
* $Id: Package.java,v 1.15 2006/05/13 04:46:32 khussey Exp $
*/
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.EClass;
/**
* <!-- begin-user-doc -->
* A representation of the model object '<em><b>Package</b></em>'.
* <!-- end-user-doc -->
*
* <!-- begin-model-doc -->
* A package is used to group elements, and provides a namespace for the grouped elements.
* A package can have one or more profile applications to indicate which profiles have been applied. Because a profile is a package, it is possible to apply a profile not only to packages, but also to profiles.
* Package specializes TemplateableElement and PackageableElement specializes ParameterableElement to specify that a package can be used as a template and a PackageableElement as a template parameter.
* <!-- end-model-doc -->
*
* <p>
* The following features are supported:
* <ul>
* <li>{@link org.eclipse.uml2.uml.Package#getOwnedTypes <em>Owned Type</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Package#getPackageMerges <em>Package Merge</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Package#getPackagedElements <em>Packaged Element</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Package#getNestedPackages <em>Nested Package</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Package#getNestingPackage <em>Nesting Package</em>}</li>
* <li>{@link org.eclipse.uml2.uml.Package#getProfileApplications <em>Profile Application</em>}</li>
* </ul>
* </p>
*
* @see org.eclipse.uml2.uml.UMLPackage#getPackage()
* @model
* @generated
*/
public interface Package
extends Namespace, PackageableElement, TemplateableElement {
/**
* Returns the value of the '<em><b>Package Merge</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.PackageMerge}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.uml.PackageMerge#getReceivingPackage <em>Receiving Package</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References the PackageMerges that are owned by this Package.
* <!-- end-model-doc -->
* @return the value of the '<em>Package Merge</em>' containment reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_PackageMerge()
* @see org.eclipse.uml2.uml.PackageMerge#getReceivingPackage
* @model type="org.eclipse.uml2.uml.PackageMerge" opposite="receivingPackage" containment="true" ordered="false"
* @generated
*/
EList getPackageMerges();
/**
* Creates a new {@link org.eclipse.uml2.uml.PackageMerge}, with the specified '<em><b>Merged Package</b></em>', and appends it to the '<em><b>Package Merge</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param mergedPackage The '<em><b>Merged Package</b></em>' for the new {@link org.eclipse.uml2.uml.PackageMerge}, or <code>null</code>.
* @return The new {@link org.eclipse.uml2.uml.PackageMerge}.
* @see #getPackageMerges()
* @generated
*/
PackageMerge createPackageMerge(Package mergedPackage);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageMerge} with the specified '<em><b>Merged Package</b></em>' from the '<em><b>Package Merge</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param mergedPackage The '<em><b>Merged Package</b></em>' of the {@link org.eclipse.uml2.uml.PackageMerge} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.PackageMerge} with the specified '<em><b>Merged Package</b></em>', or <code>null</code>.
* @see #getPackageMerges()
* @generated
*/
PackageMerge getPackageMerge(Package mergedPackage);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageMerge} with the specified '<em><b>Merged Package</b></em>' from the '<em><b>Package Merge</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param mergedPackage The '<em><b>Merged Package</b></em>' of the {@link org.eclipse.uml2.uml.PackageMerge} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.PackageMerge} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.PackageMerge} with the specified '<em><b>Merged Package</b></em>', or <code>null</code>.
* @see #getPackageMerges()
* @generated
*/
PackageMerge getPackageMerge(Package mergedPackage, boolean createOnDemand);
/**
* Returns the value of the '<em><b>Packaged Element</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.PackageableElement}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* Specifies the packageable elements that are owned by this Package.
* <!-- end-model-doc -->
* @return the value of the '<em>Packaged Element</em>' containment reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_PackagedElement()
* @model type="org.eclipse.uml2.uml.PackageableElement" containment="true" ordered="false"
* @generated
*/
EList getPackagedElements();
/**
* Creates a new {@link org.eclipse.uml2.uml.PackageableElement}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Packaged Element</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' for the new {@link org.eclipse.uml2.uml.PackageableElement}, or <code>null</code>.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.PackageableElement} to create.
* @return The new {@link org.eclipse.uml2.uml.PackageableElement}.
* @see #getPackagedElements()
* @generated
*/
PackageableElement createPackagedElement(String name, EClass eClass);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageableElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Packaged Element</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.PackageableElement} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.PackageableElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getPackagedElements()
* @generated
*/
PackageableElement getPackagedElement(String name);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.PackageableElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Packaged Element</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.PackageableElement} to retrieve, or <code>null</code>.
* @param ignoreCase Whether to ignore case in {@link java.lang.String} comparisons.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.PackageableElement} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.PackageableElement} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.PackageableElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getPackagedElements()
* @generated
*/
PackageableElement getPackagedElement(String name, boolean ignoreCase,
EClass eClass, boolean createOnDemand);
/**
* Returns the value of the '<em><b>Owned Type</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.Type}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.uml.Type#getPackage <em>Package</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References the packaged elements that are Types.
* <!-- end-model-doc -->
* @return the value of the '<em>Owned Type</em>' reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_OwnedType()
* @see org.eclipse.uml2.uml.Type#getPackage
* @model type="org.eclipse.uml2.uml.Type" opposite="package" transient="true" volatile="true" derived="true" ordered="false"
* @generated
*/
EList getOwnedTypes();
/**
* Creates a new {@link org.eclipse.uml2.uml.Type}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Owned Type</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' for the new {@link org.eclipse.uml2.uml.Type}, or <code>null</code>.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.Type} to create.
* @return The new {@link org.eclipse.uml2.uml.Type}.
* @see #getOwnedTypes()
* @generated
*/
Type createOwnedType(String name, EClass eClass);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.Type} with the specified '<em><b>Name</b></em>' from the '<em><b>Owned Type</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Type} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.Type} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getOwnedTypes()
* @generated
*/
Type getOwnedType(String name);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.Type} with the specified '<em><b>Name</b></em>' from the '<em><b>Owned Type</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Type} to retrieve, or <code>null</code>.
* @param ignoreCase Whether to ignore case in {@link java.lang.String} comparisons.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.Type} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.Type} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.Type} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getOwnedTypes()
* @generated
*/
Type getOwnedType(String name, boolean ignoreCase, EClass eClass,
boolean createOnDemand);
/**
* Returns the value of the '<em><b>Nested Package</b></em>' reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.Package}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.uml.Package#getNestingPackage <em>Nesting Package</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References the packaged elements that are Packages.
* <!-- end-model-doc -->
* @return the value of the '<em>Nested Package</em>' reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_NestedPackage()
* @see org.eclipse.uml2.uml.Package#getNestingPackage
* @model type="org.eclipse.uml2.uml.Package" opposite="nestingPackage" transient="true" volatile="true" derived="true" ordered="false"
* @generated
*/
EList getNestedPackages();
/**
* Creates a new {@link org.eclipse.uml2.uml.Package}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Nested Package</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' for the new {@link org.eclipse.uml2.uml.Package}, or <code>null</code>.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.Package} to create.
* @return The new {@link org.eclipse.uml2.uml.Package}.
* @see #getNestedPackages()
* @generated
*/
Package createNestedPackage(String name, EClass eClass);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.Package} with the specified '<em><b>Name</b></em>' from the '<em><b>Nested Package</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Package} to retrieve, or <code>null</code>.
* @return The first {@link org.eclipse.uml2.uml.Package} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getNestedPackages()
* @generated
*/
Package getNestedPackage(String name);
/**
* Retrieves the first {@link org.eclipse.uml2.uml.Package} with the specified '<em><b>Name</b></em>' from the '<em><b>Nested Package</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Package} to retrieve, or <code>null</code>.
* @param ignoreCase Whether to ignore case in {@link java.lang.String} comparisons.
* @param eClass The Ecore class of the {@link org.eclipse.uml2.uml.Package} to retrieve, or <code>null</code>.
* @param createOnDemand Whether to create a {@link org.eclipse.uml2.uml.Package} on demand if not found.
* @return The first {@link org.eclipse.uml2.uml.Package} with the specified '<em><b>Name</b></em>', or <code>null</code>.
* @see #getNestedPackages()
* @generated
*/
Package getNestedPackage(String name, boolean ignoreCase, EClass eClass,
boolean createOnDemand);
/**
* Returns the value of the '<em><b>Nesting Package</b></em>' reference.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.uml.Package#getNestedPackages <em>Nested Package</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References the owning package of a package.
* References the Package that owns this Package.
* <!-- end-model-doc -->
* @return the value of the '<em>Nesting Package</em>' reference.
* @see #setNestingPackage(Package)
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_NestingPackage()
* @see org.eclipse.uml2.uml.Package#getNestedPackages
* @model opposite="nestedPackage" transient="true" volatile="true" derived="true" ordered="false"
* @generated
*/
Package getNestingPackage();
/**
* Sets the value of the '{@link org.eclipse.uml2.uml.Package#getNestingPackage <em>Nesting Package</em>}' reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Nesting Package</em>' reference.
* @see #getNestingPackage()
* @generated
*/
void setNestingPackage(Package value);
/**
* Returns the value of the '<em><b>Profile Application</b></em>' containment reference list.
* The list contents are of type {@link org.eclipse.uml2.uml.ProfileApplication}.
* It is bidirectional and its opposite is '{@link org.eclipse.uml2.uml.ProfileApplication#getApplyingPackage <em>Applying Package</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* References the ProfileApplications that indicate which profiles have been applied to the Package.
* <!-- end-model-doc -->
* @return the value of the '<em>Profile Application</em>' containment reference list.
* @see org.eclipse.uml2.uml.UMLPackage#getPackage_ProfileApplication()
* @see org.eclipse.uml2.uml.ProfileApplication#getApplyingPackage
* @model type="org.eclipse.uml2.uml.ProfileApplication" opposite="applyingPackage" containment="true" ordered="false"
* @generated
*/
EList getProfileApplications();
/**
* Creates a new {@link org.eclipse.uml2.uml.ProfileApplication} and appends it to the '<em><b>Profile Application</b></em>' containment reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @return The new {@link org.eclipse.uml2.uml.ProfileApplication}.
* @see #getProfileApplications()
* @generated
*/
ProfileApplication createProfileApplication();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* If an element that is owned by a package has visibility, it is public or private.
* self.ownedElements->forAll(e | e.visibility->notEmpty() implies e.visbility = #public or e.visibility = #private)
* <!-- end-model-doc -->
* @model
* @generated
*/
boolean validateElementsPublicOrPrivate(DiagnosticChain diagnostics,
Map context);
/**
* Creates a new {@link org.eclipse.uml2.uml.Package}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Nested Package</b></em>' reference list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param name The '<em><b>Name</b></em>' for the new {@link org.eclipse.uml2.uml.Package}, or <code>null</code>.
* @return The new {@link org.eclipse.uml2.uml.Package}.
* @see #getNestedPackages()
* @generated
*/
Package createNestedPackage(String name);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model required="true" ordered="false" nameDataType="org.eclipse.uml2.uml.String" nameRequired="true" nameOrdered="false" isAbstractDataType="org.eclipse.uml2.uml.Boolean" isAbstractRequired="true" isAbstractOrdered="false"
* @generated
*/
org.eclipse.uml2.uml.Class createOwnedClass(String name, boolean isAbstract);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model required="true" ordered="false" nameDataType="org.eclipse.uml2.uml.String" nameRequired="true" nameOrdered="false"
* @generated
*/
Enumeration createOwnedEnumeration(String name);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model required="true" ordered="false" nameDataType="org.eclipse.uml2.uml.String" nameRequired="true" nameOrdered="false"
* @generated
*/
PrimitiveType createOwnedPrimitiveType(String name);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model dataType="org.eclipse.uml2.uml.Boolean" required="true" ordered="false" profileRequired="true" profileOrdered="false"
* @generated
*/
boolean isProfileApplied(Profile profile);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model type="org.eclipse.emf.ecore.EObject" ordered="false" profileRequired="true" profileOrdered="false"
* @generated
*/
EList applyProfile(Profile profile);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model type="org.eclipse.emf.ecore.EObject" ordered="false" profileRequired="true" profileOrdered="false"
* @generated
*/
EList unapplyProfile(Profile profile);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model kind="operation" type="org.eclipse.uml2.uml.Profile" ordered="false"
* @generated
*/
EList getAppliedProfiles();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model ordered="false" qualifiedNameDataType="org.eclipse.uml2.uml.String" qualifiedNameRequired="true" qualifiedNameOrdered="false"
* @generated
*/
Profile getAppliedProfile(String qualifiedName);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model ordered="false" qualifiedNameDataType="org.eclipse.uml2.uml.String" qualifiedNameRequired="true" qualifiedNameOrdered="false" recurseDataType="org.eclipse.uml2.uml.Boolean" recurseRequired="true" recurseOrdered="false"
* @generated
*/
Profile getAppliedProfile(String qualifiedName, boolean recurse);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model kind="operation" type="org.eclipse.uml2.uml.ProfileApplication" ordered="false"
* @generated
*/
EList getAllProfileApplications();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model ordered="false" profileRequired="true" profileOrdered="false"
* @generated
*/
ProfileApplication getProfileApplication(Profile profile);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model ordered="false" profileRequired="true" profileOrdered="false" recurseDataType="org.eclipse.uml2.uml.Boolean" recurseRequired="true" recurseOrdered="false"
* @generated
*/
ProfileApplication getProfileApplication(Profile profile, boolean recurse);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model required="true" ordered="false" nameDataType="org.eclipse.uml2.uml.String" nameRequired="true" nameOrdered="false"
* @generated
*/
Interface createOwnedInterface(String name);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model kind="operation" dataType="org.eclipse.uml2.uml.Boolean" required="true" ordered="false"
* @generated
*/
boolean isModelLibrary();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model kind="operation" type="org.eclipse.uml2.uml.Profile" ordered="false"
* @generated
*/
EList getAllAppliedProfiles();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The query visibleMembers() defines which members of a Package can be accessed outside it.
* result = member->select( m | self.makesVisible(m))
* <!-- end-model-doc -->
* @model type="org.eclipse.uml2.uml.PackageableElement" ordered="false"
* @generated
*/
EList visibleMembers();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* <!-- begin-model-doc -->
* The query makesVisible() defines whether a Package makes an element visible outside itself. Elements with no visibility and elements with public visibility are made visible.
* self.member->includes(el)
* result = (ownedMember->includes(el)) or
* (elementImport->select(ei|ei.importedElement = #public)->collect(ei|ei.importedElement)->includes(el)) or
* (packageImport->select(pi|pi.visibility = #public)->collect(pi|pi.importedPackage.member->includes(el))->notEmpty())
* <!-- end-model-doc -->
* @model dataType="org.eclipse.uml2.uml.Boolean" required="true" ordered="false" elRequired="true" elOrdered="false"
* @generated
*/
boolean makesVisible(NamedElement el);
} // Package