001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.xmlschema.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.AssociationEndFacade;
013import org.andromda.metafacades.uml.AssociationFacade;
014import org.andromda.metafacades.uml.ClassifierFacade;
015import org.andromda.metafacades.uml.ConstraintFacade;
016import org.andromda.metafacades.uml.DependencyFacade;
017import org.andromda.metafacades.uml.ModelElementFacade;
018import org.andromda.metafacades.uml.ModelFacade;
019import org.andromda.metafacades.uml.PackageFacade;
020import org.andromda.metafacades.uml.StateMachineFacade;
021import org.andromda.metafacades.uml.StereotypeFacade;
022import org.andromda.metafacades.uml.TaggedValueFacade;
023import org.andromda.metafacades.uml.TemplateParameterFacade;
024import org.andromda.metafacades.uml.TypeMappings;
025
026/**
027 * Can be either an XSD attribute or element.
028 * MetafacadeLogic for XSDAssociationEnd
029 *
030 * @see XSDAssociationEnd
031 */
032public abstract class XSDAssociationEndLogic
033    extends MetafacadeBase
034    implements XSDAssociationEnd
035{
036    /**
037     * The underlying UML object
038     * @see Object
039     */
040    protected Object metaObject;
041
042    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
043     * @param metaObjectIn
044     * @param context
045     */
046    protected XSDAssociationEndLogic(Object metaObjectIn, String context)
047    {
048        super(metaObjectIn, getContext(context));
049        this.superAssociationEndFacade =
050           (AssociationEndFacade)
051            MetafacadeFactory.getInstance().createFacadeImpl(
052                    "org.andromda.metafacades.uml.AssociationEndFacade",
053                    metaObjectIn,
054                    getContext(context));
055        this.metaObject = metaObjectIn;
056    }
057
058    /**
059     * Gets the context for this metafacade logic instance.
060     * @param context String. Set to XSDAssociationEnd if null
061     * @return context String
062     */
063    private static String getContext(String context)
064    {
065        if (context == null)
066        {
067            context = "org.andromda.cartridges.xmlschema.metafacades.XSDAssociationEnd";
068        }
069        return context;
070    }
071
072    private AssociationEndFacade superAssociationEndFacade;
073    private boolean superAssociationEndFacadeInitialized = false;
074
075    /**
076     * Gets the AssociationEndFacade parent instance.
077     * @return this.superAssociationEndFacade AssociationEndFacade
078     */
079    private AssociationEndFacade getSuperAssociationEndFacade()
080    {
081        if (!this.superAssociationEndFacadeInitialized)
082        {
083            ((MetafacadeBase)this.superAssociationEndFacade).setMetafacadeContext(this.getMetafacadeContext());
084            this.superAssociationEndFacadeInitialized = true;
085        }
086        return this.superAssociationEndFacade;
087    }
088
089    /** Reset context only for non-root metafacades
090     * @param context
091     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
092     */
093    @Override
094    public void resetMetafacadeContext(String context)
095    {
096        if (!this.contextRoot) // reset context only for non-root metafacades
097        {
098            context = getContext(context);  // to have same value as in original constructor call
099            setMetafacadeContext (context);
100            if (this.superAssociationEndFacadeInitialized)
101            {
102                ((MetafacadeBase)this.superAssociationEndFacade).resetMetafacadeContext(context);
103            }
104        }
105    }
106
107    /**
108     * @return boolean true always
109     * @see XSDAssociationEnd
110     */
111    public boolean isXSDAssociationEndMetaType()
112    {
113        return true;
114    }
115
116    // --------------- attributes ---------------------
117
118   /**
119    * @see org.andromda.cartridges.xmlschema.metafacades.XSDAssociationEnd#isOwnerSchemaType()
120    * @return boolean
121    */
122    protected abstract boolean handleIsOwnerSchemaType();
123
124    /**
125     * Indicates whether or not the owner is a schema type.
126     * @return (boolean)handleIsOwnerSchemaType()
127     */
128    public final boolean isOwnerSchemaType()
129    {
130        boolean ownerSchemaType1a = false;
131        // ownerSchemaType has no pre constraints
132        ownerSchemaType1a = handleIsOwnerSchemaType();
133        // ownerSchemaType has no post constraints
134        return ownerSchemaType1a;
135    }
136
137    // ---------------- business methods ----------------------
138
139    /**
140     * Method to be implemented in descendants
141     * Gets the maximum amount this element can occur within an XML Schema complex type (if the
142     * object represents an attribute this value will be null).
143     * @return String
144     */
145    protected abstract String handleGetMaxOccurs();
146
147    /**
148     * Gets the maximum amount this element can occur within an XML Schema complex type (if the
149     * object represents an attribute this value will be null).
150     * @return handleGetMaxOccurs()
151     */
152    public String getMaxOccurs()
153    {
154        // getMaxOccurs has no pre constraints
155        String returnValue = handleGetMaxOccurs();
156        // getMaxOccurs has no post constraints
157        return returnValue;
158    }
159
160    /**
161     * Method to be implemented in descendants
162     * Returns the minimum amount that this object can occur with an XML Schema complex type (if the
163     * object represents an attribute this value will be null).
164     * @return String
165     */
166    protected abstract String handleGetMinOccurs();
167
168    /**
169     * Returns the minimum amount that this object can occur with an XML Schema complex type (if the
170     * object represents an attribute this value will be null).
171     * @return handleGetMinOccurs()
172     */
173    public String getMinOccurs()
174    {
175        // getMinOccurs has no pre constraints
176        String returnValue = handleGetMinOccurs();
177        // getMinOccurs has no post constraints
178        return returnValue;
179    }
180
181    /**
182     * @return true
183     * @see AssociationEndFacade
184     */
185    public boolean isAssociationEndFacadeMetaType()
186    {
187        return true;
188    }
189
190    /**
191     * @return true
192     * @see ModelElementFacade
193     */
194    public boolean isModelElementFacadeMetaType()
195    {
196        return true;
197    }
198
199    // ----------- delegates to AssociationEndFacade ------------
200    /**
201     * A name suitable for use when adding new elements to this association end in programming code.
202     * @see AssociationEndFacade#getAdderName()
203     */
204    public String getAdderName()
205    {
206        return this.getSuperAssociationEndFacade().getAdderName();
207    }
208
209    /**
210     * Returns the value of the 'Aggregation' attribute (none, shared, composite). The default value
211     * is "none". The literals are from the enumeration org.eclipse.uml2.uml.AggregationKind.
212     * Specifies the kind of aggregation that applies to the Property.
213     * @see AssociationEndFacade#getAggregationKind()
214     */
215    public String getAggregationKind()
216    {
217        return this.getSuperAssociationEndFacade().getAggregationKind();
218    }
219
220    /**
221     * The association owning this association end.
222     * @see AssociationEndFacade#getAssociation()
223     */
224    public AssociationFacade getAssociation()
225    {
226        return this.getSuperAssociationEndFacade().getAssociation();
227    }
228
229    /**
230     * UML2: Returns the value of the 'Default' attribute. Specifies a String that represents a
231     * value to be used when no argument is supplied for the Property. A String that is evaluated to
232     * give a default value for the Property when an object of the owning Classifier is
233     * instantiated.  Can be something like: new ValueObject(values);
234     * @see AssociationEndFacade#getDefault()
235     */
236    public String getDefault()
237    {
238        return this.getSuperAssociationEndFacade().getDefault();
239    }
240
241    /**
242     * A name suitable for use when accessing this association end in programming code.
243     * @see AssociationEndFacade#getGetterName()
244     */
245    public String getGetterName()
246    {
247        return this.getSuperAssociationEndFacade().getGetterName();
248    }
249
250    /**
251     * The name of the type that is returned on the accessor and mutator operations,  determined in
252     * part by the multiplicity.
253     * @see AssociationEndFacade#getGetterSetterTypeName()
254     */
255    public String getGetterSetterTypeName()
256    {
257        return this.getSuperAssociationEndFacade().getGetterSetterTypeName();
258    }
259
260    /**
261     * the lower value for the multiplicity
262     * -only applicable for UML2
263     * @see AssociationEndFacade#getLower()
264     */
265    public int getLower()
266    {
267        return this.getSuperAssociationEndFacade().getLower();
268    }
269
270    /**
271     * The other association end owned by this end's association.
272     * @see AssociationEndFacade#getOtherEnd()
273     */
274    public AssociationEndFacade getOtherEnd()
275    {
276        return this.getSuperAssociationEndFacade().getOtherEnd();
277    }
278
279    /**
280     * A name suitable for use when removing element from this association end in programming code.
281     * @see AssociationEndFacade#getRemoverName()
282     */
283    public String getRemoverName()
284    {
285        return this.getSuperAssociationEndFacade().getRemoverName();
286    }
287
288    /**
289     * A name suitable for use when accessing this association end in programming code.
290     * @see AssociationEndFacade#getSetterName()
291     */
292    public String getSetterName()
293    {
294        return this.getSuperAssociationEndFacade().getSetterName();
295    }
296
297    /**
298     * The classifier attached to this association end.
299     * @see AssociationEndFacade#getType()
300     */
301    public ClassifierFacade getType()
302    {
303        return this.getSuperAssociationEndFacade().getType();
304    }
305
306    /**
307     * the upper value for the multiplicity (will be -1 for *)
308     * -only applicable for UML2
309     * @see AssociationEndFacade#getUpper()
310     */
311    public int getUpper()
312    {
313        return this.getSuperAssociationEndFacade().getUpper();
314    }
315
316    /**
317     * True if this association end represents an aggregation relationship.
318     * @see AssociationEndFacade#isAggregation()
319     */
320    public boolean isAggregation()
321    {
322        return this.getSuperAssociationEndFacade().isAggregation();
323    }
324
325    /**
326     * Is true if update of one side of the association should also update the other side. false if
327     * not.
328     * @see AssociationEndFacade#isBidirectional()
329     */
330    public boolean isBidirectional()
331    {
332        return this.getSuperAssociationEndFacade().isBidirectional();
333    }
334
335    /**
336     * Returns whether or not (true/false) this association end is the child end of the assocation
337     * (i.e. the other end's aggregation is composition).
338     * @see AssociationEndFacade#isChild()
339     */
340    public boolean isChild()
341    {
342        return this.getSuperAssociationEndFacade().isChild();
343    }
344
345    /**
346     * True if this association end represents a composition relationship.
347     * @see AssociationEndFacade#isComposition()
348     */
349    public boolean isComposition()
350    {
351        return this.getSuperAssociationEndFacade().isComposition();
352    }
353
354    /**
355     * If the association end is derived (its value is computed). UML2 only. UML14 always returns
356     * false. Default=false.
357     * @see AssociationEndFacade#isDerived()
358     */
359    public boolean isDerived()
360    {
361        return this.getSuperAssociationEndFacade().isDerived();
362    }
363
364    /**
365     * IsLeaf property in the association end property. If true, attribute is final, cannot be
366     * extended or implemented by a descendant. Default=false.
367     * @see AssociationEndFacade#isLeaf()
368     */
369    public boolean isLeaf()
370    {
371        return this.getSuperAssociationEndFacade().isLeaf();
372    }
373
374    /**
375     * True if this association end's multiplicity is greater than one.
376     * @see AssociationEndFacade#isMany()
377     */
378    public boolean isMany()
379    {
380        return this.getSuperAssociationEndFacade().isMany();
381    }
382
383    /**
384     * True if this association end's and the other end's multiplicities are both many.
385     * @see AssociationEndFacade#isMany2Many()
386     */
387    public boolean isMany2Many()
388    {
389        return this.getSuperAssociationEndFacade().isMany2Many();
390    }
391
392    /**
393     * True if this association end's multiplicity is many while the other end's is one.
394     * @see AssociationEndFacade#isMany2One()
395     */
396    public boolean isMany2One()
397    {
398        return this.getSuperAssociationEndFacade().isMany2One();
399    }
400
401    /**
402     * True if it is possible to navigate from the other end to this association end .
403     * @see AssociationEndFacade#isNavigable()
404     */
405    public boolean isNavigable()
406    {
407        return this.getSuperAssociationEndFacade().isNavigable();
408    }
409
410    /**
411     * True if this association end's multiplicity is one while the other end's is many.
412     * @see AssociationEndFacade#isOne2Many()
413     */
414    public boolean isOne2Many()
415    {
416        return this.getSuperAssociationEndFacade().isOne2Many();
417    }
418
419    /**
420     * True if this association end's and the other end's multiplicities are both one.
421     * @see AssociationEndFacade#isOne2One()
422     */
423    public boolean isOne2One()
424    {
425        return this.getSuperAssociationEndFacade().isOne2One();
426    }
427
428    /**
429     * Indicates whether or not the association ends are ordered (if multiplicity is greater than
430     * 1).
431     * @see AssociationEndFacade#isOrdered()
432     */
433    public boolean isOrdered()
434    {
435        return this.getSuperAssociationEndFacade().isOrdered();
436    }
437
438    /**
439     * True if the association end cannot be changed.
440     * @see AssociationEndFacade#isReadOnly()
441     */
442    public boolean isReadOnly()
443    {
444        return this.getSuperAssociationEndFacade().isReadOnly();
445    }
446
447    /**
448     * True if this association end's multiplicity is strictly greater than zero.
449     * @see AssociationEndFacade#isRequired()
450     */
451    public boolean isRequired()
452    {
453        return this.getSuperAssociationEndFacade().isRequired();
454    }
455
456    /**
457     * Indicates if this associationEnd is 'static', meaning it has a classifier scope.
458     * @see AssociationEndFacade#isStatic()
459     */
460    public boolean isStatic()
461    {
462        return this.getSuperAssociationEndFacade().isStatic();
463    }
464
465    /**
466     * UML2: If the association attribute is unique within the Collection type. UML14 always returns
467     * false. Unique+Ordered determines the implementation Collection type. Default=false.
468     * @see AssociationEndFacade#isUnique()
469     */
470    public boolean isUnique()
471    {
472        return this.getSuperAssociationEndFacade().isUnique();
473    }
474
475    /**
476     * Copies all tagged values from the given ModelElementFacade to this model element facade.
477     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
478     */
479    public void copyTaggedValues(ModelElementFacade element)
480    {
481        this.getSuperAssociationEndFacade().copyTaggedValues(element);
482    }
483
484    /**
485     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
486     * one found will be returned.
487     * @see ModelElementFacade#findTaggedValue(String tagName)
488     */
489    public Object findTaggedValue(String tagName)
490    {
491        return this.getSuperAssociationEndFacade().findTaggedValue(tagName);
492    }
493
494    /**
495     * Returns all the values for the tagged value with the specified name. The returned collection
496     * will contains only String instances, or will be empty. Never null.
497     * @see ModelElementFacade#findTaggedValues(String tagName)
498     */
499    public Collection<Object> findTaggedValues(String tagName)
500    {
501        return this.getSuperAssociationEndFacade().findTaggedValues(tagName);
502    }
503
504    /**
505     * Returns the fully qualified name of the model element. The fully qualified name includes
506     * complete package qualified name of the underlying model element. The templates parameter will
507     * be replaced by the correct one given the binding relation of the parameter to this element.
508     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
509     */
510    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
511    {
512        return this.getSuperAssociationEndFacade().getBindedFullyQualifiedName(bindedElement);
513    }
514
515    /**
516     * Gets all constraints belonging to the model element.
517     * @see ModelElementFacade#getConstraints()
518     */
519    public Collection<ConstraintFacade> getConstraints()
520    {
521        return this.getSuperAssociationEndFacade().getConstraints();
522    }
523
524    /**
525     * Returns the constraints of the argument kind that have been placed onto this model. Typical
526     * kinds are "inv", "pre" and "post". Other kinds are possible.
527     * @see ModelElementFacade#getConstraints(String kind)
528     */
529    public Collection<ConstraintFacade> getConstraints(String kind)
530    {
531        return this.getSuperAssociationEndFacade().getConstraints(kind);
532    }
533
534    /**
535     * Gets the documentation for the model element, The indent argument is prefixed to each line.
536     * By default this method wraps lines after 64 characters.
537     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
538     * @see ModelElementFacade#getDocumentation(String indent)
539     */
540    public String getDocumentation(String indent)
541    {
542        return this.getSuperAssociationEndFacade().getDocumentation(indent);
543    }
544
545    /**
546     * This method returns the documentation for this model element, with the lines wrapped after
547     * the specified number of characters, values of less than 1 will indicate no line wrapping is
548     * required. By default paragraphs are returned as HTML.
549     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
550     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
551     */
552    public String getDocumentation(String indent, int lineLength)
553    {
554        return this.getSuperAssociationEndFacade().getDocumentation(indent, lineLength);
555    }
556
557    /**
558     * This method returns the documentation for this model element, with the lines wrapped after
559     * the specified number of characters, values of less than 1 will indicate no line wrapping is
560     * required. HTML style determines if HTML Escaping is applied.
561     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
562     */
563    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
564    {
565        return this.getSuperAssociationEndFacade().getDocumentation(indent, lineLength, htmlStyle);
566    }
567
568    /**
569     * The fully qualified name of this model element.
570     * @see ModelElementFacade#getFullyQualifiedName()
571     */
572    public String getFullyQualifiedName()
573    {
574        return this.getSuperAssociationEndFacade().getFullyQualifiedName();
575    }
576
577    /**
578     * Returns the fully qualified name of the model element. The fully qualified name includes
579     * complete package qualified name of the underlying model element.  If modelName is true, then
580     * the original name of the model element (the name contained within the model) will be the name
581     * returned, otherwise a name from a language mapping will be returned.
582     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
583     */
584    public String getFullyQualifiedName(boolean modelName)
585    {
586        return this.getSuperAssociationEndFacade().getFullyQualifiedName(modelName);
587    }
588
589    /**
590     * Returns the fully qualified name as a path, the returned value always starts with out a slash
591     * '/'.
592     * @see ModelElementFacade#getFullyQualifiedNamePath()
593     */
594    public String getFullyQualifiedNamePath()
595    {
596        return this.getSuperAssociationEndFacade().getFullyQualifiedNamePath();
597    }
598
599    /**
600     * Gets the unique identifier of the underlying model element.
601     * @see ModelElementFacade#getId()
602     */
603    public String getId()
604    {
605        return this.getSuperAssociationEndFacade().getId();
606    }
607
608    /**
609     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
610     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
611     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
612     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
613     * JDK5 compiler level.
614     * @see ModelElementFacade#getKeywords()
615     */
616    public Collection<String> getKeywords()
617    {
618        return this.getSuperAssociationEndFacade().getKeywords();
619    }
620
621    /**
622     * UML2: Retrieves a localized label for this named element.
623     * @see ModelElementFacade#getLabel()
624     */
625    public String getLabel()
626    {
627        return this.getSuperAssociationEndFacade().getLabel();
628    }
629
630    /**
631     * The language mappings that have been set for this model element.
632     * @see ModelElementFacade#getLanguageMappings()
633     */
634    public TypeMappings getLanguageMappings()
635    {
636        return this.getSuperAssociationEndFacade().getLanguageMappings();
637    }
638
639    /**
640     * Return the model containing this model element (multiple models may be loaded and processed
641     * at the same time).
642     * @see ModelElementFacade#getModel()
643     */
644    public ModelFacade getModel()
645    {
646        return this.getSuperAssociationEndFacade().getModel();
647    }
648
649    /**
650     * The name of the model element.
651     * @see ModelElementFacade#getName()
652     */
653    public String getName()
654    {
655        return this.getSuperAssociationEndFacade().getName();
656    }
657
658    /**
659     * Gets the package to which this model element belongs.
660     * @see ModelElementFacade#getPackage()
661     */
662    public ModelElementFacade getPackage()
663    {
664        return this.getSuperAssociationEndFacade().getPackage();
665    }
666
667    /**
668     * The name of this model element's package.
669     * @see ModelElementFacade#getPackageName()
670     */
671    public String getPackageName()
672    {
673        return this.getSuperAssociationEndFacade().getPackageName();
674    }
675
676    /**
677     * Gets the package name (optionally providing the ability to retrieve the model name and not
678     * the mapped name).
679     * @see ModelElementFacade#getPackageName(boolean modelName)
680     */
681    public String getPackageName(boolean modelName)
682    {
683        return this.getSuperAssociationEndFacade().getPackageName(modelName);
684    }
685
686    /**
687     * Returns the package as a path, the returned value always starts with out a slash '/'.
688     * @see ModelElementFacade#getPackagePath()
689     */
690    public String getPackagePath()
691    {
692        return this.getSuperAssociationEndFacade().getPackagePath();
693    }
694
695    /**
696     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
697     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
698     * the names of the containing namespaces starting at the root of the hierarchy and ending with
699     * the name of the NamedElement itself.
700     * @see ModelElementFacade#getQualifiedName()
701     */
702    public String getQualifiedName()
703    {
704        return this.getSuperAssociationEndFacade().getQualifiedName();
705    }
706
707    /**
708     * Gets the root package for the model element.
709     * @see ModelElementFacade#getRootPackage()
710     */
711    public PackageFacade getRootPackage()
712    {
713        return this.getSuperAssociationEndFacade().getRootPackage();
714    }
715
716    /**
717     * Gets the dependencies for which this model element is the source.
718     * @see ModelElementFacade#getSourceDependencies()
719     */
720    public Collection<DependencyFacade> getSourceDependencies()
721    {
722        return this.getSuperAssociationEndFacade().getSourceDependencies();
723    }
724
725    /**
726     * If this model element is the context of an activity graph, this represents that activity
727     * graph.
728     * @see ModelElementFacade#getStateMachineContext()
729     */
730    public StateMachineFacade getStateMachineContext()
731    {
732        return this.getSuperAssociationEndFacade().getStateMachineContext();
733    }
734
735    /**
736     * The collection of ALL stereotype names for this model element.
737     * @see ModelElementFacade#getStereotypeNames()
738     */
739    public Collection<String> getStereotypeNames()
740    {
741        return this.getSuperAssociationEndFacade().getStereotypeNames();
742    }
743
744    /**
745     * Gets all stereotypes for this model element.
746     * @see ModelElementFacade#getStereotypes()
747     */
748    public Collection<StereotypeFacade> getStereotypes()
749    {
750        return this.getSuperAssociationEndFacade().getStereotypes();
751    }
752
753    /**
754     * Return the TaggedValues associated with this model element, under all stereotypes.
755     * @see ModelElementFacade#getTaggedValues()
756     */
757    public Collection<TaggedValueFacade> getTaggedValues()
758    {
759        return this.getSuperAssociationEndFacade().getTaggedValues();
760    }
761
762    /**
763     * Gets the dependencies for which this model element is the target.
764     * @see ModelElementFacade#getTargetDependencies()
765     */
766    public Collection<DependencyFacade> getTargetDependencies()
767    {
768        return this.getSuperAssociationEndFacade().getTargetDependencies();
769    }
770
771    /**
772     * Get the template parameter for this model element having the parameterName
773     * @see ModelElementFacade#getTemplateParameter(String parameterName)
774     */
775    public Object getTemplateParameter(String parameterName)
776    {
777        return this.getSuperAssociationEndFacade().getTemplateParameter(parameterName);
778    }
779
780    /**
781     * Get the template parameters for this model element
782     * @see ModelElementFacade#getTemplateParameters()
783     */
784    public Collection<TemplateParameterFacade> getTemplateParameters()
785    {
786        return this.getSuperAssociationEndFacade().getTemplateParameters();
787    }
788
789    /**
790     * The visibility (i.e. public, private, protected or package) of the model element, will
791     * attempt a lookup for these values in the language mappings (if any).
792     * @see ModelElementFacade#getVisibility()
793     */
794    public String getVisibility()
795    {
796        return this.getSuperAssociationEndFacade().getVisibility();
797    }
798
799    /**
800     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
801     * is taken into account when searching for the stereotype), false otherwise.
802     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
803     */
804    public boolean hasExactStereotype(String stereotypeName)
805    {
806        return this.getSuperAssociationEndFacade().hasExactStereotype(stereotypeName);
807    }
808
809    /**
810     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
811     * pipe, semicolon, or << >>
812     * @see ModelElementFacade#hasKeyword(String keywordName)
813     */
814    public boolean hasKeyword(String keywordName)
815    {
816        return this.getSuperAssociationEndFacade().hasKeyword(keywordName);
817    }
818
819    /**
820     * Returns true if the model element has the specified stereotype.  If the stereotype itself
821     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
822     * one of the stereotype's ancestors has a matching name this method will return true, false
823     * otherwise.
824     * For example, if we have a certain stereotype called <<exception>> and a model element has a
825     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
826     * method with 'stereotypeName' defined as 'exception' the method would return true since
827     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
828     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
829     * @see ModelElementFacade#hasStereotype(String stereotypeName)
830     */
831    public boolean hasStereotype(String stereotypeName)
832    {
833        return this.getSuperAssociationEndFacade().hasStereotype(stereotypeName);
834    }
835
836    /**
837     * True if there are target dependencies from this element that are instances of BindingFacade.
838     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
839     * @see ModelElementFacade#isBindingDependenciesPresent()
840     */
841    public boolean isBindingDependenciesPresent()
842    {
843        return this.getSuperAssociationEndFacade().isBindingDependenciesPresent();
844    }
845
846    /**
847     * Indicates if any constraints are present on this model element.
848     * @see ModelElementFacade#isConstraintsPresent()
849     */
850    public boolean isConstraintsPresent()
851    {
852        return this.getSuperAssociationEndFacade().isConstraintsPresent();
853    }
854
855    /**
856     * Indicates if any documentation is present on this model element.
857     * @see ModelElementFacade#isDocumentationPresent()
858     */
859    public boolean isDocumentationPresent()
860    {
861        return this.getSuperAssociationEndFacade().isDocumentationPresent();
862    }
863
864    /**
865     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
866     * @see ModelElementFacade#isReservedWord()
867     */
868    public boolean isReservedWord()
869    {
870        return this.getSuperAssociationEndFacade().isReservedWord();
871    }
872
873    /**
874     * True is there are template parameters on this model element. For UML2, applies to Class,
875     * Operation, Property, and Parameter.
876     * @see ModelElementFacade#isTemplateParametersPresent()
877     */
878    public boolean isTemplateParametersPresent()
879    {
880        return this.getSuperAssociationEndFacade().isTemplateParametersPresent();
881    }
882
883    /**
884     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
885     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
886     * Enumerations and Interfaces, optionally applies on other model elements.
887     * @see ModelElementFacade#isValidIdentifierName()
888     */
889    public boolean isValidIdentifierName()
890    {
891        return this.getSuperAssociationEndFacade().isValidIdentifierName();
892    }
893
894    /**
895     * Searches for the constraint with the specified 'name' on this model element, and if found
896     * translates it using the specified 'translation' from a translation library discovered by the
897     * framework.
898     * @see ModelElementFacade#translateConstraint(String name, String translation)
899     */
900    public String translateConstraint(String name, String translation)
901    {
902        return this.getSuperAssociationEndFacade().translateConstraint(name, translation);
903    }
904
905    /**
906     * Translates all constraints belonging to this model element with the given 'translation'.
907     * @see ModelElementFacade#translateConstraints(String translation)
908     */
909    public String[] translateConstraints(String translation)
910    {
911        return this.getSuperAssociationEndFacade().translateConstraints(translation);
912    }
913
914    /**
915     * Translates the constraints of the specified 'kind' belonging to this model element.
916     * @see ModelElementFacade#translateConstraints(String kind, String translation)
917     */
918    public String[] translateConstraints(String kind, String translation)
919    {
920        return this.getSuperAssociationEndFacade().translateConstraints(kind, translation);
921    }
922
923    /**
924     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
925     */
926    @Override
927    public void initialize()
928    {
929        this.getSuperAssociationEndFacade().initialize();
930    }
931
932    /**
933     * @return Object getSuperAssociationEndFacade().getValidationOwner()
934     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
935     */
936    @Override
937    public Object getValidationOwner()
938    {
939        Object owner = this.getSuperAssociationEndFacade().getValidationOwner();
940        return owner;
941    }
942
943    /**
944     * @return String getSuperAssociationEndFacade().getValidationName()
945     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
946     */
947    @Override
948    public String getValidationName()
949    {
950        String name = this.getSuperAssociationEndFacade().getValidationName();
951        return name;
952    }
953
954    /**
955     * @param validationMessages Collection<ModelValidationMessage>
956     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
957     */
958    @Override
959    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
960    {
961        this.getSuperAssociationEndFacade().validateInvariants(validationMessages);
962    }
963
964    /**
965     * The property that stores the name of the metafacade.
966     */
967    private static final String NAME_PROPERTY = "name";
968    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
969
970    /**
971     * @see Object#toString()
972     */
973    @Override
974    public String toString()
975    {
976        final StringBuilder toString = new StringBuilder(this.getClass().getName());
977        toString.append("[");
978        try
979        {
980            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
981        }
982        catch (final Throwable tryAgain)
983        {
984            try
985            {
986                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
987            }
988            catch (final Throwable ignore)
989            {
990                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
991            }
992        }
993        toString.append("]");
994        return toString.toString();
995    }
996}