UMLProfile.java

package org.andromda.metafacades.uml;

import org.andromda.core.profile.Profile;

/**
 * Contains the common UML AndroMDA profile. That is, it contains elements "common" to all AndroMDA components (tagged
 * values, stereotypes, and datatypes).
 *
 * @author Chad Brandon
 * @author Bob Fields
 */
public class UMLProfile
{
    /* ----------------- Stereotypes -------------------- */

    /**
     * The Profile instance from which we retrieve the mapped profile names.
     */
    private static final Profile profile = Profile.instance();

    /**
     * 'Criteria' Represents a criteria search.
     */
    public static final String STEREOTYPE_CRITERIA = profile.get("CRITERIA");

    /**
     * 'Entity' Represents a persistent entity.
     */
    public static final String STEREOTYPE_ENTITY = profile.get("ENTITY");

    /**
     * 'EmbeddedValue'
     * Represents an embedded value (typically embedded with an entity as an attribute).
     */
    public static final String STEREOTYPE_EMBEDDED_VALUE = profile.get("EMBEDDED_VALUE");

    /**
     * 'FinderMethod' Represents a finder method on an entity.
     */
    public static final String STEREOTYPE_FINDER_METHOD = profile.get("FINDER_METHOD");

    /**
     * 'Identifier' Represents the primary key of an entity.
     */
    public static final String STEREOTYPE_IDENTIFIER = profile.get("IDENTIFIER");

    /**
     * 'Unique' If an attribute has this stereotype, it is considered unique.
     */
    public static final String STEREOTYPE_UNIQUE = profile.get("UNIQUE");

    /**
     * 'Service' Represents a service.
     */
    public static final String STEREOTYPE_SERVICE = profile.get("SERVICE");

    /**
     * Represents a service class/operation.
     */
    public static final String STEREOTYPE_SERVICE_ELEMENT = profile.get("SERVICE_ELEMENT");

    /**
     * 'ValueObject' Represents a value object.
     */
    public static final String STEREOTYPE_VALUE_OBJECT = profile.get("VALUE_OBJECT");

    /**
     * 'WebFault'
     * Represents a web service exception (fault). Stereotype a class with this stereotype when it is thrown by a CXF/JAX-WS service.
     */
    public static final String STEREOTYPE_WEB_FAULT = profile.get(
        "WEB_FAULT");

    /**
     * 'WebService' Represents a web service. Stereotype a class with this stereotype when you want everything on the class to be
     * exposed as a web service.
     */
    public static final String STEREOTYPE_WEBSERVICE = profile.get(
        "WEBSERVICE");

    /**
     * 'WebServiceOperation'
     * Stereotype an operation on a <code>service</code> if you wish to expose the operation.
     */
    public static final String STEREOTYPE_WEBSERVICE_OPERATION = profile.get(
        "WEBSERVICE_OPERATION");

    /**
     * 'XmlSchema'
     * Stereotype an operation on a <code>service</code> if you wish to expose the operation.
     */
    public static final String STEREOTYPE_XMLSCHEMA = profile.get(
        "XMLSCHEMA");

    /**
     * 'Exception'
     * The base exception stereotype. If a model element is stereotyped with this (or one of its specializations), then
     * the exception can be generated by a cartridge and a dependency to it from an operation will add a throws clause.
     */
    public static final String STEREOTYPE_EXCEPTION = profile.get("EXCEPTION");

    /**
     * 'Enumeration' Represents an enumeration type.
     */
    public static final String STEREOTYPE_ENUMERATION = profile.get("ENUMERATION");

    /**
     * 'ApplicationException'
     * Represents exceptions thrown during normal application processing (such as business exceptions). It extends the
     * base exception stereotype.
     */
    public static final String STEREOTYPE_APPLICATION_EXCEPTION = profile.get(
        "APPLICATION_EXCEPTION");

    /**
     * 'UnexpectedException'
     * Represents unexpected exceptions that can occur during application processing. This that a caller isn't expected
     * to handle.
     */
    public static final String STEREOTYPE_UNEXPECTED_EXCEPTION = profile.get(
        "UNEXPECTED_EXCEPTION");

    /**
     * 'ExceptionRef'
     * Represents a reference to an exception model element. Model dependencies to unstereotyped exception model
     * elements can be stereotyped with this. This allows the user to create a custom exception class since the
     * exception itself will not be generated but the references to it will be (i.e. the throws clause within an
     * operation).
     * Deprecated: In UML2, design the operation to throw the declared exceptions instead of drawing a dependency.
     */
    public static final String STEREOTYPE_EXCEPTION_REF = profile.get("EXCEPTION_REF");

