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