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