    /**
     * 'Nullable'
     * Used to indicate whether or not a parameter is nullable (since parameters do <strong>NOT </strong> allow
     * specification of multiplicity.
     * Deprecated: Use the parameter multiplicity lowerBound=0 instead
     */
    public static final String STEREOTYPE_NULLABLE = profile.get("NULLABLE");

    /**
     * 'Manageable' Represents a manageable entity.
     */
    public static final String STEREOTYPE_MANAGEABLE = profile.get("MANAGEABLE");

    /**
     * 'Transient' Indicates if a persistence type's property is transient.
     */
    public static final String STEREOTYPE_TRANSIENT = profile.get("TRANSIENT");

    /**
     * 'FrontEndUseCase'
     * Represents a "front end" use case (that is a use case used to model a presentation tier or "front end").
     */
    public static final String STEREOTYPE_FRONT_END_USECASE = profile.get(
        "FRONT_END_USE_CASE");

    /**
     * 'FrontEndApplication'
     * Represents a "front end" use case that is the entry point to the presentation tier.
     */
    public static final String STEREOTYPE_FRONT_END_APPLICATION = profile.get(
        "FRONT_END_APPLICATION");

    /**
     * 'FrontEndView'
     * Represents a "front end" view (that is it can represent a JSP page, etc).
     */
    public static final String STEREOTYPE_FRONT_END_VIEW = profile.get(
        "FRONT_END_VIEW");

    /**
     * 'FrontEndException'
     * Represents an exception on a "front-end" view.
     */
    public static final String STEREOTYPE_FRONT_END_EXCEPTION = profile.get(
        "FRONT_END_EXCEPTION");

    /**
     * 'Queue' Represents a "Queue" message destination.
     */
    public static final String STEREOTYPE_QUEUE = profile.get("QUEUE");

    /**
     * 'Topic' Represents a "Topic" message destination.
     */
    public static final String STEREOTYPE_TOPIC = profile.get("TOPIC");

    /**
     * 'DocOnly' Modeled component is for documentation only. Do not generate code.
     */
    public static final String STEREOTYPE_DOC_ONLY = profile.get("DOC_ONLY");

    /**
     * 'Future' Modeled component will be developed in the Future. Do not generate code.
     */
    public static final String STEREOTYPE_FUTURE = profile.get("FUTURE");

    /**
     * 'Ignore' Modeled component should be ignored. Do not generate code.
     */
    public static final String STEREOTYPE_IGNORE = profile.get("IGNORE");

    /**
     * 'analysis' Modeled component should be ignored. Do not generate code.
     */
    public static final String STEREOTYPE_ANALYSIS = profile.get("ANALYSIS");

    /**
     * 'perspective' Modeled component should be ignored. Do not generate code.
     */
    public static final String STEREOTYPE_PERSPECTIVE = profile.get("PERSPECTIVE");

    /* ----------------- Tagged Values -------------------- */

    /**
     * 'documentation' Represents documentation stored as a tagged value
     */
    public static final String TAGGEDVALUE_DOCUMENTATION = profile.get(
        "DOCUMENTATION");

    /**
     * 'hyperlinkModel' Represents a model hyperlink stored as a tagged value.
     */
    public static final String TAGGEDVALUE_MODEL_HYPERLINK = profile.get(
        "MODEL_HYPERLINK");

    /**
     * 'hyperlinkTextActive' Represents an external hyperlink (a website outside of a model).
     */
    public static final String TAGGEDVALUE_EXTERNAL_HYPERLINK = profile.get(
        "EXTERNAL_HYPERLINK");

    /**
     * 'andromda_persistence_schema' Represents the name of the schema for entity persistence.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_SCHEMA = profile.get(
        "PERSISTENCE_SCHEMA");

    /**
     * 'andromda_persistence_table' Represents a relational table name for entity persistence.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_TABLE = profile.get(
        "PERSISTENCE_TABLE");

    /**
     * 'andromda_persistence_column' Represents a relational table column name for entity persistence.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_COLUMN = profile.get(
        "PERSISTENCE_COLUMN");

    /**
     * 'andromda_persistence_column_length' Represents a relational table column length
     */
    public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_LENGTH = profile.get(
        "PERSISTENCE_COLUMN_LENGTH");

