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