001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.hibernate.metafacades;
006
007import java.util.Collection;
008import java.util.List;
009import org.andromda.core.common.Introspector;
010import org.andromda.core.metafacade.MetafacadeBase;
011import org.andromda.core.metafacade.MetafacadeFactory;
012import org.andromda.core.metafacade.ModelValidationMessage;
013import org.andromda.metafacades.uml.AssociationEndFacade;
014import org.andromda.metafacades.uml.AttributeFacade;
015import org.andromda.metafacades.uml.ClassifierFacade;
016import org.andromda.metafacades.uml.ConstraintFacade;
017import org.andromda.metafacades.uml.DependencyFacade;
018import org.andromda.metafacades.uml.Destination;
019import org.andromda.metafacades.uml.GeneralizableElementFacade;
020import org.andromda.metafacades.uml.GeneralizationFacade;
021import org.andromda.metafacades.uml.ModelElementFacade;
022import org.andromda.metafacades.uml.ModelFacade;
023import org.andromda.metafacades.uml.OperationFacade;
024import org.andromda.metafacades.uml.PackageFacade;
025import org.andromda.metafacades.uml.Role;
026import org.andromda.metafacades.uml.Service;
027import org.andromda.metafacades.uml.StateMachineFacade;
028import org.andromda.metafacades.uml.StereotypeFacade;
029import org.andromda.metafacades.uml.TaggedValueFacade;
030import org.andromda.metafacades.uml.TemplateParameterFacade;
031import org.andromda.metafacades.uml.TypeMappings;
032
033/**
034 * Represents a service facade for hibernate java objects.
035 * MetafacadeLogic for HibernateService
036 *
037 * @see HibernateService
038 */
039public abstract class HibernateServiceLogic
040    extends MetafacadeBase
041    implements HibernateService
042{
043    /**
044     * The underlying UML object
045     * @see Object
046     */
047    protected Object metaObject;
048
049    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
050     * @param metaObjectIn
051     * @param context
052     */
053    protected HibernateServiceLogic(Object metaObjectIn, String context)
054    {
055        super(metaObjectIn, getContext(context));
056        this.superService =
057           (Service)
058            MetafacadeFactory.getInstance().createFacadeImpl(
059                    "org.andromda.metafacades.uml.Service",
060                    metaObjectIn,
061                    getContext(context));
062        this.metaObject = metaObjectIn;
063    }
064
065    /**
066     * Gets the context for this metafacade logic instance.
067     * @param context String. Set to HibernateService if null
068     * @return context String
069     */
070    private static String getContext(String context)
071    {
072        if (context == null)
073        {
074            context = "org.andromda.cartridges.hibernate.metafacades.HibernateService";
075        }
076        return context;
077    }
078
079    private Service superService;
080    private boolean superServiceInitialized = false;
081
082    /**
083     * Gets the Service parent instance.
084     * @return this.superService Service
085     */
086    private Service getSuperService()
087    {
088        if (!this.superServiceInitialized)
089        {
090            ((MetafacadeBase)this.superService).setMetafacadeContext(this.getMetafacadeContext());
091            this.superServiceInitialized = true;
092        }
093        return this.superService;
094    }
095
096    /** Reset context only for non-root metafacades
097     * @param context
098     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
099     */
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}