    /**
     * 'andromda_persistence_column_index' Represents a relational table column index name.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_INDEX = profile.get(
        "PERSISTENCE_COLUMN_INDEX");

    /**
     * 'andromda_persistence_immutable' Indicates if a persistence type is immutable.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_IMMUTABLE = profile.get(
        "PERSISTENCE_IMMUTABLE");

    /**
     * 'andromda_persistence_foreign_identifier'
     * Used on an association end to indicate whether its owning entity should have its identifier also be the foreign
     * key to the related entity.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_FOREIGN_IDENTIFIER = profile.get(
        "PERSISTENCE_FOREIGN_IDENTIFIER");

    /**
     * 'andromda_persistence_assigned_identifier'
     * Used on an identifier to indicate whether or not the identifier is <em>assigned</em> (meaning
     * that the identifier is manually assigned instead of generated.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_ASSIGNED_IDENTIFIER = profile.get(
        "PERSISTENCE_ASSIGNED_IDENTIFIER");

    /**
     * 'andromda_persistence_foreignkey_constraint'
     * Used on an association end to denote to name of the foreign key constraint to use in the database.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_FOREIGN_KEY_CONSTRAINT_NAME = profile.get(
        "PERSISTENCE_FOREIGN_KEY_CONSTRAINT_NAME");

    /**
     * 'andromda_persistence_joincolumn_order' Specifies the order of columns in JoinColumn annotations
     * which must match the FK column order for the association, delimited by , or ; or |
     */
    public static final String TAGGEDVALUE_PERSISTENCE_JOINCOLUMN_ORDER =
        profile.get("PERSISTENCE_JOINCOLUMN_ORDER");

    /**
     * 'andromda_persistence_enumeration_member_variable'
     * Used to assign an enumeration attribute as a member variable rather than a literal.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_ENUMERATION_MEMBER_VARIABLE = profile.get(
        "PERSISTENCE_ENUMERATION_MEMBER_VARIABLE");

    /**
     * 'andromda_persistence_enumeration_literal_parameters'
     * Used on an enumeration literal to define the enumeration literal parameters.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_ENUMERATION_LITERAL_PARAMETERS = profile.get(
        "PERSISTENCE_ENUMERATION_LITERAL_PARAMETERS");

    /**
     * 'andromda_presentation_controller_usecase'
     * Used to assign the controller to the activity (when it can not be assigned explicitly).
     */
    public static final String TAGGEDVALUE_PRESENTATION_CONTROLLER_USECASE = profile.get(
        "PRESENTATION_CONTROLLER_USECASE");

    /**
     * 'andromda_presentation_view_table_columns'
     * Used to assign the table columns to a collection/array type parameter representing a table.
     */
    public static final String TAGGEDVALUE_PRESENTATION_TABLE_COLUMNS = profile.get(
        "PRESENTATION_TABLE_COLUMNS");

    /**
     * 'andromda_presentation_view_table'
     * Used to indicate whether or not a parameter should be considered a table (used when no
     * table columns are specified).
     */
    public static final String TAGGEDVALUE_PRESENTATION_IS_TABLE = profile.get(
        "PRESENTATION_IS_TABLE");

    /**
     * 'andromda_presentation_usecase_activity'
     * Used to associate an activity to a use case (when it can not be assigned explicitly).
     */
    public static final String TAGGEDVALUE_PRESENTATION_USECASE_ACTIVITY = profile.get(
        "PRESENTATION_USECASE_ACTIVITY");

    /**
     * 'andromda_webservice_style'
     * Stores the style of a web service (document, wrapped, rpc).
     */
    public static final String TAGGEDVALUE_WEBSERVICE_STYLE = profile.get(
        "WEBSERVICE_STYLE");

    /**
     * 'andromda_webservice_use' Stores the use of a web service (literal, encoded).
     */
    public static final String TAGGEDVALUE_WEBSERVICE_USE = profile.get(
        "WEBSERVICE_USE");

    /**
     * 'andromda_webservice_provider' Stores the provider of the web service (RPC, EJB).
     */
    public static final String TAGGEDVALUE_WEBSERVICE_PROVIDER = profile.get(
        "WEBSERVICE_PROVIDER");

    /**
     * 'andromda_role_name'
     * Stores the name of the role (if it's different than the name of the actor stereotyped as role)
     */
    public static final String TAGGEDVALUE_ROLE_NAME = profile.get("ROLE_NAME");

