001// license-header java merge-point 002// 003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify! 004// 005package org.andromda.cartridges.spring.metafacades; 006 007import java.util.Collection; 008import org.andromda.core.common.Introspector; 009import org.andromda.core.metafacade.MetafacadeBase; 010import org.andromda.core.metafacade.MetafacadeFactory; 011import org.andromda.core.metafacade.ModelValidationMessage; 012import org.andromda.metafacades.uml.ClassifierFacade; 013import org.andromda.metafacades.uml.ConstraintFacade; 014import org.andromda.metafacades.uml.DependencyFacade; 015import org.andromda.metafacades.uml.EntityQueryOperation; 016import org.andromda.metafacades.uml.ModelElementFacade; 017import org.andromda.metafacades.uml.ModelFacade; 018import org.andromda.metafacades.uml.OperationFacade; 019import org.andromda.metafacades.uml.PackageFacade; 020import org.andromda.metafacades.uml.ParameterFacade; 021import org.andromda.metafacades.uml.StateMachineFacade; 022import org.andromda.metafacades.uml.StereotypeFacade; 023import org.andromda.metafacades.uml.TaggedValueFacade; 024import org.andromda.metafacades.uml.TemplateParameterFacade; 025import org.andromda.metafacades.uml.TypeMappings; 026import org.andromda.translation.ocl.validation.OCLCollections; 027import org.andromda.translation.ocl.validation.OCLIntrospector; 028import org.andromda.translation.ocl.validation.OCLResultEnsurer; 029import org.apache.commons.collections.Predicate; 030import org.apache.log4j.Logger; 031 032/** 033 * Represents a Spring entity query operation. 034 * MetafacadeLogic for SpringQueryOperation 035 * 036 * @see SpringQueryOperation 037 */ 038public abstract class SpringQueryOperationLogic 039 extends MetafacadeBase 040 implements SpringQueryOperation 041{ 042 /** 043 * The underlying UML object 044 * @see Object 045 */ 046 protected Object metaObject; 047 048 /** Create Metafacade implementation instance using the MetafacadeFactory from the context 049 * @param metaObjectIn 050 * @param context 051 */ 052 protected SpringQueryOperationLogic(Object metaObjectIn, String context) 053 { 054 super(metaObjectIn, getContext(context)); 055 this.superEntityQueryOperation = 056 (EntityQueryOperation) 057 MetafacadeFactory.getInstance().createFacadeImpl( 058 "org.andromda.metafacades.uml.EntityQueryOperation", 059 metaObjectIn, 060 getContext(context)); 061 this.metaObject = metaObjectIn; 062 } 063 064 /** 065 * The logger instance. 066 */ 067 private static final Logger logger = Logger.getLogger(SpringQueryOperationLogic.class); 068 069 /** 070 * Gets the context for this metafacade logic instance. 071 * @param context String. Set to SpringQueryOperation if null 072 * @return context String 073 */ 074 private static String getContext(String context) 075 { 076 if (context == null) 077 { 078 context = "org.andromda.cartridges.spring.metafacades.SpringQueryOperation"; 079 } 080 return context; 081 } 082 083 private EntityQueryOperation superEntityQueryOperation; 084 private boolean superEntityQueryOperationInitialized = false; 085 086 /** 087 * Gets the EntityQueryOperation parent instance. 088 * @return this.superEntityQueryOperation EntityQueryOperation 089 */ 090 private EntityQueryOperation getSuperEntityQueryOperation() 091 { 092 if (!this.superEntityQueryOperationInitialized) 093 { 094 ((MetafacadeBase)this.superEntityQueryOperation).setMetafacadeContext(this.getMetafacadeContext()); 095 this.superEntityQueryOperationInitialized = true; 096 } 097 return this.superEntityQueryOperation; 098 } 099 100 /** Reset context only for non-root metafacades 101 * @param context 102 * @see MetafacadeBase#resetMetafacadeContext(String context) 103 */ 104 @Override 105 public void resetMetafacadeContext(String context) 106 { 107 if (!this.contextRoot) // reset context only for non-root metafacades 108 { 109 context = getContext(context); // to have same value as in original constructor call 110 setMetafacadeContext (context); 111 if (this.superEntityQueryOperationInitialized) 112 { 113 ((MetafacadeBase)this.superEntityQueryOperation).resetMetafacadeContext(context); 114 } 115 } 116 } 117 118 /** 119 * @return boolean true always 120 * @see SpringQueryOperation 121 */ 122 public boolean isSpringQueryOperationMetaType() 123 { 124 return true; 125 } 126 127 // --------------- attributes --------------------- 128 129 /** 130 * @see org.andromda.cartridges.spring.metafacades.SpringQueryOperation#isUseNamedParameters() 131 * @return boolean 132 */ 133 protected abstract boolean handleIsUseNamedParameters(); 134 135 private boolean __useNamedParameters1a; 136 private boolean __useNamedParameters1aSet = false; 137 138 /** 139 * Indicates whether or not the query parameters used for the body of the finder should be named 140 * ':someParam' or unnamed '?'. 141 * @return (boolean)handleIsUseNamedParameters() 142 */ 143 public final boolean isUseNamedParameters() 144 { 145 boolean useNamedParameters1a = this.__useNamedParameters1a; 146 if (!this.__useNamedParameters1aSet) 147 { 148 // useNamedParameters has no pre constraints 149 useNamedParameters1a = handleIsUseNamedParameters(); 150 // useNamedParameters has no post constraints 151 this.__useNamedParameters1a = useNamedParameters1a; 152 if (isMetafacadePropertyCachingEnabled()) 153 { 154 this.__useNamedParameters1aSet = true; 155 } 156 } 157 return useNamedParameters1a; 158 } 159 160 /** 161 * @see org.andromda.cartridges.spring.metafacades.SpringQueryOperation#getQuery() 162 * @return String 163 */ 164 protected abstract String handleGetQuery(); 165 166 private String __query2a; 167 private boolean __query2aSet = false; 168 169 /** 170 * The actual query returned for the body of the finder. 171 * @return (String)handleGetQuery() 172 */ 173 public final String getQuery() 174 { 175 String query2a = this.__query2a; 176 if (!this.__query2aSet) 177 { 178 // query has no pre constraints 179 query2a = handleGetQuery(); 180 // query has no post constraints 181 this.__query2a = query2a; 182 if (isMetafacadePropertyCachingEnabled()) 183 { 184 this.__query2aSet = true; 185 } 186 } 187 return query2a; 188 } 189 190 /** 191 * @see org.andromda.cartridges.spring.metafacades.SpringQueryOperation#isCriteriaFinder() 192 * @return boolean 193 */ 194 protected abstract boolean handleIsCriteriaFinder(); 195 196 private boolean __criteriaFinder3a; 197 private boolean __criteriaFinder3aSet = false; 198 199 /** 200 * Returns <code>true</code> if the operation is a criteria finder. 201 * @return (boolean)handleIsCriteriaFinder() 202 */ 203 public final boolean isCriteriaFinder() 204 { 205 boolean criteriaFinder3a = this.__criteriaFinder3a; 206 if (!this.__criteriaFinder3aSet) 207 { 208 // criteriaFinder has no pre constraints 209 criteriaFinder3a = handleIsCriteriaFinder(); 210 // criteriaFinder has no post constraints 211 this.__criteriaFinder3a = criteriaFinder3a; 212 if (isMetafacadePropertyCachingEnabled()) 213 { 214 this.__criteriaFinder3aSet = true; 215 } 216 } 217 return criteriaFinder3a; 218 } 219 220 /** 221 * @see org.andromda.cartridges.spring.metafacades.SpringQueryOperation#getCriteriaArgument() 222 * @return ParameterFacade 223 */ 224 protected abstract ParameterFacade handleGetCriteriaArgument(); 225 226 private ParameterFacade __criteriaArgument4a; 227 private boolean __criteriaArgument4aSet = false; 228 229 /** 230 * Returns the argument that will contain the criteria search parameters. 231 * @return (ParameterFacade)handleGetCriteriaArgument() 232 */ 233 public final ParameterFacade getCriteriaArgument() 234 { 235 ParameterFacade criteriaArgument4a = this.__criteriaArgument4a; 236 if (!this.__criteriaArgument4aSet) 237 { 238 // criteriaArgument has no pre constraints 239 criteriaArgument4a = handleGetCriteriaArgument(); 240 // criteriaArgument has no post constraints 241 this.__criteriaArgument4a = criteriaArgument4a; 242 if (isMetafacadePropertyCachingEnabled()) 243 { 244 this.__criteriaArgument4aSet = true; 245 } 246 } 247 return criteriaArgument4a; 248 } 249 250 // ---------------- business methods ---------------------- 251 252 /** 253 * Method to be implemented in descendants 254 * Gets the query; taking the entity of which should be included in the query (not counting 255 * queries that are explicitly modeled in OCL). 256 * @param entity 257 * @return String 258 */ 259 protected abstract String handleGetQuery(SpringEntity entity); 260 261 /** 262 * Gets the query; taking the entity of which should be included in the query (not counting 263 * queries that are explicitly modeled in OCL). 264 * @param entity SpringEntity 265 * The entity of which to create the query from. 266 * @return handleGetQuery(entity) 267 */ 268 public String getQuery(SpringEntity entity) 269 { 270 // getQuery has no pre constraints 271 String returnValue = handleGetQuery(entity); 272 // getQuery has no post constraints 273 return returnValue; 274 } 275 276 /** 277 * @return true 278 * @see EntityQueryOperation 279 */ 280 public boolean isEntityQueryOperationMetaType() 281 { 282 return true; 283 } 284 285 /** 286 * @return true 287 * @see OperationFacade 288 */ 289 public boolean isOperationFacadeMetaType() 290 { 291 return true; 292 } 293 294 /** 295 * @return true 296 * @see ModelElementFacade 297 */ 298 public boolean isModelElementFacadeMetaType() 299 { 300 return true; 301 } 302 303 // ----------- delegates to EntityQueryOperation ------------ 304 /** 305 * The query string for this EntityFinderMethod. The query returned is based on the 306 * 'translation' passed in. The translation must be one available to AndroMDA found with a 307 * translation-library. 308 * @see EntityQueryOperation#getQuery(String translation) 309 */ 310 public String getQuery(String translation) 311 { 312 return this.getSuperEntityQueryOperation().getQuery(translation); 313 } 314 315 /** 316 * Copies all tagged values from the given ModelElementFacade to this model element facade. 317 * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element) 318 */ 319 public void copyTaggedValues(ModelElementFacade element) 320 { 321 this.getSuperEntityQueryOperation().copyTaggedValues(element); 322 } 323 324 /** 325 * Finds the tagged value with the specified 'tagName'. In case there are more values the first 326 * one found will be returned. 327 * @see ModelElementFacade#findTaggedValue(String tagName) 328 */ 329 public Object findTaggedValue(String tagName) 330 { 331 return this.getSuperEntityQueryOperation().findTaggedValue(tagName); 332 } 333 334 /** 335 * Returns all the values for the tagged value with the specified name. The returned collection 336 * will contains only String instances, or will be empty. Never null. 337 * @see ModelElementFacade#findTaggedValues(String tagName) 338 */ 339 public Collection<Object> findTaggedValues(String tagName) 340 { 341 return this.getSuperEntityQueryOperation().findTaggedValues(tagName); 342 } 343 344 /** 345 * Returns the fully qualified name of the model element. The fully qualified name includes 346 * complete package qualified name of the underlying model element. The templates parameter will 347 * be replaced by the correct one given the binding relation of the parameter to this element. 348 * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement) 349 */ 350 public String getBindedFullyQualifiedName(ModelElementFacade bindedElement) 351 { 352 return this.getSuperEntityQueryOperation().getBindedFullyQualifiedName(bindedElement); 353 } 354 355 /** 356 * Gets all constraints belonging to the model element. 357 * @see ModelElementFacade#getConstraints() 358 */ 359 public Collection<ConstraintFacade> getConstraints() 360 { 361 return this.getSuperEntityQueryOperation().getConstraints(); 362 } 363 364 /** 365 * Returns the constraints of the argument kind that have been placed onto this model. Typical 366 * kinds are "inv", "pre" and "post". Other kinds are possible. 367 * @see ModelElementFacade#getConstraints(String kind) 368 */ 369 public Collection<ConstraintFacade> getConstraints(String kind) 370 { 371 return this.getSuperEntityQueryOperation().getConstraints(kind); 372 } 373 374 /** 375 * Gets the documentation for the model element, The indent argument is prefixed to each line. 376 * By default this method wraps lines after 64 characters. 377 * This method is equivalent to <code>getDocumentation(indent, 64)</code>. 378 * @see ModelElementFacade#getDocumentation(String indent) 379 */ 380 public String getDocumentation(String indent) 381 { 382 return this.getSuperEntityQueryOperation().getDocumentation(indent); 383 } 384 385 /** 386 * This method returns the documentation for this model element, with the lines wrapped after 387 * the specified number of characters, values of less than 1 will indicate no line wrapping is 388 * required. By default paragraphs are returned as HTML. 389 * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>. 390 * @see ModelElementFacade#getDocumentation(String indent, int lineLength) 391 */ 392 public String getDocumentation(String indent, int lineLength) 393 { 394 return this.getSuperEntityQueryOperation().getDocumentation(indent, lineLength); 395 } 396 397 /** 398 * This method returns the documentation for this model element, with the lines wrapped after 399 * the specified number of characters, values of less than 1 will indicate no line wrapping is 400 * required. HTML style determines if HTML Escaping is applied. 401 * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle) 402 */ 403 public String getDocumentation(String indent, int lineLength, boolean htmlStyle) 404 { 405 return this.getSuperEntityQueryOperation().getDocumentation(indent, lineLength, htmlStyle); 406 } 407 408 /** 409 * The fully qualified name of this model element. 410 * @see ModelElementFacade#getFullyQualifiedName() 411 */ 412 public String getFullyQualifiedName() 413 { 414 return this.getSuperEntityQueryOperation().getFullyQualifiedName(); 415 } 416 417 /** 418 * Returns the fully qualified name of the model element. The fully qualified name includes 419 * complete package qualified name of the underlying model element. If modelName is true, then 420 * the original name of the model element (the name contained within the model) will be the name 421 * returned, otherwise a name from a language mapping will be returned. 422 * @see ModelElementFacade#getFullyQualifiedName(boolean modelName) 423 */ 424 public String getFullyQualifiedName(boolean modelName) 425 { 426 return this.getSuperEntityQueryOperation().getFullyQualifiedName(modelName); 427 } 428 429 /** 430 * Returns the fully qualified name as a path, the returned value always starts with out a slash 431 * '/'. 432 * @see ModelElementFacade#getFullyQualifiedNamePath() 433 */ 434 public String getFullyQualifiedNamePath() 435 { 436 return this.getSuperEntityQueryOperation().getFullyQualifiedNamePath(); 437 } 438 439 /** 440 * Gets the unique identifier of the underlying model element. 441 * @see ModelElementFacade#getId() 442 */ 443 public String getId() 444 { 445 return this.getSuperEntityQueryOperation().getId(); 446 } 447 448 /** 449 * UML2: Retrieves the keywords for this element. Used to modify implementation properties which 450 * are not represented by other properties, i.e. native, transient, volatile, synchronized, 451 * (added annotations) override, deprecated. Can also be used to suppress compiler warnings: 452 * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require 453 * JDK5 compiler level. 454 * @see ModelElementFacade#getKeywords() 455 */ 456 public Collection<String> getKeywords() 457 { 458 return this.getSuperEntityQueryOperation().getKeywords(); 459 } 460 461 /** 462 * UML2: Retrieves a localized label for this named element. 463 * @see ModelElementFacade#getLabel() 464 */ 465 public String getLabel() 466 { 467 return this.getSuperEntityQueryOperation().getLabel(); 468 } 469 470 /** 471 * The language mappings that have been set for this model element. 472 * @see ModelElementFacade#getLanguageMappings() 473 */ 474 public TypeMappings getLanguageMappings() 475 { 476 return this.getSuperEntityQueryOperation().getLanguageMappings(); 477 } 478 479 /** 480 * Return the model containing this model element (multiple models may be loaded and processed 481 * at the same time). 482 * @see ModelElementFacade#getModel() 483 */ 484 public ModelFacade getModel() 485 { 486 return this.getSuperEntityQueryOperation().getModel(); 487 } 488 489 /** 490 * The name of the model element. 491 * @see ModelElementFacade#getName() 492 */ 493 public String getName() 494 { 495 return this.getSuperEntityQueryOperation().getName(); 496 } 497 498 /** 499 * Gets the package to which this model element belongs. 500 * @see ModelElementFacade#getPackage() 501 */ 502 public ModelElementFacade getPackage() 503 { 504 return this.getSuperEntityQueryOperation().getPackage(); 505 } 506 507 /** 508 * The name of this model element's package. 509 * @see ModelElementFacade#getPackageName() 510 */ 511 public String getPackageName() 512 { 513 return this.getSuperEntityQueryOperation().getPackageName(); 514 } 515 516 /** 517 * Gets the package name (optionally providing the ability to retrieve the model name and not 518 * the mapped name). 519 * @see ModelElementFacade#getPackageName(boolean modelName) 520 */ 521 public String getPackageName(boolean modelName) 522 { 523 return this.getSuperEntityQueryOperation().getPackageName(modelName); 524 } 525 526 /** 527 * Returns the package as a path, the returned value always starts with out a slash '/'. 528 * @see ModelElementFacade#getPackagePath() 529 */ 530 public String getPackagePath() 531 { 532 return this.getSuperEntityQueryOperation().getPackagePath(); 533 } 534 535 /** 536 * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the 537 * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from 538 * the names of the containing namespaces starting at the root of the hierarchy and ending with 539 * the name of the NamedElement itself. 540 * @see ModelElementFacade#getQualifiedName() 541 */ 542 public String getQualifiedName() 543 { 544 return this.getSuperEntityQueryOperation().getQualifiedName(); 545 } 546 547 /** 548 * Gets the root package for the model element. 549 * @see ModelElementFacade#getRootPackage() 550 */ 551 public PackageFacade getRootPackage() 552 { 553 return this.getSuperEntityQueryOperation().getRootPackage(); 554 } 555 556 /** 557 * Gets the dependencies for which this model element is the source. 558 * @see ModelElementFacade#getSourceDependencies() 559 */ 560 public Collection<DependencyFacade> getSourceDependencies() 561 { 562 return this.getSuperEntityQueryOperation().getSourceDependencies(); 563 } 564 565 /** 566 * If this model element is the context of an activity graph, this represents that activity 567 * graph. 568 * @see ModelElementFacade#getStateMachineContext() 569 */ 570 public StateMachineFacade getStateMachineContext() 571 { 572 return this.getSuperEntityQueryOperation().getStateMachineContext(); 573 } 574 575 /** 576 * The collection of ALL stereotype names for this model element. 577 * @see ModelElementFacade#getStereotypeNames() 578 */ 579 public Collection<String> getStereotypeNames() 580 { 581 return this.getSuperEntityQueryOperation().getStereotypeNames(); 582 } 583 584 /** 585 * Gets all stereotypes for this model element. 586 * @see ModelElementFacade#getStereotypes() 587 */ 588 public Collection<StereotypeFacade> getStereotypes() 589 { 590 return this.getSuperEntityQueryOperation().getStereotypes(); 591 } 592 593 /** 594 * Return the TaggedValues associated with this model element, under all stereotypes. 595 * @see ModelElementFacade#getTaggedValues() 596 */ 597 public Collection<TaggedValueFacade> getTaggedValues() 598 { 599 return this.getSuperEntityQueryOperation().getTaggedValues(); 600 } 601 602 /** 603 * Gets the dependencies for which this model element is the target. 604 * @see ModelElementFacade#getTargetDependencies() 605 */ 606 public Collection<DependencyFacade> getTargetDependencies() 607 { 608 return this.getSuperEntityQueryOperation().getTargetDependencies(); 609 } 610 611 /** 612 * Get the template parameter for this model element having the parameterName 613 * @see ModelElementFacade#getTemplateParameter(String parameterName) 614 */ 615 public Object getTemplateParameter(String parameterName) 616 { 617 return this.getSuperEntityQueryOperation().getTemplateParameter(parameterName); 618 } 619 620 /** 621 * Get the template parameters for this model element 622 * @see ModelElementFacade#getTemplateParameters() 623 */ 624 public Collection<TemplateParameterFacade> getTemplateParameters() 625 { 626 return this.getSuperEntityQueryOperation().getTemplateParameters(); 627 } 628 629 /** 630 * The visibility (i.e. public, private, protected or package) of the model element, will 631 * attempt a lookup for these values in the language mappings (if any). 632 * @see ModelElementFacade#getVisibility() 633 */ 634 public String getVisibility() 635 { 636 return this.getSuperEntityQueryOperation().getVisibility(); 637 } 638 639 /** 640 * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance 641 * is taken into account when searching for the stereotype), false otherwise. 642 * @see ModelElementFacade#hasExactStereotype(String stereotypeName) 643 */ 644 public boolean hasExactStereotype(String stereotypeName) 645 { 646 return this.getSuperEntityQueryOperation().hasExactStereotype(stereotypeName); 647 } 648 649 /** 650 * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma, 651 * pipe, semicolon, or << >> 652 * @see ModelElementFacade#hasKeyword(String keywordName) 653 */ 654 public boolean hasKeyword(String keywordName) 655 { 656 return this.getSuperEntityQueryOperation().hasKeyword(keywordName); 657 } 658 659 /** 660 * Returns true if the model element has the specified stereotype. If the stereotype itself 661 * does not match, then a search will be made up the stereotype inheritance hierarchy, and if 662 * one of the stereotype's ancestors has a matching name this method will return true, false 663 * otherwise. 664 * For example, if we have a certain stereotype called <<exception>> and a model element has a 665 * stereotype called <<applicationException>> which extends <<exception>>, when calling this 666 * method with 'stereotypeName' defined as 'exception' the method would return true since 667 * <<applicationException>> inherits from <<exception>>. If you want to check if the model 668 * element has the exact stereotype, then use the method 'hasExactStereotype' instead. 669 * @see ModelElementFacade#hasStereotype(String stereotypeName) 670 */ 671 public boolean hasStereotype(String stereotypeName) 672 { 673 return this.getSuperEntityQueryOperation().hasStereotype(stereotypeName); 674 } 675 676 /** 677 * True if there are target dependencies from this element that are instances of BindingFacade. 678 * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies. 679 * @see ModelElementFacade#isBindingDependenciesPresent() 680 */ 681 public boolean isBindingDependenciesPresent() 682 { 683 return this.getSuperEntityQueryOperation().isBindingDependenciesPresent(); 684 } 685 686 /** 687 * Indicates if any constraints are present on this model element. 688 * @see ModelElementFacade#isConstraintsPresent() 689 */ 690 public boolean isConstraintsPresent() 691 { 692 return this.getSuperEntityQueryOperation().isConstraintsPresent(); 693 } 694 695 /** 696 * Indicates if any documentation is present on this model element. 697 * @see ModelElementFacade#isDocumentationPresent() 698 */ 699 public boolean isDocumentationPresent() 700 { 701 return this.getSuperEntityQueryOperation().isDocumentationPresent(); 702 } 703 704 /** 705 * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript. 706 * @see ModelElementFacade#isReservedWord() 707 */ 708 public boolean isReservedWord() 709 { 710 return this.getSuperEntityQueryOperation().isReservedWord(); 711 } 712 713 /** 714 * True is there are template parameters on this model element. For UML2, applies to Class, 715 * Operation, Property, and Parameter. 716 * @see ModelElementFacade#isTemplateParametersPresent() 717 */ 718 public boolean isTemplateParametersPresent() 719 { 720 return this.getSuperEntityQueryOperation().isTemplateParametersPresent(); 721 } 722 723 /** 724 * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++, 725 * JavaScript. Contains no spaces, special characters etc. Constraint always applied on 726 * Enumerations and Interfaces, optionally applies on other model elements. 727 * @see ModelElementFacade#isValidIdentifierName() 728 */ 729 public boolean isValidIdentifierName() 730 { 731 return this.getSuperEntityQueryOperation().isValidIdentifierName(); 732 } 733 734 /** 735 * Searches for the constraint with the specified 'name' on this model element, and if found 736 * translates it using the specified 'translation' from a translation library discovered by the 737 * framework. 738 * @see ModelElementFacade#translateConstraint(String name, String translation) 739 */ 740 public String translateConstraint(String name, String translation) 741 { 742 return this.getSuperEntityQueryOperation().translateConstraint(name, translation); 743 } 744 745 /** 746 * Translates all constraints belonging to this model element with the given 'translation'. 747 * @see ModelElementFacade#translateConstraints(String translation) 748 */ 749 public String[] translateConstraints(String translation) 750 { 751 return this.getSuperEntityQueryOperation().translateConstraints(translation); 752 } 753 754 /** 755 * Translates the constraints of the specified 'kind' belonging to this model element. 756 * @see ModelElementFacade#translateConstraints(String kind, String translation) 757 */ 758 public String[] translateConstraints(String kind, String translation) 759 { 760 return this.getSuperEntityQueryOperation().translateConstraints(kind, translation); 761 } 762 763 /** 764 * Finds the parameter on this operation having the given name, if no parameter is found, null 765 * is returned instead. 766 * @see OperationFacade#findParameter(String name) 767 */ 768 public ParameterFacade findParameter(String name) 769 { 770 return this.getSuperEntityQueryOperation().findParameter(name); 771 } 772 773 /** 774 * Searches the given feature for the specified tag. 775 * If the follow boolean is set to true then the search will continue from the class operation 776 * to the class itself and then up the class hierarchy. 777 * @see OperationFacade#findTaggedValue(String name, boolean follow) 778 */ 779 public Object findTaggedValue(String name, boolean follow) 780 { 781 return this.getSuperEntityQueryOperation().findTaggedValue(name, follow); 782 } 783 784 /** 785 * A comma separated list of all argument names. 786 * @see OperationFacade#getArgumentNames() 787 */ 788 public String getArgumentNames() 789 { 790 return this.getSuperEntityQueryOperation().getArgumentNames(); 791 } 792 793 /** 794 * A comma separated list of all types of each argument, in order. 795 * @see OperationFacade#getArgumentTypeNames() 796 */ 797 public String getArgumentTypeNames() 798 { 799 return this.getSuperEntityQueryOperation().getArgumentTypeNames(); 800 } 801 802 /** 803 * Specification of an argument used to pass information into or out of an invocation of a 804 * behavioral 805 * feature. Parameters are allowed to be treated as connectable elements. Parameters have 806 * support for 807 * streaming, exceptions, and parameter sets. 808 * @see OperationFacade#getArguments() 809 */ 810 public Collection<ParameterFacade> getArguments() 811 { 812 return this.getSuperEntityQueryOperation().getArguments(); 813 } 814 815 /** 816 * Constructs the operation call with the operation name 817 * @see OperationFacade#getCall() 818 */ 819 public String getCall() 820 { 821 return this.getSuperEntityQueryOperation().getCall(); 822 } 823 824 /** 825 * Returns the concurrency modifier for this operation (i.e. concurrent, guarded or sequential) 826 * of the model element, will attempt a lookup for these values in the language mappings (if 827 * any). 828 * @see OperationFacade#getConcurrency() 829 */ 830 public String getConcurrency() 831 { 832 return this.getSuperEntityQueryOperation().getConcurrency(); 833 } 834 835 /** 836 * A comma separated list containing all exceptions that this operation throws. Exceptions are 837 * determined through dependencies that have the target element stereotyped as <<Exception>>. 838 * @see OperationFacade#getExceptionList() 839 */ 840 public String getExceptionList() 841 { 842 return this.getSuperEntityQueryOperation().getExceptionList(); 843 } 844 845 /** 846 * Returns a comma separated list of exceptions appended to the comma separated list of fully 847 * qualified 'initialException' classes passed in to this method. 848 * @see OperationFacade#getExceptionList(String initialExceptions) 849 */ 850 public String getExceptionList(String initialExceptions) 851 { 852 return this.getSuperEntityQueryOperation().getExceptionList(initialExceptions); 853 } 854 855 /** 856 * A collection of all exceptions thrown by this operation. 857 * @see OperationFacade#getExceptions() 858 */ 859 public Collection<ModelElementFacade> getExceptions() 860 { 861 return this.getSuperEntityQueryOperation().getExceptions(); 862 } 863 864 /** 865 * Return Type with multiplicity taken into account. UML14 does not allow multiplicity *. 866 * @see OperationFacade#getGetterSetterReturnTypeName() 867 */ 868 public String getGetterSetterReturnTypeName() 869 { 870 return this.getSuperEntityQueryOperation().getGetterSetterReturnTypeName(); 871 } 872 873 /** 874 * the lower value for the multiplicity 875 * -only applicable for UML2 876 * @see OperationFacade#getLower() 877 */ 878 public int getLower() 879 { 880 return this.getSuperEntityQueryOperation().getLower(); 881 } 882 883 /** 884 * Returns the operation method body determined from UML sequence diagrams or other UML sources. 885 * @see OperationFacade#getMethodBody() 886 */ 887 public String getMethodBody() 888 { 889 return this.getSuperEntityQueryOperation().getMethodBody(); 890 } 891 892 /** 893 * The operation this operation overrides, null if this operation is not overriding. 894 * @see OperationFacade#getOverriddenOperation() 895 */ 896 public OperationFacade getOverriddenOperation() 897 { 898 return this.getSuperEntityQueryOperation().getOverriddenOperation(); 899 } 900 901 /** 902 * Gets the owner of this operation 903 * @see OperationFacade#getOwner() 904 */ 905 public ClassifierFacade getOwner() 906 { 907 return this.getSuperEntityQueryOperation().getOwner(); 908 } 909 910 /** 911 * Return all parameters for the operation, including the return parameter. 912 * @see OperationFacade#getParameters() 913 */ 914 public Collection<ParameterFacade> getParameters() 915 { 916 return this.getSuperEntityQueryOperation().getParameters(); 917 } 918 919 /** 920 * The name of the operation that handles postcondition constraints. 921 * @see OperationFacade#getPostconditionName() 922 */ 923 public String getPostconditionName() 924 { 925 return this.getSuperEntityQueryOperation().getPostconditionName(); 926 } 927 928 /** 929 * The postcondition constraints belonging to this operation. 930 * @see OperationFacade#getPostconditions() 931 */ 932 public Collection<ConstraintFacade> getPostconditions() 933 { 934 return this.getSuperEntityQueryOperation().getPostconditions(); 935 } 936 937 /** 938 * The call to the precondition operation. 939 * @see OperationFacade#getPreconditionCall() 940 */ 941 public String getPreconditionCall() 942 { 943 return this.getSuperEntityQueryOperation().getPreconditionCall(); 944 } 945 946 /** 947 * The name of the operation that handles precondition constraints. 948 * @see OperationFacade#getPreconditionName() 949 */ 950 public String getPreconditionName() 951 { 952 return this.getSuperEntityQueryOperation().getPreconditionName(); 953 } 954 955 /** 956 * The signature of the precondition operation. 957 * @see OperationFacade#getPreconditionSignature() 958 */ 959 public String getPreconditionSignature() 960 { 961 return this.getSuperEntityQueryOperation().getPreconditionSignature(); 962 } 963 964 /** 965 * The precondition constraints belonging to this operation. 966 * @see OperationFacade#getPreconditions() 967 */ 968 public Collection<ConstraintFacade> getPreconditions() 969 { 970 return this.getSuperEntityQueryOperation().getPreconditions(); 971 } 972 973 /** 974 * (UML2 Only). Get the actual return parameter (which may have stereotypes etc). 975 * @see OperationFacade#getReturnParameter() 976 */ 977 public ParameterFacade getReturnParameter() 978 { 979 return this.getSuperEntityQueryOperation().getReturnParameter(); 980 } 981 982 /** 983 * The operation return type parameter. 984 * @see OperationFacade#getReturnType() 985 */ 986 public ClassifierFacade getReturnType() 987 { 988 return this.getSuperEntityQueryOperation().getReturnType(); 989 } 990 991 /** 992 * Return the operation signature, including public/protested abstract returnType name plus 993 * argument type and name 994 * @see OperationFacade#getSignature() 995 */ 996 public String getSignature() 997 { 998 return this.getSuperEntityQueryOperation().getSignature(); 999 } 1000 1001 /** 1002 * Returns the signature of the operation and optionally appends the argument names (if 1003 * withArgumentNames is true), otherwise returns the signature with just the types alone in the 1004 * signature. 1005 * @see OperationFacade#getSignature(boolean withArgumentNames) 1006 */ 1007 public String getSignature(boolean withArgumentNames) 1008 { 1009 return this.getSuperEntityQueryOperation().getSignature(withArgumentNames); 1010 } 1011 1012 /** 1013 * Returns the signature of the operation and optionally appends the given 'argumentModifier' to 1014 * each argument. 1015 * @see OperationFacade#getSignature(String argumentModifier) 1016 */ 1017 public String getSignature(String argumentModifier) 1018 { 1019 return this.getSuperEntityQueryOperation().getSignature(argumentModifier); 1020 } 1021 1022 /** 1023 * A comma-separated parameter list (type and name of each parameter) of an operation. 1024 * @see OperationFacade#getTypedArgumentList() 1025 */ 1026 public String getTypedArgumentList() 1027 { 1028 return this.getSuperEntityQueryOperation().getTypedArgumentList(); 1029 } 1030 1031 /** 1032 * A comma-separated parameter list (type and name of each parameter) of an operation with an 1033 * optional modifier (i.e final) before each parameter. 1034 * @see OperationFacade#getTypedArgumentList(String modifier) 1035 */ 1036 public String getTypedArgumentList(String modifier) 1037 { 1038 return this.getSuperEntityQueryOperation().getTypedArgumentList(modifier); 1039 } 1040 1041 /** 1042 * the upper value for the multiplicity (will be -1 for *) 1043 * - only applicable for UML2 1044 * @see OperationFacade#getUpper() 1045 */ 1046 public int getUpper() 1047 { 1048 return this.getSuperEntityQueryOperation().getUpper(); 1049 } 1050 1051 /** 1052 * True is the operation is abstract. 1053 * @see OperationFacade#isAbstract() 1054 */ 1055 public boolean isAbstract() 1056 { 1057 return this.getSuperEntityQueryOperation().isAbstract(); 1058 } 1059 1060 /** 1061 * True if the operation has (i.e. throws any exceptions) false otherwise. 1062 * @see OperationFacade#isExceptionsPresent() 1063 */ 1064 public boolean isExceptionsPresent() 1065 { 1066 return this.getSuperEntityQueryOperation().isExceptionsPresent(); 1067 } 1068 1069 /** 1070 * IsLeaf property in the operation. If true, operation is final, cannot be extended or 1071 * implemented by a descendant. Default=false. 1072 * @see OperationFacade#isLeaf() 1073 */ 1074 public boolean isLeaf() 1075 { 1076 return this.getSuperEntityQueryOperation().isLeaf(); 1077 } 1078 1079 /** 1080 * UML2 only. If the return type parameter multiplicity>1 OR the operation multiplicity>1. 1081 * Default=false. 1082 * @see OperationFacade#isMany() 1083 */ 1084 public boolean isMany() 1085 { 1086 return this.getSuperEntityQueryOperation().isMany(); 1087 } 1088 1089 /** 1090 * UML2 only: If isMany (Collection type returned), is the type unique within the collection. 1091 * Unique+Ordered determines CollectionType implementation of return result. Default=false. 1092 * @see OperationFacade#isOrdered() 1093 */ 1094 public boolean isOrdered() 1095 { 1096 return this.getSuperEntityQueryOperation().isOrdered(); 1097 } 1098 1099 /** 1100 * True if this operation overrides an operation defined in an ancestor class. An operation 1101 * overrides when the names of the operations as well as the types of the arguments are equal. 1102 * The return type may be different and is, as well as any exceptions, ignored. 1103 * @see OperationFacade#isOverriding() 1104 */ 1105 public boolean isOverriding() 1106 { 1107 return this.getSuperEntityQueryOperation().isOverriding(); 1108 } 1109 1110 /** 1111 * Whether any postcondition constraints are present on this operation. 1112 * @see OperationFacade#isPostconditionsPresent() 1113 */ 1114 public boolean isPostconditionsPresent() 1115 { 1116 return this.getSuperEntityQueryOperation().isPostconditionsPresent(); 1117 } 1118 1119 /** 1120 * Whether any precondition constraints are present on this operation. 1121 * @see OperationFacade#isPreconditionsPresent() 1122 */ 1123 public boolean isPreconditionsPresent() 1124 { 1125 return this.getSuperEntityQueryOperation().isPreconditionsPresent(); 1126 } 1127 1128 /** 1129 * Indicates whether or not this operation is a query operation. 1130 * @see OperationFacade#isQuery() 1131 */ 1132 public boolean isQuery() 1133 { 1134 return this.getSuperEntityQueryOperation().isQuery(); 1135 } 1136 1137 /** 1138 * True/false depending on whether or not the operation has a return type or not (i.e. a return 1139 * type of something other than void). 1140 * @see OperationFacade#isReturnTypePresent() 1141 */ 1142 public boolean isReturnTypePresent() 1143 { 1144 return this.getSuperEntityQueryOperation().isReturnTypePresent(); 1145 } 1146 1147 /** 1148 * True is the operation is static (only a single instance can be instantiated). 1149 * @see OperationFacade#isStatic() 1150 */ 1151 public boolean isStatic() 1152 { 1153 return this.getSuperEntityQueryOperation().isStatic(); 1154 } 1155 1156 /** 1157 * UML2 only: for Collection return type, is the type unique within the collection. 1158 * Unique+Ordered determines the returned CollectionType. Default=false. 1159 * @see OperationFacade#isUnique() 1160 */ 1161 public boolean isUnique() 1162 { 1163 return this.getSuperEntityQueryOperation().isUnique(); 1164 } 1165 1166 /** 1167 * @see MetafacadeBase#initialize() 1168 */ 1169 @Override 1170 public void initialize() 1171 { 1172 this.getSuperEntityQueryOperation().initialize(); 1173 } 1174 1175 /** 1176 * @return Object getSuperEntityQueryOperation().getValidationOwner() 1177 * @see MetafacadeBase#getValidationOwner() 1178 */ 1179 @Override 1180 public Object getValidationOwner() 1181 { 1182 Object owner = this.getSuperEntityQueryOperation().getValidationOwner(); 1183 return owner; 1184 } 1185 1186 /** 1187 * @return String getSuperEntityQueryOperation().getValidationName() 1188 * @see MetafacadeBase#getValidationName() 1189 */ 1190 @Override 1191 public String getValidationName() 1192 { 1193 String name = this.getSuperEntityQueryOperation().getValidationName(); 1194 return name; 1195 } 1196 1197 /** 1198 * <p><b>Constraint:</b> org::andromda::cartridges::spring::metafacades::SpringQueryOperation::collection parameters must use named parameters</p> 1199 * <p><b>Error:</b> A collection type argument can only be specified when using named parameters, please set the 'hibernateQueryUseNamedParameters' namespace property to 'true' when attempting to use a collection as a query argument.</p> 1200 * <p><b>OCL:</b> context SpringQueryOperation 1201inv: not useNamedParameters 1202implies arguments -> forAll(not type.collectionType)</p> 1203 * @param validationMessages Collection<ModelValidationMessage> 1204 * @see MetafacadeBase#validateInvariants(Collection validationMessages) 1205 */ 1206 @Override 1207 public void validateInvariants(Collection<ModelValidationMessage> validationMessages) 1208 { 1209 this.getSuperEntityQueryOperation().validateInvariants(validationMessages); 1210 try 1211 { 1212 final Object contextElement = this.THIS(); 1213 boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(!Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"useNamedParameters"))).booleanValue())).booleanValue()?OCLCollections.forAll(OCLIntrospector.invoke(contextElement,"arguments"),new Predicate(){public boolean evaluate(Object object){return Boolean.valueOf(String.valueOf(!Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(object,"type.collectionType"))).booleanValue())).booleanValue();}}):true)); 1214 if (!constraintValid) 1215 { 1216 validationMessages.add( 1217 new ModelValidationMessage( 1218 (MetafacadeBase)contextElement , 1219 "org::andromda::cartridges::spring::metafacades::SpringQueryOperation::collection parameters must use named parameters", 1220 "A collection type argument can only be specified when using named parameters, please set the 'hibernateQueryUseNamedParameters' namespace property to 'true' when attempting to use a collection as a query argument.")); 1221 } 1222 } 1223 catch (Throwable th) 1224 { 1225 Throwable cause = th.getCause(); 1226 int depth = 0; // Some throwables have infinite recursion 1227 while (cause != null && depth < 7) 1228 { 1229 th = cause; 1230 depth++; 1231 } 1232 logger.error("Error validating constraint 'org::andromda::cartridges::spring::metafacades::SpringQueryOperation::collection parameters must use named parameters' ON " 1233 + this.THIS().toString() + ": " + th.getMessage(), th); 1234 } 1235 } 1236 1237 /** 1238 * The property that stores the name of the metafacade. 1239 */ 1240 private static final String NAME_PROPERTY = "name"; 1241 private static final String FQNAME_PROPERTY = "fullyQualifiedName"; 1242 1243 /** 1244 * @see Object#toString() 1245 */ 1246 @Override 1247 public String toString() 1248 { 1249 final StringBuilder toString = new StringBuilder(this.getClass().getName()); 1250 toString.append("["); 1251 try 1252 { 1253 toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY)); 1254 } 1255 catch (final Throwable tryAgain) 1256 { 1257 try 1258 { 1259 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY)); 1260 } 1261 catch (final Throwable ignore) 1262 { 1263 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property 1264 } 1265 } 1266 toString.append("]"); 1267 return toString.toString(); 1268 } 1269}