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