    /**
     * 'andromda_serialVersionUID'
     * Stores the serial version UID to be used for a class. If not specified, it will be calculated
     * based on the class signature.
     *
     * @see org.andromda.metafacades.uml.ClassifierFacade#getSerialVersionUID()
     */
    public static final String TAGGEDVALUE_SERIALVERSION_UID = profile.get(
        "SERIALVERSION_UID");

    /**
     * 'andromda_manageable_table_displayname'
     * The attribute to use when referencing this table from another one.
     */
    public static final String TAGGEDVALUE_MANAGEABLE_DISPLAY_NAME = profile.get(
        "MANAGEABLE_DISPLAY_NAME");

    /**
     * 'andromda_manageable_table_maxlistsize' The maximum number of records to load from the DB at the same time.
     * From Spring, Bpm4struts profile.xml.
     */
    public static final String TAGGEDVALUE_MANAGEABLE_MAXIMUM_LIST_SIZE = profile.get(
        "MANAGEABLE_MAXIMUM_LIST_SIZE");

    /**
     * 'andromda_manageable_table_pagesize' The maximum number of records to show at the same time.
     */
    public static final String TAGGEDVALUE_MANAGEABLE_PAGE_SIZE = profile.get(
        "MANAGEABLE_PAGE_SIZE");

    /**
     * 'andromda_manageable_table_resolveable'
     * Indicates whether or not the underlying entity keys should be resolved when referencing it.
     */
    public static final String TAGGEDVALUE_MANAGEABLE_RESOLVEABLE = profile.get(
        "MANAGEABLE_RESOLVEABLE");

    /**
     * 'andromda_persistence_column_uniqueGroup' Indicates the unique constraint name grouping the columns.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_UNIQUE_GROUP = profile.get(
        "COLUMN_UNIQUE_GROUP");

    /**
     * 'andromda_persistence_associationEnd_uniqueGroup' Indicates the unique constraint name grouping the columns.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_ASSOCIATION_END_UNIQUE_GROUP = profile.get(
        "ASSOCIATION_END_UNIQUE_GROUP");

    /**
     * 'andromda_persistence_associationEnd_primary'
     * Indicates whether or not the association end is considered "primary" used for things like indicating
     * which side of a one-to-one association should get the foreign key.
     */
    public static final String TAGGEDVALUE_PERSISTENCE_ASSOCIATION_END_PRIMARY = profile.get(
        "PERSISTENCE_ASSOCIATION_END_PRIMARY");

    /* ----------------- Data Types -------------------- */

    /**
     * Used to identify object types in the model, any other type that will be identified as an object must
     * specialize this type.
     */
    public static final String OBJECT_TYPE_NAME = profile.get("OBJECT_TYPE");

    /**
     * Used to identify collection types in the model, any other type that will be identified as a collection must
     * specialize this type. NonUnique / NonOrdered Collection. Default=Collection
     */
    public static final String COLLECTION_TYPE_NAME = profile.get("COLLECTION_TYPE");

    /**
     * Used to identify a list type in the model, any other type that will be identified as a list must specialize this
     * type. NonUnique / Ordered Collection. Default=List
     */
    public static final String LIST_TYPE_NAME = profile.get("LIST_TYPE");

    /**
     * Used to identify a set type in the model, any other type that will be identified as a set must specialize this
     * type. Unique / NonOrdered Collection. Default=Set
     */
    public static final String SET_TYPE_NAME = profile.get("SET_TYPE");

    /**
     * Used to identify an ordered set type in the model, any other type that will be identified as an ordered set must specialize this
     * type. Unique / Ordered Collection. Default=SortedSet
     */
    public static final String ORDERED_SET_TYPE_NAME = profile.get("ORDERED_SET_TYPE");

    /**
     * Used to identify a map type in the model, any other type that will be identified as a map type must specialize
     * this type. Default=Map
     */
    public static final String MAP_TYPE_NAME = profile.get("MAP_TYPE");

    /**
     * Used to identify a map type in the model, any other type that will be identified as a map type must specialize
     * this type. Default=SortedMap
     */
    public static final String ORDERED_MAP_TYPE_NAME = profile.get("ORDERED_MAP_TYPE");

    /**
     * Used to identify collection types in the model, any other type that will be identified as a collection must
     * specialize this type. NonUnique / NonOrdered Collection. Default=LinkedList
     */
    public static final String COLLECTION_IMPL_TYPE_NAME = profile.get("COLLECTION_IMPL_TYPE");

