001// license-header java merge-point 002// 003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify! 004// 005package org.andromda.metafacades.uml14; 006 007import java.util.Collection; 008import org.andromda.core.metafacade.MetafacadeBase; 009import org.andromda.core.metafacade.ModelValidationMessage; 010import org.andromda.metafacades.uml.AttributeFacade; 011import org.andromda.metafacades.uml.ClassifierFacade; 012import org.andromda.metafacades.uml.EnumerationFacade; 013import org.andromda.translation.ocl.validation.OCLCollections; 014import org.andromda.translation.ocl.validation.OCLExpressions; 015import org.andromda.translation.ocl.validation.OCLIntrospector; 016import org.andromda.translation.ocl.validation.OCLResultEnsurer; 017import org.apache.log4j.Logger; 018import org.omg.uml.foundation.core.Attribute; 019 020/** 021 * Represents an attribute on a classifier. UML2 maps both Attributes and AssociationEnds to 022 * Property. A property is a structural feature of a classifier that characterizes instances of the 023 * classifier. A property related by ownedAttribute to a classifier (other than an association) 024 * represents an attribute and might also represent an association end. It relates an instance of 025 * the class to a value or set of values of the type of the attribute. A property represents a set 026 * of instances that are owned by a containing classifier instance. Property represents a declared 027 * state of one or more instances in terms of a named relationship to a value or values. When a 028 * property is an attribute of a classifier, the value or values are related to the instance of the 029 * classifier by being held in slots of the instance. The range of valid values represented by the 030 * property can be controlled by setting the property's type. 031 * MetafacadeLogic for AttributeFacade 032 * 033 * @see AttributeFacade 034 */ 035public abstract class AttributeFacadeLogic 036 extends ModelElementFacadeLogicImpl 037 implements AttributeFacade 038{ 039 /** 040 * The underlying UML object 041 * @see Attribute 042 */ 043 protected Attribute metaObject; 044 045 /** Create Metafacade implementation instance using the MetafacadeFactory from the context 046 * @param metaObjectIn 047 * @param context 048 */ 049 protected AttributeFacadeLogic(Attribute metaObjectIn, String context) 050 { 051 super(metaObjectIn, getContext(context)); 052 this.metaObject = metaObjectIn; 053 } 054 055 /** 056 * The logger instance. 057 */ 058 private static final Logger logger = Logger.getLogger(AttributeFacadeLogic.class); 059 060 /** 061 * Gets the context for this metafacade logic instance. 062 * @param context String. Set to AttributeFacade if null 063 * @return context String 064 */ 065 private static String getContext(String context) 066 { 067 if (context == null) 068 { 069 context = "org.andromda.metafacades.uml.AttributeFacade"; 070 } 071 return context; 072 } 073 074 /** Reset context only for non-root metafacades 075 * @param context 076 */ 077 @Override 078 public void resetMetafacadeContext(String context) 079 { 080 if (!this.contextRoot) // reset context only for non-root metafacades 081 { 082 context = getContext(context); // to have same value as in original constructor call 083 setMetafacadeContext (context); 084 } 085 } 086 087 /** 088 * @return boolean true always 089 * @see AttributeFacade 090 */ 091 public boolean isAttributeFacadeMetaType() 092 { 093 return true; 094 } 095 096 // --------------- attributes --------------------- 097 098 /** 099 * @see AttributeFacade#getGetterName() 100 * @return String 101 */ 102 protected abstract String handleGetGetterName(); 103 104 private String __getterName1a; 105 private boolean __getterName1aSet = false; 106 107 /** 108 * The name of the accessor operation that would retrieve this attribute's value. 109 * @return (String)handleGetGetterName() 110 */ 111 public final String getGetterName() 112 { 113 String getterName1a = this.__getterName1a; 114 if (!this.__getterName1aSet) 115 { 116 // getterName has no pre constraints 117 getterName1a = handleGetGetterName(); 118 // getterName has no post constraints 119 this.__getterName1a = getterName1a; 120 if (isMetafacadePropertyCachingEnabled()) 121 { 122 this.__getterName1aSet = true; 123 } 124 } 125 return getterName1a; 126 } 127 128 /** 129 * @see AttributeFacade#getSetterName() 130 * @return String 131 */ 132 protected abstract String handleGetSetterName(); 133 134 private String __setterName2a; 135 private boolean __setterName2aSet = false; 136 137 /** 138 * The name of the mutator operation that would retrieve this attribute's value. 139 * @return (String)handleGetSetterName() 140 */ 141 public final String getSetterName() 142 { 143 String setterName2a = this.__setterName2a; 144 if (!this.__setterName2aSet) 145 { 146 // setterName has no pre constraints 147 setterName2a = handleGetSetterName(); 148 // setterName has no post constraints 149 this.__setterName2a = setterName2a; 150 if (isMetafacadePropertyCachingEnabled()) 151 { 152 this.__setterName2aSet = true; 153 } 154 } 155 return setterName2a; 156 } 157 158 /** 159 * @see AttributeFacade#isReadOnly() 160 * @return boolean 161 */ 162 protected abstract boolean handleIsReadOnly(); 163 164 private boolean __readOnly3a; 165 private boolean __readOnly3aSet = false; 166 167 /** 168 * Whether or not this attribute can be modified. 169 * @return (boolean)handleIsReadOnly() 170 */ 171 public final boolean isReadOnly() 172 { 173 boolean readOnly3a = this.__readOnly3a; 174 if (!this.__readOnly3aSet) 175 { 176 // readOnly has no pre constraints 177 readOnly3a = handleIsReadOnly(); 178 // readOnly has no post constraints 179 this.__readOnly3a = readOnly3a; 180 if (isMetafacadePropertyCachingEnabled()) 181 { 182 this.__readOnly3aSet = true; 183 } 184 } 185 return readOnly3a; 186 } 187 188 /** 189 * @see AttributeFacade#getDefaultValue() 190 * @return String 191 */ 192 protected abstract String handleGetDefaultValue(); 193 194 private String __defaultValue4a; 195 private boolean __defaultValue4aSet = false; 196 197 /** 198 * The default value of the attribute. This is the value given if no value is defined. 199 * @return (String)handleGetDefaultValue() 200 */ 201 public final String getDefaultValue() 202 { 203 String defaultValue4a = this.__defaultValue4a; 204 if (!this.__defaultValue4aSet) 205 { 206 // defaultValue has no pre constraints 207 defaultValue4a = handleGetDefaultValue(); 208 // defaultValue has no post constraints 209 this.__defaultValue4a = defaultValue4a; 210 if (isMetafacadePropertyCachingEnabled()) 211 { 212 this.__defaultValue4aSet = true; 213 } 214 } 215 return defaultValue4a; 216 } 217 218 /** 219 * @see AttributeFacade#isStatic() 220 * @return boolean 221 */ 222 protected abstract boolean handleIsStatic(); 223 224 private boolean __static5a; 225 private boolean __static5aSet = false; 226 227 /** 228 * Indicates if this attribute is 'static', meaning it has a classifier scope. 229 * @return (boolean)handleIsStatic() 230 */ 231 public final boolean isStatic() 232 { 233 boolean static5a = this.__static5a; 234 if (!this.__static5aSet) 235 { 236 // static has no pre constraints 237 static5a = handleIsStatic(); 238 // static has no post constraints 239 this.__static5a = static5a; 240 if (isMetafacadePropertyCachingEnabled()) 241 { 242 this.__static5aSet = true; 243 } 244 } 245 return static5a; 246 } 247 248 /** 249 * @see AttributeFacade#isRequired() 250 * @return boolean 251 */ 252 protected abstract boolean handleIsRequired(); 253 254 private boolean __required6a; 255 private boolean __required6aSet = false; 256 257 /** 258 * Whether or not the multiplicity of this attribute is 1. 259 * @return (boolean)handleIsRequired() 260 */ 261 public final boolean isRequired() 262 { 263 boolean required6a = this.__required6a; 264 if (!this.__required6aSet) 265 { 266 // required has no pre constraints 267 required6a = handleIsRequired(); 268 // required has no post constraints 269 this.__required6a = required6a; 270 if (isMetafacadePropertyCachingEnabled()) 271 { 272 this.__required6aSet = true; 273 } 274 } 275 return required6a; 276 } 277 278 /** 279 * @see AttributeFacade#isMany() 280 * @return boolean 281 */ 282 protected abstract boolean handleIsMany(); 283 284 private boolean __many7a; 285 private boolean __many7aSet = false; 286 287 /** 288 * Whether or not this attribute has a multiplicity greater than 1. 289 * @return (boolean)handleIsMany() 290 */ 291 public final boolean isMany() 292 { 293 boolean many7a = this.__many7a; 294 if (!this.__many7aSet) 295 { 296 // many has no pre constraints 297 many7a = handleIsMany(); 298 // many has no post constraints 299 this.__many7a = many7a; 300 if (isMetafacadePropertyCachingEnabled()) 301 { 302 this.__many7aSet = true; 303 } 304 } 305 return many7a; 306 } 307 308 /** 309 * @see AttributeFacade#isChangeable() 310 * @return boolean 311 */ 312 protected abstract boolean handleIsChangeable(); 313 314 private boolean __changeable8a; 315 private boolean __changeable8aSet = false; 316 317 /** 318 * True if this attribute can be modified. 319 * @return (boolean)handleIsChangeable() 320 */ 321 public final boolean isChangeable() 322 { 323 boolean changeable8a = this.__changeable8a; 324 if (!this.__changeable8aSet) 325 { 326 // changeable has no pre constraints 327 changeable8a = handleIsChangeable(); 328 // changeable has no post constraints 329 this.__changeable8a = changeable8a; 330 if (isMetafacadePropertyCachingEnabled()) 331 { 332 this.__changeable8aSet = true; 333 } 334 } 335 return changeable8a; 336 } 337 338 /** 339 * @see AttributeFacade#isAddOnly() 340 * @return boolean 341 */ 342 protected abstract boolean handleIsAddOnly(); 343 344 private boolean __addOnly9a; 345 private boolean __addOnly9aSet = false; 346 347 /** 348 * True if this attribute can only be set. 349 * @return (boolean)handleIsAddOnly() 350 */ 351 public final boolean isAddOnly() 352 { 353 boolean addOnly9a = this.__addOnly9a; 354 if (!this.__addOnly9aSet) 355 { 356 // addOnly has no pre constraints 357 addOnly9a = handleIsAddOnly(); 358 // addOnly has no post constraints 359 this.__addOnly9a = addOnly9a; 360 if (isMetafacadePropertyCachingEnabled()) 361 { 362 this.__addOnly9aSet = true; 363 } 364 } 365 return addOnly9a; 366 } 367 368 /** 369 * @see AttributeFacade#isEnumerationLiteral() 370 * @return boolean 371 */ 372 protected abstract boolean handleIsEnumerationLiteral(); 373 374 private boolean __enumerationLiteral10a; 375 private boolean __enumerationLiteral10aSet = false; 376 377 /** 378 * True if this attribute is owned by an enumeration. 379 * @return (boolean)handleIsEnumerationLiteral() 380 */ 381 public final boolean isEnumerationLiteral() 382 { 383 boolean enumerationLiteral10a = this.__enumerationLiteral10a; 384 if (!this.__enumerationLiteral10aSet) 385 { 386 // enumerationLiteral has no pre constraints 387 enumerationLiteral10a = handleIsEnumerationLiteral(); 388 // enumerationLiteral has no post constraints 389 this.__enumerationLiteral10a = enumerationLiteral10a; 390 if (isMetafacadePropertyCachingEnabled()) 391 { 392 this.__enumerationLiteral10aSet = true; 393 } 394 } 395 return enumerationLiteral10a; 396 } 397 398 /** 399 * @see AttributeFacade#getEnumerationValue() 400 * @return String 401 */ 402 protected abstract String handleGetEnumerationValue(); 403 404 private String __enumerationValue11a; 405 private boolean __enumerationValue11aSet = false; 406 407 /** 408 * The value for this attribute if it is an enumeration literal, null otherwise. The default 409 * value is returned as a String if it has been specified, if it's not specified this 410 * attribute's name is assumed. 411 * @return (String)handleGetEnumerationValue() 412 */ 413 public final String getEnumerationValue() 414 { 415 String enumerationValue11a = this.__enumerationValue11a; 416 if (!this.__enumerationValue11aSet) 417 { 418 // enumerationValue has no pre constraints 419 enumerationValue11a = handleGetEnumerationValue(); 420 // enumerationValue has no post constraints 421 this.__enumerationValue11a = enumerationValue11a; 422 if (isMetafacadePropertyCachingEnabled()) 423 { 424 this.__enumerationValue11aSet = true; 425 } 426 } 427 return enumerationValue11a; 428 } 429 430 /** 431 * @see AttributeFacade#getGetterSetterTypeName() 432 * @return String 433 */ 434 protected abstract String handleGetGetterSetterTypeName(); 435 436 private String __getterSetterTypeName12a; 437 private boolean __getterSetterTypeName12aSet = false; 438 439 /** 440 * The name of the type that is returned on the accessor and mutator operations, determined in 441 * part by the multiplicity. 442 * @return (String)handleGetGetterSetterTypeName() 443 */ 444 public final String getGetterSetterTypeName() 445 { 446 String getterSetterTypeName12a = this.__getterSetterTypeName12a; 447 if (!this.__getterSetterTypeName12aSet) 448 { 449 // getterSetterTypeName has no pre constraints 450 getterSetterTypeName12a = handleGetGetterSetterTypeName(); 451 // getterSetterTypeName has no post constraints 452 this.__getterSetterTypeName12a = getterSetterTypeName12a; 453 if (isMetafacadePropertyCachingEnabled()) 454 { 455 this.__getterSetterTypeName12aSet = true; 456 } 457 } 458 return getterSetterTypeName12a; 459 } 460 461 /** 462 * @see AttributeFacade#isOrdered() 463 * @return boolean 464 */ 465 protected abstract boolean handleIsOrdered(); 466 467 private boolean __ordered13a; 468 private boolean __ordered13aSet = false; 469 470 /** 471 * Indicates whether or not the attributes are ordered (if multiplicity is greater than 1). 472 * @return (boolean)handleIsOrdered() 473 */ 474 public final boolean isOrdered() 475 { 476 boolean ordered13a = this.__ordered13a; 477 if (!this.__ordered13aSet) 478 { 479 // ordered has no pre constraints 480 ordered13a = handleIsOrdered(); 481 // ordered has no post constraints 482 this.__ordered13a = ordered13a; 483 if (isMetafacadePropertyCachingEnabled()) 484 { 485 this.__ordered13aSet = true; 486 } 487 } 488 return ordered13a; 489 } 490 491 /** 492 * @see AttributeFacade#isDefaultValuePresent() 493 * @return boolean 494 */ 495 protected abstract boolean handleIsDefaultValuePresent(); 496 497 private boolean __defaultValuePresent14a; 498 private boolean __defaultValuePresent14aSet = false; 499 500 /** 501 * Indicates if the default value is present. 502 * @return (boolean)handleIsDefaultValuePresent() 503 */ 504 public final boolean isDefaultValuePresent() 505 { 506 boolean defaultValuePresent14a = this.__defaultValuePresent14a; 507 if (!this.__defaultValuePresent14aSet) 508 { 509 // defaultValuePresent has no pre constraints 510 defaultValuePresent14a = handleIsDefaultValuePresent(); 511 // defaultValuePresent has no post constraints 512 this.__defaultValuePresent14a = defaultValuePresent14a; 513 if (isMetafacadePropertyCachingEnabled()) 514 { 515 this.__defaultValuePresent14aSet = true; 516 } 517 } 518 return defaultValuePresent14a; 519 } 520 521 /** 522 * @see AttributeFacade#getUpper() 523 * @return int 524 */ 525 protected abstract int handleGetUpper(); 526 527 private int __upper15a; 528 private boolean __upper15aSet = false; 529 530 /** 531 * the upper value for the multiplicity (will be -1 for *) 532 * -only applicable for UML2 533 * @return (int)handleGetUpper() 534 */ 535 public final int getUpper() 536 { 537 int upper15a = this.__upper15a; 538 if (!this.__upper15aSet) 539 { 540 // upper has no pre constraints 541 upper15a = handleGetUpper(); 542 // upper has no post constraints 543 this.__upper15a = upper15a; 544 if (isMetafacadePropertyCachingEnabled()) 545 { 546 this.__upper15aSet = true; 547 } 548 } 549 return upper15a; 550 } 551 552 /** 553 * @see AttributeFacade#getLower() 554 * @return int 555 */ 556 protected abstract int handleGetLower(); 557 558 private int __lower16a; 559 private boolean __lower16aSet = false; 560 561 /** 562 * the lower value for the multiplicity 563 * -only applicable for UML2 564 * @return (int)handleGetLower() 565 */ 566 public final int getLower() 567 { 568 int lower16a = this.__lower16a; 569 if (!this.__lower16aSet) 570 { 571 // lower has no pre constraints 572 lower16a = handleGetLower(); 573 // lower has no post constraints 574 this.__lower16a = lower16a; 575 if (isMetafacadePropertyCachingEnabled()) 576 { 577 this.__lower16aSet = true; 578 } 579 } 580 return lower16a; 581 } 582 583 /** 584 * @see AttributeFacade#isEnumerationMember() 585 * @return boolean 586 */ 587 protected abstract boolean handleIsEnumerationMember(); 588 589 private boolean __enumerationMember17a; 590 private boolean __enumerationMember17aSet = false; 591 592 /** 593 * True if this attribute is owned by an enumeration but is defined as a member variable (NOT a 594 * literal). 595 * @return (boolean)handleIsEnumerationMember() 596 */ 597 public final boolean isEnumerationMember() 598 { 599 boolean enumerationMember17a = this.__enumerationMember17a; 600 if (!this.__enumerationMember17aSet) 601 { 602 // enumerationMember has no pre constraints 603 enumerationMember17a = handleIsEnumerationMember(); 604 // enumerationMember has no post constraints 605 this.__enumerationMember17a = enumerationMember17a; 606 if (isMetafacadePropertyCachingEnabled()) 607 { 608 this.__enumerationMember17aSet = true; 609 } 610 } 611 return enumerationMember17a; 612 } 613 614 /** 615 * @see AttributeFacade#getEnumerationLiteralParameters() 616 * @return String 617 */ 618 protected abstract String handleGetEnumerationLiteralParameters(); 619 620 private String __enumerationLiteralParameters18a; 621 private boolean __enumerationLiteralParameters18aSet = false; 622 623 /** 624 * Returns the enumeration literal parameters defined by tagged value as a comma separated list. 625 * @return (String)handleGetEnumerationLiteralParameters() 626 */ 627 public final String getEnumerationLiteralParameters() 628 { 629 String enumerationLiteralParameters18a = this.__enumerationLiteralParameters18a; 630 if (!this.__enumerationLiteralParameters18aSet) 631 { 632 // enumerationLiteralParameters has no pre constraints 633 enumerationLiteralParameters18a = handleGetEnumerationLiteralParameters(); 634 // enumerationLiteralParameters has no post constraints 635 this.__enumerationLiteralParameters18a = enumerationLiteralParameters18a; 636 if (isMetafacadePropertyCachingEnabled()) 637 { 638 this.__enumerationLiteralParameters18aSet = true; 639 } 640 } 641 return enumerationLiteralParameters18a; 642 } 643 644 /** 645 * @see AttributeFacade#isEnumerationLiteralParametersExist() 646 * @return boolean 647 */ 648 protected abstract boolean handleIsEnumerationLiteralParametersExist(); 649 650 private boolean __enumerationLiteralParametersExist19a; 651 private boolean __enumerationLiteralParametersExist19aSet = false; 652 653 /** 654 * Returns true if enumeration literal parameters exist (defined by tagged value) for the 655 * literal. 656 * @return (boolean)handleIsEnumerationLiteralParametersExist() 657 */ 658 public final boolean isEnumerationLiteralParametersExist() 659 { 660 boolean enumerationLiteralParametersExist19a = this.__enumerationLiteralParametersExist19a; 661 if (!this.__enumerationLiteralParametersExist19aSet) 662 { 663 // enumerationLiteralParametersExist has no pre constraints 664 enumerationLiteralParametersExist19a = handleIsEnumerationLiteralParametersExist(); 665 // enumerationLiteralParametersExist has no post constraints 666 this.__enumerationLiteralParametersExist19a = enumerationLiteralParametersExist19a; 667 if (isMetafacadePropertyCachingEnabled()) 668 { 669 this.__enumerationLiteralParametersExist19aSet = true; 670 } 671 } 672 return enumerationLiteralParametersExist19a; 673 } 674 675 /** 676 * @see AttributeFacade#isUnique() 677 * @return boolean 678 */ 679 protected abstract boolean handleIsUnique(); 680 681 private boolean __unique20a; 682 private boolean __unique20aSet = false; 683 684 /** 685 * If the attribute is unique within the Collection type. UML2 only. UML14 always returns false. 686 * Unique+Ordered determines the implementation Collection type. Default=false. 687 * @return (boolean)handleIsUnique() 688 */ 689 public final boolean isUnique() 690 { 691 boolean unique20a = this.__unique20a; 692 if (!this.__unique20aSet) 693 { 694 // unique has no pre constraints 695 unique20a = handleIsUnique(); 696 // unique has no post constraints 697 this.__unique20a = unique20a; 698 if (isMetafacadePropertyCachingEnabled()) 699 { 700 this.__unique20aSet = true; 701 } 702 } 703 return unique20a; 704 } 705 706 /** 707 * @see AttributeFacade#isLeaf() 708 * @return boolean 709 */ 710 protected abstract boolean handleIsLeaf(); 711 712 private boolean __leaf21a; 713 private boolean __leaf21aSet = false; 714 715 /** 716 * IsLeaf property in the operation. If true, operation is final, cannot be extended or 717 * implemented by a descendant. 718 * @return (boolean)handleIsLeaf() 719 */ 720 public final boolean isLeaf() 721 { 722 boolean leaf21a = this.__leaf21a; 723 if (!this.__leaf21aSet) 724 { 725 // leaf has no pre constraints 726 leaf21a = handleIsLeaf(); 727 // leaf has no post constraints 728 this.__leaf21a = leaf21a; 729 if (isMetafacadePropertyCachingEnabled()) 730 { 731 this.__leaf21aSet = true; 732 } 733 } 734 return leaf21a; 735 } 736 737 /** 738 * @see AttributeFacade#isDerived() 739 * @return boolean 740 */ 741 protected abstract boolean handleIsDerived(); 742 743 private boolean __derived22a; 744 private boolean __derived22aSet = false; 745 746 /** 747 * If the attribute is derived (its value is computed). UML2 only. UML14 always returns false. 748 * Default=false. 749 * @return (boolean)handleIsDerived() 750 */ 751 public final boolean isDerived() 752 { 753 boolean derived22a = this.__derived22a; 754 if (!this.__derived22aSet) 755 { 756 // derived has no pre constraints 757 derived22a = handleIsDerived(); 758 // derived has no post constraints 759 this.__derived22a = derived22a; 760 if (isMetafacadePropertyCachingEnabled()) 761 { 762 this.__derived22aSet = true; 763 } 764 } 765 return derived22a; 766 } 767 768 // ---------------- business methods ---------------------- 769 770 /** 771 * Method to be implemented in descendants 772 * Searches the given feature for the specified tag. 773 * If the follow boolean is set to true then the search will continue from the class attribute 774 * to the class itself and then up the class hierarchy. 775 * @param name 776 * @param follow 777 * @return Object 778 */ 779 protected abstract Object handleFindTaggedValue(String name, boolean follow); 780 781 /** 782 * Searches the given feature for the specified tag. 783 * If the follow boolean is set to true then the search will continue from the class attribute 784 * to the class itself and then up the class hierarchy. 785 * @param name String 786 * The name of the tagged value to find. 787 * @param follow boolean 788 * If true search should 'follow' the inheritance hierarchy, false otherwise. 789 * @return handleFindTaggedValue(name, follow) 790 */ 791 public Object findTaggedValue(String name, boolean follow) 792 { 793 // findTaggedValue has no pre constraints 794 Object returnValue = handleFindTaggedValue(name, follow); 795 // findTaggedValue has no post constraints 796 return returnValue; 797 } 798 799 // ------------- associations ------------------ 800 801 /** 802 * Represents an attribute on a classifier. UML2 maps both Attributes and AssociationEnds to 803 * Property. 804 * A property is a structural feature of a classifier that characterizes instances of the 805 * classifier. A 806 * property related by ownedAttribute to a classifier (other than an association) represents an 807 * attribute and might also represent an association end. It relates an instance of the class to 808 * a 809 * value or set of values of the type of the attribute. A property represents a set of instances 810 * that 811 * are owned by a containing classifier instance. Property represents a declared state of one or 812 * more 813 * instances in terms of a named relationship to a value or values. When a property is an 814 * attribute of 815 * a classifier, the value or values are related to the instance of the classifier by being held 816 * in 817 * slots of the instance. The range of valid values represented by the property can be 818 * controlled by 819 * setting the property's type. 820 * @return (ClassifierFacade)handleGetType() 821 */ 822 public final ClassifierFacade getType() 823 { 824 ClassifierFacade getType1r = null; 825 // attributeFacade has no pre constraints 826 Object result = handleGetType(); 827 MetafacadeBase shieldedResult = this.shieldedElement(result); 828 try 829 { 830 getType1r = (ClassifierFacade)shieldedResult; 831 } 832 catch (ClassCastException ex) 833 { 834 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 835 AttributeFacadeLogic.logger.warn("incorrect metafacade cast for AttributeFacadeLogic.getType ClassifierFacade " + result + ": " + shieldedResult); 836 } 837 // attributeFacade has no post constraints 838 return getType1r; 839 } 840 841 /** 842 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 843 * @return Object 844 */ 845 protected abstract Object handleGetType(); 846 847 /** 848 * This enumeration's literals. 849 * @return (EnumerationFacade)handleGetEnumeration() 850 */ 851 public final EnumerationFacade getEnumeration() 852 { 853 EnumerationFacade getEnumeration2r = null; 854 // literals has no pre constraints 855 Object result = handleGetEnumeration(); 856 MetafacadeBase shieldedResult = this.shieldedElement(result); 857 try 858 { 859 getEnumeration2r = (EnumerationFacade)shieldedResult; 860 } 861 catch (ClassCastException ex) 862 { 863 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 864 AttributeFacadeLogic.logger.warn("incorrect metafacade cast for AttributeFacadeLogic.getEnumeration EnumerationFacade " + result + ": " + shieldedResult); 865 } 866 // literals has no post constraints 867 return getEnumeration2r; 868 } 869 870 /** 871 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 872 * @return Object 873 */ 874 protected abstract Object handleGetEnumeration(); 875 876 /** 877 * Gets the attributes that belong to the classifier. 878 * @return (ClassifierFacade)handleGetOwner() 879 */ 880 public final ClassifierFacade getOwner() 881 { 882 ClassifierFacade getOwner3r = null; 883 // attributes has no pre constraints 884 Object result = handleGetOwner(); 885 MetafacadeBase shieldedResult = this.shieldedElement(result); 886 try 887 { 888 getOwner3r = (ClassifierFacade)shieldedResult; 889 } 890 catch (ClassCastException ex) 891 { 892 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 893 AttributeFacadeLogic.logger.warn("incorrect metafacade cast for AttributeFacadeLogic.getOwner ClassifierFacade " + result + ": " + shieldedResult); 894 } 895 // attributes has no post constraints 896 return getOwner3r; 897 } 898 899 /** 900 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 901 * @return Object 902 */ 903 protected abstract Object handleGetOwner(); 904 905 /** 906 * <p><b>Constraint:</b> org::andromda::metafacades::uml::AttributeFacade::attribute needs a type</p> 907 * <p><b>Error:</b> Each attribute needs a type, you cannot leave the type unspecified.</p> 908 * <p><b>OCL:</b> context AttributeFacade inv: type.name->notEmpty()</p> 909 * <p><b>Constraint:</b> org::andromda::metafacades::uml::AttributeFacade::attribute must have a name</p> 910 * <p><b>Error:</b> Each attribute must have a non-empty name.</p> 911 * <p><b>OCL:</b> context AttributeFacade inv: name -> notEmpty()</p> 912 * <p><b>Constraint:</b> org::andromda::metafacades::uml::AttributeFacade::primitive attribute must be required</p> 913 * <p><b>Error:</b> Primitive attributes must have a multiplicity lower bound > 0 (must be required). Use a wrapped type, or change the multiplicity.</p> 914 * <p><b>OCL:</b> context AttributeFacade inv: type.primitive implies (lower > 0)</p> 915 * <p><b>Constraint:</b> org::andromda::metafacades::uml::AttributeFacade::primitive attribute cannot be used in Collection</p> 916 * <p><b>Error:</b> Primitive attributes cannot be used in Collections (multiplicity > 1). Use the wrapped type instead.</p> 917 * <p><b>OCL:</b> context AttributeFacade inv: type.primitive implies (many = false)</p> 918 * <p><b>Constraint:</b> org::andromda::metafacades::uml::AttributeFacade::wrapped primitive attribute should not be required</p> 919 * <p><b>Error:</b> Wrapped primitive attributes must have a multiplicity lower bound = 0 (must be optional). Use the unwrapped type, or change the multiplicity.</p> 920 * <p><b>OCL:</b> context AttributeFacade inv: type.wrappedPrimitive and many = false implies (lower = 0)</p> 921 * @param validationMessages Collection<ModelValidationMessage> 922 * @see ModelElementFacadeLogicImpl#validateInvariants(Collection validationMessages) 923 */ 924 @Override 925 public void validateInvariants(Collection<ModelValidationMessage> validationMessages) 926 { 927 super.validateInvariants(validationMessages); 928 try 929 { 930 final Object contextElement = this.THIS(); 931 boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"type.name"))); 932 if (!constraintValid) 933 { 934 validationMessages.add( 935 new ModelValidationMessage( 936 (MetafacadeBase)contextElement , 937 "org::andromda::metafacades::uml::AttributeFacade::attribute needs a type", 938 "Each attribute needs a type, you cannot leave the type unspecified.")); 939 } 940 } 941 catch (Throwable th) 942 { 943 Throwable cause = th.getCause(); 944 int depth = 0; // Some throwables have infinite recursion 945 while (cause != null && depth < 7) 946 { 947 th = cause; 948 depth++; 949 } 950 logger.error("Error validating constraint 'org::andromda::metafacades::uml::AttributeFacade::attribute needs a type' ON " 951 + this.THIS().toString() + ": " + th.getMessage(), th); 952 } 953 try 954 { 955 final Object contextElement = this.THIS(); 956 boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"name"))); 957 if (!constraintValid) 958 { 959 validationMessages.add( 960 new ModelValidationMessage( 961 (MetafacadeBase)contextElement , 962 "org::andromda::metafacades::uml::AttributeFacade::attribute must have a name", 963 "Each attribute must have a non-empty name.")); 964 } 965 } 966 catch (Throwable th) 967 { 968 Throwable cause = th.getCause(); 969 int depth = 0; // Some throwables have infinite recursion 970 while (cause != null && depth < 7) 971 { 972 th = cause; 973 depth++; 974 } 975 logger.error("Error validating constraint 'org::andromda::metafacades::uml::AttributeFacade::attribute must have a name' ON " 976 + this.THIS().toString() + ": " + th.getMessage(), th); 977 } 978 try 979 { 980 final Object contextElement = this.THIS(); 981 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"type.primitive"))).booleanValue()?(OCLExpressions.greater(OCLIntrospector.invoke(contextElement,"lower"),0)):true)); 982 if (!constraintValid) 983 { 984 validationMessages.add( 985 new ModelValidationMessage( 986 (MetafacadeBase)contextElement , 987 "org::andromda::metafacades::uml::AttributeFacade::primitive attribute must be required", 988 "Primitive attributes must have a multiplicity lower bound > 0 (must be required). Use a wrapped type, or change the multiplicity.")); 989 } 990 } 991 catch (Throwable th) 992 { 993 Throwable cause = th.getCause(); 994 int depth = 0; // Some throwables have infinite recursion 995 while (cause != null && depth < 7) 996 { 997 th = cause; 998 depth++; 999 } 1000 logger.error("Error validating constraint 'org::andromda::metafacades::uml::AttributeFacade::primitive attribute must be required' ON " 1001 + this.THIS().toString() + ": " + th.getMessage(), th); 1002 } 1003 try 1004 { 1005 final Object contextElement = this.THIS(); 1006 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"type.primitive"))).booleanValue()?(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"many"),false)):true)); 1007 if (!constraintValid) 1008 { 1009 validationMessages.add( 1010 new ModelValidationMessage( 1011 (MetafacadeBase)contextElement , 1012 "org::andromda::metafacades::uml::AttributeFacade::primitive attribute cannot be used in Collection", 1013 "Primitive attributes cannot be used in Collections (multiplicity > 1). Use the wrapped type instead.")); 1014 } 1015 } 1016 catch (Throwable th) 1017 { 1018 Throwable cause = th.getCause(); 1019 int depth = 0; // Some throwables have infinite recursion 1020 while (cause != null && depth < 7) 1021 { 1022 th = cause; 1023 depth++; 1024 } 1025 logger.error("Error validating constraint 'org::andromda::metafacades::uml::AttributeFacade::primitive attribute cannot be used in Collection' ON " 1026 + this.THIS().toString() + ": " + th.getMessage(), th); 1027 } 1028 try 1029 { 1030 final Object contextElement = this.THIS(); 1031 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"type.wrappedPrimitive"))).booleanValue()&&OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"many"),false))).booleanValue()?(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"lower"),0)):true)); 1032 if (!constraintValid) 1033 { 1034 validationMessages.add( 1035 new ModelValidationMessage( 1036 (MetafacadeBase)contextElement , 1037 "org::andromda::metafacades::uml::AttributeFacade::wrapped primitive attribute should not be required", 1038 "Wrapped primitive attributes must have a multiplicity lower bound = 0 (must be optional). Use the unwrapped type, or change the multiplicity.")); 1039 } 1040 } 1041 catch (Throwable th) 1042 { 1043 Throwable cause = th.getCause(); 1044 int depth = 0; // Some throwables have infinite recursion 1045 while (cause != null && depth < 7) 1046 { 1047 th = cause; 1048 depth++; 1049 } 1050 logger.error("Error validating constraint 'org::andromda::metafacades::uml::AttributeFacade::wrapped primitive attribute should not be required' ON " 1051 + this.THIS().toString() + ": " + th.getMessage(), th); 1052 } 1053 } 1054}