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