001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.bpm4struts.metafacades;
006
007import java.util.Collection;
008import org.andromda.core.common.Introspector;
009import org.andromda.core.metafacade.MetafacadeBase;
010import org.andromda.core.metafacade.MetafacadeFactory;
011import org.andromda.core.metafacade.ModelValidationMessage;
012import org.andromda.metafacades.uml.ClassifierFacade;
013import org.andromda.metafacades.uml.ConstraintFacade;
014import org.andromda.metafacades.uml.DependencyFacade;
015import org.andromda.metafacades.uml.EnumerationFacade;
016import org.andromda.metafacades.uml.ManageableEntityAttribute;
017import org.andromda.metafacades.uml.ModelElementFacade;
018import org.andromda.metafacades.uml.ModelFacade;
019import org.andromda.metafacades.uml.PackageFacade;
020import org.andromda.metafacades.uml.StateMachineFacade;
021import org.andromda.metafacades.uml.StereotypeFacade;
022import org.andromda.metafacades.uml.TaggedValueFacade;
023import org.andromda.metafacades.uml.TemplateParameterFacade;
024import org.andromda.metafacades.uml.TypeMappings;
025import org.andromda.translation.ocl.validation.OCLCollections;
026import org.andromda.translation.ocl.validation.OCLExpressions;
027import org.andromda.translation.ocl.validation.OCLIntrospector;
028import org.andromda.translation.ocl.validation.OCLResultEnsurer;
029import org.apache.log4j.Logger;
030
031/**
032 * TODO: Model Documentation for
033 * org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute
034 * MetafacadeLogic for StrutsManageableEntityAttribute
035 *
036 * @see StrutsManageableEntityAttribute
037 */
038public abstract class StrutsManageableEntityAttributeLogic
039    extends MetafacadeBase
040    implements StrutsManageableEntityAttribute
041{
042    /**
043     * The underlying UML object
044     * @see Object
045     */
046    protected Object metaObject;
047
048    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
049     * @param metaObjectIn
050     * @param context
051     */
052    protected StrutsManageableEntityAttributeLogic(Object metaObjectIn, String context)
053    {
054        super(metaObjectIn, getContext(context));
055        this.superManageableEntityAttribute =
056           (ManageableEntityAttribute)
057            MetafacadeFactory.getInstance().createFacadeImpl(
058                    "org.andromda.metafacades.uml.ManageableEntityAttribute",
059                    metaObjectIn,
060                    getContext(context));
061        this.metaObject = metaObjectIn;
062    }
063
064    /**
065     * The logger instance.
066     */
067    private static final Logger logger = Logger.getLogger(StrutsManageableEntityAttributeLogic.class);
068
069    /**
070     * Gets the context for this metafacade logic instance.
071     * @param context String. Set to StrutsManageableEntityAttribute if null
072     * @return context String
073     */
074    private static String getContext(String context)
075    {
076        if (context == null)
077        {
078            context = "org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute";
079        }
080        return context;
081    }
082
083    private ManageableEntityAttribute superManageableEntityAttribute;
084    private boolean superManageableEntityAttributeInitialized = false;
085
086    /**
087     * Gets the ManageableEntityAttribute parent instance.
088     * @return this.superManageableEntityAttribute ManageableEntityAttribute
089     */
090    private ManageableEntityAttribute getSuperManageableEntityAttribute()
091    {
092        if (!this.superManageableEntityAttributeInitialized)
093        {
094            ((MetafacadeBase)this.superManageableEntityAttribute).setMetafacadeContext(this.getMetafacadeContext());
095            this.superManageableEntityAttributeInitialized = true;
096        }
097        return this.superManageableEntityAttribute;
098    }
099
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.superManageableEntityAttributeInitialized)
112            {
113                ((MetafacadeBase)this.superManageableEntityAttribute).resetMetafacadeContext(context);
114            }
115        }
116    }
117
118    /**
119     * @return boolean true always
120     * @see StrutsManageableEntityAttribute
121     */
122    public boolean isStrutsManageableEntityAttributeMetaType()
123    {
124        return true;
125    }
126
127    // --------------- attributes ---------------------
128
129   /**
130    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#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.StrutsManageableEntityAttribute.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.StrutsManageableEntityAttribute#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.StrutsManageableEntityAttribute.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.StrutsManageableEntityAttribute#getDateFormat()
193    * @return String
194    */
195    protected abstract String handleGetDateFormat();
196
197    private String __dateFormat3a;
198    private boolean __dateFormat3aSet = false;
199
200    /**
201     * The String format to use when referring to this date, only makes sense when the type is a
202     * date type.
203     * @return (String)handleGetDateFormat()
204     */
205    public final String getDateFormat()
206    {
207        String dateFormat3a = this.__dateFormat3a;
208        if (!this.__dateFormat3aSet)
209        {
210            // dateFormat has no pre constraints
211            dateFormat3a = handleGetDateFormat();
212            // dateFormat has no post constraints
213            this.__dateFormat3a = dateFormat3a;
214            if (isMetafacadePropertyCachingEnabled())
215            {
216                this.__dateFormat3aSet = true;
217            }
218        }
219        return dateFormat3a;
220    }
221
222   /**
223    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#isNeedsFileUpload()
224    * @return boolean
225    */
226    protected abstract boolean handleIsNeedsFileUpload();
227
228    private boolean __needsFileUpload4a;
229    private boolean __needsFileUpload4aSet = false;
230
231    /**
232     * True if this attribute is of a type that cannot easily be represented as a textual string and
233     * would be an ideal candidate for HTTP's support for file-upload.
234     * @return (boolean)handleIsNeedsFileUpload()
235     */
236    public final boolean isNeedsFileUpload()
237    {
238        boolean needsFileUpload4a = this.__needsFileUpload4a;
239        if (!this.__needsFileUpload4aSet)
240        {
241            // needsFileUpload has no pre constraints
242            needsFileUpload4a = handleIsNeedsFileUpload();
243            // needsFileUpload has no post constraints
244            this.__needsFileUpload4a = needsFileUpload4a;
245            if (isMetafacadePropertyCachingEnabled())
246            {
247                this.__needsFileUpload4aSet = true;
248            }
249        }
250        return needsFileUpload4a;
251    }
252
253   /**
254    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#isHidden()
255    * @return boolean
256    */
257    protected abstract boolean handleIsHidden();
258
259    private boolean __hidden5a;
260    private boolean __hidden5aSet = false;
261
262    /**
263     * Whether or not this attribute should be hidden from the view
264     * @return (boolean)handleIsHidden()
265     */
266    public final boolean isHidden()
267    {
268        boolean hidden5a = this.__hidden5a;
269        if (!this.__hidden5aSet)
270        {
271            // hidden has no pre constraints
272            hidden5a = handleIsHidden();
273            // hidden has no post constraints
274            this.__hidden5a = hidden5a;
275            if (isMetafacadePropertyCachingEnabled())
276            {
277                this.__hidden5aSet = true;
278            }
279        }
280        return hidden5a;
281    }
282
283   /**
284    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#getWidgetType()
285    * @return String
286    */
287    protected abstract String handleGetWidgetType();
288
289    private String __widgetType6a;
290    private boolean __widgetType6aSet = false;
291
292    /**
293     * The widget to use when rendering this attribute
294     * @return (String)handleGetWidgetType()
295     */
296    public final String getWidgetType()
297    {
298        String widgetType6a = this.__widgetType6a;
299        if (!this.__widgetType6aSet)
300        {
301            // widgetType has no pre constraints
302            widgetType6a = handleGetWidgetType();
303            // widgetType has no post constraints
304            this.__widgetType6a = widgetType6a;
305            if (isMetafacadePropertyCachingEnabled())
306            {
307                this.__widgetType6aSet = true;
308            }
309        }
310        return widgetType6a;
311    }
312
313   /**
314    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#isStrictDateFormat()
315    * @return boolean
316    */
317    protected abstract boolean handleIsStrictDateFormat();
318
319    private boolean __strictDateFormat7a;
320    private boolean __strictDateFormat7aSet = false;
321
322    /**
323     * True if this field is a date type and the date format is not be interpreted strictly.
324     * @return (boolean)handleIsStrictDateFormat()
325     */
326    public final boolean isStrictDateFormat()
327    {
328        boolean strictDateFormat7a = this.__strictDateFormat7a;
329        if (!this.__strictDateFormat7aSet)
330        {
331            // strictDateFormat has no pre constraints
332            strictDateFormat7a = handleIsStrictDateFormat();
333            // strictDateFormat has no post constraints
334            this.__strictDateFormat7a = strictDateFormat7a;
335            if (isMetafacadePropertyCachingEnabled())
336            {
337                this.__strictDateFormat7aSet = true;
338            }
339        }
340        return strictDateFormat7a;
341    }
342
343   /**
344    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#getFieldRowCount()
345    * @return Integer
346    */
347    protected abstract Integer handleGetFieldRowCount();
348
349    private Integer __fieldRowCount8a;
350    private boolean __fieldRowCount8aSet = false;
351
352    /**
353     * The number of rows for this field, null if default browser value is desired.
354     * @return (Integer)handleGetFieldRowCount()
355     */
356    public final Integer getFieldRowCount()
357    {
358        Integer fieldRowCount8a = this.__fieldRowCount8a;
359        if (!this.__fieldRowCount8aSet)
360        {
361            // fieldRowCount has no pre constraints
362            fieldRowCount8a = handleGetFieldRowCount();
363            // fieldRowCount has no post constraints
364            this.__fieldRowCount8a = fieldRowCount8a;
365            if (isMetafacadePropertyCachingEnabled())
366            {
367                this.__fieldRowCount8aSet = true;
368            }
369        }
370        return fieldRowCount8a;
371    }
372
373   /**
374    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#getFieldColumnCount()
375    * @return Integer
376    */
377    protected abstract Integer handleGetFieldColumnCount();
378
379    private Integer __fieldColumnCount9a;
380    private boolean __fieldColumnCount9aSet = false;
381
382    /**
383     * The number of columns for this field, null if default browser value is desired.
384     * @return (Integer)handleGetFieldColumnCount()
385     */
386    public final Integer getFieldColumnCount()
387    {
388        Integer fieldColumnCount9a = this.__fieldColumnCount9a;
389        if (!this.__fieldColumnCount9aSet)
390        {
391            // fieldColumnCount has no pre constraints
392            fieldColumnCount9a = handleGetFieldColumnCount();
393            // fieldColumnCount has no post constraints
394            this.__fieldColumnCount9a = fieldColumnCount9a;
395            if (isMetafacadePropertyCachingEnabled())
396            {
397                this.__fieldColumnCount9aSet = true;
398            }
399        }
400        return fieldColumnCount9a;
401    }
402
403   /**
404    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#isSafeNamePresent()
405    * @return boolean
406    */
407    protected abstract boolean handleIsSafeNamePresent();
408
409    private boolean __safeNamePresent10a;
410    private boolean __safeNamePresent10aSet = false;
411
412    /**
413     * True if this parameter has a name that can properly be handled by Jakarta commons (this lib
414     * is used by Struts but contains a bug)
415     * @return (boolean)handleIsSafeNamePresent()
416     */
417    public final boolean isSafeNamePresent()
418    {
419        boolean safeNamePresent10a = this.__safeNamePresent10a;
420        if (!this.__safeNamePresent10aSet)
421        {
422            // safeNamePresent has no pre constraints
423            safeNamePresent10a = handleIsSafeNamePresent();
424            // safeNamePresent has no post constraints
425            this.__safeNamePresent10a = safeNamePresent10a;
426            if (isMetafacadePropertyCachingEnabled())
427            {
428                this.__safeNamePresent10aSet = true;
429            }
430        }
431        return safeNamePresent10a;
432    }
433
434   /**
435    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#getOnlineHelpKey()
436    * @return String
437    */
438    protected abstract String handleGetOnlineHelpKey();
439
440    private String __onlineHelpKey11a;
441    private boolean __onlineHelpKey11aSet = false;
442
443    /**
444     * The key to lookup the online help documentation. This documentation is gathered from the
445     * documentation entered by the user, as well as analyzing the model.
446     * @return (String)handleGetOnlineHelpKey()
447     */
448    public final String getOnlineHelpKey()
449    {
450        String onlineHelpKey11a = this.__onlineHelpKey11a;
451        if (!this.__onlineHelpKey11aSet)
452        {
453            // onlineHelpKey has no pre constraints
454            onlineHelpKey11a = handleGetOnlineHelpKey();
455            // onlineHelpKey has no post constraints
456            this.__onlineHelpKey11a = onlineHelpKey11a;
457            if (isMetafacadePropertyCachingEnabled())
458            {
459                this.__onlineHelpKey11aSet = true;
460            }
461        }
462        return onlineHelpKey11a;
463    }
464
465   /**
466    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsManageableEntityAttribute#getOnlineHelpValue()
467    * @return String
468    */
469    protected abstract String handleGetOnlineHelpValue();
470
471    private String __onlineHelpValue12a;
472    private boolean __onlineHelpValue12aSet = false;
473
474    /**
475     * The online help documentation. This documentation is gathered from the documentation entered
476     * by the user, as well as analyzing the model. The format is HTML without any style.
477     * @return (String)handleGetOnlineHelpValue()
478     */
479    public final String getOnlineHelpValue()
480    {
481        String onlineHelpValue12a = this.__onlineHelpValue12a;
482        if (!this.__onlineHelpValue12aSet)
483        {
484            // onlineHelpValue has no pre constraints
485            onlineHelpValue12a = handleGetOnlineHelpValue();
486            // onlineHelpValue has no post constraints
487            this.__onlineHelpValue12a = onlineHelpValue12a;
488            if (isMetafacadePropertyCachingEnabled())
489            {
490                this.__onlineHelpValue12aSet = true;
491            }
492        }
493        return onlineHelpValue12a;
494    }
495
496    /**
497     * @return true
498     * @see ManageableEntityAttribute
499     */
500    public boolean isManageableEntityAttributeMetaType()
501    {
502        return true;
503    }
504
505    /**
506     * @return true
507     * @see org.andromda.metafacades.uml.EntityAttribute
508     */
509    public boolean isEntityAttributeMetaType()
510    {
511        return true;
512    }
513
514    /**
515     * @return true
516     * @see org.andromda.metafacades.uml.AttributeFacade
517     */
518    public boolean isAttributeFacadeMetaType()
519    {
520        return true;
521    }
522
523    /**
524     * @return true
525     * @see ModelElementFacade
526     */
527    public boolean isModelElementFacadeMetaType()
528    {
529        return true;
530    }
531
532    // ----------- delegates to ManageableEntityAttribute ------------
533    /**
534     * Searches the given feature for the specified tag.
535     * If the follow boolean is set to true then the search will continue from the class attribute
536     * to the class itself and then up the class hierarchy.
537     * @see org.andromda.metafacades.uml.AttributeFacade#findTaggedValue(String name, boolean follow)
538     */
539    public Object findTaggedValue(String name, boolean follow)
540    {
541        return this.getSuperManageableEntityAttribute().findTaggedValue(name, follow);
542    }
543
544    /**
545     * The default value of the attribute.  This is the value given if no value is defined.
546     * @see org.andromda.metafacades.uml.AttributeFacade#getDefaultValue()
547     */
548    public String getDefaultValue()
549    {
550        return this.getSuperManageableEntityAttribute().getDefaultValue();
551    }
552
553    /**
554     * If the attribute is an enumeration literal this represents the owning enumeration. Can be
555     * empty.
556     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumeration()
557     */
558    public EnumerationFacade getEnumeration()
559    {
560        return this.getSuperManageableEntityAttribute().getEnumeration();
561    }
562
563    /**
564     * Returns the enumeration literal parameters defined by tagged value as a comma separated list.
565     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationLiteralParameters()
566     */
567    public String getEnumerationLiteralParameters()
568    {
569        return this.getSuperManageableEntityAttribute().getEnumerationLiteralParameters();
570    }
571
572    /**
573     * The value for this attribute if it is an enumeration literal, null otherwise. The default
574     * value is returned as a String if it has been specified, if it's not specified this
575     * attribute's name is assumed.
576     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationValue()
577     */
578    public String getEnumerationValue()
579    {
580        return this.getSuperManageableEntityAttribute().getEnumerationValue();
581    }
582
583    /**
584     * The name of the accessor operation that would retrieve this attribute's value.
585     * @see org.andromda.metafacades.uml.AttributeFacade#getGetterName()
586     */
587    public String getGetterName()
588    {
589        return this.getSuperManageableEntityAttribute().getGetterName();
590    }
591
592    /**
593     * The name of the type that is returned on the accessor and mutator operations,  determined in
594     * part by the multiplicity.
595     * @see org.andromda.metafacades.uml.AttributeFacade#getGetterSetterTypeName()
596     */
597    public String getGetterSetterTypeName()
598    {
599        return this.getSuperManageableEntityAttribute().getGetterSetterTypeName();
600    }
601
602    /**
603     * the lower value for the multiplicity
604     * -only applicable for UML2
605     * @see org.andromda.metafacades.uml.AttributeFacade#getLower()
606     */
607    public int getLower()
608    {
609        return this.getSuperManageableEntityAttribute().getLower();
610    }
611
612    /**
613     * Gets the classifier who is the owner of the attributes.
614     * @see org.andromda.metafacades.uml.AttributeFacade#getOwner()
615     */
616    public ClassifierFacade getOwner()
617    {
618        return this.getSuperManageableEntityAttribute().getOwner();
619    }
620
621    /**
622     * The name of the mutator operation that would retrieve this attribute's value.
623     * @see org.andromda.metafacades.uml.AttributeFacade#getSetterName()
624     */
625    public String getSetterName()
626    {
627        return this.getSuperManageableEntityAttribute().getSetterName();
628    }
629
630    /**
631     * The classifier owning this attribute.
632     * @see org.andromda.metafacades.uml.AttributeFacade#getType()
633     */
634    public ClassifierFacade getType()
635    {
636        return this.getSuperManageableEntityAttribute().getType();
637    }
638
639    /**
640     * the upper value for the multiplicity (will be -1 for *)
641     * -only applicable for UML2
642     * @see org.andromda.metafacades.uml.AttributeFacade#getUpper()
643     */
644    public int getUpper()
645    {
646        return this.getSuperManageableEntityAttribute().getUpper();
647    }
648
649    /**
650     * True if this attribute can only be set.
651     * @see org.andromda.metafacades.uml.AttributeFacade#isAddOnly()
652     */
653    public boolean isAddOnly()
654    {
655        return this.getSuperManageableEntityAttribute().isAddOnly();
656    }
657
658    /**
659     * True if this attribute can be modified.
660     * @see org.andromda.metafacades.uml.AttributeFacade#isChangeable()
661     */
662    public boolean isChangeable()
663    {
664        return this.getSuperManageableEntityAttribute().isChangeable();
665    }
666
667    /**
668     * Indicates if the default value is present.
669     * @see org.andromda.metafacades.uml.AttributeFacade#isDefaultValuePresent()
670     */
671    public boolean isDefaultValuePresent()
672    {
673        return this.getSuperManageableEntityAttribute().isDefaultValuePresent();
674    }
675
676    /**
677     * If the attribute is derived (its value is computed). UML2 only. UML14 always returns false.
678     * Default=false.
679     * @see org.andromda.metafacades.uml.AttributeFacade#isDerived()
680     */
681    public boolean isDerived()
682    {
683        return this.getSuperManageableEntityAttribute().isDerived();
684    }
685
686    /**
687     * True if this attribute is owned by an enumeration.
688     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteral()
689     */
690    public boolean isEnumerationLiteral()
691    {
692        return this.getSuperManageableEntityAttribute().isEnumerationLiteral();
693    }
694
695    /**
696     * Returns true if enumeration literal parameters exist (defined by tagged value) for the
697     * literal.
698     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteralParametersExist()
699     */
700    public boolean isEnumerationLiteralParametersExist()
701    {
702        return this.getSuperManageableEntityAttribute().isEnumerationLiteralParametersExist();
703    }
704
705    /**
706     * True if this attribute is owned by an enumeration but is defined as a member variable (NOT a
707     * literal).
708     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationMember()
709     */
710    public boolean isEnumerationMember()
711    {
712        return this.getSuperManageableEntityAttribute().isEnumerationMember();
713    }
714
715    /**
716     * IsLeaf property in the operation. If true, operation is final, cannot be extended or
717     * implemented by a descendant.
718     * @see org.andromda.metafacades.uml.AttributeFacade#isLeaf()
719     */
720    public boolean isLeaf()
721    {
722        return this.getSuperManageableEntityAttribute().isLeaf();
723    }
724
725    /**
726     * Whether or not this attribute has a multiplicity greater than 1.
727     * @see org.andromda.metafacades.uml.AttributeFacade#isMany()
728     */
729    public boolean isMany()
730    {
731        return this.getSuperManageableEntityAttribute().isMany();
732    }
733
734    /**
735     * Indicates whether or not the attributes are ordered (if multiplicity is greater than 1).
736     * @see org.andromda.metafacades.uml.AttributeFacade#isOrdered()
737     */
738    public boolean isOrdered()
739    {
740        return this.getSuperManageableEntityAttribute().isOrdered();
741    }
742
743    /**
744     * Whether or not this attribute can be modified.
745     * @see org.andromda.metafacades.uml.AttributeFacade#isReadOnly()
746     */
747    public boolean isReadOnly()
748    {
749        return this.getSuperManageableEntityAttribute().isReadOnly();
750    }
751
752    /**
753     * Whether or not the multiplicity of this attribute is 1.
754     * @see org.andromda.metafacades.uml.AttributeFacade#isRequired()
755     */
756    public boolean isRequired()
757    {
758        return this.getSuperManageableEntityAttribute().isRequired();
759    }
760
761    /**
762     * Indicates if this attribute is 'static', meaning it has a classifier scope.
763     * @see org.andromda.metafacades.uml.AttributeFacade#isStatic()
764     */
765    public boolean isStatic()
766    {
767        return this.getSuperManageableEntityAttribute().isStatic();
768    }
769
770    /**
771     * If the attribute is unique within the Collection type. UML2 only. UML14 always returns false.
772     * Unique+Ordered determines the implementation Collection type. Default=false.
773     * @see org.andromda.metafacades.uml.AttributeFacade#isUnique()
774     */
775    public boolean isUnique()
776    {
777        return this.getSuperManageableEntityAttribute().isUnique();
778    }
779
780    /**
781     * The name of the index to create on a column that persists the entity attribute.
782     * @see org.andromda.metafacades.uml.EntityAttribute#getColumnIndex()
783     */
784    public String getColumnIndex()
785    {
786        return this.getSuperManageableEntityAttribute().getColumnIndex();
787    }
788
789    /**
790     * The length of the column that persists this entity attribute.
791     * @see org.andromda.metafacades.uml.EntityAttribute#getColumnLength()
792     */
793    public String getColumnLength()
794    {
795        return this.getSuperManageableEntityAttribute().getColumnLength();
796    }
797
798    /**
799     * The name of the table column to which this entity is mapped.
800     * @see org.andromda.metafacades.uml.EntityAttribute#getColumnName()
801     */
802    public String getColumnName()
803    {
804        return this.getSuperManageableEntityAttribute().getColumnName();
805    }
806
807    /**
808     * The PIM to language specific mappings for JDBC.
809     * @see org.andromda.metafacades.uml.EntityAttribute#getJdbcMappings()
810     */
811    public TypeMappings getJdbcMappings()
812    {
813        return this.getSuperManageableEntityAttribute().getJdbcMappings();
814    }
815
816    /**
817     * The JDBC type for this entity attribute.
818     * @see org.andromda.metafacades.uml.EntityAttribute#getJdbcType()
819     */
820    public String getJdbcType()
821    {
822        return this.getSuperManageableEntityAttribute().getJdbcType();
823    }
824
825    /**
826     * The SQL mappings (i.e. the mappings which provide PIM to SQL mappings).
827     * @see org.andromda.metafacades.uml.EntityAttribute#getSqlMappings()
828     */
829    public TypeMappings getSqlMappings()
830    {
831        return this.getSuperManageableEntityAttribute().getSqlMappings();
832    }
833
834    /**
835     * The SQL type for this attribute.
836     * @see org.andromda.metafacades.uml.EntityAttribute#getSqlType()
837     */
838    public String getSqlType()
839    {
840        return this.getSuperManageableEntityAttribute().getSqlType();
841    }
842
843    /**
844     * The name of the unique-key that this unique attribute belongs
845     * @see org.andromda.metafacades.uml.EntityAttribute#getUniqueGroup()
846     */
847    public String getUniqueGroup()
848    {
849        return this.getSuperManageableEntityAttribute().getUniqueGroup();
850    }
851
852    /**
853     * True if this attribute is an identifier for its entity.
854     * @see org.andromda.metafacades.uml.EntityAttribute#isIdentifier()
855     */
856    public boolean isIdentifier()
857    {
858        return this.getSuperManageableEntityAttribute().isIdentifier();
859    }
860
861    /**
862     * Indicates this attribute should be ignored by the persistence layer.
863     * @see org.andromda.metafacades.uml.EntityAttribute#isTransient()
864     */
865    public boolean isTransient()
866    {
867        return this.getSuperManageableEntityAttribute().isTransient();
868    }
869
870    /**
871     * Whether or not this attribute should be displayed.
872     * @see ManageableEntityAttribute#isDisplay()
873     */
874    public boolean isDisplay()
875    {
876        return this.getSuperManageableEntityAttribute().isDisplay();
877    }
878
879    /**
880     * Whether or not this attribute can be read in a call isolated from the rest (for example when
881     * downloading binary fields).
882     * @see ManageableEntityAttribute#isManageableGetterAvailable()
883     */
884    public boolean isManageableGetterAvailable()
885    {
886        return this.getSuperManageableEntityAttribute().isManageableGetterAvailable();
887    }
888
889    /**
890     * Copies all tagged values from the given ModelElementFacade to this model element facade.
891     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
892     */
893    public void copyTaggedValues(ModelElementFacade element)
894    {
895        this.getSuperManageableEntityAttribute().copyTaggedValues(element);
896    }
897
898    /**
899     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
900     * one found will be returned.
901     * @see ModelElementFacade#findTaggedValue(String tagName)
902     */
903    public Object findTaggedValue(String tagName)
904    {
905        return this.getSuperManageableEntityAttribute().findTaggedValue(tagName);
906    }
907
908    /**
909     * Returns all the values for the tagged value with the specified name. The returned collection
910     * will contains only String instances, or will be empty. Never null.
911     * @see ModelElementFacade#findTaggedValues(String tagName)
912     */
913    public Collection<Object> findTaggedValues(String tagName)
914    {
915        return this.getSuperManageableEntityAttribute().findTaggedValues(tagName);
916    }
917
918    /**
919     * Returns the fully qualified name of the model element. The fully qualified name includes
920     * complete package qualified name of the underlying model element. The templates parameter will
921     * be replaced by the correct one given the binding relation of the parameter to this element.
922     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
923     */
924    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
925    {
926        return this.getSuperManageableEntityAttribute().getBindedFullyQualifiedName(bindedElement);
927    }
928
929    /**
930     * Gets all constraints belonging to the model element.
931     * @see ModelElementFacade#getConstraints()
932     */
933    public Collection<ConstraintFacade> getConstraints()
934    {
935        return this.getSuperManageableEntityAttribute().getConstraints();
936    }
937
938    /**
939     * Returns the constraints of the argument kind that have been placed onto this model. Typical
940     * kinds are "inv", "pre" and "post". Other kinds are possible.
941     * @see ModelElementFacade#getConstraints(String kind)
942     */
943    public Collection<ConstraintFacade> getConstraints(String kind)
944    {
945        return this.getSuperManageableEntityAttribute().getConstraints(kind);
946    }
947
948    /**
949     * Gets the documentation for the model element, The indent argument is prefixed to each line.
950     * By default this method wraps lines after 64 characters.
951     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
952     * @see ModelElementFacade#getDocumentation(String indent)
953     */
954    public String getDocumentation(String indent)
955    {
956        return this.getSuperManageableEntityAttribute().getDocumentation(indent);
957    }
958
959    /**
960     * This method returns the documentation for this model element, with the lines wrapped after
961     * the specified number of characters, values of less than 1 will indicate no line wrapping is
962     * required. By default paragraphs are returned as HTML.
963     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
964     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
965     */
966    public String getDocumentation(String indent, int lineLength)
967    {
968        return this.getSuperManageableEntityAttribute().getDocumentation(indent, lineLength);
969    }
970
971    /**
972     * This method returns the documentation for this model element, with the lines wrapped after
973     * the specified number of characters, values of less than 1 will indicate no line wrapping is
974     * required. HTML style determines if HTML Escaping is applied.
975     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
976     */
977    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
978    {
979        return this.getSuperManageableEntityAttribute().getDocumentation(indent, lineLength, htmlStyle);
980    }
981
982    /**
983     * The fully qualified name of this model element.
984     * @see ModelElementFacade#getFullyQualifiedName()
985     */
986    public String getFullyQualifiedName()
987    {
988        return this.getSuperManageableEntityAttribute().getFullyQualifiedName();
989    }
990
991    /**
992     * Returns the fully qualified name of the model element. The fully qualified name includes
993     * complete package qualified name of the underlying model element.  If modelName is true, then
994     * the original name of the model element (the name contained within the model) will be the name
995     * returned, otherwise a name from a language mapping will be returned.
996     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
997     */
998    public String getFullyQualifiedName(boolean modelName)
999    {
1000        return this.getSuperManageableEntityAttribute().getFullyQualifiedName(modelName);
1001    }
1002
1003    /**
1004     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1005     * '/'.
1006     * @see ModelElementFacade#getFullyQualifiedNamePath()
1007     */
1008    public String getFullyQualifiedNamePath()
1009    {
1010        return this.getSuperManageableEntityAttribute().getFullyQualifiedNamePath();
1011    }
1012
1013    /**
1014     * Gets the unique identifier of the underlying model element.
1015     * @see ModelElementFacade#getId()
1016     */
1017    public String getId()
1018    {
1019        return this.getSuperManageableEntityAttribute().getId();
1020    }
1021
1022    /**
1023     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1024     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1025     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1026     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1027     * JDK5 compiler level.
1028     * @see ModelElementFacade#getKeywords()
1029     */
1030    public Collection<String> getKeywords()
1031    {
1032        return this.getSuperManageableEntityAttribute().getKeywords();
1033    }
1034
1035    /**
1036     * UML2: Retrieves a localized label for this named element.
1037     * @see ModelElementFacade#getLabel()
1038     */
1039    public String getLabel()
1040    {
1041        return this.getSuperManageableEntityAttribute().getLabel();
1042    }
1043
1044    /**
1045     * The language mappings that have been set for this model element.
1046     * @see ModelElementFacade#getLanguageMappings()
1047     */
1048    public TypeMappings getLanguageMappings()
1049    {
1050        return this.getSuperManageableEntityAttribute().getLanguageMappings();
1051    }
1052
1053    /**
1054     * Return the model containing this model element (multiple models may be loaded and processed
1055     * at the same time).
1056     * @see ModelElementFacade#getModel()
1057     */
1058    public ModelFacade getModel()
1059    {
1060        return this.getSuperManageableEntityAttribute().getModel();
1061    }
1062
1063    /**
1064     * The name of the model element.
1065     * @see ModelElementFacade#getName()
1066     */
1067    public String getName()
1068    {
1069        return this.getSuperManageableEntityAttribute().getName();
1070    }
1071
1072    /**
1073     * Gets the package to which this model element belongs.
1074     * @see ModelElementFacade#getPackage()
1075     */
1076    public ModelElementFacade getPackage()
1077    {
1078        return this.getSuperManageableEntityAttribute().getPackage();
1079    }
1080
1081    /**
1082     * The name of this model element's package.
1083     * @see ModelElementFacade#getPackageName()
1084     */
1085    public String getPackageName()
1086    {
1087        return this.getSuperManageableEntityAttribute().getPackageName();
1088    }
1089
1090    /**
1091     * Gets the package name (optionally providing the ability to retrieve the model name and not
1092     * the mapped name).
1093     * @see ModelElementFacade#getPackageName(boolean modelName)
1094     */
1095    public String getPackageName(boolean modelName)
1096    {
1097        return this.getSuperManageableEntityAttribute().getPackageName(modelName);
1098    }
1099
1100    /**
1101     * Returns the package as a path, the returned value always starts with out a slash '/'.
1102     * @see ModelElementFacade#getPackagePath()
1103     */
1104    public String getPackagePath()
1105    {
1106        return this.getSuperManageableEntityAttribute().getPackagePath();
1107    }
1108
1109    /**
1110     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1111     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1112     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1113     * the name of the NamedElement itself.
1114     * @see ModelElementFacade#getQualifiedName()
1115     */
1116    public String getQualifiedName()
1117    {
1118        return this.getSuperManageableEntityAttribute().getQualifiedName();
1119    }
1120
1121    /**
1122     * Gets the root package for the model element.
1123     * @see ModelElementFacade#getRootPackage()
1124     */
1125    public PackageFacade getRootPackage()
1126    {
1127        return this.getSuperManageableEntityAttribute().getRootPackage();
1128    }
1129
1130    /**
1131     * Gets the dependencies for which this model element is the source.
1132     * @see ModelElementFacade#getSourceDependencies()
1133     */
1134    public Collection<DependencyFacade> getSourceDependencies()
1135    {
1136        return this.getSuperManageableEntityAttribute().getSourceDependencies();
1137    }
1138
1139    /**
1140     * If this model element is the context of an activity graph, this represents that activity
1141     * graph.
1142     * @see ModelElementFacade#getStateMachineContext()
1143     */
1144    public StateMachineFacade getStateMachineContext()
1145    {
1146        return this.getSuperManageableEntityAttribute().getStateMachineContext();
1147    }
1148
1149    /**
1150     * The collection of ALL stereotype names for this model element.
1151     * @see ModelElementFacade#getStereotypeNames()
1152     */
1153    public Collection<String> getStereotypeNames()
1154    {
1155        return this.getSuperManageableEntityAttribute().getStereotypeNames();
1156    }
1157
1158    /**
1159     * Gets all stereotypes for this model element.
1160     * @see ModelElementFacade#getStereotypes()
1161     */
1162    public Collection<StereotypeFacade> getStereotypes()
1163    {
1164        return this.getSuperManageableEntityAttribute().getStereotypes();
1165    }
1166
1167    /**
1168     * Return the TaggedValues associated with this model element, under all stereotypes.
1169     * @see ModelElementFacade#getTaggedValues()
1170     */
1171    public Collection<TaggedValueFacade> getTaggedValues()
1172    {
1173        return this.getSuperManageableEntityAttribute().getTaggedValues();
1174    }
1175
1176    /**
1177     * Gets the dependencies for which this model element is the target.
1178     * @see ModelElementFacade#getTargetDependencies()
1179     */
1180    public Collection<DependencyFacade> getTargetDependencies()
1181    {
1182        return this.getSuperManageableEntityAttribute().getTargetDependencies();
1183    }
1184
1185    /**
1186     * Get the template parameter for this model element having the parameterName
1187     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1188     */
1189    public Object getTemplateParameter(String parameterName)
1190    {
1191        return this.getSuperManageableEntityAttribute().getTemplateParameter(parameterName);
1192    }
1193
1194    /**
1195     * Get the template parameters for this model element
1196     * @see ModelElementFacade#getTemplateParameters()
1197     */
1198    public Collection<TemplateParameterFacade> getTemplateParameters()
1199    {
1200        return this.getSuperManageableEntityAttribute().getTemplateParameters();
1201    }
1202
1203    /**
1204     * The visibility (i.e. public, private, protected or package) of the model element, will
1205     * attempt a lookup for these values in the language mappings (if any).
1206     * @see ModelElementFacade#getVisibility()
1207     */
1208    public String getVisibility()
1209    {
1210        return this.getSuperManageableEntityAttribute().getVisibility();
1211    }
1212
1213    /**
1214     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1215     * is taken into account when searching for the stereotype), false otherwise.
1216     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1217     */
1218    public boolean hasExactStereotype(String stereotypeName)
1219    {
1220        return this.getSuperManageableEntityAttribute().hasExactStereotype(stereotypeName);
1221    }
1222
1223    /**
1224     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1225     * pipe, semicolon, or << >>
1226     * @see ModelElementFacade#hasKeyword(String keywordName)
1227     */
1228    public boolean hasKeyword(String keywordName)
1229    {
1230        return this.getSuperManageableEntityAttribute().hasKeyword(keywordName);
1231    }
1232
1233    /**
1234     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1235     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1236     * one of the stereotype's ancestors has a matching name this method will return true, false
1237     * otherwise.
1238     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1239     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1240     * method with 'stereotypeName' defined as 'exception' the method would return true since
1241     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1242     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1243     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1244     */
1245    public boolean hasStereotype(String stereotypeName)
1246    {
1247        return this.getSuperManageableEntityAttribute().hasStereotype(stereotypeName);
1248    }
1249
1250    /**
1251     * True if there are target dependencies from this element that are instances of BindingFacade.
1252     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1253     * @see ModelElementFacade#isBindingDependenciesPresent()
1254     */
1255    public boolean isBindingDependenciesPresent()
1256    {
1257        return this.getSuperManageableEntityAttribute().isBindingDependenciesPresent();
1258    }
1259
1260    /**
1261     * Indicates if any constraints are present on this model element.
1262     * @see ModelElementFacade#isConstraintsPresent()
1263     */
1264    public boolean isConstraintsPresent()
1265    {
1266        return this.getSuperManageableEntityAttribute().isConstraintsPresent();
1267    }
1268
1269    /**
1270     * Indicates if any documentation is present on this model element.
1271     * @see ModelElementFacade#isDocumentationPresent()
1272     */
1273    public boolean isDocumentationPresent()
1274    {
1275        return this.getSuperManageableEntityAttribute().isDocumentationPresent();
1276    }
1277
1278    /**
1279     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1280     * @see ModelElementFacade#isReservedWord()
1281     */
1282    public boolean isReservedWord()
1283    {
1284        return this.getSuperManageableEntityAttribute().isReservedWord();
1285    }
1286
1287    /**
1288     * True is there are template parameters on this model element. For UML2, applies to Class,
1289     * Operation, Property, and Parameter.
1290     * @see ModelElementFacade#isTemplateParametersPresent()
1291     */
1292    public boolean isTemplateParametersPresent()
1293    {
1294        return this.getSuperManageableEntityAttribute().isTemplateParametersPresent();
1295    }
1296
1297    /**
1298     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1299     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1300     * Enumerations and Interfaces, optionally applies on other model elements.
1301     * @see ModelElementFacade#isValidIdentifierName()
1302     */
1303    public boolean isValidIdentifierName()
1304    {
1305        return this.getSuperManageableEntityAttribute().isValidIdentifierName();
1306    }
1307
1308    /**
1309     * Searches for the constraint with the specified 'name' on this model element, and if found
1310     * translates it using the specified 'translation' from a translation library discovered by the
1311     * framework.
1312     * @see ModelElementFacade#translateConstraint(String name, String translation)
1313     */
1314    public String translateConstraint(String name, String translation)
1315    {
1316        return this.getSuperManageableEntityAttribute().translateConstraint(name, translation);
1317    }
1318
1319    /**
1320     * Translates all constraints belonging to this model element with the given 'translation'.
1321     * @see ModelElementFacade#translateConstraints(String translation)
1322     */
1323    public String[] translateConstraints(String translation)
1324    {
1325        return this.getSuperManageableEntityAttribute().translateConstraints(translation);
1326    }
1327
1328    /**
1329     * Translates the constraints of the specified 'kind' belonging to this model element.
1330     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1331     */
1332    public String[] translateConstraints(String kind, String translation)
1333    {
1334        return this.getSuperManageableEntityAttribute().translateConstraints(kind, translation);
1335    }
1336
1337    /**
1338     * @see MetafacadeBase#initialize()
1339     */
1340    @Override
1341    public void initialize()
1342    {
1343        this.getSuperManageableEntityAttribute().initialize();
1344    }
1345
1346    /**
1347     * @return Object getSuperManageableEntityAttribute().getValidationOwner()
1348     * @see MetafacadeBase#getValidationOwner()
1349     */
1350    @Override
1351    public Object getValidationOwner()
1352    {
1353        Object owner = this.getSuperManageableEntityAttribute().getValidationOwner();
1354        return owner;
1355    }
1356
1357    /**
1358     * @return String getSuperManageableEntityAttribute().getValidationName()
1359     * @see MetafacadeBase#getValidationName()
1360     */
1361    @Override
1362    public String getValidationName()
1363    {
1364        String name = this.getSuperManageableEntityAttribute().getValidationName();
1365        return name;
1366    }
1367
1368    /**
1369     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::required fields may not be hidden</p>
1370     * <p><b>Error:</b> Required fields may not be hidden, unless they are auto-generated identifiers.</p>
1371     * <p><b>OCL:</b> context StrutsManageableEntityAttribute inv: 
1372(required and not (identifier and owner.dynamicIdentifiersPresent)) implies not hidden</p>
1373     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::widget type cannot be arbitrary</p>
1374     * <p><b>Error:</b> Only text, textarea and hidden widgets are supported, please select another one or let the cartridge decide by not specifying anything.</p>
1375     * <p><b>OCL:</b> context StrutsManageableEntityAttribute inv: widgetType->notEmpty() implies 
1376(widgetType = 'text' or widgetType = 'textarea' or widgetType = 'hidden')</p>
1377     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER</p>
1378     * <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>
1379     * <p><b>OCL:</b> context StrutsAttribute inv: safeNamePresent</p>
1380     * @param validationMessages Collection<ModelValidationMessage>
1381     * @see MetafacadeBase#validateInvariants(Collection validationMessages)
1382     */
1383    @Override
1384    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1385    {
1386        this.getSuperManageableEntityAttribute().validateInvariants(validationMessages);
1387        try
1388        {
1389            final Object contextElement = this.THIS();
1390            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"required"))).booleanValue()&&!(Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"identifier"))).booleanValue()&&Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"owner.dynamicIdentifiersPresent"))).booleanValue())))).booleanValue()?Boolean.valueOf(String.valueOf(!Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"hidden"))).booleanValue())).booleanValue():true));
1391            if (!constraintValid)
1392            {
1393                validationMessages.add(
1394                    new ModelValidationMessage(
1395                        (MetafacadeBase)contextElement ,
1396                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::required fields may not be hidden",
1397                        "Required fields may not be hidden, unless they are auto-generated identifiers."));
1398            }
1399        }
1400        catch (Throwable th)
1401        {
1402            Throwable cause = th.getCause();
1403            int depth = 0; // Some throwables have infinite recursion
1404            while (cause != null && depth < 7)
1405            {
1406                th = cause;
1407                depth++;
1408            }
1409            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::required fields may not be hidden' ON "
1410                + this.THIS().toString() + ": " + th.getMessage(), th);
1411        }
1412        try
1413        {
1414            final Object contextElement = this.THIS();
1415            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"widgetType")))).booleanValue()?(OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"widgetType"),"text")||OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"widgetType"),"textarea")||OCLExpressions.equal(OCLIntrospector.invoke(contextElement,"widgetType"),"hidden")):true));
1416            if (!constraintValid)
1417            {
1418                validationMessages.add(
1419                    new ModelValidationMessage(
1420                        (MetafacadeBase)contextElement ,
1421                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::widget type cannot be arbitrary",
1422                        "Only text, textarea and hidden widgets are supported, please select another one or let the cartridge decide by not specifying anything."));
1423            }
1424        }
1425        catch (Throwable th)
1426        {
1427            Throwable cause = th.getCause();
1428            int depth = 0; // Some throwables have infinite recursion
1429            while (cause != null && depth < 7)
1430            {
1431                th = cause;
1432                depth++;
1433            }
1434            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::widget type cannot be arbitrary' ON "
1435                + this.THIS().toString() + ": " + th.getMessage(), th);
1436        }
1437        try
1438        {
1439            final Object contextElement = this.THIS();
1440            boolean constraintValid = OCLResultEnsurer.ensure(OCLIntrospector.invoke(contextElement,"safeNamePresent"));
1441            if (!constraintValid)
1442            {
1443                validationMessages.add(
1444                    new ModelValidationMessage(
1445                        (MetafacadeBase)contextElement ,
1446                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER",
1447                        "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."));
1448            }
1449        }
1450        catch (Throwable th)
1451        {
1452            Throwable cause = th.getCause();
1453            int depth = 0; // Some throwables have infinite recursion
1454            while (cause != null && depth < 7)
1455            {
1456                th = cause;
1457                depth++;
1458            }
1459            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsManageableEntityAttribute::SAFE NAME - TO BE REMOVED LATER' ON "
1460                + this.THIS().toString() + ": " + th.getMessage(), th);
1461        }
1462    }
1463
1464    /**
1465     * The property that stores the name of the metafacade.
1466     */
1467    private static final String NAME_PROPERTY = "name";
1468    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1469
1470    /**
1471     * @see Object#toString()
1472     */
1473    @Override
1474    public String toString()
1475    {
1476        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1477        toString.append("[");
1478        try
1479        {
1480            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1481        }
1482        catch (final Throwable tryAgain)
1483        {
1484            try
1485            {
1486                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1487            }
1488            catch (final Throwable ignore)
1489            {
1490                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1491            }
1492        }
1493        toString.append("]");
1494        return toString.toString();
1495    }
1496}