001// license-header java merge-point 002// 003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify! 004// 005package org.andromda.cartridges.bpm4struts.metafacades; 006 007import java.util.Collection; 008import java.util.List; 009import org.andromda.core.common.Introspector; 010import org.andromda.core.metafacade.MetafacadeBase; 011import org.andromda.core.metafacade.MetafacadeFactory; 012import org.andromda.core.metafacade.ModelValidationMessage; 013import org.andromda.metafacades.uml.AssociationEndFacade; 014import org.andromda.metafacades.uml.AttributeFacade; 015import org.andromda.metafacades.uml.ClassifierFacade; 016import org.andromda.metafacades.uml.ConstraintFacade; 017import org.andromda.metafacades.uml.DependencyFacade; 018import org.andromda.metafacades.uml.FrontEndAction; 019import org.andromda.metafacades.uml.FrontEndController; 020import org.andromda.metafacades.uml.FrontEndUseCase; 021import org.andromda.metafacades.uml.GeneralizableElementFacade; 022import org.andromda.metafacades.uml.GeneralizationFacade; 023import org.andromda.metafacades.uml.ModelElementFacade; 024import org.andromda.metafacades.uml.ModelFacade; 025import org.andromda.metafacades.uml.OperationFacade; 026import org.andromda.metafacades.uml.PackageFacade; 027import org.andromda.metafacades.uml.StateMachineFacade; 028import org.andromda.metafacades.uml.StereotypeFacade; 029import org.andromda.metafacades.uml.TaggedValueFacade; 030import org.andromda.metafacades.uml.TemplateParameterFacade; 031import org.andromda.metafacades.uml.TypeMappings; 032import org.andromda.translation.ocl.validation.OCLCollections; 033import org.andromda.translation.ocl.validation.OCLExpressions; 034import org.andromda.translation.ocl.validation.OCLIntrospector; 035import org.andromda.translation.ocl.validation.OCLResultEnsurer; 036import org.apache.commons.collections.Transformer; 037import org.apache.log4j.Logger; 038 039/** 040 * A controller is assigned as the context of a use-case. All manual implementation is done in the 041 * controller as Struts actions may result in derferring method calls to this controller. 042 * MetafacadeLogic for StrutsController 043 * 044 * @see StrutsController 045 */ 046public abstract class StrutsControllerLogic 047 extends MetafacadeBase 048 implements StrutsController 049{ 050 /** 051 * The underlying UML object 052 * @see Object 053 */ 054 protected Object metaObject; 055 056 /** Create Metafacade implementation instance using the MetafacadeFactory from the context 057 * @param metaObjectIn 058 * @param context 059 */ 060 protected StrutsControllerLogic(Object metaObjectIn, String context) 061 { 062 super(metaObjectIn, getContext(context)); 063 this.superFrontEndController = 064 (FrontEndController) 065 MetafacadeFactory.getInstance().createFacadeImpl( 066 "org.andromda.metafacades.uml.FrontEndController", 067 metaObjectIn, 068 getContext(context)); 069 this.metaObject = metaObjectIn; 070 } 071 072 /** 073 * The logger instance. 074 */ 075 private static final Logger logger = Logger.getLogger(StrutsControllerLogic.class); 076 077 /** 078 * Gets the context for this metafacade logic instance. 079 * @param context String. Set to StrutsController if null 080 * @return context String 081 */ 082 private static String getContext(String context) 083 { 084 if (context == null) 085 { 086 context = "org.andromda.cartridges.bpm4struts.metafacades.StrutsController"; 087 } 088 return context; 089 } 090 091 private FrontEndController superFrontEndController; 092 private boolean superFrontEndControllerInitialized = false; 093 094 /** 095 * Gets the FrontEndController parent instance. 096 * @return this.superFrontEndController FrontEndController 097 */ 098 private FrontEndController getSuperFrontEndController() 099 { 100 if (!this.superFrontEndControllerInitialized) 101 { 102 ((MetafacadeBase)this.superFrontEndController).setMetafacadeContext(this.getMetafacadeContext()); 103 this.superFrontEndControllerInitialized = true; 104 } 105 return this.superFrontEndController; 106 } 107 108 /** Reset context only for non-root metafacades 109 * @param context 110 * @see MetafacadeBase#resetMetafacadeContext(String context) 111 */ 112 @Override 113 public void resetMetafacadeContext(String context) 114 { 115 if (!this.contextRoot) // reset context only for non-root metafacades 116 { 117 context = getContext(context); // to have same value as in original constructor call 118 setMetafacadeContext (context); 119 if (this.superFrontEndControllerInitialized) 120 { 121 ((MetafacadeBase)this.superFrontEndController).resetMetafacadeContext(context); 122 } 123 } 124 } 125 126 /** 127 * @return boolean true always 128 * @see StrutsController 129 */ 130 public boolean isStrutsControllerMetaType() 131 { 132 return true; 133 } 134 135 // --------------- attributes --------------------- 136 137 /** 138 * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsController#getFullPath() 139 * @return String 140 */ 141 protected abstract String handleGetFullPath(); 142 143 /** 144 * The full path to this controller (that is the full file system path made up from the package 145 * and name). 146 * @return (String)handleGetFullPath() 147 */ 148 public final String getFullPath() 149 { 150 String fullPath1a = null; 151 // fullPath has no pre constraints 152 fullPath1a = handleGetFullPath(); 153 // fullPath has no post constraints 154 return fullPath1a; 155 } 156 157 // ------------- associations ------------------ 158 159 private List<StrutsSessionObject> __getSessionObjects1r; 160 private boolean __getSessionObjects1rSet = false; 161 162 /** 163 * A controller is assigned as the context of a use-case. All manual implementation is done in 164 * the 165 * controller as Struts actions may result in derferring method calls to this controller. 166 * @return (List<StrutsSessionObject>)handleGetSessionObjects() 167 */ 168 public final List<StrutsSessionObject> getSessionObjects() 169 { 170 List<StrutsSessionObject> getSessionObjects1r = this.__getSessionObjects1r; 171 if (!this.__getSessionObjects1rSet) 172 { 173 // strutsController has no pre constraints 174 List result = handleGetSessionObjects(); 175 List shieldedResult = this.shieldedElements(result); 176 try 177 { 178 getSessionObjects1r = (List<StrutsSessionObject>)shieldedResult; 179 } 180 catch (ClassCastException ex) 181 { 182 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 183 StrutsControllerLogic.logger.warn("incorrect metafacade cast for StrutsControllerLogic.getSessionObjects List<StrutsSessionObject> " + result + ": " + shieldedResult); 184 } 185 // strutsController has no post constraints 186 this.__getSessionObjects1r = getSessionObjects1r; 187 if (isMetafacadePropertyCachingEnabled()) 188 { 189 this.__getSessionObjects1rSet = true; 190 } 191 } 192 return getSessionObjects1r; 193 } 194 195 /** 196 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type 197 * @return List 198 */ 199 protected abstract List handleGetSessionObjects(); 200 201 private List<StrutsParameter> __getAllArguments2r; 202 private boolean __getAllArguments2rSet = false; 203 204 /** 205 * A controller is assigned as the context of a use-case. All manual implementation is done in 206 * the 207 * controller as Struts actions may result in derferring method calls to this controller. 208 * @return (List<StrutsParameter>)handleGetAllArguments() 209 */ 210 public final List<StrutsParameter> getAllArguments() 211 { 212 List<StrutsParameter> getAllArguments2r = this.__getAllArguments2r; 213 if (!this.__getAllArguments2rSet) 214 { 215 // strutsController has no pre constraints 216 List result = handleGetAllArguments(); 217 List shieldedResult = this.shieldedElements(result); 218 try 219 { 220 getAllArguments2r = (List<StrutsParameter>)shieldedResult; 221 } 222 catch (ClassCastException ex) 223 { 224 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn 225 StrutsControllerLogic.logger.warn("incorrect metafacade cast for StrutsControllerLogic.getAllArguments List<StrutsParameter> " + result + ": " + shieldedResult); 226 } 227 // strutsController has no post constraints 228 this.__getAllArguments2r = getAllArguments2r; 229 if (isMetafacadePropertyCachingEnabled()) 230 { 231 this.__getAllArguments2rSet = true; 232 } 233 } 234 return getAllArguments2r; 235 } 236 237 /** 238 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type 239 * @return List 240 */ 241 protected abstract List handleGetAllArguments(); 242 243 /** 244 * @return true 245 * @see FrontEndController 246 */ 247 public boolean isFrontEndControllerMetaType() 248 { 249 return true; 250 } 251 252 /** 253 * @return true 254 * @see ClassifierFacade 255 */ 256 public boolean isClassifierFacadeMetaType() 257 { 258 return true; 259 } 260 261 /** 262 * @return true 263 * @see GeneralizableElementFacade 264 */ 265 public boolean isGeneralizableElementFacadeMetaType() 266 { 267 return true; 268 } 269 270 /** 271 * @return true 272 * @see ModelElementFacade 273 */ 274 public boolean isModelElementFacadeMetaType() 275 { 276 return true; 277 } 278 279 // ----------- delegates to FrontEndController ------------ 280 /** 281 * Return the attribute which name matches the parameter 282 * @see ClassifierFacade#findAttribute(String name) 283 */ 284 public AttributeFacade findAttribute(String name) 285 { 286 return this.getSuperFrontEndController().findAttribute(name); 287 } 288 289 /** 290 * Those abstraction dependencies for which this classifier is the client. 291 * @see ClassifierFacade#getAbstractions() 292 */ 293 public Collection<ClassifierFacade> getAbstractions() 294 { 295 return this.getSuperFrontEndController().getAbstractions(); 296 } 297 298 /** 299 * Lists all classes associated to this one and any ancestor classes (through generalization). 300 * There will be no duplicates. The order of the elements is predictable. 301 * @see ClassifierFacade#getAllAssociatedClasses() 302 */ 303 public Collection<ClassifierFacade> getAllAssociatedClasses() 304 { 305 return this.getSuperFrontEndController().getAllAssociatedClasses(); 306 } 307 308 /** 309 * A collection containing all 'properties' of the classifier and its ancestors. Properties are 310 * any attributes and navigable connecting association ends. 311 * @see ClassifierFacade#getAllProperties() 312 */ 313 public Collection<ModelElementFacade> getAllProperties() 314 { 315 return this.getSuperFrontEndController().getAllProperties(); 316 } 317 318 /** 319 * A collection containing all required and/or read-only 'properties' of the classifier and its 320 * ancestors. Properties are any attributes and navigable connecting association ends. 321 * @see ClassifierFacade#getAllRequiredConstructorParameters() 322 */ 323 public Collection<ModelElementFacade> getAllRequiredConstructorParameters() 324 { 325 return this.getSuperFrontEndController().getAllRequiredConstructorParameters(); 326 } 327 328 /** 329 * Gets the array type for this classifier. If this classifier already represents an array, it 330 * just returns itself. 331 * @see ClassifierFacade#getArray() 332 */ 333 public ClassifierFacade getArray() 334 { 335 return this.getSuperFrontEndController().getArray(); 336 } 337 338 /** 339 * The name of the classifier as an array. 340 * @see ClassifierFacade#getArrayName() 341 */ 342 public String getArrayName() 343 { 344 return this.getSuperFrontEndController().getArrayName(); 345 } 346 347 /** 348 * Lists the classes associated to this one, there is no repitition of classes. The order of the 349 * elements is predictable. 350 * @see ClassifierFacade#getAssociatedClasses() 351 */ 352 public Collection<ClassifierFacade> getAssociatedClasses() 353 { 354 return this.getSuperFrontEndController().getAssociatedClasses(); 355 } 356 357 /** 358 * Gets the association ends belonging to a classifier. 359 * @see ClassifierFacade#getAssociationEnds() 360 */ 361 public List<AssociationEndFacade> getAssociationEnds() 362 { 363 return this.getSuperFrontEndController().getAssociationEnds(); 364 } 365 366 /** 367 * Gets the attributes that belong to the classifier. 368 * @see ClassifierFacade#getAttributes() 369 */ 370 public List<AttributeFacade> getAttributes() 371 { 372 return this.getSuperFrontEndController().getAttributes(); 373 } 374 375 /** 376 * Gets all attributes for the classifier and if 'follow' is true goes up the inheritance 377 * hierarchy and gets the attributes from the super classes as well. 378 * @see ClassifierFacade#getAttributes(boolean follow) 379 */ 380 public List<AttributeFacade> getAttributes(boolean follow) 381 { 382 return this.getSuperFrontEndController().getAttributes(follow); 383 } 384 385 /** 386 * The fully qualified name of the classifier as an array. 387 * @see ClassifierFacade#getFullyQualifiedArrayName() 388 */ 389 public String getFullyQualifiedArrayName() 390 { 391 return this.getSuperFrontEndController().getFullyQualifiedArrayName(); 392 } 393 394 /** 395 * Returns all those operations that could be implemented at this classifier's level. This means 396 * the operations owned by this classifier as well as any realized interface's operations 397 * (recursively) in case this classifier itself is not already an interface, or generalized when 398 * this classifier is an interface. 399 * @see ClassifierFacade#getImplementationOperations() 400 */ 401 public Collection<OperationFacade> getImplementationOperations() 402 { 403 return this.getSuperFrontEndController().getImplementationOperations(); 404 } 405 406 /** 407 * A comma separated list of the fully qualified names of all implemented interfaces. 408 * @see ClassifierFacade#getImplementedInterfaceList() 409 */ 410 public String getImplementedInterfaceList() 411 { 412 return this.getSuperFrontEndController().getImplementedInterfaceList(); 413 } 414 415 /** 416 * Those attributes that are scoped to an instance of this class. 417 * @see ClassifierFacade#getInstanceAttributes() 418 */ 419 public Collection<AttributeFacade> getInstanceAttributes() 420 { 421 return this.getSuperFrontEndController().getInstanceAttributes(); 422 } 423 424 /** 425 * Those operations that are scoped to an instance of this class. 426 * @see ClassifierFacade#getInstanceOperations() 427 */ 428 public List<OperationFacade> getInstanceOperations() 429 { 430 return this.getSuperFrontEndController().getInstanceOperations(); 431 } 432 433 /** 434 * Those interfaces that are abstractions of this classifier, this basically means this 435 * classifier realizes them. 436 * @see ClassifierFacade#getInterfaceAbstractions() 437 */ 438 public Collection<ClassifierFacade> getInterfaceAbstractions() 439 { 440 return this.getSuperFrontEndController().getInterfaceAbstractions(); 441 } 442 443 /** 444 * A String representing a new Constructor declaration for this classifier type to be used in a 445 * Java environment. 446 * @see ClassifierFacade#getJavaNewString() 447 */ 448 public String getJavaNewString() 449 { 450 return this.getSuperFrontEndController().getJavaNewString(); 451 } 452 453 /** 454 * A String representing the null-value for this classifier type to be used in a Java 455 * environment. 456 * @see ClassifierFacade#getJavaNullString() 457 */ 458 public String getJavaNullString() 459 { 460 return this.getSuperFrontEndController().getJavaNullString(); 461 } 462 463 /** 464 * The other ends of this classifier's association ends which are navigable. 465 * @see ClassifierFacade#getNavigableConnectingEnds() 466 */ 467 public Collection<AssociationEndFacade> getNavigableConnectingEnds() 468 { 469 return this.getSuperFrontEndController().getNavigableConnectingEnds(); 470 } 471 472 /** 473 * Get the other ends of this classifier's association ends which are navigable and if 'follow' 474 * is true goes up the inheritance hierarchy and gets the super association ends as well. 475 * @see ClassifierFacade#getNavigableConnectingEnds(boolean follow) 476 */ 477 public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow) 478 { 479 return this.getSuperFrontEndController().getNavigableConnectingEnds(follow); 480 } 481 482 /** 483 * Assuming that the classifier is an array, this will return the non array type of the 484 * classifier from 485 * the model. If the classifier is NOT an array, it will just return itself. 486 * @see ClassifierFacade#getNonArray() 487 */ 488 public ClassifierFacade getNonArray() 489 { 490 return this.getSuperFrontEndController().getNonArray(); 491 } 492 493 /** 494 * The attributes from this classifier in the form of an operation call (this example would be 495 * in Java): '(String attributeOne, String attributeTwo). If there were no attributes on the 496 * classifier, the result would be an empty '()'. 497 * @see ClassifierFacade#getOperationCallFromAttributes() 498 */ 499 public String getOperationCallFromAttributes() 500 { 501 return this.getSuperFrontEndController().getOperationCallFromAttributes(); 502 } 503 504 /** 505 * The operations owned by this classifier. 506 * @see ClassifierFacade#getOperations() 507 */ 508 public List<OperationFacade> getOperations() 509 { 510 return this.getSuperFrontEndController().getOperations(); 511 } 512 513 /** 514 * A collection containing all 'properties' of the classifier. Properties are any attributes 515 * and navigable connecting association ends. 516 * @see ClassifierFacade#getProperties() 517 */ 518 public List<ModelElementFacade> getProperties() 519 { 520 return this.getSuperFrontEndController().getProperties(); 521 } 522 523 /** 524 * Gets all properties (attributes and navigable association ends) for the classifier and if 525 * 'follow' is true goes up the inheritance hierarchy and gets the properties from the super 526 * classes as well. 527 * @see ClassifierFacade#getProperties(boolean follow) 528 */ 529 public List getProperties(boolean follow) 530 { 531 return this.getSuperFrontEndController().getProperties(follow); 532 } 533 534 /** 535 * A collection containing all required and/or read-only 'properties' of the classifier. 536 * Properties are any attributes and navigable connecting association ends. 537 * @see ClassifierFacade#getRequiredConstructorParameters() 538 */ 539 public Collection<ModelElementFacade> getRequiredConstructorParameters() 540 { 541 return this.getSuperFrontEndController().getRequiredConstructorParameters(); 542 } 543 544 /** 545 * Returns the serial version UID of the underlying model element. 546 * @see ClassifierFacade#getSerialVersionUID() 547 */ 548 public long getSerialVersionUID() 549 { 550 return this.getSuperFrontEndController().getSerialVersionUID(); 551 } 552 553 /** 554 * Those attributes that are scoped to the definition of this class. 555 * @see ClassifierFacade#getStaticAttributes() 556 */ 557 public Collection<AttributeFacade> getStaticAttributes() 558 { 559 return this.getSuperFrontEndController().getStaticAttributes(); 560 } 561 562 /** 563 * Those operations that are scoped to the definition of this class. 564 * @see ClassifierFacade#getStaticOperations() 565 */ 566 public List<OperationFacade> getStaticOperations() 567 { 568 return this.getSuperFrontEndController().getStaticOperations(); 569 } 570 571 /** 572 * This class' superclass, returns the generalization if it is a ClassifierFacade, null 573 * otherwise. 574 * @see ClassifierFacade#getSuperClass() 575 */ 576 public ClassifierFacade getSuperClass() 577 { 578 return this.getSuperFrontEndController().getSuperClass(); 579 } 580 581 /** 582 * The wrapper name for this classifier if a mapped type has a defined wrapper class (ie. 'long' 583 * maps to 'Long'). If the classifier doesn't have a wrapper defined for it, this method will 584 * return a null. Note that wrapper mappings must be defined for the namespace by defining the 585 * 'wrapperMappingsUri', this property must point to the location of the mappings file which 586 * maps the primitives to wrapper types. 587 * @see ClassifierFacade#getWrapperName() 588 */ 589 public String getWrapperName() 590 { 591 return this.getSuperFrontEndController().getWrapperName(); 592 } 593 594 /** 595 * Indicates if this classifier is 'abstract'. 596 * @see ClassifierFacade#isAbstract() 597 */ 598 public boolean isAbstract() 599 { 600 return this.getSuperFrontEndController().isAbstract(); 601 } 602 603 /** 604 * True if this classifier represents an array type. False otherwise. 605 * @see ClassifierFacade#isArrayType() 606 */ 607 public boolean isArrayType() 608 { 609 return this.getSuperFrontEndController().isArrayType(); 610 } 611 612 /** 613 * True if the ClassifierFacade is an AssociationClass. 614 * @see ClassifierFacade#isAssociationClass() 615 */ 616 public boolean isAssociationClass() 617 { 618 return this.getSuperFrontEndController().isAssociationClass(); 619 } 620 621 /** 622 * Returns true if this type represents a Blob type. 623 * @see ClassifierFacade#isBlobType() 624 */ 625 public boolean isBlobType() 626 { 627 return this.getSuperFrontEndController().isBlobType(); 628 } 629 630 /** 631 * Indicates if this type represents a boolean type or not. 632 * @see ClassifierFacade#isBooleanType() 633 */ 634 public boolean isBooleanType() 635 { 636 return this.getSuperFrontEndController().isBooleanType(); 637 } 638 639 /** 640 * Indicates if this type represents a char, Character, or java.lang.Character type or not. 641 * @see ClassifierFacade#isCharacterType() 642 */ 643 public boolean isCharacterType() 644 { 645 return this.getSuperFrontEndController().isCharacterType(); 646 } 647 648 /** 649 * Returns true if this type represents a Clob type. 650 * @see ClassifierFacade#isClobType() 651 */ 652 public boolean isClobType() 653 { 654 return this.getSuperFrontEndController().isClobType(); 655 } 656 657 /** 658 * True if this classifier represents a collection type. False otherwise. 659 * @see ClassifierFacade#isCollectionType() 660 */ 661 public boolean isCollectionType() 662 { 663 return this.getSuperFrontEndController().isCollectionType(); 664 } 665 666 /** 667 * True/false depending on whether or not this classifier represents a datatype. A data type is 668 * a type whose instances are identified only by their value. A data type may contain attributes 669 * to support the modeling of structured data types. 670 * @see ClassifierFacade#isDataType() 671 */ 672 public boolean isDataType() 673 { 674 return this.getSuperFrontEndController().isDataType(); 675 } 676 677 /** 678 * True when this classifier is a date type. 679 * @see ClassifierFacade#isDateType() 680 */ 681 public boolean isDateType() 682 { 683 return this.getSuperFrontEndController().isDateType(); 684 } 685 686 /** 687 * Indicates if this type represents a Double type or not. 688 * @see ClassifierFacade#isDoubleType() 689 */ 690 public boolean isDoubleType() 691 { 692 return this.getSuperFrontEndController().isDoubleType(); 693 } 694 695 /** 696 * Indicates whether or not this classifier represents an "EmbeddedValue'. 697 * @see ClassifierFacade#isEmbeddedValue() 698 */ 699 public boolean isEmbeddedValue() 700 { 701 return this.getSuperFrontEndController().isEmbeddedValue(); 702 } 703 704 /** 705 * True if this classifier is in fact marked as an enumeration. 706 * @see ClassifierFacade#isEnumeration() 707 */ 708 public boolean isEnumeration() 709 { 710 return this.getSuperFrontEndController().isEnumeration(); 711 } 712 713 /** 714 * Returns true if this type represents a 'file' type. 715 * @see ClassifierFacade#isFileType() 716 */ 717 public boolean isFileType() 718 { 719 return this.getSuperFrontEndController().isFileType(); 720 } 721 722 /** 723 * Indicates if this type represents a Float type or not. 724 * @see ClassifierFacade#isFloatType() 725 */ 726 public boolean isFloatType() 727 { 728 return this.getSuperFrontEndController().isFloatType(); 729 } 730 731 /** 732 * Indicates if this type represents an int or Integer or java.lang.Integer type or not. 733 * @see ClassifierFacade#isIntegerType() 734 */ 735 public boolean isIntegerType() 736 { 737 return this.getSuperFrontEndController().isIntegerType(); 738 } 739 740 /** 741 * True/false depending on whether or not this Classifier represents an interface. 742 * @see ClassifierFacade#isInterface() 743 */ 744 public boolean isInterface() 745 { 746 return this.getSuperFrontEndController().isInterface(); 747 } 748 749 /** 750 * True if this classifier cannot be extended and represent a leaf in the inheritance tree. 751 * @see ClassifierFacade#isLeaf() 752 */ 753 public boolean isLeaf() 754 { 755 return this.getSuperFrontEndController().isLeaf(); 756 } 757 758 /** 759 * True if this classifier represents a list type. False otherwise. 760 * @see ClassifierFacade#isListType() 761 */ 762 public boolean isListType() 763 { 764 return this.getSuperFrontEndController().isListType(); 765 } 766 767 /** 768 * Indicates if this type represents a Long type or not. 769 * @see ClassifierFacade#isLongType() 770 */ 771 public boolean isLongType() 772 { 773 return this.getSuperFrontEndController().isLongType(); 774 } 775 776 /** 777 * Indicates whether or not this classifier represents a Map type. 778 * @see ClassifierFacade#isMapType() 779 */ 780 public boolean isMapType() 781 { 782 return this.getSuperFrontEndController().isMapType(); 783 } 784 785 /** 786 * Indicates whether or not this classifier represents a primitive type. 787 * @see ClassifierFacade#isPrimitive() 788 */ 789 public boolean isPrimitive() 790 { 791 return this.getSuperFrontEndController().isPrimitive(); 792 } 793 794 /** 795 * True if this classifier represents a set type. False otherwise. 796 * @see ClassifierFacade#isSetType() 797 */ 798 public boolean isSetType() 799 { 800 return this.getSuperFrontEndController().isSetType(); 801 } 802 803 /** 804 * Indicates whether or not this classifier represents a string type. 805 * @see ClassifierFacade#isStringType() 806 */ 807 public boolean isStringType() 808 { 809 return this.getSuperFrontEndController().isStringType(); 810 } 811 812 /** 813 * Indicates whether or not this classifier represents a time type. 814 * @see ClassifierFacade#isTimeType() 815 */ 816 public boolean isTimeType() 817 { 818 return this.getSuperFrontEndController().isTimeType(); 819 } 820 821 /** 822 * Returns true if this type is a wrapped primitive type. 823 * @see ClassifierFacade#isWrappedPrimitive() 824 */ 825 public boolean isWrappedPrimitive() 826 { 827 return this.getSuperFrontEndController().isWrappedPrimitive(); 828 } 829 830 /** 831 * All actions that defer to at least one operation of this controller. 832 * @see FrontEndController#getDeferringActions() 833 */ 834 public List<FrontEndAction> getDeferringActions() 835 { 836 return this.getSuperFrontEndController().getDeferringActions(); 837 } 838 839 /** 840 * Returns all back-end services referenced by this controller. 841 * @see FrontEndController#getServiceReferences() 842 */ 843 public List<DependencyFacade> getServiceReferences() 844 { 845 return this.getSuperFrontEndController().getServiceReferences(); 846 } 847 848 /** 849 * Returns the use-case "controlled" by this controller. 850 * @see FrontEndController#getUseCase() 851 */ 852 public FrontEndUseCase getUseCase() 853 { 854 return this.getSuperFrontEndController().getUseCase(); 855 } 856 857 /** 858 * Finds the tagged value optional searching the entire inheritance hierarchy if 'follow' is set 859 * to true. 860 * @see GeneralizableElementFacade#findTaggedValue(String tagName, boolean follow) 861 */ 862 public Object findTaggedValue(String tagName, boolean follow) 863 { 864 return this.getSuperFrontEndController().findTaggedValue(tagName, follow); 865 } 866 867 /** 868 * All generalizations for this generalizable element, goes up the inheritance tree. 869 * @see GeneralizableElementFacade#getAllGeneralizations() 870 */ 871 public Collection<GeneralizableElementFacade> getAllGeneralizations() 872 { 873 return this.getSuperFrontEndController().getAllGeneralizations(); 874 } 875 876 /** 877 * All specializations (travels down the inheritance hierarchy). 878 * @see GeneralizableElementFacade#getAllSpecializations() 879 */ 880 public Collection<GeneralizableElementFacade> getAllSpecializations() 881 { 882 return this.getSuperFrontEndController().getAllSpecializations(); 883 } 884 885 /** 886 * Gets the direct generalization for this generalizable element. 887 * @see GeneralizableElementFacade#getGeneralization() 888 */ 889 public GeneralizableElementFacade getGeneralization() 890 { 891 return this.getSuperFrontEndController().getGeneralization(); 892 } 893 894 /** 895 * Gets the actual links that this generalization element is part of (it plays either the 896 * specialization or generalization). 897 * @see GeneralizableElementFacade#getGeneralizationLinks() 898 */ 899 public Collection<GeneralizationFacade> getGeneralizationLinks() 900 { 901 return this.getSuperFrontEndController().getGeneralizationLinks(); 902 } 903 904 /** 905 * A comma separated list of the fully qualified names of all generalizations. 906 * @see GeneralizableElementFacade#getGeneralizationList() 907 */ 908 public String getGeneralizationList() 909 { 910 return this.getSuperFrontEndController().getGeneralizationList(); 911 } 912 913 /** 914 * The element found when you recursively follow the generalization path up to the root. If an 915 * element has no generalization itself will be considered the root. 916 * @see GeneralizableElementFacade#getGeneralizationRoot() 917 */ 918 public GeneralizableElementFacade getGeneralizationRoot() 919 { 920 return this.getSuperFrontEndController().getGeneralizationRoot(); 921 } 922 923 /** 924 * Return all generalizations (ancestors) from this generalizable element. 925 * @see GeneralizableElementFacade#getGeneralizations() 926 */ 927 public Collection<GeneralizableElementFacade> getGeneralizations() 928 { 929 return this.getSuperFrontEndController().getGeneralizations(); 930 } 931 932 /** 933 * Gets the direct specializations (i.e. sub elements) for this generalizatble element. 934 * @see GeneralizableElementFacade#getSpecializations() 935 */ 936 public Collection<GeneralizableElementFacade> getSpecializations() 937 { 938 return this.getSuperFrontEndController().getSpecializations(); 939 } 940 941 /** 942 * Copies all tagged values from the given ModelElementFacade to this model element facade. 943 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element) 944 */ 945 public void copyTaggedValues(ModelElementFacade element) 946 { 947 this.getSuperFrontEndController().copyTaggedValues(element); 948 } 949 950 /** 951 * Finds the tagged value with the specified 'tagName'. In case there are more values the first 952 * one found will be returned. 953 * @see ModelElementFacade#findTaggedValue(String tagName) 954 */ 955 public Object findTaggedValue(String tagName) 956 { 957 return this.getSuperFrontEndController().findTaggedValue(tagName); 958 } 959 960 /** 961 * Returns all the values for the tagged value with the specified name. The returned collection 962 * will contains only String instances, or will be empty. Never null. 963 * @see ModelElementFacade#findTaggedValues(String tagName) 964 */ 965 public Collection<Object> findTaggedValues(String tagName) 966 { 967 return this.getSuperFrontEndController().findTaggedValues(tagName); 968 } 969 970 /** 971 * Returns the fully qualified name of the model element. The fully qualified name includes 972 * complete package qualified name of the underlying model element. The templates parameter will 973 * be replaced by the correct one given the binding relation of the parameter to this element. 974 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement) 975 */ 976 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement) 977 { 978 return this.getSuperFrontEndController().getBindedFullyQualifiedName(bindedElement); 979 } 980 981 /** 982 * Gets all constraints belonging to the model element. 983 * @see ModelElementFacade#getConstraints() 984 */ 985 public Collection<ConstraintFacade> getConstraints() 986 { 987 return this.getSuperFrontEndController().getConstraints(); 988 } 989 990 /** 991 * Returns the constraints of the argument kind that have been placed onto this model. Typical 992 * kinds are "inv", "pre" and "post". Other kinds are possible. 993 * @see ModelElementFacade#getConstraints(String kind) 994 */ 995 public Collection<ConstraintFacade> getConstraints(String kind) 996 { 997 return this.getSuperFrontEndController().getConstraints(kind); 998 } 999 1000 /** 1001 * Gets the documentation for the model element, The indent argument is prefixed to each line. 1002 * By default this method wraps lines after 64 characters. 1003 * This method is equivalent to <code>getDocumentation(indent, 64)</code>. 1004 * @see ModelElementFacade#getDocumentation(String indent) 1005 */ 1006 public String getDocumentation(String indent) 1007 { 1008 return this.getSuperFrontEndController().getDocumentation(indent); 1009 } 1010 1011 /** 1012 * This method returns the documentation for this model element, with the lines wrapped after 1013 * the specified number of characters, values of less than 1 will indicate no line wrapping is 1014 * required. By default paragraphs are returned as HTML. 1015 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>. 1016 * @see ModelElementFacade#getDocumentation(String indent, int lineLength) 1017 */ 1018 public String getDocumentation(String indent, int lineLength) 1019 { 1020 return this.getSuperFrontEndController().getDocumentation(indent, lineLength); 1021 } 1022 1023 /** 1024 * This method returns the documentation for this model element, with the lines wrapped after 1025 * the specified number of characters, values of less than 1 will indicate no line wrapping is 1026 * required. HTML style determines if HTML Escaping is applied. 1027 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle) 1028 */ 1029 public String getDocumentation(String indent, int lineLength, boolean htmlStyle) 1030 { 1031 return this.getSuperFrontEndController().getDocumentation(indent, lineLength, htmlStyle); 1032 } 1033 1034 /** 1035 * The fully qualified name of this model element. 1036 * @see ModelElementFacade#getFullyQualifiedName() 1037 */ 1038 public String getFullyQualifiedName() 1039 { 1040 return this.getSuperFrontEndController().getFullyQualifiedName(); 1041 } 1042 1043 /** 1044 * Returns the fully qualified name of the model element. The fully qualified name includes 1045 * complete package qualified name of the underlying model element. If modelName is true, then 1046 * the original name of the model element (the name contained within the model) will be the name 1047 * returned, otherwise a name from a language mapping will be returned. 1048 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName) 1049 */ 1050 public String getFullyQualifiedName(boolean modelName) 1051 { 1052 return this.getSuperFrontEndController().getFullyQualifiedName(modelName); 1053 } 1054 1055 /** 1056 * Returns the fully qualified name as a path, the returned value always starts with out a slash 1057 * '/'. 1058 * @see ModelElementFacade#getFullyQualifiedNamePath() 1059 */ 1060 public String getFullyQualifiedNamePath() 1061 { 1062 return this.getSuperFrontEndController().getFullyQualifiedNamePath(); 1063 } 1064 1065 /** 1066 * Gets the unique identifier of the underlying model element. 1067 * @see ModelElementFacade#getId() 1068 */ 1069 public String getId() 1070 { 1071 return this.getSuperFrontEndController().getId(); 1072 } 1073 1074 /** 1075 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which 1076 * are not represented by other properties, i.e. native, transient, volatile, synchronized, 1077 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings: 1078 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require 1079 * JDK5 compiler level. 1080 * @see ModelElementFacade#getKeywords() 1081 */ 1082 public Collection<String> getKeywords() 1083 { 1084 return this.getSuperFrontEndController().getKeywords(); 1085 } 1086 1087 /** 1088 * UML2: Retrieves a localized label for this named element. 1089 * @see ModelElementFacade#getLabel() 1090 */ 1091 public String getLabel() 1092 { 1093 return this.getSuperFrontEndController().getLabel(); 1094 } 1095 1096 /** 1097 * The language mappings that have been set for this model element. 1098 * @see ModelElementFacade#getLanguageMappings() 1099 */ 1100 public TypeMappings getLanguageMappings() 1101 { 1102 return this.getSuperFrontEndController().getLanguageMappings(); 1103 } 1104 1105 /** 1106 * Return the model containing this model element (multiple models may be loaded and processed 1107 * at the same time). 1108 * @see ModelElementFacade#getModel() 1109 */ 1110 public ModelFacade getModel() 1111 { 1112 return this.getSuperFrontEndController().getModel(); 1113 } 1114 1115 /** 1116 * The name of the model element. 1117 * @see ModelElementFacade#getName() 1118 */ 1119 public String getName() 1120 { 1121 return this.getSuperFrontEndController().getName(); 1122 } 1123 1124 /** 1125 * Gets the package to which this model element belongs. 1126 * @see ModelElementFacade#getPackage() 1127 */ 1128 public ModelElementFacade getPackage() 1129 { 1130 return this.getSuperFrontEndController().getPackage(); 1131 } 1132 1133 /** 1134 * The name of this model element's package. 1135 * @see ModelElementFacade#getPackageName() 1136 */ 1137 public String getPackageName() 1138 { 1139 return this.getSuperFrontEndController().getPackageName(); 1140 } 1141 1142 /** 1143 * Gets the package name (optionally providing the ability to retrieve the model name and not 1144 * the mapped name). 1145 * @see ModelElementFacade#getPackageName(boolean modelName) 1146 */ 1147 public String getPackageName(boolean modelName) 1148 { 1149 return this.getSuperFrontEndController().getPackageName(modelName); 1150 } 1151 1152 /** 1153 * Returns the package as a path, the returned value always starts with out a slash '/'. 1154 * @see ModelElementFacade#getPackagePath() 1155 */ 1156 public String getPackagePath() 1157 { 1158 return this.getSuperFrontEndController().getPackagePath(); 1159 } 1160 1161 /** 1162 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the 1163 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from 1164 * the names of the containing namespaces starting at the root of the hierarchy and ending with 1165 * the name of the NamedElement itself. 1166 * @see ModelElementFacade#getQualifiedName() 1167 */ 1168 public String getQualifiedName() 1169 { 1170 return this.getSuperFrontEndController().getQualifiedName(); 1171 } 1172 1173 /** 1174 * Gets the root package for the model element. 1175 * @see ModelElementFacade#getRootPackage() 1176 */ 1177 public PackageFacade getRootPackage() 1178 { 1179 return this.getSuperFrontEndController().getRootPackage(); 1180 } 1181 1182 /** 1183 * Gets the dependencies for which this model element is the source. 1184 * @see ModelElementFacade#getSourceDependencies() 1185 */ 1186 public Collection<DependencyFacade> getSourceDependencies() 1187 { 1188 return this.getSuperFrontEndController().getSourceDependencies(); 1189 } 1190 1191 /** 1192 * If this model element is the context of an activity graph, this represents that activity 1193 * graph. 1194 * @see ModelElementFacade#getStateMachineContext() 1195 */ 1196 public StateMachineFacade getStateMachineContext() 1197 { 1198 return this.getSuperFrontEndController().getStateMachineContext(); 1199 } 1200 1201 /** 1202 * The collection of ALL stereotype names for this model element. 1203 * @see ModelElementFacade#getStereotypeNames() 1204 */ 1205 public Collection<String> getStereotypeNames() 1206 { 1207 return this.getSuperFrontEndController().getStereotypeNames(); 1208 } 1209 1210 /** 1211 * Gets all stereotypes for this model element. 1212 * @see ModelElementFacade#getStereotypes() 1213 */ 1214 public Collection<StereotypeFacade> getStereotypes() 1215 { 1216 return this.getSuperFrontEndController().getStereotypes(); 1217 } 1218 1219 /** 1220 * Return the TaggedValues associated with this model element, under all stereotypes. 1221 * @see ModelElementFacade#getTaggedValues() 1222 */ 1223 public Collection<TaggedValueFacade> getTaggedValues() 1224 { 1225 return this.getSuperFrontEndController().getTaggedValues(); 1226 } 1227 1228 /** 1229 * Gets the dependencies for which this model element is the target. 1230 * @see ModelElementFacade#getTargetDependencies() 1231 */ 1232 public Collection<DependencyFacade> getTargetDependencies() 1233 { 1234 return this.getSuperFrontEndController().getTargetDependencies(); 1235 } 1236 1237 /** 1238 * Get the template parameter for this model element having the parameterName 1239 * @see ModelElementFacade#getTemplateParameter(String parameterName) 1240 */ 1241 public Object getTemplateParameter(String parameterName) 1242 { 1243 return this.getSuperFrontEndController().getTemplateParameter(parameterName); 1244 } 1245 1246 /** 1247 * Get the template parameters for this model element 1248 * @see ModelElementFacade#getTemplateParameters() 1249 */ 1250 public Collection<TemplateParameterFacade> getTemplateParameters() 1251 { 1252 return this.getSuperFrontEndController().getTemplateParameters(); 1253 } 1254 1255 /** 1256 * The visibility (i.e. public, private, protected or package) of the model element, will 1257 * attempt a lookup for these values in the language mappings (if any). 1258 * @see ModelElementFacade#getVisibility() 1259 */ 1260 public String getVisibility() 1261 { 1262 return this.getSuperFrontEndController().getVisibility(); 1263 } 1264 1265 /** 1266 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance 1267 * is taken into account when searching for the stereotype), false otherwise. 1268 * @see ModelElementFacade#hasExactStereotype(String stereotypeName) 1269 */ 1270 public boolean hasExactStereotype(String stereotypeName) 1271 { 1272 return this.getSuperFrontEndController().hasExactStereotype(stereotypeName); 1273 } 1274 1275 /** 1276 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma, 1277 * pipe, semicolon, or << >> 1278 * @see ModelElementFacade#hasKeyword(String keywordName) 1279 */ 1280 public boolean hasKeyword(String keywordName) 1281 { 1282 return this.getSuperFrontEndController().hasKeyword(keywordName); 1283 } 1284 1285 /** 1286 * Returns true if the model element has the specified stereotype. If the stereotype itself 1287 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if 1288 * one of the stereotype's ancestors has a matching name this method will return true, false 1289 * otherwise. 1290 * For example, if we have a certain stereotype called <<exception>> and a model element has a 1291 * stereotype called <<applicationException>> which extends <<exception>>, when calling this 1292 * method with 'stereotypeName' defined as 'exception' the method would return true since 1293 * <<applicationException>> inherits from <<exception>>. If you want to check if the model 1294 * element has the exact stereotype, then use the method 'hasExactStereotype' instead. 1295 * @see ModelElementFacade#hasStereotype(String stereotypeName) 1296 */ 1297 public boolean hasStereotype(String stereotypeName) 1298 { 1299 return this.getSuperFrontEndController().hasStereotype(stereotypeName); 1300 } 1301 1302 /** 1303 * True if there are target dependencies from this element that are instances of BindingFacade. 1304 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies. 1305 * @see ModelElementFacade#isBindingDependenciesPresent() 1306 */ 1307 public boolean isBindingDependenciesPresent() 1308 { 1309 return this.getSuperFrontEndController().isBindingDependenciesPresent(); 1310 } 1311 1312 /** 1313 * Indicates if any constraints are present on this model element. 1314 * @see ModelElementFacade#isConstraintsPresent() 1315 */ 1316 public boolean isConstraintsPresent() 1317 { 1318 return this.getSuperFrontEndController().isConstraintsPresent(); 1319 } 1320 1321 /** 1322 * Indicates if any documentation is present on this model element. 1323 * @see ModelElementFacade#isDocumentationPresent() 1324 */ 1325 public boolean isDocumentationPresent() 1326 { 1327 return this.getSuperFrontEndController().isDocumentationPresent(); 1328 } 1329 1330 /** 1331 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript. 1332 * @see ModelElementFacade#isReservedWord() 1333 */ 1334 public boolean isReservedWord() 1335 { 1336 return this.getSuperFrontEndController().isReservedWord(); 1337 } 1338 1339 /** 1340 * True is there are template parameters on this model element. For UML2, applies to Class, 1341 * Operation, Property, and Parameter. 1342 * @see ModelElementFacade#isTemplateParametersPresent() 1343 */ 1344 public boolean isTemplateParametersPresent() 1345 { 1346 return this.getSuperFrontEndController().isTemplateParametersPresent(); 1347 } 1348 1349 /** 1350 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++, 1351 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on 1352 * Enumerations and Interfaces, optionally applies on other model elements. 1353 * @see ModelElementFacade#isValidIdentifierName() 1354 */ 1355 public boolean isValidIdentifierName() 1356 { 1357 return this.getSuperFrontEndController().isValidIdentifierName(); 1358 } 1359 1360 /** 1361 * Searches for the constraint with the specified 'name' on this model element, and if found 1362 * translates it using the specified 'translation' from a translation library discovered by the 1363 * framework. 1364 * @see ModelElementFacade#translateConstraint(String name, String translation) 1365 */ 1366 public String translateConstraint(String name, String translation) 1367 { 1368 return this.getSuperFrontEndController().translateConstraint(name, translation); 1369 } 1370 1371 /** 1372 * Translates all constraints belonging to this model element with the given 'translation'. 1373 * @see ModelElementFacade#translateConstraints(String translation) 1374 */ 1375 public String[] translateConstraints(String translation) 1376 { 1377 return this.getSuperFrontEndController().translateConstraints(translation); 1378 } 1379 1380 /** 1381 * Translates the constraints of the specified 'kind' belonging to this model element. 1382 * @see ModelElementFacade#translateConstraints(String kind, String translation) 1383 */ 1384 public String[] translateConstraints(String kind, String translation) 1385 { 1386 return this.getSuperFrontEndController().translateConstraints(kind, translation); 1387 } 1388 1389 /** 1390 * @see MetafacadeBase#initialize() 1391 */ 1392 @Override 1393 public void initialize() 1394 { 1395 this.getSuperFrontEndController().initialize(); 1396 } 1397 1398 /** 1399 * @return Object getSuperFrontEndController().getValidationOwner() 1400 * @see MetafacadeBase#getValidationOwner() 1401 */ 1402 @Override 1403 public Object getValidationOwner() 1404 { 1405 Object owner = this.getSuperFrontEndController().getValidationOwner(); 1406 return owner; 1407 } 1408 1409 /** 1410 * @return String getSuperFrontEndController().getValidationName() 1411 * @see MetafacadeBase#getValidationName() 1412 */ 1413 @Override 1414 public String getValidationName() 1415 { 1416 String name = this.getSuperFrontEndController().getValidationName(); 1417 return name; 1418 } 1419 1420 /** 1421 * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller must have a name</p> 1422 * <p><b>Error:</b> Each controller must have a name, it cannot be empty.</p> 1423 * <p><b>OCL:</b> context StrutsController inv: name->notEmpty()</p> 1424 * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsController::unique operation names</p> 1425 * <p><b>Error:</b> A controller cannot have different operations with the same name, even if they have a different signature.</p> 1426 * <p><b>OCL:</b> context StrutsController inv: operations->isUnique(name)</p> 1427 * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller name should not resemble the usecase name</p> 1428 * <p><b>Error:</b> The name of this front-end controller resembles the name of the use-case it is associated with. You'll have to rename it in order to avoid naming collisions (generated files will overwrite eachother).</p> 1429 * <p><b>OCL:</b> context StrutsController inv: name <> useCase.activityGraph.firstAction.actionClassName</p> 1430 * @param validationMessages Collection<ModelValidationMessage> 1431 * @see MetafacadeBase#validateInvariants(Collection validationMessages) 1432 */ 1433 @Override 1434 public void validateInvariants(Collection<ModelValidationMessage> validationMessages) 1435 { 1436 this.getSuperFrontEndController().validateInvariants(validationMessages); 1437 try 1438 { 1439 final Object contextElement = this.THIS(); 1440 boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"name"))); 1441 if (!constraintValid) 1442 { 1443 validationMessages.add( 1444 new ModelValidationMessage( 1445 (MetafacadeBase)contextElement , 1446 "org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller must have a name", 1447 "Each controller must have a name, it cannot be empty.")); 1448 } 1449 } 1450 catch (Throwable th) 1451 { 1452 Throwable cause = th.getCause(); 1453 int depth = 0; // Some throwables have infinite recursion 1454 while (cause != null && depth < 7) 1455 { 1456 th = cause; 1457 depth++; 1458 } 1459 logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller must have a name' ON " 1460 + this.THIS().toString() + ": " + th.getMessage(), th); 1461 } 1462 try 1463 { 1464 final Object contextElement = this.THIS(); 1465 boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.isUnique(OCLIntrospector.invoke(contextElement,"operations"),new Transformer(){public Object transform(Object object){return OCLIntrospector.invoke(object,"name");}})); 1466 if (!constraintValid) 1467 { 1468 validationMessages.add( 1469 new ModelValidationMessage( 1470 (MetafacadeBase)contextElement , 1471 "org::andromda::cartridges::bpm4struts::metafacades::StrutsController::unique operation names", 1472 "A controller cannot have different operations with the same name, even if they have a different signature.")); 1473 } 1474 } 1475 catch (Throwable th) 1476 { 1477 Throwable cause = th.getCause(); 1478 int depth = 0; // Some throwables have infinite recursion 1479 while (cause != null && depth < 7) 1480 { 1481 th = cause; 1482 depth++; 1483 } 1484 logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsController::unique operation names' ON " 1485 + this.THIS().toString() + ": " + th.getMessage(), th); 1486 } 1487 try 1488 { 1489 final Object contextElement = this.THIS(); 1490 boolean constraintValid = OCLResultEnsurer.ensure(OCLExpressions.notEqual(OCLIntrospector.invoke(contextElement,"name"),OCLIntrospector.invoke(contextElement,"useCase.activityGraph.firstAction.actionClassName"))); 1491 if (!constraintValid) 1492 { 1493 validationMessages.add( 1494 new ModelValidationMessage( 1495 (MetafacadeBase)contextElement , 1496 "org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller name should not resemble the usecase name", 1497 "The name of this front-end controller resembles the name of the use-case it is associated with. You'll have to rename it in order to avoid naming collisions (generated files will overwrite eachother).")); 1498 } 1499 } 1500 catch (Throwable th) 1501 { 1502 Throwable cause = th.getCause(); 1503 int depth = 0; // Some throwables have infinite recursion 1504 while (cause != null && depth < 7) 1505 { 1506 th = cause; 1507 depth++; 1508 } 1509 logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsController::controller name should not resemble the usecase name' ON " 1510 + this.THIS().toString() + ": " + th.getMessage(), th); 1511 } 1512 } 1513 1514 /** 1515 * The property that stores the name of the metafacade. 1516 */ 1517 private static final String NAME_PROPERTY = "name"; 1518 private static final String FQNAME_PROPERTY = "fullyQualifiedName"; 1519 1520 /** 1521 * @see Object#toString() 1522 */ 1523 @Override 1524 public String toString() 1525 { 1526 final StringBuilder toString = new StringBuilder(this.getClass().getName()); 1527 toString.append("["); 1528 try 1529 { 1530 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY)); 1531 } 1532 catch (final Throwable tryAgain) 1533 { 1534 try 1535 { 1536 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY)); 1537 } 1538 catch (final Throwable ignore) 1539 { 1540 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property 1541 } 1542 } 1543 toString.append("]"); 1544 return toString.toString(); 1545 } 1546}