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