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.ClassifierFacade; 011import org.andromda.metafacades.uml.EventFacade; 012import org.andromda.metafacades.uml.OperationFacade; 013import org.andromda.metafacades.uml.ParameterFacade; 014import org.andromda.translation.ocl.validation.OCLCollections; 015import org.andromda.translation.ocl.validation.OCLExpressions; 016import org.andromda.translation.ocl.validation.OCLIntrospector; 017import org.andromda.translation.ocl.validation.OCLResultEnsurer; 018import org.apache.log4j.Logger; 019import org.omg.uml.foundation.core.Parameter; 020 021/** 022 * Specification of an argument used to pass information into or out of an invocation of a 023 * behavioral feature. Parameters are allowed to be treated as connectable elements. Parameters have 024 * support for streaming, exceptions, and parameter sets. 025 * MetafacadeLogic for ParameterFacade 026 * 027 * @see ParameterFacade 028 */ 029public abstract class ParameterFacadeLogic 030 extends ModelElementFacadeLogicImpl 031 implements ParameterFacade 032{ 033 /** 034 * The underlying UML object 035 * @see Parameter 036 */ 037 protected Parameter metaObject; 038 039 /** Create Metafacade implementation instance using the MetafacadeFactory from the context 040 * @param metaObjectIn 041 * @param context 042 */ 043 protected ParameterFacadeLogic(Parameter metaObjectIn, String context) 044 { 045 super(metaObjectIn, getContext(context)); 046 this.metaObject = metaObjectIn; 047 } 048 049 /** 050 * The logger instance. 051 */ 052 private static final Logger logger = Logger.getLogger(ParameterFacadeLogic.class); 053 054 /** 055 * Gets the context for this metafacade logic instance. 056 * @param context String. Set to ParameterFacade if null 057 * @return context String 058 */ 059 private static String getContext(String context) 060 { 061 if (context == null) 062 { 063 context = "org.andromda.metafacades.uml.ParameterFacade"; 064 } 065 return context; 066 } 067 068 /** Reset context only for non-root metafacades 069 * @param context 070 */ 071 @Override 072 public void resetMetafacadeContext(String context) 073 { 074 if (!this.contextRoot) // reset context only for non-root metafacades 075 { 076 context = getContext(context); // to have same value as in original constructor call 077 setMetafacadeContext (context); 078 } 079 } 080 081 /** 082 * @return boolean true always 083 * @see ParameterFacade 084 */ 085 public boolean isParameterFacadeMetaType() 086 { 087 return true; 088 } 089 090 // --------------- attributes --------------------- 091 092 /** 093 * @see ParameterFacade#getDefaultValue() 094 * @return String 095 */ 096 protected abstract String handleGetDefaultValue(); 097 098 private String __defaultValue1a; 099 private boolean __defaultValue1aSet = false; 100 101 /** 102 * TODO: Model Documentation for ParameterFacade.defaultValue 103 * @return (String)handleGetDefaultValue() 104 */ 105 public final String getDefaultValue() 106 { 107 String defaultValue1a = this.__defaultValue1a; 108 if (!this.__defaultValue1aSet) 109 { 110 // defaultValue has no pre constraints 111 defaultValue1a = handleGetDefaultValue(); 112 // defaultValue has no post constraints 113 this.__defaultValue1a = defaultValue1a; 114 if (isMetafacadePropertyCachingEnabled()) 115 { 116 this.__defaultValue1aSet = true; 117 } 118 } 119 return defaultValue1a; 120 } 121 122 /** 123 * @see ParameterFacade#isDefaultValuePresent() 124 * @return boolean 125 */ 126 protected abstract boolean handleIsDefaultValuePresent(); 127 128 private boolean __defaultValuePresent2a; 129 private boolean __defaultValuePresent2aSet = false; 130 131 /** 132 * Indicates if the default value is present. 133 * @return (boolean)handleIsDefaultValuePresent() 134 */ 135 public final boolean isDefaultValuePresent() 136 { 137 boolean defaultValuePresent2a = this.__defaultValuePresent2a; 138 if (!this.__defaultValuePresent2aSet) 139 { 140 // defaultValuePresent has no pre constraints 141 defaultValuePresent2a = handleIsDefaultValuePresent(); 142 // defaultValuePresent has no post constraints 143 this.__defaultValuePresent2a = defaultValuePresent2a; 144 if (isMetafacadePropertyCachingEnabled()) 145 { 146 this.__defaultValuePresent2aSet = true; 147 } 148 } 149 return defaultValuePresent2a; 150 } 151 152 /** 153 * @see ParameterFacade#getGetterName() 154 * @return String 155 */ 156 protected abstract String handleGetGetterName(); 157 158 private String __getterName3a; 159 private boolean __getterName3aSet = false; 160 161 /** 162 * The name to use for accessors getting this parameter from a bean. 163 * @return (String)handleGetGetterName() 164 */ 165 public final String getGetterName() 166 { 167 String getterName3a = this.__getterName3a; 168 if (!this.__getterName3aSet) 169 { 170 // getterName has no pre constraints 171 getterName3a = handleGetGetterName(); 172 // getterName has no post constraints 173 this.__getterName3a = getterName3a; 174 if (isMetafacadePropertyCachingEnabled()) 175 { 176 this.__getterName3aSet = true; 177 } 178 } 179 return getterName3a; 180 } 181 182 /** 183 * @see ParameterFacade#getGetterSetterTypeName() 184 * @return String 185 */ 186 protected abstract String handleGetGetterSetterTypeName(); 187 188 private String __getterSetterTypeName4a; 189 private boolean __getterSetterTypeName4aSet = false; 190 191 /** 192 * Fully Qualified TypeName, determined in part by multiplicity (for UML2). For UML14, same as 193 * getterName. 194 * @return (String)handleGetGetterSetterTypeName() 195 */ 196 public final String getGetterSetterTypeName() 197 { 198 String getterSetterTypeName4a = this.__getterSetterTypeName4a; 199 if (!this.__getterSetterTypeName4aSet) 200 { 201 // getterSetterTypeName has no pre constraints 202 getterSetterTypeName4a = handleGetGetterSetterTypeName(); 203 // getterSetterTypeName has no post constraints 204 this.__getterSetterTypeName4a = getterSetterTypeName4a; 205 if (isMetafacadePropertyCachingEnabled()) 206 { 207 this.__getterSetterTypeName4aSet = true; 208 } 209 } 210 return getterSetterTypeName4a; 211 } 212 213 /** 214 * @see ParameterFacade#getGetterSetterTypeNameImpl() 215 * @return String 216 */ 217 protected abstract String handleGetGetterSetterTypeNameImpl(); 218 219 private String __getterSetterTypeNameImpl5a; 220 private boolean __getterSetterTypeNameImpl5aSet = false; 221 222 /** 223 * Fully Qualified implementation class of TypeName, determined in part by multiplicity (for 224 * UML2). If upper multiplicity =1, same as getterSetterTypeName. 225 * @return (String)handleGetGetterSetterTypeNameImpl() 226 */ 227 public final String getGetterSetterTypeNameImpl() 228 { 229 String getterSetterTypeNameImpl5a = this.__getterSetterTypeNameImpl5a; 230 if (!this.__getterSetterTypeNameImpl5aSet) 231 { 232 // getterSetterTypeNameImpl has no pre constraints 233 getterSetterTypeNameImpl5a = handleGetGetterSetterTypeNameImpl(); 234 // getterSetterTypeNameImpl has no post constraints 235 this.__getterSetterTypeNameImpl5a = getterSetterTypeNameImpl5a; 236 if (isMetafacadePropertyCachingEnabled()) 237 { 238 this.__getterSetterTypeNameImpl5aSet = true; 239 } 240 } 241 return getterSetterTypeNameImpl5a; 242 } 243 244 /** 245 * @see ParameterFacade#isRequired() 246 * @return boolean 247 */ 248 protected abstract boolean handleIsRequired(); 249 250 private boolean __required6a; 251 private boolean __required6aSet = false; 252 253 /** 254 * Whether or not this parameter is considered required (i.e must a non-empty value). 255 * @return (boolean)handleIsRequired() 256 */ 257 public final boolean isRequired() 258 { 259 boolean required6a = this.__required6a; 260 if (!this.__required6aSet) 261 { 262 // required has no pre constraints 263 required6a = handleIsRequired(); 264 // required has no post constraints 265 this.__required6a = required6a; 266 if (isMetafacadePropertyCachingEnabled()) 267 { 268 this.__required6aSet = true; 269 } 270 } 271 return required6a; 272 } 273 274 /** 275 * @see ParameterFacade#isReturn() 276 * @return boolean 277 */ 278 protected abstract boolean handleIsReturn(); 279 280 private boolean __return7a; 281 private boolean __return7aSet = false; 282 283 /** 284 * Whether or not this parameter represents a return parameter. 285 * @return (boolean)handleIsReturn() 286 */ 287 public final boolean isReturn() 288 { 289 boolean return7a = this.__return7a; 290 if (!this.__return7aSet) 291 { 292 // return has no pre constraints 293 return7a = handleIsReturn(); 294 // return has no post constraints 295 this.__return7a = return7a; 296 if (isMetafacadePropertyCachingEnabled()) 297 { 298 this.__return7aSet = true; 299 } 300 } 301 return return7a; 302 } 303 304 /** 305 * @see ParameterFacade#getSetterName() 306 * @return String 307 */ 308 protected abstract String handleGetSetterName(); 309 310 private String __setterName8a; 311 private boolean __setterName8aSet = false; 312 313 /** 314 * The name to use for accessors getting this parameter in a bean. 315 * @return (String)handleGetSetterName() 316 */ 317 public final String getSetterName() 318 { 319 String setterName8a = this.__setterName8a; 320 if (!this.__setterName8aSet) 321 { 322 // setterName has no pre constraints 323 setterName8a = handleGetSetterName(); 324 // setterName has no post constraints 325 this.__setterName8a = setterName8a; 326 if (isMetafacadePropertyCachingEnabled()) 327 { 328 this.__setterName8aSet = true; 329 } 330 } 331 return setterName8a; 332 } 333 334 /** 335 * @see ParameterFacade#isReadable() 336 * @return boolean 337 */ 338 protected abstract boolean handleIsReadable(); 339 340 private boolean __readable9a; 341 private boolean __readable9aSet = false; 342 343 /** 344 * True if this parameter is readable, aka an in-parameter, or this feature is unspecified. 345 * @return (boolean)handleIsReadable() 346 */ 347 public final boolean isReadable() 348 { 349 boolean readable9a = this.__readable9a; 350 if (!this.__readable9aSet) 351 { 352 // readable has no pre constraints 353 readable9a = handleIsReadable(); 354 // readable has no post constraints 355 this.__readable9a = readable9a; 356 if (isMetafacadePropertyCachingEnabled()) 357 { 358 this.__readable9aSet = true; 359 } 360 } 361 return readable9a; 362 } 363 364 /** 365 * @see ParameterFacade#isWritable() 366 * @return boolean 367 */ 368 protected abstract boolean handleIsWritable(); 369 370 private boolean __writable10a; 371 private boolean __writable10aSet = false; 372 373 /** 374 * True if this parameter is writable, aka an out-parameter, or this feature is unspecified. 375 * @return (boolean)handleIsWritable() 376 */ 377 public final boolean isWritable() 378 { 379 boolean writable10a = this.__writable10a; 380 if (!this.__writable10aSet) 381 { 382 // writable has no pre constraints 383 writable10a = handleIsWritable(); 384 // writable has no post constraints 385 this.__writable10a = writable10a; 386 if (isMetafacadePropertyCachingEnabled()) 387 { 388 this.__writable10aSet = true; 389 } 390 } 391 return writable10a; 392 } 393 394 /** 395 * @see ParameterFacade#isInParameter() 396 * @return boolean 397 */ 398 protected abstract boolean handleIsInParameter(); 399 400 private boolean __inParameter11a; 401 private boolean __inParameter11aSet = false; 402 403 /** 404 * True if this parameter is an 'in' parameter. 405 * @return (boolean)handleIsInParameter() 406 */ 407 public final boolean isInParameter() 408 { 409 boolean inParameter11a = this.__inParameter11a; 410 if (!this.__inParameter11aSet) 411 { 412 // inParameter has no pre constraints 413 inParameter11a = handleIsInParameter(); 414 // inParameter has no post constraints 415 this.__inParameter11a = inParameter11a; 416 if (isMetafacadePropertyCachingEnabled()) 417 { 418 this.__inParameter11aSet = true; 419 } 420 } 421 return inParameter11a; 422 } 423 424 /** 425 * @see ParameterFacade#isOutParameter() 426 * @return boolean 427 */ 428 protected abstract boolean handleIsOutParameter(); 429 430 private boolean __outParameter12a; 431 private boolean __outParameter12aSet = false; 432 433 /** 434 * True if this parameter is an 'out' parameter. 435 * @return (boolean)handleIsOutParameter() 436 */ 437 public final boolean isOutParameter() 438 { 439 boolean outParameter12a = this.__outParameter12a; 440 if (!this.__outParameter12aSet) 441 { 442 // outParameter has no pre constraints 443 outParameter12a = handleIsOutParameter(); 444 // outParameter has no post constraints 445 this.__outParameter12a = outParameter12a; 446 if (isMetafacadePropertyCachingEnabled()) 447 { 448 this.__outParameter12aSet = true; 449 } 450 } 451 return outParameter12a; 452 } 453 454 /** 455 * @see ParameterFacade#isInoutParameter() 456 * @return boolean 457 */ 458 protected abstract boolean handleIsInoutParameter(); 459 460 private boolean __inoutParameter13a; 461 private boolean __inoutParameter13aSet = false; 462 463 /** 464 * True if this parameter is an inout parameter. 465 * @return (boolean)handleIsInoutParameter() 466 */ 467 public final boolean isInoutParameter() 468 { 469 boolean inoutParameter13a = this.__inoutParameter13a; 470 if (!this.__inoutParameter13aSet) 471 { 472 // inoutParameter has no pre constraints 473 inoutParameter13a = handleIsInoutParameter(); 474 // inoutParameter has no post constraints 475 this.__inoutParameter13a = inoutParameter13a; 476 if (isMetafacadePropertyCachingEnabled()) 477 { 478 this.__inoutParameter13aSet = true; 479 } 480 } 481 return inoutParameter13a; 482 } 483 484 /** 485 * @see ParameterFacade#getUpper() 486 * @return int 487 */ 488 protected abstract int handleGetUpper(); 489 490 private int __upper14a; 491 private boolean __upper14aSet = false; 492 493 /** 494 * the upper value of the multiplicity (will be -1 for *) 495 * -only applicable for UML2 496 * @return (int)handleGetUpper() 497 */ 498 public final int getUpper() 499 { 500 int upper14a = this.__upper14a; 501 if (!this.__upper14aSet) 502 { 503 // upper has no pre constraints 504 upper14a = handleGetUpper(); 505 // upper has no post constraints 506 this.__upper14a = upper14a; 507 if (isMetafacadePropertyCachingEnabled()) 508 { 509 this.__upper14aSet = true; 510 } 511 } 512 return upper14a; 513 } 514 515 /** 516 * @see ParameterFacade#getLower() 517 * @return int 518 */ 519 protected abstract int handleGetLower(); 520 521 private int __lower15a; 522 private boolean __lower15aSet = false; 523 524 /** 525 * the lower value for the multiplicity 526 * -only applicable for UML2 527 * @return (int)handleGetLower() 528 */ 529 public final int getLower() 530 { 531 int lower15a = this.__lower15a; 532 if (!this.__lower15aSet) 533 { 534 // lower has no pre constraints 535 lower15a = handleGetLower(); 536 // lower has no post constraints 537 this.__lower15a = lower15a; 538 if (isMetafacadePropertyCachingEnabled()) 539 { 540 this.__lower15aSet = true; 541 } 542 } 543 return lower15a; 544 } 545 546 /** 547 * @see ParameterFacade#isUnique() 548 * @return boolean 549 */ 550 protected abstract boolean handleIsUnique(); 551 552 private boolean __unique16a; 553 private boolean __unique16aSet = false; 554 555 /** 556 * If Parameter type isMany (UML2), is the parameter unique within the Collection. Unique+Sorted 557 * determines pareter implementation type. For UML14, always false. 558 * @return (boolean)handleIsUnique() 559 */ 560 public final boolean isUnique() 561 { 562 boolean unique16a = this.__unique16a; 563 if (!this.__unique16aSet) 564 { 565 // unique has no pre constraints 566 unique16a = handleIsUnique(); 567 // unique has no post constraints 568 this.__unique16a = unique16a; 569 if (isMetafacadePropertyCachingEnabled()) 570 { 571 this.__unique16aSet = true; 572 } 573 } 574 return unique16a; 575 } 576 577 /** 578 * @see ParameterFacade#isOrdered() 579 * @return boolean 580 */ 581 protected abstract boolean handleIsOrdered(); 582 583 private boolean __ordered17a; 584 private boolean __ordered17aSet = false; 585 586 /** 587 * UML2 Only: Is parameter ordered within the Collection type. Ordered+Unique determines the 588 * implementation Collection Type. For UML14, always false. 589 * @return (boolean)handleIsOrdered() 590 */ 591 public final boolean isOrdered() 592 { 593 boolean ordered17a = this.__ordered17a; 594 if (!this.__ordered17aSet) 595 { 596 // ordered has no pre constraints 597 ordered17a = handleIsOrdered(); 598 // ordered has no post constraints 599 this.__ordered17a = ordered17a; 600 if (isMetafacadePropertyCachingEnabled()) 601 { 602 this.__ordered17aSet = true; 603 } 604 } 605 return ordered17a; 606 } 607 608 /** 609 * @see ParameterFacade#isMany() 610 * @return boolean 611 */ 612 protected abstract boolean handleIsMany(); 613 614 private boolean __many18a; 615 private boolean __many18aSet = false; 616 617 /** 618 * If upper>1 or upper==unlimited. Only applies to UML2. For UML14, always false. 619 * @return (boolean)handleIsMany() 620 */ 621 public final boolean isMany() 622 { 623 boolean many18a = this.__many18a; 624 if (!this.__many18aSet) 625 { 626 // many has no pre constraints 627 many18a = handleIsMany(); 628 // many has no post constraints 629 this.__many18a = many18a; 630 if (isMetafacadePropertyCachingEnabled()) 631 { 632 this.__many18aSet = true; 633 } 634 } 635 return many18a; 636 } 637 638 /** 639 * @see ParameterFacade#isException() 640 * @return boolean 641 */ 642 protected abstract boolean handleIsException(); 643 644 private boolean __exception19a; 645 private boolean __exception19aSet = false; 646 647 /** 648 * UML2: Returns the value of the 'Is Exception' attribute. The default value is "false". Tells 649 * whether an output parameter may emit a value to the exclusion of the other outputs. 650 * @return (boolean)handleIsException() 651 */ 652 public final boolean isException() 653 { 654 boolean exception19a = this.__exception19a; 655 if (!this.__exception19aSet) 656 { 657 // exception has no pre constraints 658 exception19a = handleIsException(); 659 // exception has no post constraints 660 this.__exception19a = exception19a; 661 if (isMetafacadePropertyCachingEnabled()) 662 { 663 this.__exception19aSet = true; 664 } 665 } 666 return exception19a; 667 } 668 669 /** 670 * @see ParameterFacade#getEffect() 671 * @return String 672 */ 673 protected abstract String handleGetEffect(); 674 675 private String __effect20a; 676 private boolean __effect20aSet = false; 677 678 /** 679 * UML2: A representation of the literals of the enumeration 'Parameter Effect Kind': CREATE, 680 * READ, UPDATE, DELETE. The datatype ParameterEffectKind is an enumeration that indicates the 681 * effect of a behavior on values passed in or out of its parameters. 682 * @return (String)handleGetEffect() 683 */ 684 public final String getEffect() 685 { 686 String effect20a = this.__effect20a; 687 if (!this.__effect20aSet) 688 { 689 // effect has no pre constraints 690 effect20a = handleGetEffect(); 691 // effect has no post constraints 692 this.__effect20a = effect20a; 693 if (isMetafacadePropertyCachingEnabled()) 694 { 695 this.__effect20aSet = true; 696 } 697 } 698 return effect20a; 699 } 700 701 // ------------- associations ------------------ 702 703 /** 704 * Specification of an argument used to pass information into or out of an invocation of a 705 * behavioral 706 * feature. Parameters are allowed to be treated as connectable elements. Parameters have 707 * support for 708 * streaming, exceptions, and parameter sets. 709 * @return (ClassifierFacade)handleGetType() 710 */ 711 public final ClassifierFacade getType() 712 { 713 ClassifierFacade getType1r = null; 714 // parameterFacade has no pre constraints 715 Object result = handleGetType(); 716 MetafacadeBase shieldedResult = this.shieldedElement(result); 717 try 718 { 719 getType1r = (ClassifierFacade)shieldedResult; 720 } 721 catch (ClassCastException ex) 722 { 723 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 724 ParameterFacadeLogic.logger.warn("incorrect metafacade cast for ParameterFacadeLogic.getType ClassifierFacade " + result + ": " + shieldedResult); 725 } 726 // parameterFacade has no post constraints 727 return getType1r; 728 } 729 730 /** 731 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 732 * @return Object 733 */ 734 protected abstract Object handleGetType(); 735 736 /** 737 * The parameters to this event. 738 * @return (EventFacade)handleGetEvent() 739 */ 740 public final EventFacade getEvent() 741 { 742 EventFacade getEvent2r = null; 743 // parameters has no pre constraints 744 Object result = handleGetEvent(); 745 MetafacadeBase shieldedResult = this.shieldedElement(result); 746 try 747 { 748 getEvent2r = (EventFacade)shieldedResult; 749 } 750 catch (ClassCastException ex) 751 { 752 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 753 ParameterFacadeLogic.logger.warn("incorrect metafacade cast for ParameterFacadeLogic.getEvent EventFacade " + result + ": " + shieldedResult); 754 } 755 // parameters has no post constraints 756 return getEvent2r; 757 } 758 759 /** 760 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 761 * @return Object 762 */ 763 protected abstract Object handleGetEvent(); 764 765 /** 766 * Return all parameters for the operation, including the return parameter. 767 * @return (OperationFacade)handleGetOperation() 768 */ 769 public final OperationFacade getOperation() 770 { 771 OperationFacade getOperation3r = null; 772 // parameters has no pre constraints 773 Object result = handleGetOperation(); 774 MetafacadeBase shieldedResult = this.shieldedElement(result); 775 try 776 { 777 getOperation3r = (OperationFacade)shieldedResult; 778 } 779 catch (ClassCastException ex) 780 { 781 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 782 ParameterFacadeLogic.logger.warn("incorrect metafacade cast for ParameterFacadeLogic.getOperation OperationFacade " + result + ": " + shieldedResult); 783 } 784 // parameters has no post constraints 785 return getOperation3r; 786 } 787 788 /** 789 * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type 790 * @return Object 791 */ 792 protected abstract Object handleGetOperation(); 793 794 /** 795 * <p><b>Constraint:</b> org::andromda::metafacades::uml::ParameterFacade::parameter needs a type</p> 796 * <p><b>Error:</b> Each parameter needs a type, you cannot leave the type unspecified.</p> 797 * <p><b>OCL:</b> context ParameterFacade 798inv: return = false implies type.name->notEmpty()</p> 799 * <p><b>Constraint:</b> org::andromda::metafacades::uml::ParameterFacade::non return type parameters must be named</p> 800 * <p><b>Error:</b> Each parameter that is NOT a return parameter must have a non-empty name.</p> 801 * <p><b>OCL:</b> context ParameterFacade 802inv: return = false 803implies name -> notEmpty()</p> 804 * <p><b>Constraint:</b> org::andromda::metafacades::uml::ParameterFacade::primitive parameter cannot be used in Collection</p> 805 * <p><b>Error:</b> Primitive parameters cannot be used in Collections (multiplicity > 1). Use the wrapped type instead.</p> 806 * <p><b>OCL:</b> context ParameterFacade inv: type.primitive implies (many = false)</p> 807 * <p><b>Constraint:</b> org::andromda::metafacades::uml::ParameterFacade::primitive parameter must be required</p> 808 * <p><b>Error:</b> Primitive operation parameters must have a multiplicity lower bound > 0 (must be required). Use a wrapped type, or change the multiplicity.</p> 809 * <p><b>OCL:</b> context ParameterFacade inv: type.primitive implies (lower > 0)</p> 810 * <p><b>Constraint:</b> org::andromda::metafacades::uml::ParameterFacade::wrapped primitive parameter should not be required</p> 811 * <p><b>Error:</b> Wrapped primitive operation parameters must have a multiplicity lower bound = 0 (must be optional). Use the unwrapped type, or change the multiplicity.</p> 812 * <p><b>OCL:</b> context ParameterFacade inv: type.wrappedPrimitive and many = false implies (lower = 0)</p> 813 * @param validationMessages Collection<ModelValidationMessage> 814 * @see ModelElementFacadeLogicImpl#validateInvariants(Collection validationMessages) 815 */ 816 @Override 817 public void validateInvariants(Collection<ModelValidationMessage> validationMessages) 818 { 819 super.validateInvariants(validationMessages); 820 try 821 { 822 final Object contextElement = this.THIS(); 823 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"return"),false))).booleanValue()?OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"type.name")):true)); 824 if (!constraintValid) 825 { 826 validationMessages.add( 827 new ModelValidationMessage( 828 (MetafacadeBase)contextElement , 829 "org::andromda::metafacades::uml::ParameterFacade::parameter needs a type", 830 "Each parameter needs a type, you cannot leave the type unspecified.")); 831 } 832 } 833 catch (Throwable th) 834 { 835 Throwable cause = th.getCause(); 836 int depth = 0; // Some throwables have infinite recursion 837 while (cause != null && depth < 7) 838 { 839 th = cause; 840 depth++; 841 } 842 logger.error("Error validating constraint 'org::andromda::metafacades::uml::ParameterFacade::parameter needs a type' ON " 843 + this.THIS().toString() + ": " + th.getMessage(), th); 844 } 845 try 846 { 847 final Object contextElement = this.THIS(); 848 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"return"),false))).booleanValue()?OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"name")):true)); 849 if (!constraintValid) 850 { 851 validationMessages.add( 852 new ModelValidationMessage( 853 (MetafacadeBase)contextElement , 854 "org::andromda::metafacades::uml::ParameterFacade::non return type parameters must be named", 855 "Each parameter that is NOT a return parameter must have a non-empty name.")); 856 } 857 } 858 catch (Throwable th) 859 { 860 Throwable cause = th.getCause(); 861 int depth = 0; // Some throwables have infinite recursion 862 while (cause != null && depth < 7) 863 { 864 th = cause; 865 depth++; 866 } 867 logger.error("Error validating constraint 'org::andromda::metafacades::uml::ParameterFacade::non return type parameters must be named' ON " 868 + this.THIS().toString() + ": " + th.getMessage(), th); 869 } 870 try 871 { 872 final Object contextElement = this.THIS(); 873 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"type.primitive"))).booleanValue()?(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"many"),false)):true)); 874 if (!constraintValid) 875 { 876 validationMessages.add( 877 new ModelValidationMessage( 878 (MetafacadeBase)contextElement , 879 "org::andromda::metafacades::uml::ParameterFacade::primitive parameter cannot be used in Collection", 880 "Primitive parameters cannot be used in Collections (multiplicity > 1). Use the wrapped type instead.")); 881 } 882 } 883 catch (Throwable th) 884 { 885 Throwable cause = th.getCause(); 886 int depth = 0; // Some throwables have infinite recursion 887 while (cause != null && depth < 7) 888 { 889 th = cause; 890 depth++; 891 } 892 logger.error("Error validating constraint 'org::andromda::metafacades::uml::ParameterFacade::primitive parameter cannot be used in Collection' ON " 893 + this.THIS().toString() + ": " + th.getMessage(), th); 894 } 895 try 896 { 897 final Object contextElement = this.THIS(); 898 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"type.primitive"))).booleanValue()?(OCLExpressions.greater(OCLIntrospector.invoke(contextElement,"lower"),0)):true)); 899 if (!constraintValid) 900 { 901 validationMessages.add( 902 new ModelValidationMessage( 903 (MetafacadeBase)contextElement , 904 "org::andromda::metafacades::uml::ParameterFacade::primitive parameter must be required", 905 "Primitive operation parameters must have a multiplicity lower bound > 0 (must be required). Use a wrapped type, or change the multiplicity.")); 906 } 907 } 908 catch (Throwable th) 909 { 910 Throwable cause = th.getCause(); 911 int depth = 0; // Some throwables have infinite recursion 912 while (cause != null && depth < 7) 913 { 914 th = cause; 915 depth++; 916 } 917 logger.error("Error validating constraint 'org::andromda::metafacades::uml::ParameterFacade::primitive parameter must be required' ON " 918 + this.THIS().toString() + ": " + th.getMessage(), th); 919 } 920 try 921 { 922 final Object contextElement = this.THIS(); 923 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)); 924 if (!constraintValid) 925 { 926 validationMessages.add( 927 new ModelValidationMessage( 928 (MetafacadeBase)contextElement , 929 "org::andromda::metafacades::uml::ParameterFacade::wrapped primitive parameter should not be required", 930 "Wrapped primitive operation parameters must have a multiplicity lower bound = 0 (must be optional). Use the unwrapped type, or change the multiplicity.")); 931 } 932 } 933 catch (Throwable th) 934 { 935 Throwable cause = th.getCause(); 936 int depth = 0; // Some throwables have infinite recursion 937 while (cause != null && depth < 7) 938 { 939 th = cause; 940 depth++; 941 } 942 logger.error("Error validating constraint 'org::andromda::metafacades::uml::ParameterFacade::wrapped primitive parameter should not be required' ON " 943 + this.THIS().toString() + ": " + th.getMessage(), th); 944 } 945 } 946}