View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4   //
5   package org.andromda.cartridges.meta.metafacades;
6   
7   import java.util.Collection;
8   import org.andromda.core.common.Introspector;
9   import org.andromda.core.metafacade.MetafacadeBase;
10  import org.andromda.core.metafacade.MetafacadeFactory;
11  import org.andromda.core.metafacade.ModelValidationMessage;
12  import org.andromda.metafacades.uml.ClassifierFacade;
13  import org.andromda.metafacades.uml.ConstraintFacade;
14  import org.andromda.metafacades.uml.DependencyFacade;
15  import org.andromda.metafacades.uml.ModelElementFacade;
16  import org.andromda.metafacades.uml.ModelFacade;
17  import org.andromda.metafacades.uml.OperationFacade;
18  import org.andromda.metafacades.uml.PackageFacade;
19  import org.andromda.metafacades.uml.ParameterFacade;
20  import org.andromda.metafacades.uml.StateMachineFacade;
21  import org.andromda.metafacades.uml.StereotypeFacade;
22  import org.andromda.metafacades.uml.TaggedValueFacade;
23  import org.andromda.metafacades.uml.TemplateParameterFacade;
24  import org.andromda.metafacades.uml.TypeMappings;
25  
26  /**
27   * Represents a metafacade operation.
28   * MetafacadeLogic for MetafacadeOperation
29   *
30   * @see MetafacadeOperation
31   */
32  public abstract class MetafacadeOperationLogic
33      extends MetafacadeBase
34      implements MetafacadeOperation
35  {
36      /**
37       * The underlying UML object
38       * @see Object
39       */
40      protected Object metaObject;
41  
42      /** Create Metafacade implementation instance using the MetafacadeFactory from the context
43       * @param metaObjectIn
44       * @param context
45       */
46      protected MetafacadeOperationLogic(Object metaObjectIn, String context)
47      {
48          super(metaObjectIn, getContext(context));
49          this.superOperationFacade =
50             (OperationFacade)
51              MetafacadeFactory.getInstance().createFacadeImpl(
52                      "org.andromda.metafacades.uml.OperationFacade",
53                      metaObjectIn,
54                      getContext(context));
55          this.metaObject = metaObjectIn;
56      }
57  
58      /**
59       * Gets the context for this metafacade logic instance.
60       * @param context String. Set to MetafacadeOperation if null
61       * @return context String
62       */
63      private static String getContext(String context)
64      {
65          if (context == null)
66          {
67              context = "org.andromda.cartridges.meta.metafacades.MetafacadeOperation";
68          }
69          return context;
70      }
71  
72      private OperationFacade superOperationFacade;
73      private boolean superOperationFacadeInitialized = false;
74  
75      /**
76       * Gets the OperationFacade parent instance.
77       * @return this.superOperationFacade OperationFacade
78       */
79      private OperationFacade getSuperOperationFacade()
80      {
81          if (!this.superOperationFacadeInitialized)
82          {
83              ((MetafacadeBase)this.superOperationFacade).setMetafacadeContext(this.getMetafacadeContext());
84              this.superOperationFacadeInitialized = true;
85          }
86          return this.superOperationFacade;
87      }
88  
89      /** Reset context only for non-root metafacades
90       * @param context
91       * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
92       */
93      @Override
94      public void resetMetafacadeContext(String context)
95      {
96          if (!this.contextRoot) // reset context only for non-root metafacades
97          {
98              context = getContext(context);  // to have same value as in original constructor call
99              setMetafacadeContext (context);
100             if (this.superOperationFacadeInitialized)
101             {
102                 ((MetafacadeBase)this.superOperationFacade).resetMetafacadeContext(context);
103             }
104         }
105     }
106 
107     /**
108      * @return boolean true always
109      * @see MetafacadeOperation
110      */
111     public boolean isMetafacadeOperationMetaType()
112     {
113         return true;
114     }
115 
116     // --------------- attributes ---------------------
117 
118    /**
119     * @see org.andromda.cartridges.meta.metafacades.MetafacadeOperation#getImplementationName()
120     * @return String
121     */
122     protected abstract String handleGetImplementationName();
123 
124     private String __implementationName1a;
125     private boolean __implementationName1aSet = false;
126 
127     /**
128      * The implementation name for the operation that handles the logic of the operation.
129      * @return (String)handleGetImplementationName()
130      */
131     public final String getImplementationName()
132     {
133         String implementationName1a = this.__implementationName1a;
134         if (!this.__implementationName1aSet)
135         {
136             // implementationName has no pre constraints
137             implementationName1a = handleGetImplementationName();
138             // implementationName has no post constraints
139             this.__implementationName1a = implementationName1a;
140             if (isMetafacadePropertyCachingEnabled())
141             {
142                 this.__implementationName1aSet = true;
143             }
144         }
145         return implementationName1a;
146     }
147 
148     /**
149      * @return true
150      * @see OperationFacade
151      */
152     public boolean isOperationFacadeMetaType()
153     {
154         return true;
155     }
156 
157     /**
158      * @return true
159      * @see ModelElementFacade
160      */
161     public boolean isModelElementFacadeMetaType()
162     {
163         return true;
164     }
165 
166     // ----------- delegates to OperationFacade ------------
167     /**
168      * Copies all tagged values from the given ModelElementFacade to this model element facade.
169      * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
170      */
171     public void copyTaggedValues(ModelElementFacade element)
172     {
173         this.getSuperOperationFacade().copyTaggedValues(element);
174     }
175 
176     /**
177      * Finds the tagged value with the specified 'tagName'. In case there are more values the first
178      * one found will be returned.
179      * @see ModelElementFacade#findTaggedValue(String tagName)
180      */
181     public Object findTaggedValue(String tagName)
182     {
183         return this.getSuperOperationFacade().findTaggedValue(tagName);
184     }
185 
186     /**
187      * Returns all the values for the tagged value with the specified name. The returned collection
188      * will contains only String instances, or will be empty. Never null.
189      * @see ModelElementFacade#findTaggedValues(String tagName)
190      */
191     public Collection<Object> findTaggedValues(String tagName)
192     {
193         return this.getSuperOperationFacade().findTaggedValues(tagName);
194     }
195 
196     /**
197      * Returns the fully qualified name of the model element. The fully qualified name includes
198      * complete package qualified name of the underlying model element. The templates parameter will
199      * be replaced by the correct one given the binding relation of the parameter to this element.
200      * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
201      */
202     public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
203     {
204         return this.getSuperOperationFacade().getBindedFullyQualifiedName(bindedElement);
205     }
206 
207     /**
208      * Gets all constraints belonging to the model element.
209      * @see ModelElementFacade#getConstraints()
210      */
211     public Collection<ConstraintFacade> getConstraints()
212     {
213         return this.getSuperOperationFacade().getConstraints();
214     }
215 
216     /**
217      * Returns the constraints of the argument kind that have been placed onto this model. Typical
218      * kinds are "inv", "pre" and "post". Other kinds are possible.
219      * @see ModelElementFacade#getConstraints(String kind)
220      */
221     public Collection<ConstraintFacade> getConstraints(String kind)
222     {
223         return this.getSuperOperationFacade().getConstraints(kind);
224     }
225 
226     /**
227      * Gets the documentation for the model element, The indent argument is prefixed to each line.
228      * By default this method wraps lines after 64 characters.
229      * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
230      * @see ModelElementFacade#getDocumentation(String indent)
231      */
232     public String getDocumentation(String indent)
233     {
234         return this.getSuperOperationFacade().getDocumentation(indent);
235     }
236 
237     /**
238      * This method returns the documentation for this model element, with the lines wrapped after
239      * the specified number of characters, values of less than 1 will indicate no line wrapping is
240      * required. By default paragraphs are returned as HTML.
241      * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
242      * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
243      */
244     public String getDocumentation(String indent, int lineLength)
245     {
246         return this.getSuperOperationFacade().getDocumentation(indent, lineLength);
247     }
248 
249     /**
250      * This method returns the documentation for this model element, with the lines wrapped after
251      * the specified number of characters, values of less than 1 will indicate no line wrapping is
252      * required. HTML style determines if HTML Escaping is applied.
253      * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
254      */
255     public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
256     {
257         return this.getSuperOperationFacade().getDocumentation(indent, lineLength, htmlStyle);
258     }
259 
260     /**
261      * The fully qualified name of this model element.
262      * @see ModelElementFacade#getFullyQualifiedName()
263      */
264     public String getFullyQualifiedName()
265     {
266         return this.getSuperOperationFacade().getFullyQualifiedName();
267     }
268 
269     /**
270      * Returns the fully qualified name of the model element. The fully qualified name includes
271      * complete package qualified name of the underlying model element.  If modelName is true, then
272      * the original name of the model element (the name contained within the model) will be the name
273      * returned, otherwise a name from a language mapping will be returned.
274      * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
275      */
276     public String getFullyQualifiedName(boolean modelName)
277     {
278         return this.getSuperOperationFacade().getFullyQualifiedName(modelName);
279     }
280 
281     /**
282      * Returns the fully qualified name as a path, the returned value always starts with out a slash
283      * '/'.
284      * @see ModelElementFacade#getFullyQualifiedNamePath()
285      */
286     public String getFullyQualifiedNamePath()
287     {
288         return this.getSuperOperationFacade().getFullyQualifiedNamePath();
289     }
290 
291     /**
292      * Gets the unique identifier of the underlying model element.
293      * @see ModelElementFacade#getId()
294      */
295     public String getId()
296     {
297         return this.getSuperOperationFacade().getId();
298     }
299 
300     /**
301      * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
302      * are not represented by other properties, i.e. native, transient, volatile, synchronized,
303      * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
304      * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
305      * JDK5 compiler level.
306      * @see ModelElementFacade#getKeywords()
307      */
308     public Collection<String> getKeywords()
309     {
310         return this.getSuperOperationFacade().getKeywords();
311     }
312 
313     /**
314      * UML2: Retrieves a localized label for this named element.
315      * @see ModelElementFacade#getLabel()
316      */
317     public String getLabel()
318     {
319         return this.getSuperOperationFacade().getLabel();
320     }
321 
322     /**
323      * The language mappings that have been set for this model element.
324      * @see ModelElementFacade#getLanguageMappings()
325      */
326     public TypeMappings getLanguageMappings()
327     {
328         return this.getSuperOperationFacade().getLanguageMappings();
329     }
330 
331     /**
332      * Return the model containing this model element (multiple models may be loaded and processed
333      * at the same time).
334      * @see ModelElementFacade#getModel()
335      */
336     public ModelFacade getModel()
337     {
338         return this.getSuperOperationFacade().getModel();
339     }
340 
341     /**
342      * The name of the model element.
343      * @see ModelElementFacade#getName()
344      */
345     public String getName()
346     {
347         return this.getSuperOperationFacade().getName();
348     }
349 
350     /**
351      * Gets the package to which this model element belongs.
352      * @see ModelElementFacade#getPackage()
353      */
354     public ModelElementFacade getPackage()
355     {
356         return this.getSuperOperationFacade().getPackage();
357     }
358 
359     /**
360      * The name of this model element's package.
361      * @see ModelElementFacade#getPackageName()
362      */
363     public String getPackageName()
364     {
365         return this.getSuperOperationFacade().getPackageName();
366     }
367 
368     /**
369      * Gets the package name (optionally providing the ability to retrieve the model name and not
370      * the mapped name).
371      * @see ModelElementFacade#getPackageName(boolean modelName)
372      */
373     public String getPackageName(boolean modelName)
374     {
375         return this.getSuperOperationFacade().getPackageName(modelName);
376     }
377 
378     /**
379      * Returns the package as a path, the returned value always starts with out a slash '/'.
380      * @see ModelElementFacade#getPackagePath()
381      */
382     public String getPackagePath()
383     {
384         return this.getSuperOperationFacade().getPackagePath();
385     }
386 
387     /**
388      * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
389      * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
390      * the names of the containing namespaces starting at the root of the hierarchy and ending with
391      * the name of the NamedElement itself.
392      * @see ModelElementFacade#getQualifiedName()
393      */
394     public String getQualifiedName()
395     {
396         return this.getSuperOperationFacade().getQualifiedName();
397     }
398 
399     /**
400      * Gets the root package for the model element.
401      * @see ModelElementFacade#getRootPackage()
402      */
403     public PackageFacade getRootPackage()
404     {
405         return this.getSuperOperationFacade().getRootPackage();
406     }
407 
408     /**
409      * Gets the dependencies for which this model element is the source.
410      * @see ModelElementFacade#getSourceDependencies()
411      */
412     public Collection<DependencyFacade> getSourceDependencies()
413     {
414         return this.getSuperOperationFacade().getSourceDependencies();
415     }
416 
417     /**
418      * If this model element is the context of an activity graph, this represents that activity
419      * graph.
420      * @see ModelElementFacade#getStateMachineContext()
421      */
422     public StateMachineFacade getStateMachineContext()
423     {
424         return this.getSuperOperationFacade().getStateMachineContext();
425     }
426 
427     /**
428      * The collection of ALL stereotype names for this model element.
429      * @see ModelElementFacade#getStereotypeNames()
430      */
431     public Collection<String> getStereotypeNames()
432     {
433         return this.getSuperOperationFacade().getStereotypeNames();
434     }
435 
436     /**
437      * Gets all stereotypes for this model element.
438      * @see ModelElementFacade#getStereotypes()
439      */
440     public Collection<StereotypeFacade> getStereotypes()
441     {
442         return this.getSuperOperationFacade().getStereotypes();
443     }
444 
445     /**
446      * Return the TaggedValues associated with this model element, under all stereotypes.
447      * @see ModelElementFacade#getTaggedValues()
448      */
449     public Collection<TaggedValueFacade> getTaggedValues()
450     {
451         return this.getSuperOperationFacade().getTaggedValues();
452     }
453 
454     /**
455      * Gets the dependencies for which this model element is the target.
456      * @see ModelElementFacade#getTargetDependencies()
457      */
458     public Collection<DependencyFacade> getTargetDependencies()
459     {
460         return this.getSuperOperationFacade().getTargetDependencies();
461     }
462 
463     /**
464      * Get the template parameter for this model element having the parameterName
465      * @see ModelElementFacade#getTemplateParameter(String parameterName)
466      */
467     public Object getTemplateParameter(String parameterName)
468     {
469         return this.getSuperOperationFacade().getTemplateParameter(parameterName);
470     }
471 
472     /**
473      * Get the template parameters for this model element
474      * @see ModelElementFacade#getTemplateParameters()
475      */
476     public Collection<TemplateParameterFacade> getTemplateParameters()
477     {
478         return this.getSuperOperationFacade().getTemplateParameters();
479     }
480 
481     /**
482      * The visibility (i.e. public, private, protected or package) of the model element, will
483      * attempt a lookup for these values in the language mappings (if any).
484      * @see ModelElementFacade#getVisibility()
485      */
486     public String getVisibility()
487     {
488         return this.getSuperOperationFacade().getVisibility();
489     }
490 
491     /**
492      * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
493      * is taken into account when searching for the stereotype), false otherwise.
494      * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
495      */
496     public boolean hasExactStereotype(String stereotypeName)
497     {
498         return this.getSuperOperationFacade().hasExactStereotype(stereotypeName);
499     }
500 
501     /**
502      * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
503      * pipe, semicolon, or << >>
504      * @see ModelElementFacade#hasKeyword(String keywordName)
505      */
506     public boolean hasKeyword(String keywordName)
507     {
508         return this.getSuperOperationFacade().hasKeyword(keywordName);
509     }
510 
511     /**
512      * Returns true if the model element has the specified stereotype.  If the stereotype itself
513      * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
514      * one of the stereotype's ancestors has a matching name this method will return true, false
515      * otherwise.
516      * For example, if we have a certain stereotype called <<exception>> and a model element has a
517      * stereotype called <<applicationException>> which extends <<exception>>, when calling this
518      * method with 'stereotypeName' defined as 'exception' the method would return true since
519      * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
520      * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
521      * @see ModelElementFacade#hasStereotype(String stereotypeName)
522      */
523     public boolean hasStereotype(String stereotypeName)
524     {
525         return this.getSuperOperationFacade().hasStereotype(stereotypeName);
526     }
527 
528     /**
529      * True if there are target dependencies from this element that are instances of BindingFacade.
530      * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
531      * @see ModelElementFacade#isBindingDependenciesPresent()
532      */
533     public boolean isBindingDependenciesPresent()
534     {
535         return this.getSuperOperationFacade().isBindingDependenciesPresent();
536     }
537 
538     /**
539      * Indicates if any constraints are present on this model element.
540      * @see ModelElementFacade#isConstraintsPresent()
541      */
542     public boolean isConstraintsPresent()
543     {
544         return this.getSuperOperationFacade().isConstraintsPresent();
545     }
546 
547     /**
548      * Indicates if any documentation is present on this model element.
549      * @see ModelElementFacade#isDocumentationPresent()
550      */
551     public boolean isDocumentationPresent()
552     {
553         return this.getSuperOperationFacade().isDocumentationPresent();
554     }
555 
556     /**
557      * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
558      * @see ModelElementFacade#isReservedWord()
559      */
560     public boolean isReservedWord()
561     {
562         return this.getSuperOperationFacade().isReservedWord();
563     }
564 
565     /**
566      * True is there are template parameters on this model element. For UML2, applies to Class,
567      * Operation, Property, and Parameter.
568      * @see ModelElementFacade#isTemplateParametersPresent()
569      */
570     public boolean isTemplateParametersPresent()
571     {
572         return this.getSuperOperationFacade().isTemplateParametersPresent();
573     }
574 
575     /**
576      * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
577      * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
578      * Enumerations and Interfaces, optionally applies on other model elements.
579      * @see ModelElementFacade#isValidIdentifierName()
580      */
581     public boolean isValidIdentifierName()
582     {
583         return this.getSuperOperationFacade().isValidIdentifierName();
584     }
585 
586     /**
587      * Searches for the constraint with the specified 'name' on this model element, and if found
588      * translates it using the specified 'translation' from a translation library discovered by the
589      * framework.
590      * @see ModelElementFacade#translateConstraint(String name, String translation)
591      */
592     public String translateConstraint(String name, String translation)
593     {
594         return this.getSuperOperationFacade().translateConstraint(name, translation);
595     }
596 
597     /**
598      * Translates all constraints belonging to this model element with the given 'translation'.
599      * @see ModelElementFacade#translateConstraints(String translation)
600      */
601     public String[] translateConstraints(String translation)
602     {
603         return this.getSuperOperationFacade().translateConstraints(translation);
604     }
605 
606     /**
607      * Translates the constraints of the specified 'kind' belonging to this model element.
608      * @see ModelElementFacade#translateConstraints(String kind, String translation)
609      */
610     public String[] translateConstraints(String kind, String translation)
611     {
612         return this.getSuperOperationFacade().translateConstraints(kind, translation);
613     }
614 
615     /**
616      * Finds the parameter on this operation having the given name, if no parameter is found, null
617      * is returned instead.
618      * @see OperationFacade#findParameter(String name)
619      */
620     public ParameterFacade findParameter(String name)
621     {
622         return this.getSuperOperationFacade().findParameter(name);
623     }
624 
625     /**
626      * Searches the given feature for the specified tag.
627      * If the follow boolean is set to true then the search will continue from the class operation
628      * to the class itself and then up the class hierarchy.
629      * @see OperationFacade#findTaggedValue(String name, boolean follow)
630      */
631     public Object findTaggedValue(String name, boolean follow)
632     {
633         return this.getSuperOperationFacade().findTaggedValue(name, follow);
634     }
635 
636     /**
637      * A comma separated list of all argument names.
638      * @see OperationFacade#getArgumentNames()
639      */
640     public String getArgumentNames()
641     {
642         return this.getSuperOperationFacade().getArgumentNames();
643     }
644 
645     /**
646      * A comma separated list of all types of each argument, in order.
647      * @see OperationFacade#getArgumentTypeNames()
648      */
649     public String getArgumentTypeNames()
650     {
651         return this.getSuperOperationFacade().getArgumentTypeNames();
652     }
653 
654     /**
655      * Specification of an argument used to pass information into or out of an invocation of a
656      * behavioral
657      * feature. Parameters are allowed to be treated as connectable elements. Parameters have
658      * support for
659      * streaming, exceptions, and parameter sets.
660      * @see OperationFacade#getArguments()
661      */
662     public Collection<ParameterFacade> getArguments()
663     {
664         return this.getSuperOperationFacade().getArguments();
665     }
666 
667     /**
668      * Constructs the operation call with the operation name
669      * @see OperationFacade#getCall()
670      */
671     public String getCall()
672     {
673         return this.getSuperOperationFacade().getCall();
674     }
675 
676     /**
677      * Returns the concurrency modifier for this operation (i.e. concurrent, guarded or sequential)
678      * of the model element, will attempt a lookup for these values in the language mappings (if
679      * any).
680      * @see OperationFacade#getConcurrency()
681      */
682     public String getConcurrency()
683     {
684         return this.getSuperOperationFacade().getConcurrency();
685     }
686 
687     /**
688      * A comma separated list containing all exceptions that this operation throws.  Exceptions are
689      * determined through dependencies that have the target element stereotyped as <<Exception>>.
690      * @see OperationFacade#getExceptionList()
691      */
692     public String getExceptionList()
693     {
694         return this.getSuperOperationFacade().getExceptionList();
695     }
696 
697     /**
698      * Returns a comma separated list of exceptions appended to the comma separated list of fully
699      * qualified 'initialException' classes passed in to this method.
700      * @see OperationFacade#getExceptionList(String initialExceptions)
701      */
702     public String getExceptionList(String initialExceptions)
703     {
704         return this.getSuperOperationFacade().getExceptionList(initialExceptions);
705     }
706 
707     /**
708      * A collection of all exceptions thrown by this operation.
709      * @see OperationFacade#getExceptions()
710      */
711     public Collection<ModelElementFacade> getExceptions()
712     {
713         return this.getSuperOperationFacade().getExceptions();
714     }
715 
716     /**
717      * Return Type with multiplicity taken into account. UML14 does not allow multiplicity *.
718      * @see OperationFacade#getGetterSetterReturnTypeName()
719      */
720     public String getGetterSetterReturnTypeName()
721     {
722         return this.getSuperOperationFacade().getGetterSetterReturnTypeName();
723     }
724 
725     /**
726      * the lower value for the multiplicity
727      * -only applicable for UML2
728      * @see OperationFacade#getLower()
729      */
730     public int getLower()
731     {
732         return this.getSuperOperationFacade().getLower();
733     }
734 
735     /**
736      * Returns the operation method body determined from UML sequence diagrams or other UML sources.
737      * @see OperationFacade#getMethodBody()
738      */
739     public String getMethodBody()
740     {
741         return this.getSuperOperationFacade().getMethodBody();
742     }
743 
744     /**
745      * The operation this operation overrides, null if this operation is not overriding.
746      * @see OperationFacade#getOverriddenOperation()
747      */
748     public OperationFacade getOverriddenOperation()
749     {
750         return this.getSuperOperationFacade().getOverriddenOperation();
751     }
752 
753     /**
754      * Gets the owner of this operation
755      * @see OperationFacade#getOwner()
756      */
757     public ClassifierFacade getOwner()
758     {
759         return this.getSuperOperationFacade().getOwner();
760     }
761 
762     /**
763      * Return all parameters for the operation, including the return parameter.
764      * @see OperationFacade#getParameters()
765      */
766     public Collection<ParameterFacade> getParameters()
767     {
768         return this.getSuperOperationFacade().getParameters();
769     }
770 
771     /**
772      * The name of the operation that handles postcondition constraints.
773      * @see OperationFacade#getPostconditionName()
774      */
775     public String getPostconditionName()
776     {
777         return this.getSuperOperationFacade().getPostconditionName();
778     }
779 
780     /**
781      * The postcondition constraints belonging to this operation.
782      * @see OperationFacade#getPostconditions()
783      */
784     public Collection<ConstraintFacade> getPostconditions()
785     {
786         return this.getSuperOperationFacade().getPostconditions();
787     }
788 
789     /**
790      * The call to the precondition operation.
791      * @see OperationFacade#getPreconditionCall()
792      */
793     public String getPreconditionCall()
794     {
795         return this.getSuperOperationFacade().getPreconditionCall();
796     }
797 
798     /**
799      * The name of the operation that handles precondition constraints.
800      * @see OperationFacade#getPreconditionName()
801      */
802     public String getPreconditionName()
803     {
804         return this.getSuperOperationFacade().getPreconditionName();
805     }
806 
807     /**
808      * The signature of the precondition operation.
809      * @see OperationFacade#getPreconditionSignature()
810      */
811     public String getPreconditionSignature()
812     {
813         return this.getSuperOperationFacade().getPreconditionSignature();
814     }
815 
816     /**
817      * The precondition constraints belonging to this operation.
818      * @see OperationFacade#getPreconditions()
819      */
820     public Collection<ConstraintFacade> getPreconditions()
821     {
822         return this.getSuperOperationFacade().getPreconditions();
823     }
824 
825     /**
826      * (UML2 Only). Get the actual return parameter (which may have stereotypes etc).
827      * @see OperationFacade#getReturnParameter()
828      */
829     public ParameterFacade getReturnParameter()
830     {
831         return this.getSuperOperationFacade().getReturnParameter();
832     }
833 
834     /**
835      * The operation return type parameter.
836      * @see OperationFacade#getReturnType()
837      */
838     public ClassifierFacade getReturnType()
839     {
840         return this.getSuperOperationFacade().getReturnType();
841     }
842 
843     /**
844      * Return the operation signature, including public/protested abstract returnType name plus
845      * argument type and name
846      * @see OperationFacade#getSignature()
847      */
848     public String getSignature()
849     {
850         return this.getSuperOperationFacade().getSignature();
851     }
852 
853     /**
854      * Returns the signature of the operation and optionally appends the argument names (if
855      * withArgumentNames is true), otherwise returns the signature with just the types alone in the
856      * signature.
857      * @see OperationFacade#getSignature(boolean withArgumentNames)
858      */
859     public String getSignature(boolean withArgumentNames)
860     {
861         return this.getSuperOperationFacade().getSignature(withArgumentNames);
862     }
863 
864     /**
865      * Returns the signature of the operation and optionally appends the given 'argumentModifier' to
866      * each argument.
867      * @see OperationFacade#getSignature(String argumentModifier)
868      */
869     public String getSignature(String argumentModifier)
870     {
871         return this.getSuperOperationFacade().getSignature(argumentModifier);
872     }
873 
874     /**
875      * A comma-separated parameter list  (type and name of each parameter) of an operation.
876      * @see OperationFacade#getTypedArgumentList()
877      */
878     public String getTypedArgumentList()
879     {
880         return this.getSuperOperationFacade().getTypedArgumentList();
881     }
882 
883     /**
884      * A comma-separated parameter list  (type and name of each parameter) of an operation with an
885      * optional modifier (i.e final) before each parameter.
886      * @see OperationFacade#getTypedArgumentList(String modifier)
887      */
888     public String getTypedArgumentList(String modifier)
889     {
890         return this.getSuperOperationFacade().getTypedArgumentList(modifier);
891     }
892 
893     /**
894      * the upper value for the multiplicity (will be -1 for *)
895      * - only applicable for UML2
896      * @see OperationFacade#getUpper()
897      */
898     public int getUpper()
899     {
900         return this.getSuperOperationFacade().getUpper();
901     }
902 
903     /**
904      * True is the operation is abstract.
905      * @see OperationFacade#isAbstract()
906      */
907     public boolean isAbstract()
908     {
909         return this.getSuperOperationFacade().isAbstract();
910     }
911 
912     /**
913      * True if the operation has (i.e. throws any exceptions) false otherwise.
914      * @see OperationFacade#isExceptionsPresent()
915      */
916     public boolean isExceptionsPresent()
917     {
918         return this.getSuperOperationFacade().isExceptionsPresent();
919     }
920 
921     /**
922      * IsLeaf property in the operation. If true, operation is final, cannot be extended or
923      * implemented by a descendant. Default=false.
924      * @see OperationFacade#isLeaf()
925      */
926     public boolean isLeaf()
927     {
928         return this.getSuperOperationFacade().isLeaf();
929     }
930 
931     /**
932      * UML2 only. If the return type parameter multiplicity>1 OR the operation multiplicity>1.
933      * Default=false.
934      * @see OperationFacade#isMany()
935      */
936     public boolean isMany()
937     {
938         return this.getSuperOperationFacade().isMany();
939     }
940 
941     /**
942      * UML2 only: If isMany (Collection type returned), is the type unique within the collection. 
943      * Unique+Ordered determines CollectionType implementation of return result. Default=false.
944      * @see OperationFacade#isOrdered()
945      */
946     public boolean isOrdered()
947     {
948         return this.getSuperOperationFacade().isOrdered();
949     }
950 
951     /**
952      * True if this operation overrides an operation defined in an ancestor class. An operation
953      * overrides when the names of the operations as well as the types of the arguments are equal.
954      * The return type may be different and is, as well as any exceptions, ignored.
955      * @see OperationFacade#isOverriding()
956      */
957     public boolean isOverriding()
958     {
959         return this.getSuperOperationFacade().isOverriding();
960     }
961 
962     /**
963      * Whether any postcondition constraints are present on this operation.
964      * @see OperationFacade#isPostconditionsPresent()
965      */
966     public boolean isPostconditionsPresent()
967     {
968         return this.getSuperOperationFacade().isPostconditionsPresent();
969     }
970 
971     /**
972      * Whether any precondition constraints are present on this operation.
973      * @see OperationFacade#isPreconditionsPresent()
974      */
975     public boolean isPreconditionsPresent()
976     {
977         return this.getSuperOperationFacade().isPreconditionsPresent();
978     }
979 
980     /**
981      * Indicates whether or not this operation is a query operation.
982      * @see OperationFacade#isQuery()
983      */
984     public boolean isQuery()
985     {
986         return this.getSuperOperationFacade().isQuery();
987     }
988 
989     /**
990      * True/false depending on whether or not the operation has a return type or not (i.e. a return
991      * type of something other than void).
992      * @see OperationFacade#isReturnTypePresent()
993      */
994     public boolean isReturnTypePresent()
995     {
996         return this.getSuperOperationFacade().isReturnTypePresent();
997     }
998 
999     /**
1000      * True is the operation is static (only a single instance can be instantiated).
1001      * @see OperationFacade#isStatic()
1002      */
1003     public boolean isStatic()
1004     {
1005         return this.getSuperOperationFacade().isStatic();
1006     }
1007 
1008     /**
1009      * UML2 only: for Collection return type, is the type unique within the collection.
1010      * Unique+Ordered determines the returned CollectionType. Default=false.
1011      * @see OperationFacade#isUnique()
1012      */
1013     public boolean isUnique()
1014     {
1015         return this.getSuperOperationFacade().isUnique();
1016     }
1017 
1018     /**
1019      * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1020      */
1021     @Override
1022     public void initialize()
1023     {
1024         this.getSuperOperationFacade().initialize();
1025     }
1026 
1027     /**
1028      * @return Object getSuperOperationFacade().getValidationOwner()
1029      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1030      */
1031     @Override
1032     public Object getValidationOwner()
1033     {
1034         Object owner = this.getSuperOperationFacade().getValidationOwner();
1035         return owner;
1036     }
1037 
1038     /**
1039      * @return String getSuperOperationFacade().getValidationName()
1040      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1041      */
1042     @Override
1043     public String getValidationName()
1044     {
1045         String name = this.getSuperOperationFacade().getValidationName();
1046         return name;
1047     }
1048 
1049     /**
1050      * @param validationMessages Collection<ModelValidationMessage>
1051      * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1052      */
1053     @Override
1054     public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1055     {
1056         this.getSuperOperationFacade().validateInvariants(validationMessages);
1057     }
1058 
1059     /**
1060      * The property that stores the name of the metafacade.
1061      */
1062     private static final String NAME_PROPERTY = "name";
1063     private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1064 
1065     /**
1066      * @see Object#toString()
1067      */
1068     @Override
1069     public String toString()
1070     {
1071         final StringBuilder toString = new StringBuilder(this.getClass().getName());
1072         toString.append("[");
1073         try
1074         {
1075             toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1076         }
1077         catch (final Throwable tryAgain)
1078         {
1079             try
1080             {
1081                 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1082             }
1083             catch (final Throwable ignore)
1084             {
1085                 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1086             }
1087         }
1088         toString.append("]");
1089         return toString.toString();
1090     }
1091 }