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