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