1 package org.andromda.metafacades.uml; 2 3 import org.andromda.core.profile.Profile; 4 5 /** 6 * Contains the common UML AndroMDA profile. That is, it contains elements "common" to all AndroMDA components (tagged 7 * values, stereotypes, and datatypes). 8 * 9 * @author Chad Brandon 10 * @author Bob Fields 11 */ 12 public class UMLProfile 13 { 14 /* ----------------- Stereotypes -------------------- */ 15 16 /** 17 * The Profile instance from which we retrieve the mapped profile names. 18 */ 19 private static final Profile profile = Profile.instance(); 20 21 /** 22 * 'Criteria' Represents a criteria search. 23 */ 24 public static final String STEREOTYPE_CRITERIA = profile.get("CRITERIA"); 25 26 /** 27 * 'Entity' Represents a persistent entity. 28 */ 29 public static final String STEREOTYPE_ENTITY = profile.get("ENTITY"); 30 31 /** 32 * 'EmbeddedValue' 33 * Represents an embedded value (typically embedded with an entity as an attribute). 34 */ 35 public static final String STEREOTYPE_EMBEDDED_VALUE = profile.get("EMBEDDED_VALUE"); 36 37 /** 38 * 'FinderMethod' Represents a finder method on an entity. 39 */ 40 public static final String STEREOTYPE_FINDER_METHOD = profile.get("FINDER_METHOD"); 41 42 /** 43 * 'Identifier' Represents the primary key of an entity. 44 */ 45 public static final String STEREOTYPE_IDENTIFIER = profile.get("IDENTIFIER"); 46 47 /** 48 * 'Unique' If an attribute has this stereotype, it is considered unique. 49 */ 50 public static final String STEREOTYPE_UNIQUE = profile.get("UNIQUE"); 51 52 /** 53 * 'Service' Represents a service. 54 */ 55 public static final String STEREOTYPE_SERVICE = profile.get("SERVICE"); 56 57 /** 58 * Represents a service class/operation. 59 */ 60 public static final String STEREOTYPE_SERVICE_ELEMENT = profile.get("SERVICE_ELEMENT"); 61 62 /** 63 * 'ValueObject' Represents a value object. 64 */ 65 public static final String STEREOTYPE_VALUE_OBJECT = profile.get("VALUE_OBJECT"); 66 67 /** 68 * 'WebFault' 69 * Represents a web service exception (fault). Stereotype a class with this stereotype when it is thrown by a CXF/JAX-WS service. 70 */ 71 public static final String STEREOTYPE_WEB_FAULT = profile.get( 72 "WEB_FAULT"); 73 74 /** 75 * 'WebService' Represents a web service. Stereotype a class with this stereotype when you want everything on the class to be 76 * exposed as a web service. 77 */ 78 public static final String STEREOTYPE_WEBSERVICE = profile.get( 79 "WEBSERVICE"); 80 81 /** 82 * 'WebServiceOperation' 83 * Stereotype an operation on a <code>service</code> if you wish to expose the operation. 84 */ 85 public static final String STEREOTYPE_WEBSERVICE_OPERATION = profile.get( 86 "WEBSERVICE_OPERATION"); 87 88 /** 89 * 'XmlSchema' 90 * Stereotype an operation on a <code>service</code> if you wish to expose the operation. 91 */ 92 public static final String STEREOTYPE_XMLSCHEMA = profile.get( 93 "XMLSCHEMA"); 94 95 /** 96 * 'Exception' 97 * The base exception stereotype. If a model element is stereotyped with this (or one of its specializations), then 98 * the exception can be generated by a cartridge and a dependency to it from an operation will add a throws clause. 99 */ 100 public static final String STEREOTYPE_EXCEPTION = profile.get("EXCEPTION"); 101 102 /** 103 * 'Enumeration' Represents an enumeration type. 104 */ 105 public static final String STEREOTYPE_ENUMERATION = profile.get("ENUMERATION"); 106 107 /** 108 * 'ApplicationException' 109 * Represents exceptions thrown during normal application processing (such as business exceptions). It extends the 110 * base exception stereotype. 111 */ 112 public static final String STEREOTYPE_APPLICATION_EXCEPTION = profile.get( 113 "APPLICATION_EXCEPTION"); 114 115 /** 116 * 'UnexpectedException' 117 * Represents unexpected exceptions that can occur during application processing. This that a caller isn't expected 118 * to handle. 119 */ 120 public static final String STEREOTYPE_UNEXPECTED_EXCEPTION = profile.get( 121 "UNEXPECTED_EXCEPTION"); 122 123 /** 124 * 'ExceptionRef' 125 * Represents a reference to an exception model element. Model dependencies to unstereotyped exception model 126 * elements can be stereotyped with this. This allows the user to create a custom exception class since the 127 * exception itself will not be generated but the references to it will be (i.e. the throws clause within an 128 * operation). 129 * Deprecated: In UML2, design the operation to throw the declared exceptions instead of drawing a dependency. 130 */ 131 public static final String STEREOTYPE_EXCEPTION_REF = profile.get("EXCEPTION_REF"); 132 133 /** 134 * 'Nullable' 135 * Used to indicate whether or not a parameter is nullable (since parameters do <strong>NOT </strong> allow 136 * specification of multiplicity. 137 * Deprecated: Use the parameter multiplicity lowerBound=0 instead 138 */ 139 public static final String STEREOTYPE_NULLABLE = profile.get("NULLABLE"); 140 141 /** 142 * 'Manageable' Represents a manageable entity. 143 */ 144 public static final String STEREOTYPE_MANAGEABLE = profile.get("MANAGEABLE"); 145 146 /** 147 * 'Transient' Indicates if a persistence type's property is transient. 148 */ 149 public static final String STEREOTYPE_TRANSIENT = profile.get("TRANSIENT"); 150 151 /** 152 * 'FrontEndUseCase' 153 * Represents a "front end" use case (that is a use case used to model a presentation tier or "front end"). 154 */ 155 public static final String STEREOTYPE_FRONT_END_USECASE = profile.get( 156 "FRONT_END_USE_CASE"); 157 158 /** 159 * 'FrontEndApplication' 160 * Represents a "front end" use case that is the entry point to the presentation tier. 161 */ 162 public static final String STEREOTYPE_FRONT_END_APPLICATION = profile.get( 163 "FRONT_END_APPLICATION"); 164 165 /** 166 * 'FrontEndView' 167 * Represents a "front end" view (that is it can represent a JSP page, etc). 168 */ 169 public static final String STEREOTYPE_FRONT_END_VIEW = profile.get( 170 "FRONT_END_VIEW"); 171 172 /** 173 * 'FrontEndException' 174 * Represents an exception on a "front-end" view. 175 */ 176 public static final String STEREOTYPE_FRONT_END_EXCEPTION = profile.get( 177 "FRONT_END_EXCEPTION"); 178 179 /** 180 * 'Queue' Represents a "Queue" message destination. 181 */ 182 public static final String STEREOTYPE_QUEUE = profile.get("QUEUE"); 183 184 /** 185 * 'Topic' Represents a "Topic" message destination. 186 */ 187 public static final String STEREOTYPE_TOPIC = profile.get("TOPIC"); 188 189 /** 190 * 'DocOnly' Modeled component is for documentation only. Do not generate code. 191 */ 192 public static final String STEREOTYPE_DOC_ONLY = profile.get("DOC_ONLY"); 193 194 /** 195 * 'Future' Modeled component will be developed in the Future. Do not generate code. 196 */ 197 public static final String STEREOTYPE_FUTURE = profile.get("FUTURE"); 198 199 /** 200 * 'Ignore' Modeled component should be ignored. Do not generate code. 201 */ 202 public static final String STEREOTYPE_IGNORE = profile.get("IGNORE"); 203 204 /** 205 * 'analysis' Modeled component should be ignored. Do not generate code. 206 */ 207 public static final String STEREOTYPE_ANALYSIS = profile.get("ANALYSIS"); 208 209 /** 210 * 'perspective' Modeled component should be ignored. Do not generate code. 211 */ 212 public static final String STEREOTYPE_PERSPECTIVE = profile.get("PERSPECTIVE"); 213 214 /* ----------------- Tagged Values -------------------- */ 215 216 /** 217 * 'documentation' Represents documentation stored as a tagged value 218 */ 219 public static final String TAGGEDVALUE_DOCUMENTATION = profile.get( 220 "DOCUMENTATION"); 221 222 /** 223 * 'hyperlinkModel' Represents a model hyperlink stored as a tagged value. 224 */ 225 public static final String TAGGEDVALUE_MODEL_HYPERLINK = profile.get( 226 "MODEL_HYPERLINK"); 227 228 /** 229 * 'hyperlinkTextActive' Represents an external hyperlink (a website outside of a model). 230 */ 231 public static final String TAGGEDVALUE_EXTERNAL_HYPERLINK = profile.get( 232 "EXTERNAL_HYPERLINK"); 233 234 /** 235 * 'andromda_persistence_schema' Represents the name of the schema for entity persistence. 236 */ 237 public static final String TAGGEDVALUE_PERSISTENCE_SCHEMA = profile.get( 238 "PERSISTENCE_SCHEMA"); 239 240 /** 241 * 'andromda_persistence_table' Represents a relational table name for entity persistence. 242 */ 243 public static final String TAGGEDVALUE_PERSISTENCE_TABLE = profile.get( 244 "PERSISTENCE_TABLE"); 245 246 /** 247 * 'andromda_persistence_column' Represents a relational table column name for entity persistence. 248 */ 249 public static final String TAGGEDVALUE_PERSISTENCE_COLUMN = profile.get( 250 "PERSISTENCE_COLUMN"); 251 252 /** 253 * 'andromda_persistence_column_length' Represents a relational table column length 254 */ 255 public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_LENGTH = profile.get( 256 "PERSISTENCE_COLUMN_LENGTH"); 257 258 /** 259 * 'andromda_persistence_column_index' Represents a relational table column index name. 260 */ 261 public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_INDEX = profile.get( 262 "PERSISTENCE_COLUMN_INDEX"); 263 264 /** 265 * 'andromda_persistence_immutable' Indicates if a persistence type is immutable. 266 */ 267 public static final String TAGGEDVALUE_PERSISTENCE_IMMUTABLE = profile.get( 268 "PERSISTENCE_IMMUTABLE"); 269 270 /** 271 * 'andromda_persistence_foreign_identifier' 272 * Used on an association end to indicate whether its owning entity should have its identifier also be the foreign 273 * key to the related entity. 274 */ 275 public static final String TAGGEDVALUE_PERSISTENCE_FOREIGN_IDENTIFIER = profile.get( 276 "PERSISTENCE_FOREIGN_IDENTIFIER"); 277 278 /** 279 * 'andromda_persistence_assigned_identifier' 280 * Used on an identifier to indicate whether or not the identifier is <em>assigned</em> (meaning 281 * that the identifier is manually assigned instead of generated. 282 */ 283 public static final String TAGGEDVALUE_PERSISTENCE_ASSIGNED_IDENTIFIER = profile.get( 284 "PERSISTENCE_ASSIGNED_IDENTIFIER"); 285 286 /** 287 * 'andromda_persistence_foreignkey_constraint' 288 * Used on an association end to denote to name of the foreign key constraint to use in the database. 289 */ 290 public static final String TAGGEDVALUE_PERSISTENCE_FOREIGN_KEY_CONSTRAINT_NAME = profile.get( 291 "PERSISTENCE_FOREIGN_KEY_CONSTRAINT_NAME"); 292 293 /** 294 * 'andromda_persistence_joincolumn_order' Specifies the order of columns in JoinColumn annotations 295 * which must match the FK column order for the association, delimited by , or ; or | 296 */ 297 public static final String TAGGEDVALUE_PERSISTENCE_JOINCOLUMN_ORDER = 298 profile.get("PERSISTENCE_JOINCOLUMN_ORDER"); 299 300 /** 301 * 'andromda_persistence_enumeration_member_variable' 302 * Used to assign an enumeration attribute as a member variable rather than a literal. 303 */ 304 public static final String TAGGEDVALUE_PERSISTENCE_ENUMERATION_MEMBER_VARIABLE = profile.get( 305 "PERSISTENCE_ENUMERATION_MEMBER_VARIABLE"); 306 307 /** 308 * 'andromda_persistence_enumeration_literal_parameters' 309 * Used on an enumeration literal to define the enumeration literal parameters. 310 */ 311 public static final String TAGGEDVALUE_PERSISTENCE_ENUMERATION_LITERAL_PARAMETERS = profile.get( 312 "PERSISTENCE_ENUMERATION_LITERAL_PARAMETERS"); 313 314 /** 315 * 'andromda_presentation_controller_usecase' 316 * Used to assign the controller to the activity (when it can not be assigned explicitly). 317 */ 318 public static final String TAGGEDVALUE_PRESENTATION_CONTROLLER_USECASE = profile.get( 319 "PRESENTATION_CONTROLLER_USECASE"); 320 321 /** 322 * 'andromda_presentation_view_table_columns' 323 * Used to assign the table columns to a collection/array type parameter representing a table. 324 */ 325 public static final String TAGGEDVALUE_PRESENTATION_TABLE_COLUMNS = profile.get( 326 "PRESENTATION_TABLE_COLUMNS"); 327 328 /** 329 * 'andromda_presentation_view_table' 330 * Used to indicate whether or not a parameter should be considered a table (used when no 331 * table columns are specified). 332 */ 333 public static final String TAGGEDVALUE_PRESENTATION_IS_TABLE = profile.get( 334 "PRESENTATION_IS_TABLE"); 335 336 /** 337 * 'andromda_presentation_usecase_activity' 338 * Used to associate an activity to a use case (when it can not be assigned explicitly). 339 */ 340 public static final String TAGGEDVALUE_PRESENTATION_USECASE_ACTIVITY = profile.get( 341 "PRESENTATION_USECASE_ACTIVITY"); 342 343 /** 344 * 'andromda_webservice_style' 345 * Stores the style of a web service (document, wrapped, rpc). 346 */ 347 public static final String TAGGEDVALUE_WEBSERVICE_STYLE = profile.get( 348 "WEBSERVICE_STYLE"); 349 350 /** 351 * 'andromda_webservice_use' Stores the use of a web service (literal, encoded). 352 */ 353 public static final String TAGGEDVALUE_WEBSERVICE_USE = profile.get( 354 "WEBSERVICE_USE"); 355 356 /** 357 * 'andromda_webservice_provider' Stores the provider of the web service (RPC, EJB). 358 */ 359 public static final String TAGGEDVALUE_WEBSERVICE_PROVIDER = profile.get( 360 "WEBSERVICE_PROVIDER"); 361 362 /** 363 * 'andromda_role_name' 364 * Stores the name of the role (if it's different than the name of the actor stereotyped as role) 365 */ 366 public static final String TAGGEDVALUE_ROLE_NAME = profile.get("ROLE_NAME"); 367 368 /** 369 * 'andromda_serialVersionUID' 370 * Stores the serial version UID to be used for a class. If not specified, it will be calculated 371 * based on the class signature. 372 * 373 * @see org.andromda.metafacades.uml.ClassifierFacade#getSerialVersionUID() 374 */ 375 public static final String TAGGEDVALUE_SERIALVERSION_UID = profile.get( 376 "SERIALVERSION_UID"); 377 378 /** 379 * 'andromda_manageable_table_displayname' 380 * The attribute to use when referencing this table from another one. 381 */ 382 public static final String TAGGEDVALUE_MANAGEABLE_DISPLAY_NAME = profile.get( 383 "MANAGEABLE_DISPLAY_NAME"); 384 385 /** 386 * 'andromda_manageable_table_maxlistsize' The maximum number of records to load from the DB at the same time. 387 * From Spring, Bpm4struts profile.xml. 388 */ 389 public static final String TAGGEDVALUE_MANAGEABLE_MAXIMUM_LIST_SIZE = profile.get( 390 "MANAGEABLE_MAXIMUM_LIST_SIZE"); 391 392 /** 393 * 'andromda_manageable_table_pagesize' The maximum number of records to show at the same time. 394 */ 395 public static final String TAGGEDVALUE_MANAGEABLE_PAGE_SIZE = profile.get( 396 "MANAGEABLE_PAGE_SIZE"); 397 398 /** 399 * 'andromda_manageable_table_resolveable' 400 * Indicates whether or not the underlying entity keys should be resolved when referencing it. 401 */ 402 public static final String TAGGEDVALUE_MANAGEABLE_RESOLVEABLE = profile.get( 403 "MANAGEABLE_RESOLVEABLE"); 404 405 /** 406 * 'andromda_persistence_column_uniqueGroup' Indicates the unique constraint name grouping the columns. 407 */ 408 public static final String TAGGEDVALUE_PERSISTENCE_COLUMN_UNIQUE_GROUP = profile.get( 409 "COLUMN_UNIQUE_GROUP"); 410 411 /** 412 * 'andromda_persistence_associationEnd_uniqueGroup' Indicates the unique constraint name grouping the columns. 413 */ 414 public static final String TAGGEDVALUE_PERSISTENCE_ASSOCIATION_END_UNIQUE_GROUP = profile.get( 415 "ASSOCIATION_END_UNIQUE_GROUP"); 416 417 /** 418 * 'andromda_persistence_associationEnd_primary' 419 * Indicates whether or not the association end is considered "primary" used for things like indicating 420 * which side of a one-to-one association should get the foreign key. 421 */ 422 public static final String TAGGEDVALUE_PERSISTENCE_ASSOCIATION_END_PRIMARY = profile.get( 423 "PERSISTENCE_ASSOCIATION_END_PRIMARY"); 424 425 /* ----------------- Data Types -------------------- */ 426 427 /** 428 * Used to identify object types in the model, any other type that will be identified as an object must 429 * specialize this type. 430 */ 431 public static final String OBJECT_TYPE_NAME = profile.get("OBJECT_TYPE"); 432 433 /** 434 * Used to identify collection types in the model, any other type that will be identified as a collection must 435 * specialize this type. NonUnique / NonOrdered Collection. Default=Collection 436 */ 437 public static final String COLLECTION_TYPE_NAME = profile.get("COLLECTION_TYPE"); 438 439 /** 440 * Used to identify a list type in the model, any other type that will be identified as a list must specialize this 441 * type. NonUnique / Ordered Collection. Default=List 442 */ 443 public static final String LIST_TYPE_NAME = profile.get("LIST_TYPE"); 444 445 /** 446 * Used to identify a set type in the model, any other type that will be identified as a set must specialize this 447 * type. Unique / NonOrdered Collection. Default=Set 448 */ 449 public static final String SET_TYPE_NAME = profile.get("SET_TYPE"); 450 451 /** 452 * Used to identify an ordered set type in the model, any other type that will be identified as an ordered set must specialize this 453 * type. Unique / Ordered Collection. Default=SortedSet 454 */ 455 public static final String ORDERED_SET_TYPE_NAME = profile.get("ORDERED_SET_TYPE"); 456 457 /** 458 * Used to identify a map type in the model, any other type that will be identified as a map type must specialize 459 * this type. Default=Map 460 */ 461 public static final String MAP_TYPE_NAME = profile.get("MAP_TYPE"); 462 463 /** 464 * Used to identify a map type in the model, any other type that will be identified as a map type must specialize 465 * this type. Default=SortedMap 466 */ 467 public static final String ORDERED_MAP_TYPE_NAME = profile.get("ORDERED_MAP_TYPE"); 468 469 /** 470 * Used to identify collection types in the model, any other type that will be identified as a collection must 471 * specialize this type. NonUnique / NonOrdered Collection. Default=LinkedList 472 */ 473 public static final String COLLECTION_IMPL_TYPE_NAME = profile.get("COLLECTION_IMPL_TYPE"); 474 475 /** 476 * Used to identify a list type in the model, any other type that will be identified as a list must specialize this 477 * type. NonUnique / Ordered Collection. Default=ArrayList 478 */ 479 public static final String LIST_IMPL_TYPE_NAME = profile.get("LIST_IMPL_TYPE"); 480 481 /** 482 * Used to identify a set type in the model, any other type that will be identified as a set must specialize this 483 * type. Unique / NonOrdered Collection. Default=HashSet 484 */ 485 public static final String SET_IMPL_TYPE_NAME = profile.get("SET_IMPL_TYPE"); 486 487 /** 488 * Used to identify an ordered set type in the model, any other type that will be identified as an ordered set must specialize this 489 * type. Unique / Ordered Collection. Default=SortedSet 490 */ 491 public static final String ORDERED_SET_IMPL_TYPE_NAME = profile.get("ORDERED_SET_IMPL_TYPE"); 492 493 /** 494 * Used to identify a map type in the model, any other type that will be identified as a map type must specialize 495 * this type. Default=HashMap 496 */ 497 public static final String MAP_IMPL_TYPE_NAME = profile.get("MAP_IMPL_TYPE"); 498 499 /** 500 * Used to identify a map type in the model, any other type that will be identified as a map type must specialize 501 * this type. Default=SortedMap 502 */ 503 public static final String ORDERED_MAP_IMPL_TYPE_NAME = profile.get("ORDERED_MAP_IMPL_TYPE"); 504 505 /** 506 * Used to identify date types in the model, any other type that will be identified as a date must specialize this 507 * type. Default=datatype::Date 508 */ 509 public static final String DATE_TYPE_NAME = profile.get("DATE_TYPE"); 510 511 /** 512 * Used to identify time types in the model, any other type that will be identified as a time must specialize this 513 * type. Default=datatype::Time 514 */ 515 public static final String TIME_TYPE_NAME = profile.get("TIME_TYPE"); 516 517 /** 518 * Used to identify datetime types in the model. Default=datatype::DateTime 519 */ 520 public static final String DATETIME_TYPE_NAME = profile.get("DATETIME_TYPE"); 521 522 /** 523 * Used to identify a boolean type in the model, any other type that will be identified as a boolean type must 524 * specialize this type. Default=datatype::boolean 525 */ 526 public static final String BOOLEAN_TYPE_NAME = profile.get("BOOLEAN_TYPE"); 527 /** 528 * Used to identify a character type in the model, any other type that will be identified as a character type must 529 * specialize this type. Default=datatype::Character 530 */ 531 public static final String CHARACTER_TYPE_NAME = profile.get("CHARACTER_TYPE"); 532 533 /** 534 * Used to identify a file type in the model, any other type that will be identified as a file type must specialize 535 * this type. Default=datatype::File 536 */ 537 public static final String FILE_TYPE_NAME = profile.get("FILE_TYPE"); 538 539 /** 540 * Used to identify a Blob type in the model, any other type that will be identified as a Blob type must specialize 541 * this type. Default=datatype::Blob 542 */ 543 public static final String BLOB_TYPE_NAME = profile.get("BLOB_TYPE"); 544 545 /** 546 * Used to identify a Clob type in the model, any other type that will be identified as a Clob type must specialize 547 * this type. Default=datatype::Clob 548 */ 549 public static final String CLOB_TYPE_NAME = profile.get("CLOB_TYPE"); 550 551 /** 552 * Used to identify a string type in the model, any other type that will be identified as a string type must 553 * specialize this type. Default=datatype::String 554 */ 555 public static final String STRING_TYPE_NAME = profile.get("STRING_TYPE"); 556 557 /** 558 * Used to identify a void type in the model, any other type that will be identified as a void type must 559 * specialize this type. Default=datatype::void 560 */ 561 public static final String VOID_TYPE_NAME = profile.get("VOID_TYPE"); 562 563 /** 564 * Used to identify a double type in the model, any other type that will be identified as a double type must 565 * specialize this type. Default=datatype::Double 566 */ 567 public static final String DOUBLE_TYPE_NAME = profile.get("DOUBLE_TYPE"); 568 569 /** 570 * Used to identify a float type in the model, any other type that will be identified as a float type must 571 * specialize this type. Default=datatype::Float 572 */ 573 public static final String FLOAT_TYPE_NAME = profile.get("FLOAT_TYPE"); 574 575 /** 576 * Used to identify a integer type in the model, any other type that will be identified as a integer type must 577 * specialize this type. Default=datatype::Integer 578 */ 579 public static final String INTEGER_TYPE_NAME = profile.get("INTEGER_TYPE"); 580 581 /** 582 * Used to identify a long type in the model, any other type that will be identified as a long type must 583 * specialize this type. Default=datatype::Long 584 */ 585 public static final String LONG_TYPE_NAME = profile.get("LONG_TYPE"); 586 }