View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4   //
5   package org.andromda.cartridges.hibernate.metafacades;
6   
7   import java.util.Collection;
8   import org.andromda.core.common.Introspector;
9   import org.andromda.core.metafacade.MetafacadeBase;
10  import org.andromda.core.metafacade.MetafacadeFactory;
11  import org.andromda.core.metafacade.ModelValidationMessage;
12  import org.andromda.metafacades.uml.ClassifierFacade;
13  import org.andromda.metafacades.uml.ConstraintFacade;
14  import org.andromda.metafacades.uml.DependencyFacade;
15  import org.andromda.metafacades.uml.EntityAttribute;
16  import org.andromda.metafacades.uml.EnumerationFacade;
17  import org.andromda.metafacades.uml.ModelElementFacade;
18  import org.andromda.metafacades.uml.ModelFacade;
19  import org.andromda.metafacades.uml.PackageFacade;
20  import org.andromda.metafacades.uml.StateMachineFacade;
21  import org.andromda.metafacades.uml.StereotypeFacade;
22  import org.andromda.metafacades.uml.TaggedValueFacade;
23  import org.andromda.metafacades.uml.TemplateParameterFacade;
24  import org.andromda.metafacades.uml.TypeMappings;
25  
26  /**
27   * Represents the attribute of a HIbernate entity.
28   * MetafacadeLogic for HibernateEntityAttribute
29   *
30   * @see HibernateEntityAttribute
31   */
32  public abstract class HibernateEntityAttributeLogic
33      extends MetafacadeBase
34      implements HibernateEntityAttribute
35  {
36      /**
37       * The underlying UML object
38       * @see Object
39       */
40      protected Object metaObject;
41  
42      /** Create Metafacade implementation instance using the MetafacadeFactory from the context
43       * @param metaObjectIn
44       * @param context
45       */
46      protected HibernateEntityAttributeLogic(Object metaObjectIn, String context)
47      {
48          super(metaObjectIn, getContext(context));
49          this.superEntityAttribute =
50             (EntityAttribute)
51              MetafacadeFactory.getInstance().createFacadeImpl(
52                      "org.andromda.metafacades.uml.EntityAttribute",
53                      metaObjectIn,
54                      getContext(context));
55          this.metaObject = metaObjectIn;
56      }
57  
58      /**
59       * Gets the context for this metafacade logic instance.
60       * @param context String. Set to HibernateEntityAttribute if null
61       * @return context String
62       */
63      private static String getContext(String context)
64      {
65          if (context == null)
66          {
67              context = "org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute";
68          }
69          return context;
70      }
71  
72      private EntityAttribute superEntityAttribute;
73      private boolean superEntityAttributeInitialized = false;
74  
75      /**
76       * Gets the EntityAttribute parent instance.
77       * @return this.superEntityAttribute EntityAttribute
78       */
79      private EntityAttribute getSuperEntityAttribute()
80      {
81          if (!this.superEntityAttributeInitialized)
82          {
83              ((MetafacadeBase)this.superEntityAttribute).setMetafacadeContext(this.getMetafacadeContext());
84              this.superEntityAttributeInitialized = true;
85          }
86          return this.superEntityAttribute;
87      }
88  
89      /** Reset context only for non-root metafacades
90       * @param context
91       * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
92       */
93      @Override
94      public void resetMetafacadeContext(String context)
95      {
96          if (!this.contextRoot) // reset context only for non-root metafacades
97          {
98              context = getContext(context);  // to have same value as in original constructor call
99              setMetafacadeContext (context);
100             if (this.superEntityAttributeInitialized)
101             {
102                 ((MetafacadeBase)this.superEntityAttribute).resetMetafacadeContext(context);
103             }
104         }
105     }
106 
107     /**
108      * @return boolean true always
109      * @see HibernateEntityAttribute
110      */
111     public boolean isHibernateEntityAttributeMetaType()
112     {
113         return true;
114     }
115 
116     // --------------- attributes ---------------------
117 
118    /**
119     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#isContainsEmbeddedObject()
120     * @return boolean
121     */
122     protected abstract boolean handleIsContainsEmbeddedObject();
123 
124     private boolean __containsEmbeddedObject1a;
125     private boolean __containsEmbeddedObject1aSet = false;
126 
127     /**
128      * TODO: Model Documentation for
129      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.containsEmbeddedObject
130      * @return (boolean)handleIsContainsEmbeddedObject()
131      */
132     public final boolean isContainsEmbeddedObject()
133     {
134         boolean containsEmbeddedObject1a = this.__containsEmbeddedObject1a;
135         if (!this.__containsEmbeddedObject1aSet)
136         {
137             // containsEmbeddedObject has no pre constraints
138             containsEmbeddedObject1a = handleIsContainsEmbeddedObject();
139             // containsEmbeddedObject has no post constraints
140             this.__containsEmbeddedObject1a = containsEmbeddedObject1a;
141             if (isMetafacadePropertyCachingEnabled())
142             {
143                 this.__containsEmbeddedObject1aSet = true;
144             }
145         }
146         return containsEmbeddedObject1a;
147     }
148 
149    /**
150     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#getFormula()
151     * @return String
152     */
153     protected abstract String handleGetFormula();
154 
155     private String __formula2a;
156     private boolean __formula2aSet = false;
157 
158     /**
159      * TODO: Model Documentation for
160      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.formula
161      * @return (String)handleGetFormula()
162      */
163     public final String getFormula()
164     {
165         String formula2a = this.__formula2a;
166         if (!this.__formula2aSet)
167         {
168             // formula has no pre constraints
169             formula2a = handleGetFormula();
170             // formula has no post constraints
171             this.__formula2a = formula2a;
172             if (isMetafacadePropertyCachingEnabled())
173             {
174                 this.__formula2aSet = true;
175             }
176         }
177         return formula2a;
178     }
179 
180    /**
181     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#isLazy()
182     * @return boolean
183     */
184     protected abstract boolean handleIsLazy();
185 
186     private boolean __lazy3a;
187     private boolean __lazy3aSet = false;
188 
189     /**
190      * Whether or not this attribute should be lazily loaded.
191      * @return (boolean)handleIsLazy()
192      */
193     public final boolean isLazy()
194     {
195         boolean lazy3a = this.__lazy3a;
196         if (!this.__lazy3aSet)
197         {
198             // lazy has no pre constraints
199             lazy3a = handleIsLazy();
200             // lazy has no post constraints
201             this.__lazy3a = lazy3a;
202             if (isMetafacadePropertyCachingEnabled())
203             {
204                 this.__lazy3aSet = true;
205             }
206         }
207         return lazy3a;
208     }
209 
210    /**
211     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#isInsertEnabled()
212     * @return boolean
213     */
214     protected abstract boolean handleIsInsertEnabled();
215 
216     private boolean __insertEnabled4a;
217     private boolean __insertEnabled4aSet = false;
218 
219     /**
220      * Specifies whether a mapped column should be included in SQL INSERT statements.
221      * @return (boolean)handleIsInsertEnabled()
222      */
223     public final boolean isInsertEnabled()
224     {
225         boolean insertEnabled4a = this.__insertEnabled4a;
226         if (!this.__insertEnabled4aSet)
227         {
228             // insertEnabled has no pre constraints
229             insertEnabled4a = handleIsInsertEnabled();
230             // insertEnabled has no post constraints
231             this.__insertEnabled4a = insertEnabled4a;
232             if (isMetafacadePropertyCachingEnabled())
233             {
234                 this.__insertEnabled4aSet = true;
235             }
236         }
237         return insertEnabled4a;
238     }
239 
240    /**
241     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#isUpdateEnabled()
242     * @return boolean
243     */
244     protected abstract boolean handleIsUpdateEnabled();
245 
246     private boolean __updateEnabled5a;
247     private boolean __updateEnabled5aSet = false;
248 
249     /**
250      * Specifies whether a mapped column should be included in SQL UPDATE statements.
251      * @return (boolean)handleIsUpdateEnabled()
252      */
253     public final boolean isUpdateEnabled()
254     {
255         boolean updateEnabled5a = this.__updateEnabled5a;
256         if (!this.__updateEnabled5aSet)
257         {
258             // updateEnabled has no pre constraints
259             updateEnabled5a = handleIsUpdateEnabled();
260             // updateEnabled has no post constraints
261             this.__updateEnabled5a = updateEnabled5a;
262             if (isMetafacadePropertyCachingEnabled())
263             {
264                 this.__updateEnabled5aSet = true;
265             }
266         }
267         return updateEnabled5a;
268     }
269 
270    /**
271     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#getXmlTagName()
272     * @return String
273     */
274     protected abstract String handleGetXmlTagName();
275 
276     private String __xmlTagName6a;
277     private boolean __xmlTagName6aSet = false;
278 
279     /**
280      * TODO: Model Documentation for
281      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.xmlTagName
282      * @return (String)handleGetXmlTagName()
283      */
284     public final String getXmlTagName()
285     {
286         String xmlTagName6a = this.__xmlTagName6a;
287         if (!this.__xmlTagName6aSet)
288         {
289             // xmlTagName has no pre constraints
290             xmlTagName6a = handleGetXmlTagName();
291             // xmlTagName has no post constraints
292             this.__xmlTagName6a = xmlTagName6a;
293             if (isMetafacadePropertyCachingEnabled())
294             {
295                 this.__xmlTagName6aSet = true;
296             }
297         }
298         return xmlTagName6a;
299     }
300 
301    /**
302     * @see org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute#getFullyQualifiedHibernateType()
303     * @return String
304     */
305     protected abstract String handleGetFullyQualifiedHibernateType();
306 
307     private String __fullyQualifiedHibernateType7a;
308     private boolean __fullyQualifiedHibernateType7aSet = false;
309 
310     /**
311      * TODO: Model Documentation for
312      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.fullyQualifiedHibernateType
313      * @return (String)handleGetFullyQualifiedHibernateType()
314      */
315     public final String getFullyQualifiedHibernateType()
316     {
317         String fullyQualifiedHibernateType7a = this.__fullyQualifiedHibernateType7a;
318         if (!this.__fullyQualifiedHibernateType7aSet)
319         {
320             // fullyQualifiedHibernateType has no pre constraints
321             fullyQualifiedHibernateType7a = handleGetFullyQualifiedHibernateType();
322             // fullyQualifiedHibernateType has no post constraints
323             this.__fullyQualifiedHibernateType7a = fullyQualifiedHibernateType7a;
324             if (isMetafacadePropertyCachingEnabled())
325             {
326                 this.__fullyQualifiedHibernateType7aSet = true;
327             }
328         }
329         return fullyQualifiedHibernateType7a;
330     }
331 
332     // ---------------- business methods ----------------------
333 
334     /**
335      * Method to be implemented in descendants
336      * TODO: Model Documentation for
337      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.concatColumnName
338      * @param prefix
339      * @param name
340      * @return String
341      */
342     protected abstract String handleConcatColumnName(String prefix, String name);
343 
344     /**
345      * TODO: Model Documentation for
346      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.concatColumnName
347      * @param prefix String
348      * TODO: Model Documentation for
349      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.concatColumnName(prefix)
350      * @param name String
351      * TODO: Model Documentation for
352      * org.andromda.cartridges.hibernate.metafacades.HibernateEntityAttribute.concatColumnName(name)
353      * @return handleConcatColumnName(prefix, name)
354      */
355     public String concatColumnName(String prefix, String name)
356     {
357         // concatColumnName has no pre constraints
358         String returnValue = handleConcatColumnName(prefix, name);
359         // concatColumnName has no post constraints
360         return returnValue;
361     }
362 
363     /**
364      * @return true
365      * @see EntityAttribute
366      */
367     public boolean isEntityAttributeMetaType()
368     {
369         return true;
370     }
371 
372     /**
373      * @return true
374      * @see org.andromda.metafacades.uml.AttributeFacade
375      */
376     public boolean isAttributeFacadeMetaType()
377     {
378         return true;
379     }
380 
381     /**
382      * @return true
383      * @see ModelElementFacade
384      */
385     public boolean isModelElementFacadeMetaType()
386     {
387         return true;
388     }
389 
390     // ----------- delegates to EntityAttribute ------------
391     /**
392      * Searches the given feature for the specified tag.
393      * If the follow boolean is set to true then the search will continue from the class attribute
394      * to the class itself and then up the class hierarchy.
395      * @see org.andromda.metafacades.uml.AttributeFacade#findTaggedValue(String name, boolean follow)
396      */
397     public Object findTaggedValue(String name, boolean follow)
398     {
399         return this.getSuperEntityAttribute().findTaggedValue(name, follow);
400     }
401 
402     /**
403      * The default value of the attribute.  This is the value given if no value is defined.
404      * @see org.andromda.metafacades.uml.AttributeFacade#getDefaultValue()
405      */
406     public String getDefaultValue()
407     {
408         return this.getSuperEntityAttribute().getDefaultValue();
409     }
410 
411     /**
412      * If the attribute is an enumeration literal this represents the owning enumeration. Can be
413      * empty.
414      * @see org.andromda.metafacades.uml.AttributeFacade#getEnumeration()
415      */
416     public EnumerationFacade getEnumeration()
417     {
418         return this.getSuperEntityAttribute().getEnumeration();
419     }
420 
421     /**
422      * Returns the enumeration literal parameters defined by tagged value as a comma separated list.
423      * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationLiteralParameters()
424      */
425     public String getEnumerationLiteralParameters()
426     {
427         return this.getSuperEntityAttribute().getEnumerationLiteralParameters();
428     }
429 
430     /**
431      * The value for this attribute if it is an enumeration literal, null otherwise. The default
432      * value is returned as a String if it has been specified, if it's not specified this
433      * attribute's name is assumed.
434      * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationValue()
435      */
436     public String getEnumerationValue()
437     {
438         return this.getSuperEntityAttribute().getEnumerationValue();
439     }
440 
441     /**
442      * The name of the accessor operation that would retrieve this attribute's value.
443      * @see org.andromda.metafacades.uml.AttributeFacade#getGetterName()
444      */
445     public String getGetterName()
446     {
447         return this.getSuperEntityAttribute().getGetterName();
448     }
449 
450     /**
451      * The name of the type that is returned on the accessor and mutator operations,  determined in
452      * part by the multiplicity.
453      * @see org.andromda.metafacades.uml.AttributeFacade#getGetterSetterTypeName()
454      */
455     public String getGetterSetterTypeName()
456     {
457         return this.getSuperEntityAttribute().getGetterSetterTypeName();
458     }
459 
460     /**
461      * the lower value for the multiplicity
462      * -only applicable for UML2
463      * @see org.andromda.metafacades.uml.AttributeFacade#getLower()
464      */
465     public int getLower()
466     {
467         return this.getSuperEntityAttribute().getLower();
468     }
469 
470     /**
471      * Gets the classifier who is the owner of the attributes.
472      * @see org.andromda.metafacades.uml.AttributeFacade#getOwner()
473      */
474     public ClassifierFacade getOwner()
475     {
476         return this.getSuperEntityAttribute().getOwner();
477     }
478 
479     /**
480      * The name of the mutator operation that would retrieve this attribute's value.
481      * @see org.andromda.metafacades.uml.AttributeFacade#getSetterName()
482      */
483     public String getSetterName()
484     {
485         return this.getSuperEntityAttribute().getSetterName();
486     }
487 
488     /**
489      * The classifier owning this attribute.
490      * @see org.andromda.metafacades.uml.AttributeFacade#getType()
491      */
492     public ClassifierFacade getType()
493     {
494         return this.getSuperEntityAttribute().getType();
495     }
496 
497     /**
498      * the upper value for the multiplicity (will be -1 for *)
499      * -only applicable for UML2
500      * @see org.andromda.metafacades.uml.AttributeFacade#getUpper()
501      */
502     public int getUpper()
503     {
504         return this.getSuperEntityAttribute().getUpper();
505     }
506 
507     /**
508      * True if this attribute can only be set.
509      * @see org.andromda.metafacades.uml.AttributeFacade#isAddOnly()
510      */
511     public boolean isAddOnly()
512     {
513         return this.getSuperEntityAttribute().isAddOnly();
514     }
515 
516     /**
517      * True if this attribute can be modified.
518      * @see org.andromda.metafacades.uml.AttributeFacade#isChangeable()
519      */
520     public boolean isChangeable()
521     {
522         return this.getSuperEntityAttribute().isChangeable();
523     }
524 
525     /**
526      * Indicates if the default value is present.
527      * @see org.andromda.metafacades.uml.AttributeFacade#isDefaultValuePresent()
528      */
529     public boolean isDefaultValuePresent()
530     {
531         return this.getSuperEntityAttribute().isDefaultValuePresent();
532     }
533 
534     /**
535      * If the attribute is derived (its value is computed). UML2 only. UML14 always returns false.
536      * Default=false.
537      * @see org.andromda.metafacades.uml.AttributeFacade#isDerived()
538      */
539     public boolean isDerived()
540     {
541         return this.getSuperEntityAttribute().isDerived();
542     }
543 
544     /**
545      * True if this attribute is owned by an enumeration.
546      * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteral()
547      */
548     public boolean isEnumerationLiteral()
549     {
550         return this.getSuperEntityAttribute().isEnumerationLiteral();
551     }
552 
553     /**
554      * Returns true if enumeration literal parameters exist (defined by tagged value) for the
555      * literal.
556      * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteralParametersExist()
557      */
558     public boolean isEnumerationLiteralParametersExist()
559     {
560         return this.getSuperEntityAttribute().isEnumerationLiteralParametersExist();
561     }
562 
563     /**
564      * True if this attribute is owned by an enumeration but is defined as a member variable (NOT a
565      * literal).
566      * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationMember()
567      */
568     public boolean isEnumerationMember()
569     {
570         return this.getSuperEntityAttribute().isEnumerationMember();
571     }
572 
573     /**
574      * IsLeaf property in the operation. If true, operation is final, cannot be extended or
575      * implemented by a descendant.
576      * @see org.andromda.metafacades.uml.AttributeFacade#isLeaf()
577      */
578     public boolean isLeaf()
579     {
580         return this.getSuperEntityAttribute().isLeaf();
581     }
582 
583     /**
584      * Whether or not this attribute has a multiplicity greater than 1.
585      * @see org.andromda.metafacades.uml.AttributeFacade#isMany()
586      */
587     public boolean isMany()
588     {
589         return this.getSuperEntityAttribute().isMany();
590     }
591 
592     /**
593      * Indicates whether or not the attributes are ordered (if multiplicity is greater than 1).
594      * @see org.andromda.metafacades.uml.AttributeFacade#isOrdered()
595      */
596     public boolean isOrdered()
597     {
598         return this.getSuperEntityAttribute().isOrdered();
599     }
600 
601     /**
602      * Whether or not this attribute can be modified.
603      * @see org.andromda.metafacades.uml.AttributeFacade#isReadOnly()
604      */
605     public boolean isReadOnly()
606     {
607         return this.getSuperEntityAttribute().isReadOnly();
608     }
609 
610     /**
611      * Whether or not the multiplicity of this attribute is 1.
612      * @see org.andromda.metafacades.uml.AttributeFacade#isRequired()
613      */
614     public boolean isRequired()
615     {
616         return this.getSuperEntityAttribute().isRequired();
617     }
618 
619     /**
620      * Indicates if this attribute is 'static', meaning it has a classifier scope.
621      * @see org.andromda.metafacades.uml.AttributeFacade#isStatic()
622      */
623     public boolean isStatic()
624     {
625         return this.getSuperEntityAttribute().isStatic();
626     }
627 
628     /**
629      * If the attribute is unique within the Collection type. UML2 only. UML14 always returns false.
630      * Unique+Ordered determines the implementation Collection type. Default=false.
631      * @see org.andromda.metafacades.uml.AttributeFacade#isUnique()
632      */
633     public boolean isUnique()
634     {
635         return this.getSuperEntityAttribute().isUnique();
636     }
637 
638     /**
639      * The name of the index to create on a column that persists the entity attribute.
640      * @see EntityAttribute#getColumnIndex()
641      */
642     public String getColumnIndex()
643     {
644         return this.getSuperEntityAttribute().getColumnIndex();
645     }
646 
647     /**
648      * The length of the column that persists this entity attribute.
649      * @see EntityAttribute#getColumnLength()
650      */
651     public String getColumnLength()
652     {
653         return this.getSuperEntityAttribute().getColumnLength();
654     }
655 
656     /**
657      * The name of the table column to which this entity is mapped.
658      * @see EntityAttribute#getColumnName()
659      */
660     public String getColumnName()
661     {
662         return this.getSuperEntityAttribute().getColumnName();
663     }
664 
665     /**
666      * The PIM to language specific mappings for JDBC.
667      * @see EntityAttribute#getJdbcMappings()
668      */
669     public TypeMappings getJdbcMappings()
670     {
671         return this.getSuperEntityAttribute().getJdbcMappings();
672     }
673 
674     /**
675      * The JDBC type for this entity attribute.
676      * @see EntityAttribute#getJdbcType()
677      */
678     public String getJdbcType()
679     {
680         return this.getSuperEntityAttribute().getJdbcType();
681     }
682 
683     /**
684      * The SQL mappings (i.e. the mappings which provide PIM to SQL mappings).
685      * @see EntityAttribute#getSqlMappings()
686      */
687     public TypeMappings getSqlMappings()
688     {
689         return this.getSuperEntityAttribute().getSqlMappings();
690     }
691 
692     /**
693      * The SQL type for this attribute.
694      * @see EntityAttribute#getSqlType()
695      */
696     public String getSqlType()
697     {
698         return this.getSuperEntityAttribute().getSqlType();
699     }
700 
701     /**
702      * The name of the unique-key that this unique attribute belongs
703      * @see EntityAttribute#getUniqueGroup()
704      */
705     public String getUniqueGroup()
706     {
707         return this.getSuperEntityAttribute().getUniqueGroup();
708     }
709 
710     /**
711      * True if this attribute is an identifier for its entity.
712      * @see EntityAttribute#isIdentifier()
713      */
714     public boolean isIdentifier()
715     {
716         return this.getSuperEntityAttribute().isIdentifier();
717     }
718 
719     /**
720      * Indicates this attribute should be ignored by the persistence layer.
721      * @see EntityAttribute#isTransient()
722      */
723     public boolean isTransient()
724     {
725         return this.getSuperEntityAttribute().isTransient();
726     }
727 
728     /**
729      * Copies all tagged values from the given ModelElementFacade to this model element facade.
730      * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
731      */
732     public void copyTaggedValues(ModelElementFacade element)
733     {
734         this.getSuperEntityAttribute().copyTaggedValues(element);
735     }
736 
737     /**
738      * Finds the tagged value with the specified 'tagName'. In case there are more values the first
739      * one found will be returned.
740      * @see ModelElementFacade#findTaggedValue(String tagName)
741      */
742     public Object findTaggedValue(String tagName)
743     {
744         return this.getSuperEntityAttribute().findTaggedValue(tagName);
745     }
746 
747     /**
748      * Returns all the values for the tagged value with the specified name. The returned collection
749      * will contains only String instances, or will be empty. Never null.
750      * @see ModelElementFacade#findTaggedValues(String tagName)
751      */
752     public Collection<Object> findTaggedValues(String tagName)
753     {
754         return this.getSuperEntityAttribute().findTaggedValues(tagName);
755     }
756 
757     /**
758      * Returns the fully qualified name of the model element. The fully qualified name includes
759      * complete package qualified name of the underlying model element. The templates parameter will
760      * be replaced by the correct one given the binding relation of the parameter to this element.
761      * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
762      */
763     public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
764     {
765         return this.getSuperEntityAttribute().getBindedFullyQualifiedName(bindedElement);
766     }
767 
768     /**
769      * Gets all constraints belonging to the model element.
770      * @see ModelElementFacade#getConstraints()
771      */
772     public Collection<ConstraintFacade> getConstraints()
773     {
774         return this.getSuperEntityAttribute().getConstraints();
775     }
776 
777     /**
778      * Returns the constraints of the argument kind that have been placed onto this model. Typical
779      * kinds are "inv", "pre" and "post". Other kinds are possible.
780      * @see ModelElementFacade#getConstraints(String kind)
781      */
782     public Collection<ConstraintFacade> getConstraints(String kind)
783     {
784         return this.getSuperEntityAttribute().getConstraints(kind);
785     }
786 
787     /**
788      * Gets the documentation for the model element, The indent argument is prefixed to each line.
789      * By default this method wraps lines after 64 characters.
790      * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
791      * @see ModelElementFacade#getDocumentation(String indent)
792      */
793     public String getDocumentation(String indent)
794     {
795         return this.getSuperEntityAttribute().getDocumentation(indent);
796     }
797 
798     /**
799      * This method returns the documentation for this model element, with the lines wrapped after
800      * the specified number of characters, values of less than 1 will indicate no line wrapping is
801      * required. By default paragraphs are returned as HTML.
802      * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
803      * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
804      */
805     public String getDocumentation(String indent, int lineLength)
806     {
807         return this.getSuperEntityAttribute().getDocumentation(indent, lineLength);
808     }
809 
810     /**
811      * This method returns the documentation for this model element, with the lines wrapped after
812      * the specified number of characters, values of less than 1 will indicate no line wrapping is
813      * required. HTML style determines if HTML Escaping is applied.
814      * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
815      */
816     public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
817     {
818         return this.getSuperEntityAttribute().getDocumentation(indent, lineLength, htmlStyle);
819     }
820 
821     /**
822      * The fully qualified name of this model element.
823      * @see ModelElementFacade#getFullyQualifiedName()
824      */
825     public String getFullyQualifiedName()
826     {
827         return this.getSuperEntityAttribute().getFullyQualifiedName();
828     }
829 
830     /**
831      * Returns the fully qualified name of the model element. The fully qualified name includes
832      * complete package qualified name of the underlying model element.  If modelName is true, then
833      * the original name of the model element (the name contained within the model) will be the name
834      * returned, otherwise a name from a language mapping will be returned.
835      * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
836      */
837     public String getFullyQualifiedName(boolean modelName)
838     {
839         return this.getSuperEntityAttribute().getFullyQualifiedName(modelName);
840     }
841 
842     /**
843      * Returns the fully qualified name as a path, the returned value always starts with out a slash
844      * '/'.
845      * @see ModelElementFacade#getFullyQualifiedNamePath()
846      */
847     public String getFullyQualifiedNamePath()
848     {
849         return this.getSuperEntityAttribute().getFullyQualifiedNamePath();
850     }
851 
852     /**
853      * Gets the unique identifier of the underlying model element.
854      * @see ModelElementFacade#getId()
855      */
856     public String getId()
857     {
858         return this.getSuperEntityAttribute().getId();
859     }
860 
861     /**
862      * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
863      * are not represented by other properties, i.e. native, transient, volatile, synchronized,
864      * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
865      * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
866      * JDK5 compiler level.
867      * @see ModelElementFacade#getKeywords()
868      */
869     public Collection<String> getKeywords()
870     {
871         return this.getSuperEntityAttribute().getKeywords();
872     }
873 
874     /**
875      * UML2: Retrieves a localized label for this named element.
876      * @see ModelElementFacade#getLabel()
877      */
878     public String getLabel()
879     {
880         return this.getSuperEntityAttribute().getLabel();
881     }
882 
883     /**
884      * The language mappings that have been set for this model element.
885      * @see ModelElementFacade#getLanguageMappings()
886      */
887     public TypeMappings getLanguageMappings()
888     {
889         return this.getSuperEntityAttribute().getLanguageMappings();
890     }
891 
892     /**
893      * Return the model containing this model element (multiple models may be loaded and processed
894      * at the same time).
895      * @see ModelElementFacade#getModel()
896      */
897     public ModelFacade getModel()
898     {
899         return this.getSuperEntityAttribute().getModel();
900     }
901 
902     /**
903      * The name of the model element.
904      * @see ModelElementFacade#getName()
905      */
906     public String getName()
907     {
908         return this.getSuperEntityAttribute().getName();
909     }
910 
911     /**
912      * Gets the package to which this model element belongs.
913      * @see ModelElementFacade#getPackage()
914      */
915     public ModelElementFacade getPackage()
916     {
917         return this.getSuperEntityAttribute().getPackage();
918     }
919 
920     /**
921      * The name of this model element's package.
922      * @see ModelElementFacade#getPackageName()
923      */
924     public String getPackageName()
925     {
926         return this.getSuperEntityAttribute().getPackageName();
927     }
928 
929     /**
930      * Gets the package name (optionally providing the ability to retrieve the model name and not
931      * the mapped name).
932      * @see ModelElementFacade#getPackageName(boolean modelName)
933      */
934     public String getPackageName(boolean modelName)
935     {
936         return this.getSuperEntityAttribute().getPackageName(modelName);
937     }
938 
939     /**
940      * Returns the package as a path, the returned value always starts with out a slash '/'.
941      * @see ModelElementFacade#getPackagePath()
942      */
943     public String getPackagePath()
944     {
945         return this.getSuperEntityAttribute().getPackagePath();
946     }
947 
948     /**
949      * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
950      * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
951      * the names of the containing namespaces starting at the root of the hierarchy and ending with
952      * the name of the NamedElement itself.
953      * @see ModelElementFacade#getQualifiedName()
954      */
955     public String getQualifiedName()
956     {
957         return this.getSuperEntityAttribute().getQualifiedName();
958     }
959 
960     /**
961      * Gets the root package for the model element.
962      * @see ModelElementFacade#getRootPackage()
963      */
964     public PackageFacade getRootPackage()
965     {
966         return this.getSuperEntityAttribute().getRootPackage();
967     }
968 
969     /**
970      * Gets the dependencies for which this model element is the source.
971      * @see ModelElementFacade#getSourceDependencies()
972      */
973     public Collection<DependencyFacade> getSourceDependencies()
974     {
975         return this.getSuperEntityAttribute().getSourceDependencies();
976     }
977 
978     /**
979      * If this model element is the context of an activity graph, this represents that activity
980      * graph.
981      * @see ModelElementFacade#getStateMachineContext()
982      */
983     public StateMachineFacade getStateMachineContext()
984     {
985         return this.getSuperEntityAttribute().getStateMachineContext();
986     }
987 
988     /**
989      * The collection of ALL stereotype names for this model element.
990      * @see ModelElementFacade#getStereotypeNames()
991      */
992     public Collection<String> getStereotypeNames()
993     {
994         return this.getSuperEntityAttribute().getStereotypeNames();
995     }
996 
997     /**
998      * Gets all stereotypes for this model element.
999      * @see ModelElementFacade#getStereotypes()
1000      */
1001     public Collection<StereotypeFacade> getStereotypes()
1002     {
1003         return this.getSuperEntityAttribute().getStereotypes();
1004     }
1005 
1006     /**
1007      * Return the TaggedValues associated with this model element, under all stereotypes.
1008      * @see ModelElementFacade#getTaggedValues()
1009      */
1010     public Collection<TaggedValueFacade> getTaggedValues()
1011     {
1012         return this.getSuperEntityAttribute().getTaggedValues();
1013     }
1014 
1015     /**
1016      * Gets the dependencies for which this model element is the target.
1017      * @see ModelElementFacade#getTargetDependencies()
1018      */
1019     public Collection<DependencyFacade> getTargetDependencies()
1020     {
1021         return this.getSuperEntityAttribute().getTargetDependencies();
1022     }
1023 
1024     /**
1025      * Get the template parameter for this model element having the parameterName
1026      * @see ModelElementFacade#getTemplateParameter(String parameterName)
1027      */
1028     public Object getTemplateParameter(String parameterName)
1029     {
1030         return this.getSuperEntityAttribute().getTemplateParameter(parameterName);
1031     }
1032 
1033     /**
1034      * Get the template parameters for this model element
1035      * @see ModelElementFacade#getTemplateParameters()
1036      */
1037     public Collection<TemplateParameterFacade> getTemplateParameters()
1038     {
1039         return this.getSuperEntityAttribute().getTemplateParameters();
1040     }
1041 
1042     /**
1043      * The visibility (i.e. public, private, protected or package) of the model element, will
1044      * attempt a lookup for these values in the language mappings (if any).
1045      * @see ModelElementFacade#getVisibility()
1046      */
1047     public String getVisibility()
1048     {
1049         return this.getSuperEntityAttribute().getVisibility();
1050     }
1051 
1052     /**
1053      * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1054      * is taken into account when searching for the stereotype), false otherwise.
1055      * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1056      */
1057     public boolean hasExactStereotype(String stereotypeName)
1058     {
1059         return this.getSuperEntityAttribute().hasExactStereotype(stereotypeName);
1060     }
1061 
1062     /**
1063      * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1064      * pipe, semicolon, or << >>
1065      * @see ModelElementFacade#hasKeyword(String keywordName)
1066      */
1067     public boolean hasKeyword(String keywordName)
1068     {
1069         return this.getSuperEntityAttribute().hasKeyword(keywordName);
1070     }
1071 
1072     /**
1073      * Returns true if the model element has the specified stereotype.  If the stereotype itself
1074      * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1075      * one of the stereotype's ancestors has a matching name this method will return true, false
1076      * otherwise.
1077      * For example, if we have a certain stereotype called <<exception>> and a model element has a
1078      * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1079      * method with 'stereotypeName' defined as 'exception' the method would return true since
1080      * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1081      * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1082      * @see ModelElementFacade#hasStereotype(String stereotypeName)
1083      */
1084     public boolean hasStereotype(String stereotypeName)
1085     {
1086         return this.getSuperEntityAttribute().hasStereotype(stereotypeName);
1087     }
1088 
1089     /**
1090      * True if there are target dependencies from this element that are instances of BindingFacade.
1091      * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1092      * @see ModelElementFacade#isBindingDependenciesPresent()
1093      */
1094     public boolean isBindingDependenciesPresent()
1095     {
1096         return this.getSuperEntityAttribute().isBindingDependenciesPresent();
1097     }
1098 
1099     /**
1100      * Indicates if any constraints are present on this model element.
1101      * @see ModelElementFacade#isConstraintsPresent()
1102      */
1103     public boolean isConstraintsPresent()
1104     {
1105         return this.getSuperEntityAttribute().isConstraintsPresent();
1106     }
1107 
1108     /**
1109      * Indicates if any documentation is present on this model element.
1110      * @see ModelElementFacade#isDocumentationPresent()
1111      */
1112     public boolean isDocumentationPresent()
1113     {
1114         return this.getSuperEntityAttribute().isDocumentationPresent();
1115     }
1116 
1117     /**
1118      * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1119      * @see ModelElementFacade#isReservedWord()
1120      */
1121     public boolean isReservedWord()
1122     {
1123         return this.getSuperEntityAttribute().isReservedWord();
1124     }
1125 
1126     /**
1127      * True is there are template parameters on this model element. For UML2, applies to Class,
1128      * Operation, Property, and Parameter.
1129      * @see ModelElementFacade#isTemplateParametersPresent()
1130      */
1131     public boolean isTemplateParametersPresent()
1132     {
1133         return this.getSuperEntityAttribute().isTemplateParametersPresent();
1134     }
1135 
1136     /**
1137      * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1138      * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1139      * Enumerations and Interfaces, optionally applies on other model elements.
1140      * @see ModelElementFacade#isValidIdentifierName()
1141      */
1142     public boolean isValidIdentifierName()
1143     {
1144         return this.getSuperEntityAttribute().isValidIdentifierName();
1145     }
1146 
1147     /**
1148      * Searches for the constraint with the specified 'name' on this model element, and if found
1149      * translates it using the specified 'translation' from a translation library discovered by the
1150      * framework.
1151      * @see ModelElementFacade#translateConstraint(String name, String translation)
1152      */
1153     public String translateConstraint(String name, String translation)
1154     {
1155         return this.getSuperEntityAttribute().translateConstraint(name, translation);
1156     }
1157 
1158     /**
1159      * Translates all constraints belonging to this model element with the given 'translation'.
1160      * @see ModelElementFacade#translateConstraints(String translation)
1161      */
1162     public String[] translateConstraints(String translation)
1163     {
1164         return this.getSuperEntityAttribute().translateConstraints(translation);
1165     }
1166 
1167     /**
1168      * Translates the constraints of the specified 'kind' belonging to this model element.
1169      * @see ModelElementFacade#translateConstraints(String kind, String translation)
1170      */
1171     public String[] translateConstraints(String kind, String translation)
1172     {
1173         return this.getSuperEntityAttribute().translateConstraints(kind, translation);
1174     }
1175 
1176     /**
1177      * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1178      */
1179     @Override
1180     public void initialize()
1181     {
1182         this.getSuperEntityAttribute().initialize();
1183     }
1184 
1185     /**
1186      * @return Object getSuperEntityAttribute().getValidationOwner()
1187      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1188      */
1189     @Override
1190     public Object getValidationOwner()
1191     {
1192         Object owner = this.getSuperEntityAttribute().getValidationOwner();
1193         return owner;
1194     }
1195 
1196     /**
1197      * @return String getSuperEntityAttribute().getValidationName()
1198      * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1199      */
1200     @Override
1201     public String getValidationName()
1202     {
1203         String name = this.getSuperEntityAttribute().getValidationName();
1204         return name;
1205     }
1206 
1207     /**
1208      * @param validationMessages Collection<ModelValidationMessage>
1209      * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1210      */
1211     @Override
1212     public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1213     {
1214         this.getSuperEntityAttribute().validateInvariants(validationMessages);
1215     }
1216 
1217     /**
1218      * The property that stores the name of the metafacade.
1219      */
1220     private static final String NAME_PROPERTY = "name";
1221     private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1222 
1223     /**
1224      * @see Object#toString()
1225      */
1226     @Override
1227     public String toString()
1228     {
1229         final StringBuilder toString = new StringBuilder(this.getClass().getName());
1230         toString.append("[");
1231         try
1232         {
1233             toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1234         }
1235         catch (final Throwable tryAgain)
1236         {
1237             try
1238             {
1239                 toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1240             }
1241             catch (final Throwable ignore)
1242             {
1243                 // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1244             }
1245         }
1246         toString.append("]");
1247         return toString.toString();
1248     }
1249 }