View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4   //
5   package org.andromda.cartridges.jsf.metafacades;
6   
7   import java.util.Collection;
8   import java.util.List;
9   import org.andromda.core.common.Introspector;
10  import org.andromda.core.metafacade.MetafacadeBase;
11  import org.andromda.core.metafacade.MetafacadeFactory;
12  import org.andromda.core.metafacade.ModelValidationMessage;
13  import org.andromda.metafacades.uml.AssociationEndFacade;
14  import org.andromda.metafacades.uml.AttributeFacade;
15  import org.andromda.metafacades.uml.ClassifierFacade;
16  import org.andromda.metafacades.uml.ConstraintFacade;
17  import org.andromda.metafacades.uml.DependencyFacade;
18  import org.andromda.metafacades.uml.EnumerationFacade;
19  import org.andromda.metafacades.uml.GeneralizableElementFacade;
20  import org.andromda.metafacades.uml.GeneralizationFacade;
21  import org.andromda.metafacades.uml.ModelElementFacade;
22  import org.andromda.metafacades.uml.ModelFacade;
23  import org.andromda.metafacades.uml.OperationFacade;
24  import org.andromda.metafacades.uml.PackageFacade;
25  import org.andromda.metafacades.uml.StateMachineFacade;
26  import org.andromda.metafacades.uml.StereotypeFacade;
27  import org.andromda.metafacades.uml.TaggedValueFacade;
28  import org.andromda.metafacades.uml.TemplateParameterFacade;
29  import org.andromda.metafacades.uml.TypeMappings;
30  
31  /**
32   * Represents an enumeration used within a JSF application.
33   * MetafacadeLogic for JSFEnumeration
34   *
35   * @see JSFEnumeration
36   */
37  public abstract class JSFEnumerationLogic
38      extends MetafacadeBase
39      implements JSFEnumeration
40  {
41      /**
42       * The underlying UML object
43       * @see Object
44       */
45      protected Object metaObject;
46  
47      /** Create Metafacade implementation instance using the MetafacadeFactory from the context
48       * @param metaObjectIn
49       * @param context
50       */
51      protected JSFEnumerationLogic(Object metaObjectIn, String context)
52      {
53          super(metaObjectIn, getContext(context));
54          this.superEnumerationFacade =
55             (EnumerationFacade)
56              MetafacadeFactory.getInstance().createFacadeImpl(
57                      "org.andromda.metafacades.uml.EnumerationFacade",
58                      metaObjectIn,
59                      getContext(context));
60          this.metaObject = metaObjectIn;
61      }
62  
63      /**
64       * Gets the context for this metafacade logic instance.
65       * @param context String. Set to JSFEnumeration if null
66       * @return context String
67       */
68      private static String getContext(String context)
69      {
70          if (context == null)
71          {
72              context = "org.andromda.cartridges.jsf.metafacades.JSFEnumeration";
73          }
74          return context;
75      }
76  
77      private EnumerationFacade superEnumerationFacade;
78      private boolean superEnumerationFacadeInitialized = false;
79  
80      /**
81       * Gets the EnumerationFacade parent instance.
82       * @return this.superEnumerationFacade EnumerationFacade
83       */
84      private EnumerationFacade getSuperEnumerationFacade()
85      {
86          if (!this.superEnumerationFacadeInitialized)
87          {
88              ((MetafacadeBase)this.superEnumerationFacade).setMetafacadeContext(this.getMetafacadeContext());
89              this.superEnumerationFacadeInitialized = true;
90          }
91          return this.superEnumerationFacade;
92      }
93  
94      /** Reset context only for non-root metafacades
95       * @param context
96       * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
97       */
98      @Override
99      public void resetMetafacadeContext(String context)
100     {
101         if (!this.contextRoot) // reset context only for non-root metafacades
102         {
103             context = getContext(context);  // to have same value as in original constructor call
104             setMetafacadeContext (context);
105             if (this.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.jsf.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.jsf.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.jsf.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.jsf.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.jsf.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 }