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