001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.ejb3.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.EntityAttribute;
016import org.andromda.metafacades.uml.EnumerationFacade;
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;
025
026/**
027 * Represents an EJB attribute.
028 * MetafacadeLogic for EJB3EntityAttributeFacade
029 *
030 * @see EJB3EntityAttributeFacade
031 */
032public abstract class EJB3EntityAttributeFacadeLogic
033    extends MetafacadeBase
034    implements EJB3EntityAttributeFacade
035{
036    /**
037     * The underlying UML object
038     * @see Object
039     */
040    protected Object metaObject;
041
042    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
043     * @param metaObjectIn
044     * @param context
045     */
046    protected EJB3EntityAttributeFacadeLogic(Object metaObjectIn, String context)
047    {
048        super(metaObjectIn, getContext(context));
049        this.superEntityAttribute =
050           (EntityAttribute)
051            MetafacadeFactory.getInstance().createFacadeImpl(
052                    "org.andromda.metafacades.uml.EntityAttribute",
053                    metaObjectIn,
054                    getContext(context));
055        this.metaObject = metaObjectIn;
056    }
057
058    /**
059     * Gets the context for this metafacade logic instance.
060     * @param context String. Set to EJB3EntityAttributeFacade if null
061     * @return context String
062     */
063    private static String getContext(String context)
064    {
065        if (context == null)
066        {
067            context = "org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade";
068        }
069        return context;
070    }
071
072    private EntityAttribute superEntityAttribute;
073    private boolean superEntityAttributeInitialized = false;
074
075    /**
076     * Gets the EntityAttribute parent instance.
077     * @return this.superEntityAttribute EntityAttribute
078     */
079    private EntityAttribute getSuperEntityAttribute()
080    {
081        if (!this.superEntityAttributeInitialized)
082        {
083            ((MetafacadeBase)this.superEntityAttribute).setMetafacadeContext(this.getMetafacadeContext());
084            this.superEntityAttributeInitialized = true;
085        }
086        return this.superEntityAttribute;
087    }
088
089    /** Reset context only for non-root metafacades
090     * @param context
091     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
092     */
093    @Override
094    public void resetMetafacadeContext(String context)
095    {
096        if (!this.contextRoot) // reset context only for non-root metafacades
097        {
098            context = getContext(context);  // to have same value as in original constructor call
099            setMetafacadeContext (context);
100            if (this.superEntityAttributeInitialized)
101            {
102                ((MetafacadeBase)this.superEntityAttribute).resetMetafacadeContext(context);
103            }
104        }
105    }
106
107    /**
108     * @return boolean true always
109     * @see EJB3EntityAttributeFacade
110     */
111    public boolean isEJB3EntityAttributeFacadeMetaType()
112    {
113        return true;
114    }
115
116    // --------------- attributes ---------------------
117
118   /**
119    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getFetchType()
120    * @return String
121    */
122    protected abstract String handleGetFetchType();
123
124    private String __fetchType1a;
125    private boolean __fetchType1aSet = false;
126
127    /**
128     * Gets the fetch type for this attribute.  Default fetch type for attribute is EAGER.
129     * This will return either EAGER or LAZY.
130     * @return (String)handleGetFetchType()
131     */
132    public final String getFetchType()
133    {
134        String fetchType1a = this.__fetchType1a;
135        if (!this.__fetchType1aSet)
136        {
137            // fetchType has no pre constraints
138            fetchType1a = handleGetFetchType();
139            // fetchType has no post constraints
140            this.__fetchType1a = fetchType1a;
141            if (isMetafacadePropertyCachingEnabled())
142            {
143                this.__fetchType1aSet = true;
144            }
145        }
146        return fetchType1a;
147    }
148
149   /**
150    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isVersion()
151    * @return boolean
152    */
153    protected abstract boolean handleIsVersion();
154
155    private boolean __version2a;
156    private boolean __version2aSet = false;
157
158    /**
159     * True is this attribute is a version property (optimistic lock value) for this entity class.
160     * @return (boolean)handleIsVersion()
161     */
162    public final boolean isVersion()
163    {
164        boolean version2a = this.__version2a;
165        if (!this.__version2aSet)
166        {
167            // version has no pre constraints
168            version2a = handleIsVersion();
169            // version has no post constraints
170            this.__version2a = version2a;
171            if (isMetafacadePropertyCachingEnabled())
172            {
173                this.__version2aSet = true;
174            }
175        }
176        return version2a;
177    }
178
179   /**
180    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isLob()
181    * @return boolean
182    */
183    protected abstract boolean handleIsLob();
184
185    private boolean __lob3a;
186    private boolean __lob3aSet = false;
187
188    /**
189     * Returns true if the property type is specified as datatype::Blob or datatype::Clob.
190     * LOB type is CLOB for characters or BLOB for binary data.
191     * @return (boolean)handleIsLob()
192     */
193    public final boolean isLob()
194    {
195        boolean lob3a = this.__lob3a;
196        if (!this.__lob3aSet)
197        {
198            // lob has no pre constraints
199            lob3a = handleIsLob();
200            // lob has no post constraints
201            this.__lob3a = lob3a;
202            if (isMetafacadePropertyCachingEnabled())
203            {
204                this.__lob3aSet = true;
205            }
206        }
207        return lob3a;
208    }
209
210   /**
211    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorType()
212    * @return String
213    */
214    protected abstract String handleGetGeneratorType();
215
216    private String __generatorType4a;
217    private boolean __generatorType4aSet = false;
218
219    /**
220     * Determine the generator type for the Id annotation on the entity attribute - the PK strategy.
221     * If the attribute type is numeric, the default generator type is AUTO.  Otherwise, the
222     * generator type is NONE, ie for String types.
223     * @return (String)handleGetGeneratorType()
224     */
225    public final String getGeneratorType()
226    {
227        String generatorType4a = this.__generatorType4a;
228        if (!this.__generatorType4aSet)
229        {
230            // generatorType has no pre constraints
231            generatorType4a = handleGetGeneratorType();
232            // generatorType has no post constraints
233            this.__generatorType4a = generatorType4a;
234            if (isMetafacadePropertyCachingEnabled())
235            {
236                this.__generatorType4aSet = true;
237            }
238        }
239        return generatorType4a;
240    }
241
242   /**
243    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getColumnDefinition()
244    * @return String
245    */
246    protected abstract String handleGetColumnDefinition();
247
248    private String __columnDefinition5a;
249    private boolean __columnDefinition5aSet = false;
250
251    /**
252     * Defines the column definition DDL used when creating table schema - use to override default
253     * container DDL.  This is automatically defined if the attribute type is an enumeration.
254     * @return (String)handleGetColumnDefinition()
255     */
256    public final String getColumnDefinition()
257    {
258        String columnDefinition5a = this.__columnDefinition5a;
259        if (!this.__columnDefinition5aSet)
260        {
261            // columnDefinition has no pre constraints
262            columnDefinition5a = handleGetColumnDefinition();
263            // columnDefinition has no post constraints
264            this.__columnDefinition5a = columnDefinition5a;
265            if (isMetafacadePropertyCachingEnabled())
266            {
267                this.__columnDefinition5aSet = true;
268            }
269        }
270        return columnDefinition5a;
271    }
272
273   /**
274    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getColumnPrecision()
275    * @return String
276    */
277    protected abstract String handleGetColumnPrecision();
278
279    private String __columnPrecision6a;
280    private boolean __columnPrecision6aSet = false;
281
282    /**
283     * Set the column precision value.  Only applies to double and float columns.
284     * ie Use for setting dollar precision.
285     * @return (String)handleGetColumnPrecision()
286     */
287    public final String getColumnPrecision()
288    {
289        String columnPrecision6a = this.__columnPrecision6a;
290        if (!this.__columnPrecision6aSet)
291        {
292            // columnPrecision has no pre constraints
293            columnPrecision6a = handleGetColumnPrecision();
294            // columnPrecision has no post constraints
295            this.__columnPrecision6a = columnPrecision6a;
296            if (isMetafacadePropertyCachingEnabled())
297            {
298                this.__columnPrecision6aSet = true;
299            }
300        }
301        return columnPrecision6a;
302    }
303
304   /**
305    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getColumnScale()
306    * @return String
307    */
308    protected abstract String handleGetColumnScale();
309
310    private String __columnScale7a;
311    private boolean __columnScale7aSet = false;
312
313    /**
314     * Column scale use denotes the decimal precision.
315     * ie Use to set the 2 digit cent scale.
316     * @return (String)handleGetColumnScale()
317     */
318    public final String getColumnScale()
319    {
320        String columnScale7a = this.__columnScale7a;
321        if (!this.__columnScale7aSet)
322        {
323            // columnScale has no pre constraints
324            columnScale7a = handleGetColumnScale();
325            // columnScale has no post constraints
326            this.__columnScale7a = columnScale7a;
327            if (isMetafacadePropertyCachingEnabled())
328            {
329                this.__columnScale7aSet = true;
330            }
331        }
332        return columnScale7a;
333    }
334
335   /**
336    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isColumnNullable()
337    * @return boolean
338    */
339    protected abstract boolean handleIsColumnNullable();
340
341    private boolean __columnNullable8a;
342    private boolean __columnNullable8aSet = false;
343
344    /**
345     * Whether the column can be nullable.  False for identifier and unique fields.  If
346     * andromda_persistence_column_nullable tag is set, the tagged value is used.  Otherwise,
347     * determine if this attribute is required from the multiplicity set on the attribute.
348     * @return (boolean)handleIsColumnNullable()
349     */
350    public final boolean isColumnNullable()
351    {
352        boolean columnNullable8a = this.__columnNullable8a;
353        if (!this.__columnNullable8aSet)
354        {
355            // columnNullable has no pre constraints
356            columnNullable8a = handleIsColumnNullable();
357            // columnNullable has no post constraints
358            this.__columnNullable8a = columnNullable8a;
359            if (isMetafacadePropertyCachingEnabled())
360            {
361                this.__columnNullable8aSet = true;
362            }
363        }
364        return columnNullable8a;
365    }
366
367   /**
368    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isEager()
369    * @return boolean
370    */
371    protected abstract boolean handleIsEager();
372
373    private boolean __eager9a;
374    private boolean __eager9aSet = false;
375
376    /**
377     * Determine if the fetch type for this attribute is eager loading.
378     * @return (boolean)handleIsEager()
379     */
380    public final boolean isEager()
381    {
382        boolean eager9a = this.__eager9a;
383        if (!this.__eager9aSet)
384        {
385            // eager has no pre constraints
386            eager9a = handleIsEager();
387            // eager has no post constraints
388            this.__eager9a = eager9a;
389            if (isMetafacadePropertyCachingEnabled())
390            {
391                this.__eager9aSet = true;
392            }
393        }
394        return eager9a;
395    }
396
397   /**
398    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isLazy()
399    * @return boolean
400    */
401    protected abstract boolean handleIsLazy();
402
403    private boolean __lazy10a;
404    private boolean __lazy10aSet = false;
405
406    /**
407     * Determine if the fetch type for this attribute is lazy loading.
408     * @return (boolean)handleIsLazy()
409     */
410    public final boolean isLazy()
411    {
412        boolean lazy10a = this.__lazy10a;
413        if (!this.__lazy10aSet)
414        {
415            // lazy has no pre constraints
416            lazy10a = handleIsLazy();
417            // lazy has no post constraints
418            this.__lazy10a = lazy10a;
419            if (isMetafacadePropertyCachingEnabled())
420            {
421                this.__lazy10aSet = true;
422            }
423        }
424        return lazy10a;
425    }
426
427   /**
428    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorName()
429    * @return String
430    */
431    protected abstract String handleGetGeneratorName();
432
433    private String __generatorName11a;
434    private boolean __generatorName11aSet = false;
435
436    /**
437     * Return the name for the generator, if one exists and should exists for SequenceGenerator and
438     * TableGenerator, which can be reference by the id for its generator.
439     * @return (String)handleGetGeneratorName()
440     */
441    public final String getGeneratorName()
442    {
443        String generatorName11a = this.__generatorName11a;
444        if (!this.__generatorName11aSet)
445        {
446            // generatorName has no pre constraints
447            generatorName11a = handleGetGeneratorName();
448            // generatorName has no post constraints
449            this.__generatorName11a = generatorName11a;
450            if (isMetafacadePropertyCachingEnabled())
451            {
452                this.__generatorName11aSet = true;
453            }
454        }
455        return generatorName11a;
456    }
457
458   /**
459    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorSourceName()
460    * @return String
461    */
462    protected abstract String handleGetGeneratorSourceName();
463
464    private String __generatorSourceName12a;
465    private boolean __generatorSourceName12aSet = false;
466
467    /**
468     * Returns the sequence name or table name for the generator depending on the generator type
469     * specified.
470     * @return (String)handleGetGeneratorSourceName()
471     */
472    public final String getGeneratorSourceName()
473    {
474        String generatorSourceName12a = this.__generatorSourceName12a;
475        if (!this.__generatorSourceName12aSet)
476        {
477            // generatorSourceName has no pre constraints
478            generatorSourceName12a = handleGetGeneratorSourceName();
479            // generatorSourceName has no post constraints
480            this.__generatorSourceName12a = generatorSourceName12a;
481            if (isMetafacadePropertyCachingEnabled())
482            {
483                this.__generatorSourceName12aSet = true;
484            }
485        }
486        return generatorSourceName12a;
487    }
488
489   /**
490    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorPkColumnValue()
491    * @return String
492    */
493    protected abstract String handleGetGeneratorPkColumnValue();
494
495    private String __generatorPkColumnValue13a;
496    private boolean __generatorPkColumnValue13aSet = false;
497
498    /**
499     * Returns the name of the primary key value in the generator table assigned to this set of
500     * generated values.
501     * @return (String)handleGetGeneratorPkColumnValue()
502     */
503    public final String getGeneratorPkColumnValue()
504    {
505        String generatorPkColumnValue13a = this.__generatorPkColumnValue13a;
506        if (!this.__generatorPkColumnValue13aSet)
507        {
508            // generatorPkColumnValue has no pre constraints
509            generatorPkColumnValue13a = handleGetGeneratorPkColumnValue();
510            // generatorPkColumnValue has no post constraints
511            this.__generatorPkColumnValue13a = generatorPkColumnValue13a;
512            if (isMetafacadePropertyCachingEnabled())
513            {
514                this.__generatorPkColumnValue13aSet = true;
515            }
516        }
517        return generatorPkColumnValue13a;
518    }
519
520   /**
521    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorInitialValue()
522    * @return int
523    */
524    protected abstract int handleGetGeneratorInitialValue();
525
526    private int __generatorInitialValue14a;
527    private boolean __generatorInitialValue14aSet = false;
528
529    /**
530     * Returns the inital value assigned when allocating ids from the specified generator.
531     * @return (int)handleGetGeneratorInitialValue()
532     */
533    public final int getGeneratorInitialValue()
534    {
535        int generatorInitialValue14a = this.__generatorInitialValue14a;
536        if (!this.__generatorInitialValue14aSet)
537        {
538            // generatorInitialValue has no pre constraints
539            generatorInitialValue14a = handleGetGeneratorInitialValue();
540            // generatorInitialValue has no post constraints
541            this.__generatorInitialValue14a = generatorInitialValue14a;
542            if (isMetafacadePropertyCachingEnabled())
543            {
544                this.__generatorInitialValue14aSet = true;
545            }
546        }
547        return generatorInitialValue14a;
548    }
549
550   /**
551    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorAllocationSize()
552    * @return int
553    */
554    protected abstract int handleGetGeneratorAllocationSize();
555
556    private int __generatorAllocationSize15a;
557    private boolean __generatorAllocationSize15aSet = false;
558
559    /**
560     * Returns the amount to increment the generator value when allocating id numbers.
561     * @return (int)handleGetGeneratorAllocationSize()
562     */
563    public final int getGeneratorAllocationSize()
564    {
565        int generatorAllocationSize15a = this.__generatorAllocationSize15a;
566        if (!this.__generatorAllocationSize15aSet)
567        {
568            // generatorAllocationSize has no pre constraints
569            generatorAllocationSize15a = handleGetGeneratorAllocationSize();
570            // generatorAllocationSize has no post constraints
571            this.__generatorAllocationSize15a = generatorAllocationSize15a;
572            if (isMetafacadePropertyCachingEnabled())
573            {
574                this.__generatorAllocationSize15aSet = true;
575            }
576        }
577        return generatorAllocationSize15a;
578    }
579
580   /**
581    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeSequence()
582    * @return boolean
583    */
584    protected abstract boolean handleIsGeneratorTypeSequence();
585
586    private boolean __generatorTypeSequence16a;
587    private boolean __generatorTypeSequence16aSet = false;
588
589    /**
590     * Returns true if a sequence generator has been assigned to this attribute, false otherwise.
591     * @return (boolean)handleIsGeneratorTypeSequence()
592     */
593    public final boolean isGeneratorTypeSequence()
594    {
595        boolean generatorTypeSequence16a = this.__generatorTypeSequence16a;
596        if (!this.__generatorTypeSequence16aSet)
597        {
598            // generatorTypeSequence has no pre constraints
599            generatorTypeSequence16a = handleIsGeneratorTypeSequence();
600            // generatorTypeSequence has no post constraints
601            this.__generatorTypeSequence16a = generatorTypeSequence16a;
602            if (isMetafacadePropertyCachingEnabled())
603            {
604                this.__generatorTypeSequence16aSet = true;
605            }
606        }
607        return generatorTypeSequence16a;
608    }
609
610   /**
611    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeTable()
612    * @return boolean
613    */
614    protected abstract boolean handleIsGeneratorTypeTable();
615
616    private boolean __generatorTypeTable17a;
617    private boolean __generatorTypeTable17aSet = false;
618
619    /**
620     * Returns true if a table generator has been assigned to this attribute, false otherwise.
621     * @return (boolean)handleIsGeneratorTypeTable()
622     */
623    public final boolean isGeneratorTypeTable()
624    {
625        boolean generatorTypeTable17a = this.__generatorTypeTable17a;
626        if (!this.__generatorTypeTable17aSet)
627        {
628            // generatorTypeTable has no pre constraints
629            generatorTypeTable17a = handleIsGeneratorTypeTable();
630            // generatorTypeTable has no post constraints
631            this.__generatorTypeTable17a = generatorTypeTable17a;
632            if (isMetafacadePropertyCachingEnabled())
633            {
634                this.__generatorTypeTable17aSet = true;
635            }
636        }
637        return generatorTypeTable17a;
638    }
639
640   /**
641    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeAuto()
642    * @return boolean
643    */
644    protected abstract boolean handleIsGeneratorTypeAuto();
645
646    private boolean __generatorTypeAuto18a;
647    private boolean __generatorTypeAuto18aSet = false;
648
649    /**
650     * Returns true if an auto generator has been assigned to this attribute, false otherwise.
651     * @return (boolean)handleIsGeneratorTypeAuto()
652     */
653    public final boolean isGeneratorTypeAuto()
654    {
655        boolean generatorTypeAuto18a = this.__generatorTypeAuto18a;
656        if (!this.__generatorTypeAuto18aSet)
657        {
658            // generatorTypeAuto has no pre constraints
659            generatorTypeAuto18a = handleIsGeneratorTypeAuto();
660            // generatorTypeAuto has no post constraints
661            this.__generatorTypeAuto18a = generatorTypeAuto18a;
662            if (isMetafacadePropertyCachingEnabled())
663            {
664                this.__generatorTypeAuto18aSet = true;
665            }
666        }
667        return generatorTypeAuto18a;
668    }
669
670   /**
671    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeNone()
672    * @return boolean
673    */
674    protected abstract boolean handleIsGeneratorTypeNone();
675
676    private boolean __generatorTypeNone19a;
677    private boolean __generatorTypeNone19aSet = false;
678
679    /**
680     * Returns true no generator has been assigned to this attribute, false otherwise.
681     * @return (boolean)handleIsGeneratorTypeNone()
682     */
683    public final boolean isGeneratorTypeNone()
684    {
685        boolean generatorTypeNone19a = this.__generatorTypeNone19a;
686        if (!this.__generatorTypeNone19aSet)
687        {
688            // generatorTypeNone has no pre constraints
689            generatorTypeNone19a = handleIsGeneratorTypeNone();
690            // generatorTypeNone has no post constraints
691            this.__generatorTypeNone19a = generatorTypeNone19a;
692            if (isMetafacadePropertyCachingEnabled())
693            {
694                this.__generatorTypeNone19aSet = true;
695            }
696        }
697        return generatorTypeNone19a;
698    }
699
700   /**
701    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeIdentity()
702    * @return boolean
703    */
704    protected abstract boolean handleIsGeneratorTypeIdentity();
705
706    private boolean __generatorTypeIdentity20a;
707    private boolean __generatorTypeIdentity20aSet = false;
708
709    /**
710     * Returns true if an identity generator has been assigned to this attribute, false otherwise.
711     * @return (boolean)handleIsGeneratorTypeIdentity()
712     */
713    public final boolean isGeneratorTypeIdentity()
714    {
715        boolean generatorTypeIdentity20a = this.__generatorTypeIdentity20a;
716        if (!this.__generatorTypeIdentity20aSet)
717        {
718            // generatorTypeIdentity has no pre constraints
719            generatorTypeIdentity20a = handleIsGeneratorTypeIdentity();
720            // generatorTypeIdentity has no post constraints
721            this.__generatorTypeIdentity20a = generatorTypeIdentity20a;
722            if (isMetafacadePropertyCachingEnabled())
723            {
724                this.__generatorTypeIdentity20aSet = true;
725            }
726        }
727        return generatorTypeIdentity20a;
728    }
729
730   /**
731    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getTemporalType()
732    * @return String
733    */
734    protected abstract String handleGetTemporalType();
735
736    private String __temporalType21a;
737    private boolean __temporalType21aSet = false;
738
739    /**
740     * Returns the temporal type value set via tagged value on attribute if one exists.  Expect one
741     * of DATE, TIME, TIMESTAMP or NONE.  This can only be applied to attributes of type
742     * java.util.Date or java.util.Calendar.
743     * @return (String)handleGetTemporalType()
744     */
745    public final String getTemporalType()
746    {
747        String temporalType21a = this.__temporalType21a;
748        if (!this.__temporalType21aSet)
749        {
750            // temporalType has no pre constraints
751            temporalType21a = handleGetTemporalType();
752            // temporalType has no post constraints
753            this.__temporalType21a = temporalType21a;
754            if (isMetafacadePropertyCachingEnabled())
755            {
756                this.__temporalType21aSet = true;
757            }
758        }
759        return temporalType21a;
760    }
761
762   /**
763    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getEnumerationType()
764    * @return String
765    */
766    protected abstract String handleGetEnumerationType();
767
768    private String __enumerationType22a;
769    private boolean __enumerationType22aSet = false;
770
771    /**
772     * Returns the persistent property/field enumeration type.  Will return either ORDINAL for enums
773     * mapped as an integer or STRING for enums mapped as a string.  If not specified on an
774     * enumerated type, then the ORDINAL type is assumed
775     * @return (String)handleGetEnumerationType()
776     */
777    public final String getEnumerationType()
778    {
779        String enumerationType22a = this.__enumerationType22a;
780        if (!this.__enumerationType22aSet)
781        {
782            // enumerationType has no pre constraints
783            enumerationType22a = handleGetEnumerationType();
784            // enumerationType has no post constraints
785            this.__enumerationType22a = enumerationType22a;
786            if (isMetafacadePropertyCachingEnabled())
787            {
788                this.__enumerationType22aSet = true;
789            }
790        }
791        return enumerationType22a;
792    }
793
794   /**
795    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isInsertEnabled()
796    * @return boolean
797    */
798    protected abstract boolean handleIsInsertEnabled();
799
800    private boolean __insertEnabled23a;
801    private boolean __insertEnabled23aSet = false;
802
803    /**
804     * Specifies whether a mapped column should be included in SQL INSERT statements.
805     * @return (boolean)handleIsInsertEnabled()
806     */
807    public final boolean isInsertEnabled()
808    {
809        boolean insertEnabled23a = this.__insertEnabled23a;
810        if (!this.__insertEnabled23aSet)
811        {
812            // insertEnabled has no pre constraints
813            insertEnabled23a = handleIsInsertEnabled();
814            // insertEnabled has no post constraints
815            this.__insertEnabled23a = insertEnabled23a;
816            if (isMetafacadePropertyCachingEnabled())
817            {
818                this.__insertEnabled23aSet = true;
819            }
820        }
821        return insertEnabled23a;
822    }
823
824   /**
825    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isUpdateEnabled()
826    * @return boolean
827    */
828    protected abstract boolean handleIsUpdateEnabled();
829
830    private boolean __updateEnabled24a;
831    private boolean __updateEnabled24aSet = false;
832
833    /**
834     * Specifies whether a mapped column should be included in SQL UPDATE statements.
835     * @return (boolean)handleIsUpdateEnabled()
836     */
837    public final boolean isUpdateEnabled()
838    {
839        boolean updateEnabled24a = this.__updateEnabled24a;
840        if (!this.__updateEnabled24aSet)
841        {
842            // updateEnabled has no pre constraints
843            updateEnabled24a = handleIsUpdateEnabled();
844            // updateEnabled has no post constraints
845            this.__updateEnabled24a = updateEnabled24a;
846            if (isMetafacadePropertyCachingEnabled())
847            {
848                this.__updateEnabled24aSet = true;
849            }
850        }
851        return updateEnabled24a;
852    }
853
854   /**
855    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getLobType()
856    * @return String
857    */
858    protected abstract String handleGetLobType();
859
860    private String __lobType25a;
861    private boolean __lobType25aSet = false;
862
863    /**
864     * Returns the user overridden lob type for this property.  This is set via tagged value
865     * andromda_persistence_lob_type.  Default values are String for Clob and byte[] for Blob.
866     * @return (String)handleGetLobType()
867     */
868    public final String getLobType()
869    {
870        String lobType25a = this.__lobType25a;
871        if (!this.__lobType25aSet)
872        {
873            // lobType has no pre constraints
874            lobType25a = handleGetLobType();
875            // lobType has no post constraints
876            this.__lobType25a = lobType25a;
877            if (isMetafacadePropertyCachingEnabled())
878            {
879                this.__lobType25aSet = true;
880            }
881        }
882        return lobType25a;
883    }
884
885   /**
886    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isContainsEmbeddedObject()
887    * @return boolean
888    */
889    protected abstract boolean handleIsContainsEmbeddedObject();
890
891    private boolean __containsEmbeddedObject26a;
892    private boolean __containsEmbeddedObject26aSet = false;
893
894    /**
895     * Returns true if this attribute's type is an embedded value object.
896     * @return (boolean)handleIsContainsEmbeddedObject()
897     */
898    public final boolean isContainsEmbeddedObject()
899    {
900        boolean containsEmbeddedObject26a = this.__containsEmbeddedObject26a;
901        if (!this.__containsEmbeddedObject26aSet)
902        {
903            // containsEmbeddedObject has no pre constraints
904            containsEmbeddedObject26a = handleIsContainsEmbeddedObject();
905            // containsEmbeddedObject has no post constraints
906            this.__containsEmbeddedObject26a = containsEmbeddedObject26a;
907            if (isMetafacadePropertyCachingEnabled())
908            {
909                this.__containsEmbeddedObject26aSet = true;
910            }
911        }
912        return containsEmbeddedObject26a;
913    }
914
915   /**
916    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#isGeneratorTypeGeneric()
917    * @return boolean
918    */
919    protected abstract boolean handleIsGeneratorTypeGeneric();
920
921    private boolean __generatorTypeGeneric27a;
922    private boolean __generatorTypeGeneric27aSet = false;
923
924    /**
925     * Returns true if a generic generator has been assigned to this attribute, false otherwise.
926     * @return (boolean)handleIsGeneratorTypeGeneric()
927     */
928    public final boolean isGeneratorTypeGeneric()
929    {
930        boolean generatorTypeGeneric27a = this.__generatorTypeGeneric27a;
931        if (!this.__generatorTypeGeneric27aSet)
932        {
933            // generatorTypeGeneric has no pre constraints
934            generatorTypeGeneric27a = handleIsGeneratorTypeGeneric();
935            // generatorTypeGeneric has no post constraints
936            this.__generatorTypeGeneric27a = generatorTypeGeneric27a;
937            if (isMetafacadePropertyCachingEnabled())
938            {
939                this.__generatorTypeGeneric27aSet = true;
940            }
941        }
942        return generatorTypeGeneric27a;
943    }
944
945   /**
946    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getGeneratorGenericStrategy()
947    * @return String
948    */
949    protected abstract String handleGetGeneratorGenericStrategy();
950
951    private String __generatorGenericStrategy28a;
952    private boolean __generatorGenericStrategy28aSet = false;
953
954    /**
955     * Returns the org.hibernate.annotations.GenericGenerator strategy either a predefined Hibernate
956     * strategy or a fully qualified class name.
957     * @return (String)handleGetGeneratorGenericStrategy()
958     */
959    public final String getGeneratorGenericStrategy()
960    {
961        String generatorGenericStrategy28a = this.__generatorGenericStrategy28a;
962        if (!this.__generatorGenericStrategy28aSet)
963        {
964            // generatorGenericStrategy has no pre constraints
965            generatorGenericStrategy28a = handleGetGeneratorGenericStrategy();
966            // generatorGenericStrategy has no post constraints
967            this.__generatorGenericStrategy28a = generatorGenericStrategy28a;
968            if (isMetafacadePropertyCachingEnabled())
969            {
970                this.__generatorGenericStrategy28aSet = true;
971            }
972        }
973        return generatorGenericStrategy28a;
974    }
975
976   /**
977    * @see org.andromda.cartridges.ejb3.metafacades.EJB3EntityAttributeFacade#getOverrideType()
978    * @return String
979    */
980    protected abstract String handleGetOverrideType();
981
982    private String __overrideType29a;
983    private boolean __overrideType29aSet = false;
984
985    /**
986     * The overridden hibernate type for the annotation on the entity attribute, to manually specify
987     * a type using the @org.hibernate.annotations.Type or in other persistence provider. Generally
988     * used for Boolean types in legacy databases, i.e yes_no, true_false. Could be:The name of a
989     * Hibernate basic type: integer, string, character, date, timestamp, float, binary,
990     * serializable, object, blob etc.; The name of a Java class with a default basic type: int,
991     * float, char, String, java.util.Date, java.lang.Integer, java.sql.Clob etc.; The
992     * name of a serializable Java class; The class name of a custom type:
993     * com.illflow.type.MyCustomType etc.
994     * @return (String)handleGetOverrideType()
995     */
996    public final String getOverrideType()
997    {
998        String overrideType29a = this.__overrideType29a;
999        if (!this.__overrideType29aSet)
1000        {
1001            // overrideType has no pre constraints
1002            overrideType29a = handleGetOverrideType();
1003            // overrideType has no post constraints
1004            this.__overrideType29a = overrideType29a;
1005            if (isMetafacadePropertyCachingEnabled())
1006            {
1007                this.__overrideType29aSet = true;
1008            }
1009        }
1010        return overrideType29a;
1011    }
1012
1013    /**
1014     * @return true
1015     * @see EntityAttribute
1016     */
1017    public boolean isEntityAttributeMetaType()
1018    {
1019        return true;
1020    }
1021
1022    /**
1023     * @return true
1024     * @see org.andromda.metafacades.uml.AttributeFacade
1025     */
1026    public boolean isAttributeFacadeMetaType()
1027    {
1028        return true;
1029    }
1030
1031    /**
1032     * @return true
1033     * @see ModelElementFacade
1034     */
1035    public boolean isModelElementFacadeMetaType()
1036    {
1037        return true;
1038    }
1039
1040    // ----------- delegates to EntityAttribute ------------
1041    /**
1042     * Searches the given feature for the specified tag.
1043     * If the follow boolean is set to true then the search will continue from the class attribute
1044     * to the class itself and then up the class hierarchy.
1045     * @see org.andromda.metafacades.uml.AttributeFacade#findTaggedValue(String name, boolean follow)
1046     */
1047    public Object findTaggedValue(String name, boolean follow)
1048    {
1049        return this.getSuperEntityAttribute().findTaggedValue(name, follow);
1050    }
1051
1052    /**
1053     * The default value of the attribute.  This is the value given if no value is defined.
1054     * @see org.andromda.metafacades.uml.AttributeFacade#getDefaultValue()
1055     */
1056    public String getDefaultValue()
1057    {
1058        return this.getSuperEntityAttribute().getDefaultValue();
1059    }
1060
1061    /**
1062     * If the attribute is an enumeration literal this represents the owning enumeration. Can be
1063     * empty.
1064     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumeration()
1065     */
1066    public EnumerationFacade getEnumeration()
1067    {
1068        return this.getSuperEntityAttribute().getEnumeration();
1069    }
1070
1071    /**
1072     * Returns the enumeration literal parameters defined by tagged value as a comma separated list.
1073     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationLiteralParameters()
1074     */
1075    public String getEnumerationLiteralParameters()
1076    {
1077        return this.getSuperEntityAttribute().getEnumerationLiteralParameters();
1078    }
1079
1080    /**
1081     * The value for this attribute if it is an enumeration literal, null otherwise. The default
1082     * value is returned as a String if it has been specified, if it's not specified this
1083     * attribute's name is assumed.
1084     * @see org.andromda.metafacades.uml.AttributeFacade#getEnumerationValue()
1085     */
1086    public String getEnumerationValue()
1087    {
1088        return this.getSuperEntityAttribute().getEnumerationValue();
1089    }
1090
1091    /**
1092     * The name of the accessor operation that would retrieve this attribute's value.
1093     * @see org.andromda.metafacades.uml.AttributeFacade#getGetterName()
1094     */
1095    public String getGetterName()
1096    {
1097        return this.getSuperEntityAttribute().getGetterName();
1098    }
1099
1100    /**
1101     * The name of the type that is returned on the accessor and mutator operations,  determined in
1102     * part by the multiplicity.
1103     * @see org.andromda.metafacades.uml.AttributeFacade#getGetterSetterTypeName()
1104     */
1105    public String getGetterSetterTypeName()
1106    {
1107        return this.getSuperEntityAttribute().getGetterSetterTypeName();
1108    }
1109
1110    /**
1111     * the lower value for the multiplicity
1112     * -only applicable for UML2
1113     * @see org.andromda.metafacades.uml.AttributeFacade#getLower()
1114     */
1115    public int getLower()
1116    {
1117        return this.getSuperEntityAttribute().getLower();
1118    }
1119
1120    /**
1121     * Gets the classifier who is the owner of the attributes.
1122     * @see org.andromda.metafacades.uml.AttributeFacade#getOwner()
1123     */
1124    public ClassifierFacade getOwner()
1125    {
1126        return this.getSuperEntityAttribute().getOwner();
1127    }
1128
1129    /**
1130     * The name of the mutator operation that would retrieve this attribute's value.
1131     * @see org.andromda.metafacades.uml.AttributeFacade#getSetterName()
1132     */
1133    public String getSetterName()
1134    {
1135        return this.getSuperEntityAttribute().getSetterName();
1136    }
1137
1138    /**
1139     * The classifier owning this attribute.
1140     * @see org.andromda.metafacades.uml.AttributeFacade#getType()
1141     */
1142    public ClassifierFacade getType()
1143    {
1144        return this.getSuperEntityAttribute().getType();
1145    }
1146
1147    /**
1148     * the upper value for the multiplicity (will be -1 for *)
1149     * -only applicable for UML2
1150     * @see org.andromda.metafacades.uml.AttributeFacade#getUpper()
1151     */
1152    public int getUpper()
1153    {
1154        return this.getSuperEntityAttribute().getUpper();
1155    }
1156
1157    /**
1158     * True if this attribute can only be set.
1159     * @see org.andromda.metafacades.uml.AttributeFacade#isAddOnly()
1160     */
1161    public boolean isAddOnly()
1162    {
1163        return this.getSuperEntityAttribute().isAddOnly();
1164    }
1165
1166    /**
1167     * True if this attribute can be modified.
1168     * @see org.andromda.metafacades.uml.AttributeFacade#isChangeable()
1169     */
1170    public boolean isChangeable()
1171    {
1172        return this.getSuperEntityAttribute().isChangeable();
1173    }
1174
1175    /**
1176     * Indicates if the default value is present.
1177     * @see org.andromda.metafacades.uml.AttributeFacade#isDefaultValuePresent()
1178     */
1179    public boolean isDefaultValuePresent()
1180    {
1181        return this.getSuperEntityAttribute().isDefaultValuePresent();
1182    }
1183
1184    /**
1185     * If the attribute is derived (its value is computed). UML2 only. UML14 always returns false.
1186     * Default=false.
1187     * @see org.andromda.metafacades.uml.AttributeFacade#isDerived()
1188     */
1189    public boolean isDerived()
1190    {
1191        return this.getSuperEntityAttribute().isDerived();
1192    }
1193
1194    /**
1195     * True if this attribute is owned by an enumeration.
1196     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteral()
1197     */
1198    public boolean isEnumerationLiteral()
1199    {
1200        return this.getSuperEntityAttribute().isEnumerationLiteral();
1201    }
1202
1203    /**
1204     * Returns true if enumeration literal parameters exist (defined by tagged value) for the
1205     * literal.
1206     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationLiteralParametersExist()
1207     */
1208    public boolean isEnumerationLiteralParametersExist()
1209    {
1210        return this.getSuperEntityAttribute().isEnumerationLiteralParametersExist();
1211    }
1212
1213    /**
1214     * True if this attribute is owned by an enumeration but is defined as a member variable (NOT a
1215     * literal).
1216     * @see org.andromda.metafacades.uml.AttributeFacade#isEnumerationMember()
1217     */
1218    public boolean isEnumerationMember()
1219    {
1220        return this.getSuperEntityAttribute().isEnumerationMember();
1221    }
1222
1223    /**
1224     * IsLeaf property in the operation. If true, operation is final, cannot be extended or
1225     * implemented by a descendant.
1226     * @see org.andromda.metafacades.uml.AttributeFacade#isLeaf()
1227     */
1228    public boolean isLeaf()
1229    {
1230        return this.getSuperEntityAttribute().isLeaf();
1231    }
1232
1233    /**
1234     * Whether or not this attribute has a multiplicity greater than 1.
1235     * @see org.andromda.metafacades.uml.AttributeFacade#isMany()
1236     */
1237    public boolean isMany()
1238    {
1239        return this.getSuperEntityAttribute().isMany();
1240    }
1241
1242    /**
1243     * Indicates whether or not the attributes are ordered (if multiplicity is greater than 1).
1244     * @see org.andromda.metafacades.uml.AttributeFacade#isOrdered()
1245     */
1246    public boolean isOrdered()
1247    {
1248        return this.getSuperEntityAttribute().isOrdered();
1249    }
1250
1251    /**
1252     * Whether or not this attribute can be modified.
1253     * @see org.andromda.metafacades.uml.AttributeFacade#isReadOnly()
1254     */
1255    public boolean isReadOnly()
1256    {
1257        return this.getSuperEntityAttribute().isReadOnly();
1258    }
1259
1260    /**
1261     * Whether or not the multiplicity of this attribute is 1.
1262     * @see org.andromda.metafacades.uml.AttributeFacade#isRequired()
1263     */
1264    public boolean isRequired()
1265    {
1266        return this.getSuperEntityAttribute().isRequired();
1267    }
1268
1269    /**
1270     * Indicates if this attribute is 'static', meaning it has a classifier scope.
1271     * @see org.andromda.metafacades.uml.AttributeFacade#isStatic()
1272     */
1273    public boolean isStatic()
1274    {
1275        return this.getSuperEntityAttribute().isStatic();
1276    }
1277
1278    /**
1279     * If the attribute is unique within the Collection type. UML2 only. UML14 always returns false.
1280     * Unique+Ordered determines the implementation Collection type. Default=false.
1281     * @see org.andromda.metafacades.uml.AttributeFacade#isUnique()
1282     */
1283    public boolean isUnique()
1284    {
1285        return this.getSuperEntityAttribute().isUnique();
1286    }
1287
1288    /**
1289     * The name of the index to create on a column that persists the entity attribute.
1290     * @see EntityAttribute#getColumnIndex()
1291     */
1292    public String getColumnIndex()
1293    {
1294        return this.getSuperEntityAttribute().getColumnIndex();
1295    }
1296
1297    /**
1298     * The length of the column that persists this entity attribute.
1299     * @see EntityAttribute#getColumnLength()
1300     */
1301    public String getColumnLength()
1302    {
1303        return this.getSuperEntityAttribute().getColumnLength();
1304    }
1305
1306    /**
1307     * The name of the table column to which this entity is mapped.
1308     * @see EntityAttribute#getColumnName()
1309     */
1310    public String getColumnName()
1311    {
1312        return this.getSuperEntityAttribute().getColumnName();
1313    }
1314
1315    /**
1316     * The PIM to language specific mappings for JDBC.
1317     * @see EntityAttribute#getJdbcMappings()
1318     */
1319    public TypeMappings getJdbcMappings()
1320    {
1321        return this.getSuperEntityAttribute().getJdbcMappings();
1322    }
1323
1324    /**
1325     * The JDBC type for this entity attribute.
1326     * @see EntityAttribute#getJdbcType()
1327     */
1328    public String getJdbcType()
1329    {
1330        return this.getSuperEntityAttribute().getJdbcType();
1331    }
1332
1333    /**
1334     * The SQL mappings (i.e. the mappings which provide PIM to SQL mappings).
1335     * @see EntityAttribute#getSqlMappings()
1336     */
1337    public TypeMappings getSqlMappings()
1338    {
1339        return this.getSuperEntityAttribute().getSqlMappings();
1340    }
1341
1342    /**
1343     * The SQL type for this attribute.
1344     * @see EntityAttribute#getSqlType()
1345     */
1346    public String getSqlType()
1347    {
1348        return this.getSuperEntityAttribute().getSqlType();
1349    }
1350
1351    /**
1352     * The name of the unique-key that this unique attribute belongs
1353     * @see EntityAttribute#getUniqueGroup()
1354     */
1355    public String getUniqueGroup()
1356    {
1357        return this.getSuperEntityAttribute().getUniqueGroup();
1358    }
1359
1360    /**
1361     * True if this attribute is an identifier for its entity.
1362     * @see EntityAttribute#isIdentifier()
1363     */
1364    public boolean isIdentifier()
1365    {
1366        return this.getSuperEntityAttribute().isIdentifier();
1367    }
1368
1369    /**
1370     * Indicates this attribute should be ignored by the persistence layer.
1371     * @see EntityAttribute#isTransient()
1372     */
1373    public boolean isTransient()
1374    {
1375        return this.getSuperEntityAttribute().isTransient();
1376    }
1377
1378    /**
1379     * Copies all tagged values from the given ModelElementFacade to this model element facade.
1380     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1381     */
1382    public void copyTaggedValues(ModelElementFacade element)
1383    {
1384        this.getSuperEntityAttribute().copyTaggedValues(element);
1385    }
1386
1387    /**
1388     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1389     * one found will be returned.
1390     * @see ModelElementFacade#findTaggedValue(String tagName)
1391     */
1392    public Object findTaggedValue(String tagName)
1393    {
1394        return this.getSuperEntityAttribute().findTaggedValue(tagName);
1395    }
1396
1397    /**
1398     * Returns all the values for the tagged value with the specified name. The returned collection
1399     * will contains only String instances, or will be empty. Never null.
1400     * @see ModelElementFacade#findTaggedValues(String tagName)
1401     */
1402    public Collection<Object> findTaggedValues(String tagName)
1403    {
1404        return this.getSuperEntityAttribute().findTaggedValues(tagName);
1405    }
1406
1407    /**
1408     * Returns the fully qualified name of the model element. The fully qualified name includes
1409     * complete package qualified name of the underlying model element. The templates parameter will
1410     * be replaced by the correct one given the binding relation of the parameter to this element.
1411     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1412     */
1413    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1414    {
1415        return this.getSuperEntityAttribute().getBindedFullyQualifiedName(bindedElement);
1416    }
1417
1418    /**
1419     * Gets all constraints belonging to the model element.
1420     * @see ModelElementFacade#getConstraints()
1421     */
1422    public Collection<ConstraintFacade> getConstraints()
1423    {
1424        return this.getSuperEntityAttribute().getConstraints();
1425    }
1426
1427    /**
1428     * Returns the constraints of the argument kind that have been placed onto this model. Typical
1429     * kinds are "inv", "pre" and "post". Other kinds are possible.
1430     * @see ModelElementFacade#getConstraints(String kind)
1431     */
1432    public Collection<ConstraintFacade> getConstraints(String kind)
1433    {
1434        return this.getSuperEntityAttribute().getConstraints(kind);
1435    }
1436
1437    /**
1438     * Gets the documentation for the model element, The indent argument is prefixed to each line.
1439     * By default this method wraps lines after 64 characters.
1440     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1441     * @see ModelElementFacade#getDocumentation(String indent)
1442     */
1443    public String getDocumentation(String indent)
1444    {
1445        return this.getSuperEntityAttribute().getDocumentation(indent);
1446    }
1447
1448    /**
1449     * This method returns the documentation for this model element, with the lines wrapped after
1450     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1451     * required. By default paragraphs are returned as HTML.
1452     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1453     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1454     */
1455    public String getDocumentation(String indent, int lineLength)
1456    {
1457        return this.getSuperEntityAttribute().getDocumentation(indent, lineLength);
1458    }
1459
1460    /**
1461     * This method returns the documentation for this model element, with the lines wrapped after
1462     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1463     * required. HTML style determines if HTML Escaping is applied.
1464     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1465     */
1466    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1467    {
1468        return this.getSuperEntityAttribute().getDocumentation(indent, lineLength, htmlStyle);
1469    }
1470
1471    /**
1472     * The fully qualified name of this model element.
1473     * @see ModelElementFacade#getFullyQualifiedName()
1474     */
1475    public String getFullyQualifiedName()
1476    {
1477        return this.getSuperEntityAttribute().getFullyQualifiedName();
1478    }
1479
1480    /**
1481     * Returns the fully qualified name of the model element. The fully qualified name includes
1482     * complete package qualified name of the underlying model element.  If modelName is true, then
1483     * the original name of the model element (the name contained within the model) will be the name
1484     * returned, otherwise a name from a language mapping will be returned.
1485     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1486     */
1487    public String getFullyQualifiedName(boolean modelName)
1488    {
1489        return this.getSuperEntityAttribute().getFullyQualifiedName(modelName);
1490    }
1491
1492    /**
1493     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1494     * '/'.
1495     * @see ModelElementFacade#getFullyQualifiedNamePath()
1496     */
1497    public String getFullyQualifiedNamePath()
1498    {
1499        return this.getSuperEntityAttribute().getFullyQualifiedNamePath();
1500    }
1501
1502    /**
1503     * Gets the unique identifier of the underlying model element.
1504     * @see ModelElementFacade#getId()
1505     */
1506    public String getId()
1507    {
1508        return this.getSuperEntityAttribute().getId();
1509    }
1510
1511    /**
1512     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1513     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1514     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1515     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1516     * JDK5 compiler level.
1517     * @see ModelElementFacade#getKeywords()
1518     */
1519    public Collection<String> getKeywords()
1520    {
1521        return this.getSuperEntityAttribute().getKeywords();
1522    }
1523
1524    /**
1525     * UML2: Retrieves a localized label for this named element.
1526     * @see ModelElementFacade#getLabel()
1527     */
1528    public String getLabel()
1529    {
1530        return this.getSuperEntityAttribute().getLabel();
1531    }
1532
1533    /**
1534     * The language mappings that have been set for this model element.
1535     * @see ModelElementFacade#getLanguageMappings()
1536     */
1537    public TypeMappings getLanguageMappings()
1538    {
1539        return this.getSuperEntityAttribute().getLanguageMappings();
1540    }
1541
1542    /**
1543     * Return the model containing this model element (multiple models may be loaded and processed
1544     * at the same time).
1545     * @see ModelElementFacade#getModel()
1546     */
1547    public ModelFacade getModel()
1548    {
1549        return this.getSuperEntityAttribute().getModel();
1550    }
1551
1552    /**
1553     * The name of the model element.
1554     * @see ModelElementFacade#getName()
1555     */
1556    public String getName()
1557    {
1558        return this.getSuperEntityAttribute().getName();
1559    }
1560
1561    /**
1562     * Gets the package to which this model element belongs.
1563     * @see ModelElementFacade#getPackage()
1564     */
1565    public ModelElementFacade getPackage()
1566    {
1567        return this.getSuperEntityAttribute().getPackage();
1568    }
1569
1570    /**
1571     * The name of this model element's package.
1572     * @see ModelElementFacade#getPackageName()
1573     */
1574    public String getPackageName()
1575    {
1576        return this.getSuperEntityAttribute().getPackageName();
1577    }
1578
1579    /**
1580     * Gets the package name (optionally providing the ability to retrieve the model name and not
1581     * the mapped name).
1582     * @see ModelElementFacade#getPackageName(boolean modelName)
1583     */
1584    public String getPackageName(boolean modelName)
1585    {
1586        return this.getSuperEntityAttribute().getPackageName(modelName);
1587    }
1588
1589    /**
1590     * Returns the package as a path, the returned value always starts with out a slash '/'.
1591     * @see ModelElementFacade#getPackagePath()
1592     */
1593    public String getPackagePath()
1594    {
1595        return this.getSuperEntityAttribute().getPackagePath();
1596    }
1597
1598    /**
1599     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1600     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1601     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1602     * the name of the NamedElement itself.
1603     * @see ModelElementFacade#getQualifiedName()
1604     */
1605    public String getQualifiedName()
1606    {
1607        return this.getSuperEntityAttribute().getQualifiedName();
1608    }
1609
1610    /**
1611     * Gets the root package for the model element.
1612     * @see ModelElementFacade#getRootPackage()
1613     */
1614    public PackageFacade getRootPackage()
1615    {
1616        return this.getSuperEntityAttribute().getRootPackage();
1617    }
1618
1619    /**
1620     * Gets the dependencies for which this model element is the source.
1621     * @see ModelElementFacade#getSourceDependencies()
1622     */
1623    public Collection<DependencyFacade> getSourceDependencies()
1624    {
1625        return this.getSuperEntityAttribute().getSourceDependencies();
1626    }
1627
1628    /**
1629     * If this model element is the context of an activity graph, this represents that activity
1630     * graph.
1631     * @see ModelElementFacade#getStateMachineContext()
1632     */
1633    public StateMachineFacade getStateMachineContext()
1634    {
1635        return this.getSuperEntityAttribute().getStateMachineContext();
1636    }
1637
1638    /**
1639     * The collection of ALL stereotype names for this model element.
1640     * @see ModelElementFacade#getStereotypeNames()
1641     */
1642    public Collection<String> getStereotypeNames()
1643    {
1644        return this.getSuperEntityAttribute().getStereotypeNames();
1645    }
1646
1647    /**
1648     * Gets all stereotypes for this model element.
1649     * @see ModelElementFacade#getStereotypes()
1650     */
1651    public Collection<StereotypeFacade> getStereotypes()
1652    {
1653        return this.getSuperEntityAttribute().getStereotypes();
1654    }
1655
1656    /**
1657     * Return the TaggedValues associated with this model element, under all stereotypes.
1658     * @see ModelElementFacade#getTaggedValues()
1659     */
1660    public Collection<TaggedValueFacade> getTaggedValues()
1661    {
1662        return this.getSuperEntityAttribute().getTaggedValues();
1663    }
1664
1665    /**
1666     * Gets the dependencies for which this model element is the target.
1667     * @see ModelElementFacade#getTargetDependencies()
1668     */
1669    public Collection<DependencyFacade> getTargetDependencies()
1670    {
1671        return this.getSuperEntityAttribute().getTargetDependencies();
1672    }
1673
1674    /**
1675     * Get the template parameter for this model element having the parameterName
1676     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1677     */
1678    public Object getTemplateParameter(String parameterName)
1679    {
1680        return this.getSuperEntityAttribute().getTemplateParameter(parameterName);
1681    }
1682
1683    /**
1684     * Get the template parameters for this model element
1685     * @see ModelElementFacade#getTemplateParameters()
1686     */
1687    public Collection<TemplateParameterFacade> getTemplateParameters()
1688    {
1689        return this.getSuperEntityAttribute().getTemplateParameters();
1690    }
1691
1692    /**
1693     * The visibility (i.e. public, private, protected or package) of the model element, will
1694     * attempt a lookup for these values in the language mappings (if any).
1695     * @see ModelElementFacade#getVisibility()
1696     */
1697    public String getVisibility()
1698    {
1699        return this.getSuperEntityAttribute().getVisibility();
1700    }
1701
1702    /**
1703     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1704     * is taken into account when searching for the stereotype), false otherwise.
1705     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1706     */
1707    public boolean hasExactStereotype(String stereotypeName)
1708    {
1709        return this.getSuperEntityAttribute().hasExactStereotype(stereotypeName);
1710    }
1711
1712    /**
1713     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1714     * pipe, semicolon, or << >>
1715     * @see ModelElementFacade#hasKeyword(String keywordName)
1716     */
1717    public boolean hasKeyword(String keywordName)
1718    {
1719        return this.getSuperEntityAttribute().hasKeyword(keywordName);
1720    }
1721
1722    /**
1723     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1724     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1725     * one of the stereotype's ancestors has a matching name this method will return true, false
1726     * otherwise.
1727     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1728     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1729     * method with 'stereotypeName' defined as 'exception' the method would return true since
1730     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1731     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1732     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1733     */
1734    public boolean hasStereotype(String stereotypeName)
1735    {
1736        return this.getSuperEntityAttribute().hasStereotype(stereotypeName);
1737    }
1738
1739    /**
1740     * True if there are target dependencies from this element that are instances of BindingFacade.
1741     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1742     * @see ModelElementFacade#isBindingDependenciesPresent()
1743     */
1744    public boolean isBindingDependenciesPresent()
1745    {
1746        return this.getSuperEntityAttribute().isBindingDependenciesPresent();
1747    }
1748
1749    /**
1750     * Indicates if any constraints are present on this model element.
1751     * @see ModelElementFacade#isConstraintsPresent()
1752     */
1753    public boolean isConstraintsPresent()
1754    {
1755        return this.getSuperEntityAttribute().isConstraintsPresent();
1756    }
1757
1758    /**
1759     * Indicates if any documentation is present on this model element.
1760     * @see ModelElementFacade#isDocumentationPresent()
1761     */
1762    public boolean isDocumentationPresent()
1763    {
1764        return this.getSuperEntityAttribute().isDocumentationPresent();
1765    }
1766
1767    /**
1768     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1769     * @see ModelElementFacade#isReservedWord()
1770     */
1771    public boolean isReservedWord()
1772    {
1773        return this.getSuperEntityAttribute().isReservedWord();
1774    }
1775
1776    /**
1777     * True is there are template parameters on this model element. For UML2, applies to Class,
1778     * Operation, Property, and Parameter.
1779     * @see ModelElementFacade#isTemplateParametersPresent()
1780     */
1781    public boolean isTemplateParametersPresent()
1782    {
1783        return this.getSuperEntityAttribute().isTemplateParametersPresent();
1784    }
1785
1786    /**
1787     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1788     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1789     * Enumerations and Interfaces, optionally applies on other model elements.
1790     * @see ModelElementFacade#isValidIdentifierName()
1791     */
1792    public boolean isValidIdentifierName()
1793    {
1794        return this.getSuperEntityAttribute().isValidIdentifierName();
1795    }
1796
1797    /**
1798     * Searches for the constraint with the specified 'name' on this model element, and if found
1799     * translates it using the specified 'translation' from a translation library discovered by the
1800     * framework.
1801     * @see ModelElementFacade#translateConstraint(String name, String translation)
1802     */
1803    public String translateConstraint(String name, String translation)
1804    {
1805        return this.getSuperEntityAttribute().translateConstraint(name, translation);
1806    }
1807
1808    /**
1809     * Translates all constraints belonging to this model element with the given 'translation'.
1810     * @see ModelElementFacade#translateConstraints(String translation)
1811     */
1812    public String[] translateConstraints(String translation)
1813    {
1814        return this.getSuperEntityAttribute().translateConstraints(translation);
1815    }
1816
1817    /**
1818     * Translates the constraints of the specified 'kind' belonging to this model element.
1819     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1820     */
1821    public String[] translateConstraints(String kind, String translation)
1822    {
1823        return this.getSuperEntityAttribute().translateConstraints(kind, translation);
1824    }
1825
1826    /**
1827     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1828     */
1829    @Override
1830    public void initialize()
1831    {
1832        this.getSuperEntityAttribute().initialize();
1833    }
1834
1835    /**
1836     * @return Object getSuperEntityAttribute().getValidationOwner()
1837     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1838     */
1839    @Override
1840    public Object getValidationOwner()
1841    {
1842        Object owner = this.getSuperEntityAttribute().getValidationOwner();
1843        return owner;
1844    }
1845
1846    /**
1847     * @return String getSuperEntityAttribute().getValidationName()
1848     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1849     */
1850    @Override
1851    public String getValidationName()
1852    {
1853        String name = this.getSuperEntityAttribute().getValidationName();
1854        return name;
1855    }
1856
1857    /**
1858     * @param validationMessages Collection<ModelValidationMessage>
1859     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1860     */
1861    @Override
1862    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1863    {
1864        this.getSuperEntityAttribute().validateInvariants(validationMessages);
1865    }
1866
1867    /**
1868     * The property that stores the name of the metafacade.
1869     */
1870    private static final String NAME_PROPERTY = "name";
1871    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1872
1873    /**
1874     * @see Object#toString()
1875     */
1876    @Override
1877    public String toString()
1878    {
1879        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1880        toString.append("[");
1881        try
1882        {
1883            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1884        }
1885        catch (final Throwable tryAgain)
1886        {
1887            try
1888            {
1889                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1890            }
1891            catch (final Throwable ignore)
1892            {
1893                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1894            }
1895        }
1896        toString.append("]");
1897        return toString.toString();
1898    }
1899}