    /**
     * Used to identify a list type in the model, any other type that will be identified as a list must specialize this
     * type. NonUnique / Ordered Collection. Default=ArrayList
     */
    public static final String LIST_IMPL_TYPE_NAME = profile.get("LIST_IMPL_TYPE");

    /**
     * Used to identify a set type in the model, any other type that will be identified as a set must specialize this
     * type. Unique / NonOrdered Collection. Default=HashSet
     */
    public static final String SET_IMPL_TYPE_NAME = profile.get("SET_IMPL_TYPE");

    /**
     * Used to identify an ordered set type in the model, any other type that will be identified as an ordered set must specialize this
     * type. Unique / Ordered Collection. Default=SortedSet
     */
    public static final String ORDERED_SET_IMPL_TYPE_NAME = profile.get("ORDERED_SET_IMPL_TYPE");

    /**
     * Used to identify a map type in the model, any other type that will be identified as a map type must specialize
     * this type. Default=HashMap
     */
    public static final String MAP_IMPL_TYPE_NAME = profile.get("MAP_IMPL_TYPE");

    /**
     * Used to identify a map type in the model, any other type that will be identified as a map type must specialize
     * this type. Default=SortedMap
     */
    public static final String ORDERED_MAP_IMPL_TYPE_NAME = profile.get("ORDERED_MAP_IMPL_TYPE");

    /**
     * Used to identify date types in the model, any other type that will be identified as a date must specialize this
     * type. Default=datatype::Date
     */
    public static final String DATE_TYPE_NAME = profile.get("DATE_TYPE");

    /**
     * Used to identify time types in the model, any other type that will be identified as a time must specialize this
     * type. Default=datatype::Time
     */
    public static final String TIME_TYPE_NAME = profile.get("TIME_TYPE");

    /**
     * Used to identify datetime types in the model. Default=datatype::DateTime
     */
    public static final String DATETIME_TYPE_NAME = profile.get("DATETIME_TYPE");

    /**
     * Used to identify a boolean type in the model, any other type that will be identified as a boolean type must
     * specialize this type. Default=datatype::boolean
     */
    public static final String BOOLEAN_TYPE_NAME = profile.get("BOOLEAN_TYPE");
    /**
     * Used to identify a character type in the model, any other type that will be identified as a character type must
     * specialize this type. Default=datatype::Character
     */
    public static final String CHARACTER_TYPE_NAME = profile.get("CHARACTER_TYPE");

    /**
     * Used to identify a file type in the model, any other type that will be identified as a file type must specialize
     * this type. Default=datatype::File
     */
    public static final String FILE_TYPE_NAME = profile.get("FILE_TYPE");

    /**
     * Used to identify a Blob type in the model, any other type that will be identified as a Blob type must specialize
     * this type. Default=datatype::Blob
     */
    public static final String BLOB_TYPE_NAME = profile.get("BLOB_TYPE");

    /**
     * Used to identify a Clob type in the model, any other type that will be identified as a Clob type must specialize
     * this type. Default=datatype::Clob
     */
    public static final String CLOB_TYPE_NAME = profile.get("CLOB_TYPE");

    /**
     * Used to identify a string type in the model, any other type that will be identified as a string type must
     * specialize this type. Default=datatype::String
     */
    public static final String STRING_TYPE_NAME = profile.get("STRING_TYPE");

    /**
     * Used to identify a void type in the model, any other type that will be identified as a void type must
     * specialize this type. Default=datatype::void
     */
    public static final String VOID_TYPE_NAME = profile.get("VOID_TYPE");

    /**
     * Used to identify a double type in the model, any other type that will be identified as a double type must
     * specialize this type. Default=datatype::Double
     */
    public static final String DOUBLE_TYPE_NAME = profile.get("DOUBLE_TYPE");

    /**
     * Used to identify a float type in the model, any other type that will be identified as a float type must
     * specialize this type. Default=datatype::Float
     */
    public static final String FLOAT_TYPE_NAME = profile.get("FLOAT_TYPE");

    /**
     * Used to identify a integer type in the model, any other type that will be identified as a integer type must
     * specialize this type. Default=datatype::Integer
     */
    public static final String INTEGER_TYPE_NAME = profile.get("INTEGER_TYPE");

    /**
     * Used to identify a long type in the model, any other type that will be identified as a long type must
     * specialize this type. Default=datatype::Long
     */
    public static final String LONG_TYPE_NAME = profile.get("LONG_TYPE");
}