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.AssociationEndFacade;
013import org.andromda.metafacades.uml.AssociationFacade;
014import org.andromda.metafacades.uml.ClassifierFacade;
015import org.andromda.metafacades.uml.ConstraintFacade;
016import org.andromda.metafacades.uml.DependencyFacade;
017import org.andromda.metafacades.uml.EntityAssociationEnd;
018import org.andromda.metafacades.uml.ModelElementFacade;
019import org.andromda.metafacades.uml.ModelFacade;
020import org.andromda.metafacades.uml.PackageFacade;
021import org.andromda.metafacades.uml.StateMachineFacade;
022import org.andromda.metafacades.uml.StereotypeFacade;
023import org.andromda.metafacades.uml.TaggedValueFacade;
024import org.andromda.metafacades.uml.TemplateParameterFacade;
025import org.andromda.metafacades.uml.TypeMappings;
026
027/**
028 * Represents an EJB association end.
029 * MetafacadeLogic for EJB3AssociationEndFacade
030 *
031 * @see EJB3AssociationEndFacade
032 */
033public abstract class EJB3AssociationEndFacadeLogic
034    extends MetafacadeBase
035    implements EJB3AssociationEndFacade
036{
037    /**
038     * The underlying UML object
039     * @see Object
040     */
041    protected Object metaObject;
042
043    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
044     * @param metaObjectIn
045     * @param context
046     */
047    protected EJB3AssociationEndFacadeLogic(Object metaObjectIn, String context)
048    {
049        super(metaObjectIn, getContext(context));
050        this.superEntityAssociationEnd =
051           (EntityAssociationEnd)
052            MetafacadeFactory.getInstance().createFacadeImpl(
053                    "org.andromda.metafacades.uml.EntityAssociationEnd",
054                    metaObjectIn,
055                    getContext(context));
056        this.metaObject = metaObjectIn;
057    }
058
059    /**
060     * Gets the context for this metafacade logic instance.
061     * @param context String. Set to EJB3AssociationEndFacade if null
062     * @return context String
063     */
064    private static String getContext(String context)
065    {
066        if (context == null)
067        {
068            context = "org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade";
069        }
070        return context;
071    }
072
073    private EntityAssociationEnd superEntityAssociationEnd;
074    private boolean superEntityAssociationEndInitialized = false;
075
076    /**
077     * Gets the EntityAssociationEnd parent instance.
078     * @return this.superEntityAssociationEnd EntityAssociationEnd
079     */
080    private EntityAssociationEnd getSuperEntityAssociationEnd()
081    {
082        if (!this.superEntityAssociationEndInitialized)
083        {
084            ((MetafacadeBase)this.superEntityAssociationEnd).setMetafacadeContext(this.getMetafacadeContext());
085            this.superEntityAssociationEndInitialized = true;
086        }
087        return this.superEntityAssociationEnd;
088    }
089
090    /** Reset context only for non-root metafacades
091     * @param context
092     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
093     */
094    @Override
095    public void resetMetafacadeContext(String context)
096    {
097        if (!this.contextRoot) // reset context only for non-root metafacades
098        {
099            context = getContext(context);  // to have same value as in original constructor call
100            setMetafacadeContext (context);
101            if (this.superEntityAssociationEndInitialized)
102            {
103                ((MetafacadeBase)this.superEntityAssociationEnd).resetMetafacadeContext(context);
104            }
105        }
106    }
107
108    /**
109     * @return boolean true always
110     * @see EJB3AssociationEndFacade
111     */
112    public boolean isEJB3AssociationEndFacadeMetaType()
113    {
114        return true;
115    }
116
117    // --------------- attributes ---------------------
118
119   /**
120    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getFetchType()
121    * @return String
122    */
123    protected abstract String handleGetFetchType();
124
125    private String __fetchType1a;
126    private boolean __fetchType1aSet = false;
127
128    /**
129     * Get the fetch type for this association end(CMR).
130     * If no fetch type tagged value is specified and COMPOSITION_DEFINES_EAGER_LOADING is enabled,
131     * then:
132     * <ul><li>aggregation: lazy-loaded</li><li>composition: eager-loaded</li></ul>
133     * Otherwise, the default fetch type for CMR of type One2Many and Many2Many is LAZY.
134     * Default fetch type for CMR of type Many2One and One2One is EAGER.
135     * This will return either EAGER or LAZY.
136     * @return (String)handleGetFetchType()
137     */
138    public final String getFetchType()
139    {
140        String fetchType1a = this.__fetchType1a;
141        if (!this.__fetchType1aSet)
142        {
143            // fetchType has no pre constraints
144            fetchType1a = handleGetFetchType();
145            // fetchType has no post constraints
146            this.__fetchType1a = fetchType1a;
147            if (isMetafacadePropertyCachingEnabled())
148            {
149                this.__fetchType1aSet = true;
150            }
151        }
152        return fetchType1a;
153    }
154
155   /**
156    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isOwning()
157    * @return boolean
158    */
159    protected abstract boolean handleIsOwning();
160
161    private boolean __owning2a;
162    private boolean __owning2aSet = false;
163
164    /**
165     * Determines if this association end if the owning side.  Used in one-to-one and many-to-many
166     * relationships.
167     * @return (boolean)handleIsOwning()
168     */
169    public final boolean isOwning()
170    {
171        boolean owning2a = this.__owning2a;
172        if (!this.__owning2aSet)
173        {
174            // owning has no pre constraints
175            owning2a = handleIsOwning();
176            // owning has no post constraints
177            this.__owning2a = owning2a;
178            if (isMetafacadePropertyCachingEnabled())
179            {
180                this.__owning2aSet = true;
181            }
182        }
183        return owning2a;
184    }
185
186   /**
187    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isOptional()
188    * @return boolean
189    */
190    protected abstract boolean handleIsOptional();
191
192    private boolean __optional3a;
193    private boolean __optional3aSet = false;
194
195    /**
196     * Sets the optional attribute on the annotation to determine if a null value is allowed.  If
197     * set to false, non-null relationships must always exist.  If the andromda_persistence_optional
198     * tag is set, then use the tagged value, otherwise determine if null value is allowed by way of
199     * multiplicity on the association end.
200     * @return (boolean)handleIsOptional()
201     */
202    public final boolean isOptional()
203    {
204        boolean optional3a = this.__optional3a;
205        if (!this.__optional3aSet)
206        {
207            // optional has no pre constraints
208            optional3a = handleIsOptional();
209            // optional has no post constraints
210            this.__optional3a = optional3a;
211            if (isMetafacadePropertyCachingEnabled())
212            {
213                this.__optional3aSet = true;
214            }
215        }
216        return optional3a;
217    }
218
219   /**
220    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getOrderByClause()
221    * @return String
222    */
223    protected abstract String handleGetOrderByClause();
224
225    private String __orderByClause4a;
226    private boolean __orderByClause4aSet = false;
227
228    /**
229     * The order by clause set to order the returning Collection object on the many side of an
230     * association.
231     * @return (String)handleGetOrderByClause()
232     */
233    public final String getOrderByClause()
234    {
235        String orderByClause4a = this.__orderByClause4a;
236        if (!this.__orderByClause4aSet)
237        {
238            // orderByClause has no pre constraints
239            orderByClause4a = handleGetOrderByClause();
240            // orderByClause has no post constraints
241            this.__orderByClause4a = orderByClause4a;
242            if (isMetafacadePropertyCachingEnabled())
243            {
244                this.__orderByClause4aSet = true;
245            }
246        }
247        return orderByClause4a;
248    }
249
250   /**
251    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getColumnDefinition()
252    * @return String
253    */
254    protected abstract String handleGetColumnDefinition();
255
256    private String __columnDefinition5a;
257    private boolean __columnDefinition5aSet = false;
258
259    /**
260     * Defines the column definition DDL used when creating table schema - use to override default
261     * container DDL.
262     * @return (String)handleGetColumnDefinition()
263     */
264    public final String getColumnDefinition()
265    {
266        String columnDefinition5a = this.__columnDefinition5a;
267        if (!this.__columnDefinition5aSet)
268        {
269            // columnDefinition has no pre constraints
270            columnDefinition5a = handleGetColumnDefinition();
271            // columnDefinition has no post constraints
272            this.__columnDefinition5a = columnDefinition5a;
273            if (isMetafacadePropertyCachingEnabled())
274            {
275                this.__columnDefinition5aSet = true;
276            }
277        }
278        return columnDefinition5a;
279    }
280
281   /**
282    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isEager()
283    * @return boolean
284    */
285    protected abstract boolean handleIsEager();
286
287    private boolean __eager6a;
288    private boolean __eager6aSet = false;
289
290    /**
291     * Determine if the fetch type for this entity relationship end is eager loading.
292     * @return (boolean)handleIsEager()
293     */
294    public final boolean isEager()
295    {
296        boolean eager6a = this.__eager6a;
297        if (!this.__eager6aSet)
298        {
299            // eager has no pre constraints
300            eager6a = handleIsEager();
301            // eager has no post constraints
302            this.__eager6a = eager6a;
303            if (isMetafacadePropertyCachingEnabled())
304            {
305                this.__eager6aSet = true;
306            }
307        }
308        return eager6a;
309    }
310
311   /**
312    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isLazy()
313    * @return boolean
314    */
315    protected abstract boolean handleIsLazy();
316
317    private boolean __lazy7a;
318    private boolean __lazy7aSet = false;
319
320    /**
321     * Determine if the fetch type for this entity relationship end is lazy loading.
322     * @return (boolean)handleIsLazy()
323     */
324    public final boolean isLazy()
325    {
326        boolean lazy7a = this.__lazy7a;
327        if (!this.__lazy7aSet)
328        {
329            // lazy has no pre constraints
330            lazy7a = handleIsLazy();
331            // lazy has no post constraints
332            this.__lazy7a = lazy7a;
333            if (isMetafacadePropertyCachingEnabled())
334            {
335                this.__lazy7aSet = true;
336            }
337        }
338        return lazy7a;
339    }
340
341   /**
342    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCascadeType()
343    * @return String
344    */
345    protected abstract String handleGetCascadeType();
346
347    private String __cascadeType8a;
348    private boolean __cascadeType8aSet = false;
349
350    /**
351     * Return the cascade type attributes as an array of this association end or null if no relevant
352     * cascade attribute is found.
353     * @return (String)handleGetCascadeType()
354     */
355    public final String getCascadeType()
356    {
357        String cascadeType8a = this.__cascadeType8a;
358        if (!this.__cascadeType8aSet)
359        {
360            // cascadeType has no pre constraints
361            cascadeType8a = handleGetCascadeType();
362            // cascadeType has no post constraints
363            this.__cascadeType8a = cascadeType8a;
364            if (isMetafacadePropertyCachingEnabled())
365            {
366                this.__cascadeType8aSet = true;
367            }
368        }
369        return cascadeType8a;
370    }
371
372   /**
373    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCompositionCascadeType()
374    * @return String
375    */
376    protected abstract String handleGetCompositionCascadeType();
377
378    private String __compositionCascadeType9a;
379    private boolean __compositionCascadeType9aSet = false;
380
381    /**
382     * Returns the default cascade property specified for UML composition.
383     * @return (String)handleGetCompositionCascadeType()
384     */
385    public final String getCompositionCascadeType()
386    {
387        String compositionCascadeType9a = this.__compositionCascadeType9a;
388        if (!this.__compositionCascadeType9aSet)
389        {
390            // compositionCascadeType has no pre constraints
391            compositionCascadeType9a = handleGetCompositionCascadeType();
392            // compositionCascadeType has no post constraints
393            this.__compositionCascadeType9a = compositionCascadeType9a;
394            if (isMetafacadePropertyCachingEnabled())
395            {
396                this.__compositionCascadeType9aSet = true;
397            }
398        }
399        return compositionCascadeType9a;
400    }
401
402   /**
403    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getAggregationCascadeType()
404    * @return String
405    */
406    protected abstract String handleGetAggregationCascadeType();
407
408    private String __aggregationCascadeType10a;
409    private boolean __aggregationCascadeType10aSet = false;
410
411    /**
412     * Returns the default cascade property specified for UML aggregation.
413     * @return (String)handleGetAggregationCascadeType()
414     */
415    public final String getAggregationCascadeType()
416    {
417        String aggregationCascadeType10a = this.__aggregationCascadeType10a;
418        if (!this.__aggregationCascadeType10aSet)
419        {
420            // aggregationCascadeType has no pre constraints
421            aggregationCascadeType10a = handleGetAggregationCascadeType();
422            // aggregationCascadeType has no post constraints
423            this.__aggregationCascadeType10a = aggregationCascadeType10a;
424            if (isMetafacadePropertyCachingEnabled())
425            {
426                this.__aggregationCascadeType10aSet = true;
427            }
428        }
429        return aggregationCascadeType10a;
430    }
431
432   /**
433    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCollectionType()
434    * @return String
435    */
436    protected abstract String handleGetCollectionType();
437
438    private String __collectionType11a;
439    private boolean __collectionType11aSet = false;
440
441    /**
442     * Returns the collection type defined on this association end using the
443     * andromda_persistence_collection_type tagged value.
444     * If undefined use the following strategy:
445     * - If ordered collection type: return a list
446     * - Otherwise, return the default association collection type.
447     * @return (String)handleGetCollectionType()
448     */
449    public final String getCollectionType()
450    {
451        String collectionType11a = this.__collectionType11a;
452        if (!this.__collectionType11aSet)
453        {
454            // collectionType has no pre constraints
455            collectionType11a = handleGetCollectionType();
456            // collectionType has no post constraints
457            this.__collectionType11a = collectionType11a;
458            if (isMetafacadePropertyCachingEnabled())
459            {
460                this.__collectionType11aSet = true;
461            }
462        }
463        return collectionType11a;
464    }
465
466   /**
467    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isMap()
468    * @return boolean
469    */
470    protected abstract boolean handleIsMap();
471
472    private boolean __map12a;
473    private boolean __map12aSet = false;
474
475    /**
476     * Returns true if the collection type is a map.  This will only be the case if the association
477     * end multiplicity is defined as unordered.
478     * @return (boolean)handleIsMap()
479     */
480    public final boolean isMap()
481    {
482        boolean map12a = this.__map12a;
483        if (!this.__map12aSet)
484        {
485            // map has no pre constraints
486            map12a = handleIsMap();
487            // map has no post constraints
488            this.__map12a = map12a;
489            if (isMetafacadePropertyCachingEnabled())
490            {
491                this.__map12aSet = true;
492            }
493        }
494        return map12a;
495    }
496
497   /**
498    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isList()
499    * @return boolean
500    */
501    protected abstract boolean handleIsList();
502
503    private boolean __list13a;
504    private boolean __list13aSet = false;
505
506    /**
507     * Returns true if the collection type is a list.  This will only be the case if the association
508     * end multiplicity is defined as ordered.
509     * @return (boolean)handleIsList()
510     */
511    public final boolean isList()
512    {
513        boolean list13a = this.__list13a;
514        if (!this.__list13aSet)
515        {
516            // list has no pre constraints
517            list13a = handleIsList();
518            // list has no post constraints
519            this.__list13a = list13a;
520            if (isMetafacadePropertyCachingEnabled())
521            {
522                this.__list13aSet = true;
523            }
524        }
525        return list13a;
526    }
527
528   /**
529    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isSet()
530    * @return boolean
531    */
532    protected abstract boolean handleIsSet();
533
534    private boolean __set14a;
535    private boolean __set14aSet = false;
536
537    /**
538     * Returns true if the collection type is a set.  This will only be the case if the association
539     * end multiplicity is defined as unordered.
540     * @return (boolean)handleIsSet()
541     */
542    public final boolean isSet()
543    {
544        boolean set14a = this.__set14a;
545        if (!this.__set14aSet)
546        {
547            // set has no pre constraints
548            set14a = handleIsSet();
549            // set has no post constraints
550            this.__set14a = set14a;
551            if (isMetafacadePropertyCachingEnabled())
552            {
553                this.__set14aSet = true;
554            }
555        }
556        return set14a;
557    }
558
559   /**
560    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getLabelName()
561    * @return String
562    */
563    protected abstract String handleGetLabelName();
564
565    private String __labelName15a;
566    private boolean __labelName15aSet = false;
567
568    /**
569     * Returns the label name for the association end used as the display attribute for manageable
570     * entities.
571     * @return (String)handleGetLabelName()
572     */
573    public final String getLabelName()
574    {
575        String labelName15a = this.__labelName15a;
576        if (!this.__labelName15aSet)
577        {
578            // labelName has no pre constraints
579            labelName15a = handleGetLabelName();
580            // labelName has no post constraints
581            this.__labelName15a = labelName15a;
582            if (isMetafacadePropertyCachingEnabled())
583            {
584                this.__labelName15aSet = true;
585            }
586        }
587        return labelName15a;
588    }
589
590   /**
591    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getGetterLabelName()
592    * @return String
593    */
594    protected abstract String handleGetGetterLabelName();
595
596    private String __getterLabelName16a;
597    private boolean __getterLabelName16aSet = false;
598
599    /**
600     * Returns the getter name for the label name of the display attribute of the manageable entity.
601     * @return (String)handleGetGetterLabelName()
602     */
603    public final String getGetterLabelName()
604    {
605        String getterLabelName16a = this.__getterLabelName16a;
606        if (!this.__getterLabelName16aSet)
607        {
608            // getterLabelName has no pre constraints
609            getterLabelName16a = handleGetGetterLabelName();
610            // getterLabelName has no post constraints
611            this.__getterLabelName16a = getterLabelName16a;
612            if (isMetafacadePropertyCachingEnabled())
613            {
614                this.__getterLabelName16aSet = true;
615            }
616        }
617        return getterLabelName16a;
618    }
619
620   /**
621    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getSetterLabelName()
622    * @return String
623    */
624    protected abstract String handleGetSetterLabelName();
625
626    private String __setterLabelName17a;
627    private boolean __setterLabelName17aSet = false;
628
629    /**
630     * Returns the setter name for the label name of the display attribute of the manageable entity.
631     * @return (String)handleGetSetterLabelName()
632     */
633    public final String getSetterLabelName()
634    {
635        String setterLabelName17a = this.__setterLabelName17a;
636        if (!this.__setterLabelName17aSet)
637        {
638            // setterLabelName has no pre constraints
639            setterLabelName17a = handleGetSetterLabelName();
640            // setterLabelName has no post constraints
641            this.__setterLabelName17a = setterLabelName17a;
642            if (isMetafacadePropertyCachingEnabled())
643            {
644                this.__setterLabelName17aSet = true;
645            }
646        }
647        return setterLabelName17a;
648    }
649
650   /**
651    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCacheType()
652    * @return String
653    */
654    protected abstract String handleGetCacheType();
655
656    private String __cacheType18a;
657    private boolean __cacheType18aSet = false;
658
659    /**
660     * Provides the cache policy for the entity association Collection.
661     * Posible values are NONE, READ_WRITE, NONSTRICT_READ_WRITE, READ_ONLY, TRANSACTIONAL.
662     * @return (String)handleGetCacheType()
663     */
664    public final String getCacheType()
665    {
666        String cacheType18a = this.__cacheType18a;
667        if (!this.__cacheType18aSet)
668        {
669            // cacheType has no pre constraints
670            cacheType18a = handleGetCacheType();
671            // cacheType has no post constraints
672            this.__cacheType18a = cacheType18a;
673            if (isMetafacadePropertyCachingEnabled())
674            {
675                this.__cacheType18aSet = true;
676            }
677        }
678        return cacheType18a;
679    }
680
681   /**
682    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isAssociationCacheEnabled()
683    * @return boolean
684    */
685    protected abstract boolean handleIsAssociationCacheEnabled();
686
687    private boolean __associationCacheEnabled19a;
688    private boolean __associationCacheEnabled19aSet = false;
689
690    /**
691     * Returns true if association caching has been enabled via namespace property
692     * hibernateEnableAssociationCache.
693     * @return (boolean)handleIsAssociationCacheEnabled()
694     */
695    public final boolean isAssociationCacheEnabled()
696    {
697        boolean associationCacheEnabled19a = this.__associationCacheEnabled19a;
698        if (!this.__associationCacheEnabled19aSet)
699        {
700            // associationCacheEnabled has no pre constraints
701            associationCacheEnabled19a = handleIsAssociationCacheEnabled();
702            // associationCacheEnabled has no post constraints
703            this.__associationCacheEnabled19a = associationCacheEnabled19a;
704            if (isMetafacadePropertyCachingEnabled())
705            {
706                this.__associationCacheEnabled19aSet = true;
707            }
708        }
709        return associationCacheEnabled19a;
710    }
711
712   /**
713    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCollectionTypeImplementation()
714    * @return String
715    */
716    protected abstract String handleGetCollectionTypeImplementation();
717
718    private String __collectionTypeImplementation20a;
719    private boolean __collectionTypeImplementation20aSet = false;
720
721    /**
722     * The actual implementation of the collection type.
723     * @return (String)handleGetCollectionTypeImplementation()
724     */
725    public final String getCollectionTypeImplementation()
726    {
727        String collectionTypeImplementation20a = this.__collectionTypeImplementation20a;
728        if (!this.__collectionTypeImplementation20aSet)
729        {
730            // collectionTypeImplementation has no pre constraints
731            collectionTypeImplementation20a = handleGetCollectionTypeImplementation();
732            // collectionTypeImplementation has no post constraints
733            this.__collectionTypeImplementation20a = collectionTypeImplementation20a;
734            if (isMetafacadePropertyCachingEnabled())
735            {
736                this.__collectionTypeImplementation20aSet = true;
737            }
738        }
739        return collectionTypeImplementation20a;
740    }
741
742   /**
743    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isCollection()
744    * @return boolean
745    */
746    protected abstract boolean handleIsCollection();
747
748    private boolean __collection21a;
749    private boolean __collection21aSet = false;
750
751    /**
752     * Returns true if the collection type is a collection.  This will only be the case if the
753     * association end multiplicity is defined as ordered.
754     * @return (boolean)handleIsCollection()
755     */
756    public final boolean isCollection()
757    {
758        boolean collection21a = this.__collection21a;
759        if (!this.__collection21aSet)
760        {
761            // collection has no pre constraints
762            collection21a = handleIsCollection();
763            // collection has no post constraints
764            this.__collection21a = collection21a;
765            if (isMetafacadePropertyCachingEnabled())
766            {
767                this.__collection21aSet = true;
768            }
769        }
770        return collection21a;
771    }
772
773   /**
774    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCollectionIndexType()
775    * @return String
776    */
777    protected abstract String handleGetCollectionIndexType();
778
779    private String __collectionIndexType22a;
780    private boolean __collectionIndexType22aSet = false;
781
782    /**
783     * this will only apply for Maps; it will return the type of the attribute specified on the
784     * CollectionIndexName tagged value
785     * @return (String)handleGetCollectionIndexType()
786     */
787    public final String getCollectionIndexType()
788    {
789        String collectionIndexType22a = this.__collectionIndexType22a;
790        if (!this.__collectionIndexType22aSet)
791        {
792            // collectionIndexType has no pre constraints
793            collectionIndexType22a = handleGetCollectionIndexType();
794            // collectionIndexType has no post constraints
795            this.__collectionIndexType22a = collectionIndexType22a;
796            if (isMetafacadePropertyCachingEnabled())
797            {
798                this.__collectionIndexType22aSet = true;
799            }
800        }
801        return collectionIndexType22a;
802    }
803
804   /**
805    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCollectionIndexName()
806    * @return String
807    */
808    protected abstract String handleGetCollectionIndexName();
809
810    private String __collectionIndexName23a;
811    private boolean __collectionIndexName23aSet = false;
812
813    /**
814     * Returns the association end collection index name.
815     * @return (String)handleGetCollectionIndexName()
816     */
817    public final String getCollectionIndexName()
818    {
819        String collectionIndexName23a = this.__collectionIndexName23a;
820        if (!this.__collectionIndexName23aSet)
821        {
822            // collectionIndexName has no pre constraints
823            collectionIndexName23a = handleGetCollectionIndexName();
824            // collectionIndexName has no post constraints
825            this.__collectionIndexName23a = collectionIndexName23a;
826            if (isMetafacadePropertyCachingEnabled())
827            {
828                this.__collectionIndexName23aSet = true;
829            }
830        }
831        return collectionIndexName23a;
832    }
833
834   /**
835    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getDefaultCollectionInterface()
836    * @return String
837    */
838    protected abstract String handleGetDefaultCollectionInterface();
839
840    private String __defaultCollectionInterface24a;
841    private boolean __defaultCollectionInterface24aSet = false;
842
843    /**
844     * Returns the default collection interface from namespace descriptor.
845     * @return (String)handleGetDefaultCollectionInterface()
846     */
847    public final String getDefaultCollectionInterface()
848    {
849        String defaultCollectionInterface24a = this.__defaultCollectionInterface24a;
850        if (!this.__defaultCollectionInterface24aSet)
851        {
852            // defaultCollectionInterface has no pre constraints
853            defaultCollectionInterface24a = handleGetDefaultCollectionInterface();
854            // defaultCollectionInterface has no post constraints
855            this.__defaultCollectionInterface24a = defaultCollectionInterface24a;
856            if (isMetafacadePropertyCachingEnabled())
857            {
858                this.__defaultCollectionInterface24aSet = true;
859            }
860        }
861        return defaultCollectionInterface24a;
862    }
863
864   /**
865    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isCollectionInterfaceSortedSet()
866    * @return boolean
867    */
868    protected abstract boolean handleIsCollectionInterfaceSortedSet();
869
870    private boolean __collectionInterfaceSortedSet25a;
871    private boolean __collectionInterfaceSortedSet25aSet = false;
872
873    /**
874     * Returns true if the collection interface for this association end is java.util.SortedSet.
875     * @return (boolean)handleIsCollectionInterfaceSortedSet()
876     */
877    public final boolean isCollectionInterfaceSortedSet()
878    {
879        boolean collectionInterfaceSortedSet25a = this.__collectionInterfaceSortedSet25a;
880        if (!this.__collectionInterfaceSortedSet25aSet)
881        {
882            // collectionInterfaceSortedSet has no pre constraints
883            collectionInterfaceSortedSet25a = handleIsCollectionInterfaceSortedSet();
884            // collectionInterfaceSortedSet has no post constraints
885            this.__collectionInterfaceSortedSet25a = collectionInterfaceSortedSet25a;
886            if (isMetafacadePropertyCachingEnabled())
887            {
888                this.__collectionInterfaceSortedSet25aSet = true;
889            }
890        }
891        return collectionInterfaceSortedSet25a;
892    }
893
894   /**
895    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getCollectionTypeImplemenationClass()
896    * @return String
897    */
898    protected abstract String handleGetCollectionTypeImplemenationClass();
899
900    private String __collectionTypeImplemenationClass26a;
901    private boolean __collectionTypeImplemenationClass26aSet = false;
902
903    /**
904     * The fully qualified class name of the collection implementation type.
905     * @return (String)handleGetCollectionTypeImplemenationClass()
906     */
907    public final String getCollectionTypeImplemenationClass()
908    {
909        String collectionTypeImplemenationClass26a = this.__collectionTypeImplemenationClass26a;
910        if (!this.__collectionTypeImplemenationClass26aSet)
911        {
912            // collectionTypeImplemenationClass has no pre constraints
913            collectionTypeImplemenationClass26a = handleGetCollectionTypeImplemenationClass();
914            // collectionTypeImplemenationClass has no post constraints
915            this.__collectionTypeImplemenationClass26a = collectionTypeImplemenationClass26a;
916            if (isMetafacadePropertyCachingEnabled())
917            {
918                this.__collectionTypeImplemenationClass26aSet = true;
919            }
920        }
921        return collectionTypeImplemenationClass26a;
922    }
923
924   /**
925    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#getHibernateCascadeType()
926    * @return String
927    */
928    protected abstract String handleGetHibernateCascadeType();
929
930    private String __hibernateCascadeType27a;
931    private boolean __hibernateCascadeType27aSet = false;
932
933    /**
934     * Returns the Hibernate cascade attribute of this association end.
935     * @return (String)handleGetHibernateCascadeType()
936     */
937    public final String getHibernateCascadeType()
938    {
939        String hibernateCascadeType27a = this.__hibernateCascadeType27a;
940        if (!this.__hibernateCascadeType27aSet)
941        {
942            // hibernateCascadeType has no pre constraints
943            hibernateCascadeType27a = handleGetHibernateCascadeType();
944            // hibernateCascadeType has no post constraints
945            this.__hibernateCascadeType27a = hibernateCascadeType27a;
946            if (isMetafacadePropertyCachingEnabled())
947            {
948                this.__hibernateCascadeType27aSet = true;
949            }
950        }
951        return hibernateCascadeType27a;
952    }
953
954   /**
955    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isHibernateCascadeExists()
956    * @return boolean
957    */
958    protected abstract boolean handleIsHibernateCascadeExists();
959
960    private boolean __hibernateCascadeExists28a;
961    private boolean __hibernateCascadeExists28aSet = false;
962
963    /**
964     * Returns true if a Hibernate cascade attribute is defined for this association end.
965     * @return (boolean)handleIsHibernateCascadeExists()
966     */
967    public final boolean isHibernateCascadeExists()
968    {
969        boolean hibernateCascadeExists28a = this.__hibernateCascadeExists28a;
970        if (!this.__hibernateCascadeExists28aSet)
971        {
972            // hibernateCascadeExists has no pre constraints
973            hibernateCascadeExists28a = handleIsHibernateCascadeExists();
974            // hibernateCascadeExists has no post constraints
975            this.__hibernateCascadeExists28a = hibernateCascadeExists28a;
976            if (isMetafacadePropertyCachingEnabled())
977            {
978                this.__hibernateCascadeExists28aSet = true;
979            }
980        }
981        return hibernateCascadeExists28a;
982    }
983
984   /**
985    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isForeignKeyConstraintDefined()
986    * @return boolean
987    */
988    protected abstract boolean handleIsForeignKeyConstraintDefined();
989
990    private boolean __foreignKeyConstraintDefined29a;
991    private boolean __foreignKeyConstraintDefined29aSet = false;
992
993    /**
994     * Returns true if a foreign key constraint has been defined explicitly by the user.  Otherwise
995     * returns false.  This will determine if the ForeignKey annotation will be rendered.  We
996     * require this because there is no clean way of defining the constraint name for all
997     * constraints as there may be a chance that two constraints may have the same name. This
998     * vilates the database integrity.
999     * @return (boolean)handleIsForeignKeyConstraintDefined()
1000     */
1001    public final boolean isForeignKeyConstraintDefined()
1002    {
1003        boolean foreignKeyConstraintDefined29a = this.__foreignKeyConstraintDefined29a;
1004        if (!this.__foreignKeyConstraintDefined29aSet)
1005        {
1006            // foreignKeyConstraintDefined has no pre constraints
1007            foreignKeyConstraintDefined29a = handleIsForeignKeyConstraintDefined();
1008            // foreignKeyConstraintDefined has no post constraints
1009            this.__foreignKeyConstraintDefined29a = foreignKeyConstraintDefined29a;
1010            if (isMetafacadePropertyCachingEnabled())
1011            {
1012                this.__foreignKeyConstraintDefined29aSet = true;
1013            }
1014        }
1015        return foreignKeyConstraintDefined29a;
1016    }
1017
1018   /**
1019    * @see org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade#isColumnNullable()
1020    * @return boolean
1021    */
1022    protected abstract boolean handleIsColumnNullable();
1023
1024    private boolean __columnNullable30a;
1025    private boolean __columnNullable30aSet = false;
1026
1027    /**
1028     * Whether the column can be nullable.  False for identifier and unique fields.  If
1029     * andromda_persistence_column_nullable tag is set, the tagged value is used.  Otherwise,
1030     * determine if this attribute is required from the multiplicity set on the attribute.
1031     * @return (boolean)handleIsColumnNullable()
1032     */
1033    public final boolean isColumnNullable()
1034    {
1035        boolean columnNullable30a = this.__columnNullable30a;
1036        if (!this.__columnNullable30aSet)
1037        {
1038            // columnNullable has no pre constraints
1039            columnNullable30a = handleIsColumnNullable();
1040            // columnNullable has no post constraints
1041            this.__columnNullable30a = columnNullable30a;
1042            if (isMetafacadePropertyCachingEnabled())
1043            {
1044                this.__columnNullable30aSet = true;
1045            }
1046        }
1047        return columnNullable30a;
1048    }
1049
1050    // ---------------- business methods ----------------------
1051
1052    /**
1053     * Method to be implemented in descendants
1054     * Returns true if the tagged value with the specified name exists for the association end.
1055     * @param name
1056     * @return boolean
1057     */
1058    protected abstract boolean handleHasTaggedValue(String name);
1059
1060    /**
1061     * Returns true if the tagged value with the specified name exists for the association end.
1062     * @param name String
1063     * TODO: Model Documentation for
1064     * org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade.hasTaggedValue(name)
1065     * @return handleHasTaggedValue(name)
1066     */
1067    public boolean hasTaggedValue(String name)
1068    {
1069        // hasTaggedValue has no pre constraints
1070        boolean returnValue = handleHasTaggedValue(name);
1071        // hasTaggedValue has no post constraints
1072        return returnValue;
1073    }
1074
1075    /**
1076     * Method to be implemented in descendants
1077     * Returns the name of the foreign key constraint to use for name property of
1078     * org.hibernate.annotations.ForeignKey annotation used for Many-To-One,
1079     * One-To-One and Many-To-Many relationships.
1080     * @param suffix
1081     * @return String
1082     */
1083    protected abstract String handleGetForeignKeyConstraintName(String suffix);
1084
1085    /**
1086     * Returns the name of the foreign key constraint to use for name property of
1087     * org.hibernate.annotations.ForeignKey annotation used for Many-To-One,
1088     * One-To-One and Many-To-Many relationships.
1089     * @param suffix String
1090     * This is the referenced primary key column name.
1091     * @return handleGetForeignKeyConstraintName(suffix)
1092     */
1093    public String getForeignKeyConstraintName(String suffix)
1094    {
1095        // getForeignKeyConstraintName has no pre constraints
1096        String returnValue = handleGetForeignKeyConstraintName(suffix);
1097        // getForeignKeyConstraintName has no post constraints
1098        return returnValue;
1099    }
1100
1101    /**
1102     * Method to be implemented in descendants
1103     * The actual implementation of the collection type.
1104     * @param arg
1105     * @return String
1106     */
1107    protected abstract String handleGetCollectionTypeImplementation(String arg);
1108
1109    /**
1110     * The actual implementation of the collection type.
1111     * @param arg String
1112     * Arguememt to the Collection type implemenation constructor.
1113     * @return handleGetCollectionTypeImplementation(arg)
1114     */
1115    public String getCollectionTypeImplementation(String arg)
1116    {
1117        // getCollectionTypeImplementation has no pre constraints
1118        String returnValue = handleGetCollectionTypeImplementation(arg);
1119        // getCollectionTypeImplementation has no post constraints
1120        return returnValue;
1121    }
1122
1123    /**
1124     * Method to be implemented in descendants
1125     * Returns the name of the foreign key to use for name property of JoinColumn/InverseJoinColumn
1126     * used in JoinTable for One-To-Many and Many-To-Many relationships.
1127     * @param suffix
1128     * @return String
1129     */
1130    protected abstract String handleGetForeignKeyName(String suffix);
1131
1132    /**
1133     * Returns the name of the foreign key to use for name property of JoinColumn/InverseJoinColumn
1134     * used in JoinTable for One-To-Many and Many-To-Many relationships.
1135     * @param suffix String
1136     * TODO: Model Documentation for
1137     * org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade.getForeignKeyName(suffix)
1138     * @return handleGetForeignKeyName(suffix)
1139     */
1140    public String getForeignKeyName(String suffix)
1141    {
1142        // getForeignKeyName has no pre constraints
1143        String returnValue = handleGetForeignKeyName(suffix);
1144        // getForeignKeyName has no post constraints
1145        return returnValue;
1146    }
1147
1148    /**
1149     * @return true
1150     * @see EntityAssociationEnd
1151     */
1152    public boolean isEntityAssociationEndMetaType()
1153    {
1154        return true;
1155    }
1156
1157    /**
1158     * @return true
1159     * @see AssociationEndFacade
1160     */
1161    public boolean isAssociationEndFacadeMetaType()
1162    {
1163        return true;
1164    }
1165
1166    /**
1167     * @return true
1168     * @see ModelElementFacade
1169     */
1170    public boolean isModelElementFacadeMetaType()
1171    {
1172        return true;
1173    }
1174
1175    // ----------- delegates to EntityAssociationEnd ------------
1176    /**
1177     * A name suitable for use when adding new elements to this association end in programming code.
1178     * @see AssociationEndFacade#getAdderName()
1179     */
1180    public String getAdderName()
1181    {
1182        return this.getSuperEntityAssociationEnd().getAdderName();
1183    }
1184
1185    /**
1186     * Returns the value of the 'Aggregation' attribute (none, shared, composite). The default value
1187     * is "none". The literals are from the enumeration org.eclipse.uml2.uml.AggregationKind.
1188     * Specifies the kind of aggregation that applies to the Property.
1189     * @see AssociationEndFacade#getAggregationKind()
1190     */
1191    public String getAggregationKind()
1192    {
1193        return this.getSuperEntityAssociationEnd().getAggregationKind();
1194    }
1195
1196    /**
1197     * The association owning this association end.
1198     * @see AssociationEndFacade#getAssociation()
1199     */
1200    public AssociationFacade getAssociation()
1201    {
1202        return this.getSuperEntityAssociationEnd().getAssociation();
1203    }
1204
1205    /**
1206     * UML2: Returns the value of the 'Default' attribute. Specifies a String that represents a
1207     * value to be used when no argument is supplied for the Property. A String that is evaluated to
1208     * give a default value for the Property when an object of the owning Classifier is
1209     * instantiated.  Can be something like: new ValueObject(values);
1210     * @see AssociationEndFacade#getDefault()
1211     */
1212    public String getDefault()
1213    {
1214        return this.getSuperEntityAssociationEnd().getDefault();
1215    }
1216
1217    /**
1218     * A name suitable for use when accessing this association end in programming code.
1219     * @see AssociationEndFacade#getGetterName()
1220     */
1221    public String getGetterName()
1222    {
1223        return this.getSuperEntityAssociationEnd().getGetterName();
1224    }
1225
1226    /**
1227     * The name of the type that is returned on the accessor and mutator operations,  determined in
1228     * part by the multiplicity.
1229     * @see AssociationEndFacade#getGetterSetterTypeName()
1230     */
1231    public String getGetterSetterTypeName()
1232    {
1233        return this.getSuperEntityAssociationEnd().getGetterSetterTypeName();
1234    }
1235
1236    /**
1237     * the lower value for the multiplicity
1238     * -only applicable for UML2
1239     * @see AssociationEndFacade#getLower()
1240     */
1241    public int getLower()
1242    {
1243        return this.getSuperEntityAssociationEnd().getLower();
1244    }
1245
1246    /**
1247     * The other association end owned by this end's association.
1248     * @see AssociationEndFacade#getOtherEnd()
1249     */
1250    public AssociationEndFacade getOtherEnd()
1251    {
1252        return this.getSuperEntityAssociationEnd().getOtherEnd();
1253    }
1254
1255    /**
1256     * A name suitable for use when removing element from this association end in programming code.
1257     * @see AssociationEndFacade#getRemoverName()
1258     */
1259    public String getRemoverName()
1260    {
1261        return this.getSuperEntityAssociationEnd().getRemoverName();
1262    }
1263
1264    /**
1265     * A name suitable for use when accessing this association end in programming code.
1266     * @see AssociationEndFacade#getSetterName()
1267     */
1268    public String getSetterName()
1269    {
1270        return this.getSuperEntityAssociationEnd().getSetterName();
1271    }
1272
1273    /**
1274     * The classifier attached to this association end.
1275     * @see AssociationEndFacade#getType()
1276     */
1277    public ClassifierFacade getType()
1278    {
1279        return this.getSuperEntityAssociationEnd().getType();
1280    }
1281
1282    /**
1283     * the upper value for the multiplicity (will be -1 for *)
1284     * -only applicable for UML2
1285     * @see AssociationEndFacade#getUpper()
1286     */
1287    public int getUpper()
1288    {
1289        return this.getSuperEntityAssociationEnd().getUpper();
1290    }
1291
1292    /**
1293     * True if this association end represents an aggregation relationship.
1294     * @see AssociationEndFacade#isAggregation()
1295     */
1296    public boolean isAggregation()
1297    {
1298        return this.getSuperEntityAssociationEnd().isAggregation();
1299    }
1300
1301    /**
1302     * Is true if update of one side of the association should also update the other side. false if
1303     * not.
1304     * @see AssociationEndFacade#isBidirectional()
1305     */
1306    public boolean isBidirectional()
1307    {
1308        return this.getSuperEntityAssociationEnd().isBidirectional();
1309    }
1310
1311    /**
1312     * Returns whether or not (true/false) this association end is the child end of the assocation
1313     * (i.e. the other end's aggregation is composition).
1314     * @see AssociationEndFacade#isChild()
1315     */
1316    public boolean isChild()
1317    {
1318        return this.getSuperEntityAssociationEnd().isChild();
1319    }
1320
1321    /**
1322     * True if this association end represents a composition relationship.
1323     * @see AssociationEndFacade#isComposition()
1324     */
1325    public boolean isComposition()
1326    {
1327        return this.getSuperEntityAssociationEnd().isComposition();
1328    }
1329
1330    /**
1331     * If the association end is derived (its value is computed). UML2 only. UML14 always returns
1332     * false. Default=false.
1333     * @see AssociationEndFacade#isDerived()
1334     */
1335    public boolean isDerived()
1336    {
1337        return this.getSuperEntityAssociationEnd().isDerived();
1338    }
1339
1340    /**
1341     * IsLeaf property in the association end property. If true, attribute is final, cannot be
1342     * extended or implemented by a descendant. Default=false.
1343     * @see AssociationEndFacade#isLeaf()
1344     */
1345    public boolean isLeaf()
1346    {
1347        return this.getSuperEntityAssociationEnd().isLeaf();
1348    }
1349
1350    /**
1351     * True if this association end's multiplicity is greater than one.
1352     * @see AssociationEndFacade#isMany()
1353     */
1354    public boolean isMany()
1355    {
1356        return this.getSuperEntityAssociationEnd().isMany();
1357    }
1358
1359    /**
1360     * True if this association end's and the other end's multiplicities are both many.
1361     * @see AssociationEndFacade#isMany2Many()
1362     */
1363    public boolean isMany2Many()
1364    {
1365        return this.getSuperEntityAssociationEnd().isMany2Many();
1366    }
1367
1368    /**
1369     * True if this association end's multiplicity is many while the other end's is one.
1370     * @see AssociationEndFacade#isMany2One()
1371     */
1372    public boolean isMany2One()
1373    {
1374        return this.getSuperEntityAssociationEnd().isMany2One();
1375    }
1376
1377    /**
1378     * True if it is possible to navigate from the other end to this association end .
1379     * @see AssociationEndFacade#isNavigable()
1380     */
1381    public boolean isNavigable()
1382    {
1383        return this.getSuperEntityAssociationEnd().isNavigable();
1384    }
1385
1386    /**
1387     * True if this association end's multiplicity is one while the other end's is many.
1388     * @see AssociationEndFacade#isOne2Many()
1389     */
1390    public boolean isOne2Many()
1391    {
1392        return this.getSuperEntityAssociationEnd().isOne2Many();
1393    }
1394
1395    /**
1396     * True if this association end's and the other end's multiplicities are both one.
1397     * @see AssociationEndFacade#isOne2One()
1398     */
1399    public boolean isOne2One()
1400    {
1401        return this.getSuperEntityAssociationEnd().isOne2One();
1402    }
1403
1404    /**
1405     * Indicates whether or not the association ends are ordered (if multiplicity is greater than
1406     * 1).
1407     * @see AssociationEndFacade#isOrdered()
1408     */
1409    public boolean isOrdered()
1410    {
1411        return this.getSuperEntityAssociationEnd().isOrdered();
1412    }
1413
1414    /**
1415     * True if the association end cannot be changed.
1416     * @see AssociationEndFacade#isReadOnly()
1417     */
1418    public boolean isReadOnly()
1419    {
1420        return this.getSuperEntityAssociationEnd().isReadOnly();
1421    }
1422
1423    /**
1424     * True if this association end's multiplicity is strictly greater than zero.
1425     * @see AssociationEndFacade#isRequired()
1426     */
1427    public boolean isRequired()
1428    {
1429        return this.getSuperEntityAssociationEnd().isRequired();
1430    }
1431
1432    /**
1433     * Indicates if this associationEnd is 'static', meaning it has a classifier scope.
1434     * @see AssociationEndFacade#isStatic()
1435     */
1436    public boolean isStatic()
1437    {
1438        return this.getSuperEntityAssociationEnd().isStatic();
1439    }
1440
1441    /**
1442     * UML2: If the association attribute is unique within the Collection type. UML14 always returns
1443     * false. Unique+Ordered determines the implementation Collection type. Default=false.
1444     * @see AssociationEndFacade#isUnique()
1445     */
1446    public boolean isUnique()
1447    {
1448        return this.getSuperEntityAssociationEnd().isUnique();
1449    }
1450
1451    /**
1452     * The name of the index to create on a column that persists the foreign key attribute.
1453     * @see EntityAssociationEnd#getColumnIndex()
1454     */
1455    public String getColumnIndex()
1456    {
1457        return this.getSuperEntityAssociationEnd().getColumnIndex();
1458    }
1459
1460    /**
1461     * The name of the column that makes up the foreign key.
1462     * @see EntityAssociationEnd#getColumnName()
1463     */
1464    public String getColumnName()
1465    {
1466        return this.getSuperEntityAssociationEnd().getColumnName();
1467    }
1468
1469    /**
1470     * The name of the foreign key constraint to use for databases.
1471     * @see EntityAssociationEnd#getForeignKeyConstraintName()
1472     */
1473    public String getForeignKeyConstraintName()
1474    {
1475        return this.getSuperEntityAssociationEnd().getForeignKeyConstraintName();
1476    }
1477
1478    /**
1479     * The current foreign key suffix specified for this entity association end facade.
1480     * @see EntityAssociationEnd#getForeignKeySuffix()
1481     */
1482    public String getForeignKeySuffix()
1483    {
1484        return this.getSuperEntityAssociationEnd().getForeignKeySuffix();
1485    }
1486
1487    /**
1488     * The SQL type for this the foreign key column of this association end.
1489     * @see EntityAssociationEnd#getSqlType()
1490     */
1491    public String getSqlType()
1492    {
1493        return this.getSuperEntityAssociationEnd().getSqlType();
1494    }
1495
1496    /**
1497     * The name of the unique-key that this unique association end belongs
1498     * @see EntityAssociationEnd#getUniqueGroup()
1499     */
1500    public String getUniqueGroup()
1501    {
1502        return this.getSuperEntityAssociationEnd().getUniqueGroup();
1503    }
1504
1505    /**
1506     * Indicates whether or not a foreign identifier should be used for the entity that owns this
1507     * association end.  This would only make sense in the case of a child in a one-to-one
1508     * parent-child association.  If this flag is true, then the identifier of this entity should
1509     * also be used as the foreign key to the related parent entity.
1510     * @see EntityAssociationEnd#isForeignIdentifier()
1511     */
1512    public boolean isForeignIdentifier()
1513    {
1514        return this.getSuperEntityAssociationEnd().isForeignIdentifier();
1515    }
1516
1517    /**
1518     * True if this association is an identifier for its entity.
1519     * @see EntityAssociationEnd#isIdentifier()
1520     */
1521    public boolean isIdentifier()
1522    {
1523        return this.getSuperEntityAssociationEnd().isIdentifier();
1524    }
1525
1526    /**
1527     * True if the associationEnd is marked with identifiers stereotype, false otherwise.
1528     * @see EntityAssociationEnd#isIdentifiersPresent()
1529     */
1530    public boolean isIdentifiersPresent()
1531    {
1532        return this.getSuperEntityAssociationEnd().isIdentifiersPresent();
1533    }
1534
1535    /**
1536     * Indicates this association end should be ignored by the persistence layer.
1537     * @see EntityAssociationEnd#isTransient()
1538     */
1539    public boolean isTransient()
1540    {
1541        return this.getSuperEntityAssociationEnd().isTransient();
1542    }
1543
1544    /**
1545     * Copies all tagged values from the given ModelElementFacade to this model element facade.
1546     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1547     */
1548    public void copyTaggedValues(ModelElementFacade element)
1549    {
1550        this.getSuperEntityAssociationEnd().copyTaggedValues(element);
1551    }
1552
1553    /**
1554     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1555     * one found will be returned.
1556     * @see ModelElementFacade#findTaggedValue(String tagName)
1557     */
1558    public Object findTaggedValue(String tagName)
1559    {
1560        return this.getSuperEntityAssociationEnd().findTaggedValue(tagName);
1561    }
1562
1563    /**
1564     * Returns all the values for the tagged value with the specified name. The returned collection
1565     * will contains only String instances, or will be empty. Never null.
1566     * @see ModelElementFacade#findTaggedValues(String tagName)
1567     */
1568    public Collection<Object> findTaggedValues(String tagName)
1569    {
1570        return this.getSuperEntityAssociationEnd().findTaggedValues(tagName);
1571    }
1572
1573    /**
1574     * Returns the fully qualified name of the model element. The fully qualified name includes
1575     * complete package qualified name of the underlying model element. The templates parameter will
1576     * be replaced by the correct one given the binding relation of the parameter to this element.
1577     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1578     */
1579    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1580    {
1581        return this.getSuperEntityAssociationEnd().getBindedFullyQualifiedName(bindedElement);
1582    }
1583
1584    /**
1585     * Gets all constraints belonging to the model element.
1586     * @see ModelElementFacade#getConstraints()
1587     */
1588    public Collection<ConstraintFacade> getConstraints()
1589    {
1590        return this.getSuperEntityAssociationEnd().getConstraints();
1591    }
1592
1593    /**
1594     * Returns the constraints of the argument kind that have been placed onto this model. Typical
1595     * kinds are "inv", "pre" and "post". Other kinds are possible.
1596     * @see ModelElementFacade#getConstraints(String kind)
1597     */
1598    public Collection<ConstraintFacade> getConstraints(String kind)
1599    {
1600        return this.getSuperEntityAssociationEnd().getConstraints(kind);
1601    }
1602
1603    /**
1604     * Gets the documentation for the model element, The indent argument is prefixed to each line.
1605     * By default this method wraps lines after 64 characters.
1606     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1607     * @see ModelElementFacade#getDocumentation(String indent)
1608     */
1609    public String getDocumentation(String indent)
1610    {
1611        return this.getSuperEntityAssociationEnd().getDocumentation(indent);
1612    }
1613
1614    /**
1615     * This method returns the documentation for this model element, with the lines wrapped after
1616     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1617     * required. By default paragraphs are returned as HTML.
1618     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1619     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1620     */
1621    public String getDocumentation(String indent, int lineLength)
1622    {
1623        return this.getSuperEntityAssociationEnd().getDocumentation(indent, lineLength);
1624    }
1625
1626    /**
1627     * This method returns the documentation for this model element, with the lines wrapped after
1628     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1629     * required. HTML style determines if HTML Escaping is applied.
1630     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1631     */
1632    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1633    {
1634        return this.getSuperEntityAssociationEnd().getDocumentation(indent, lineLength, htmlStyle);
1635    }
1636
1637    /**
1638     * The fully qualified name of this model element.
1639     * @see ModelElementFacade#getFullyQualifiedName()
1640     */
1641    public String getFullyQualifiedName()
1642    {
1643        return this.getSuperEntityAssociationEnd().getFullyQualifiedName();
1644    }
1645
1646    /**
1647     * Returns the fully qualified name of the model element. The fully qualified name includes
1648     * complete package qualified name of the underlying model element.  If modelName is true, then
1649     * the original name of the model element (the name contained within the model) will be the name
1650     * returned, otherwise a name from a language mapping will be returned.
1651     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1652     */
1653    public String getFullyQualifiedName(boolean modelName)
1654    {
1655        return this.getSuperEntityAssociationEnd().getFullyQualifiedName(modelName);
1656    }
1657
1658    /**
1659     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1660     * '/'.
1661     * @see ModelElementFacade#getFullyQualifiedNamePath()
1662     */
1663    public String getFullyQualifiedNamePath()
1664    {
1665        return this.getSuperEntityAssociationEnd().getFullyQualifiedNamePath();
1666    }
1667
1668    /**
1669     * Gets the unique identifier of the underlying model element.
1670     * @see ModelElementFacade#getId()
1671     */
1672    public String getId()
1673    {
1674        return this.getSuperEntityAssociationEnd().getId();
1675    }
1676
1677    /**
1678     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1679     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1680     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1681     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1682     * JDK5 compiler level.
1683     * @see ModelElementFacade#getKeywords()
1684     */
1685    public Collection<String> getKeywords()
1686    {
1687        return this.getSuperEntityAssociationEnd().getKeywords();
1688    }
1689
1690    /**
1691     * UML2: Retrieves a localized label for this named element.
1692     * @see ModelElementFacade#getLabel()
1693     */
1694    public String getLabel()
1695    {
1696        return this.getSuperEntityAssociationEnd().getLabel();
1697    }
1698
1699    /**
1700     * The language mappings that have been set for this model element.
1701     * @see ModelElementFacade#getLanguageMappings()
1702     */
1703    public TypeMappings getLanguageMappings()
1704    {
1705        return this.getSuperEntityAssociationEnd().getLanguageMappings();
1706    }
1707
1708    /**
1709     * Return the model containing this model element (multiple models may be loaded and processed
1710     * at the same time).
1711     * @see ModelElementFacade#getModel()
1712     */
1713    public ModelFacade getModel()
1714    {
1715        return this.getSuperEntityAssociationEnd().getModel();
1716    }
1717
1718    /**
1719     * The name of the model element.
1720     * @see ModelElementFacade#getName()
1721     */
1722    public String getName()
1723    {
1724        return this.getSuperEntityAssociationEnd().getName();
1725    }
1726
1727    /**
1728     * Gets the package to which this model element belongs.
1729     * @see ModelElementFacade#getPackage()
1730     */
1731    public ModelElementFacade getPackage()
1732    {
1733        return this.getSuperEntityAssociationEnd().getPackage();
1734    }
1735
1736    /**
1737     * The name of this model element's package.
1738     * @see ModelElementFacade#getPackageName()
1739     */
1740    public String getPackageName()
1741    {
1742        return this.getSuperEntityAssociationEnd().getPackageName();
1743    }
1744
1745    /**
1746     * Gets the package name (optionally providing the ability to retrieve the model name and not
1747     * the mapped name).
1748     * @see ModelElementFacade#getPackageName(boolean modelName)
1749     */
1750    public String getPackageName(boolean modelName)
1751    {
1752        return this.getSuperEntityAssociationEnd().getPackageName(modelName);
1753    }
1754
1755    /**
1756     * Returns the package as a path, the returned value always starts with out a slash '/'.
1757     * @see ModelElementFacade#getPackagePath()
1758     */
1759    public String getPackagePath()
1760    {
1761        return this.getSuperEntityAssociationEnd().getPackagePath();
1762    }
1763
1764    /**
1765     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1766     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1767     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1768     * the name of the NamedElement itself.
1769     * @see ModelElementFacade#getQualifiedName()
1770     */
1771    public String getQualifiedName()
1772    {
1773        return this.getSuperEntityAssociationEnd().getQualifiedName();
1774    }
1775
1776    /**
1777     * Gets the root package for the model element.
1778     * @see ModelElementFacade#getRootPackage()
1779     */
1780    public PackageFacade getRootPackage()
1781    {
1782        return this.getSuperEntityAssociationEnd().getRootPackage();
1783    }
1784
1785    /**
1786     * Gets the dependencies for which this model element is the source.
1787     * @see ModelElementFacade#getSourceDependencies()
1788     */
1789    public Collection<DependencyFacade> getSourceDependencies()
1790    {
1791        return this.getSuperEntityAssociationEnd().getSourceDependencies();
1792    }
1793
1794    /**
1795     * If this model element is the context of an activity graph, this represents that activity
1796     * graph.
1797     * @see ModelElementFacade#getStateMachineContext()
1798     */
1799    public StateMachineFacade getStateMachineContext()
1800    {
1801        return this.getSuperEntityAssociationEnd().getStateMachineContext();
1802    }
1803
1804    /**
1805     * The collection of ALL stereotype names for this model element.
1806     * @see ModelElementFacade#getStereotypeNames()
1807     */
1808    public Collection<String> getStereotypeNames()
1809    {
1810        return this.getSuperEntityAssociationEnd().getStereotypeNames();
1811    }
1812
1813    /**
1814     * Gets all stereotypes for this model element.
1815     * @see ModelElementFacade#getStereotypes()
1816     */
1817    public Collection<StereotypeFacade> getStereotypes()
1818    {
1819        return this.getSuperEntityAssociationEnd().getStereotypes();
1820    }
1821
1822    /**
1823     * Return the TaggedValues associated with this model element, under all stereotypes.
1824     * @see ModelElementFacade#getTaggedValues()
1825     */
1826    public Collection<TaggedValueFacade> getTaggedValues()
1827    {
1828        return this.getSuperEntityAssociationEnd().getTaggedValues();
1829    }
1830
1831    /**
1832     * Gets the dependencies for which this model element is the target.
1833     * @see ModelElementFacade#getTargetDependencies()
1834     */
1835    public Collection<DependencyFacade> getTargetDependencies()
1836    {
1837        return this.getSuperEntityAssociationEnd().getTargetDependencies();
1838    }
1839
1840    /**
1841     * Get the template parameter for this model element having the parameterName
1842     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1843     */
1844    public Object getTemplateParameter(String parameterName)
1845    {
1846        return this.getSuperEntityAssociationEnd().getTemplateParameter(parameterName);
1847    }
1848
1849    /**
1850     * Get the template parameters for this model element
1851     * @see ModelElementFacade#getTemplateParameters()
1852     */
1853    public Collection<TemplateParameterFacade> getTemplateParameters()
1854    {
1855        return this.getSuperEntityAssociationEnd().getTemplateParameters();
1856    }
1857
1858    /**
1859     * The visibility (i.e. public, private, protected or package) of the model element, will
1860     * attempt a lookup for these values in the language mappings (if any).
1861     * @see ModelElementFacade#getVisibility()
1862     */
1863    public String getVisibility()
1864    {
1865        return this.getSuperEntityAssociationEnd().getVisibility();
1866    }
1867
1868    /**
1869     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1870     * is taken into account when searching for the stereotype), false otherwise.
1871     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1872     */
1873    public boolean hasExactStereotype(String stereotypeName)
1874    {
1875        return this.getSuperEntityAssociationEnd().hasExactStereotype(stereotypeName);
1876    }
1877
1878    /**
1879     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1880     * pipe, semicolon, or << >>
1881     * @see ModelElementFacade#hasKeyword(String keywordName)
1882     */
1883    public boolean hasKeyword(String keywordName)
1884    {
1885        return this.getSuperEntityAssociationEnd().hasKeyword(keywordName);
1886    }
1887
1888    /**
1889     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1890     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1891     * one of the stereotype's ancestors has a matching name this method will return true, false
1892     * otherwise.
1893     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1894     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1895     * method with 'stereotypeName' defined as 'exception' the method would return true since
1896     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1897     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1898     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1899     */
1900    public boolean hasStereotype(String stereotypeName)
1901    {
1902        return this.getSuperEntityAssociationEnd().hasStereotype(stereotypeName);
1903    }
1904
1905    /**
1906     * True if there are target dependencies from this element that are instances of BindingFacade.
1907     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1908     * @see ModelElementFacade#isBindingDependenciesPresent()
1909     */
1910    public boolean isBindingDependenciesPresent()
1911    {
1912        return this.getSuperEntityAssociationEnd().isBindingDependenciesPresent();
1913    }
1914
1915    /**
1916     * Indicates if any constraints are present on this model element.
1917     * @see ModelElementFacade#isConstraintsPresent()
1918     */
1919    public boolean isConstraintsPresent()
1920    {
1921        return this.getSuperEntityAssociationEnd().isConstraintsPresent();
1922    }
1923
1924    /**
1925     * Indicates if any documentation is present on this model element.
1926     * @see ModelElementFacade#isDocumentationPresent()
1927     */
1928    public boolean isDocumentationPresent()
1929    {
1930        return this.getSuperEntityAssociationEnd().isDocumentationPresent();
1931    }
1932
1933    /**
1934     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1935     * @see ModelElementFacade#isReservedWord()
1936     */
1937    public boolean isReservedWord()
1938    {
1939        return this.getSuperEntityAssociationEnd().isReservedWord();
1940    }
1941
1942    /**
1943     * True is there are template parameters on this model element. For UML2, applies to Class,
1944     * Operation, Property, and Parameter.
1945     * @see ModelElementFacade#isTemplateParametersPresent()
1946     */
1947    public boolean isTemplateParametersPresent()
1948    {
1949        return this.getSuperEntityAssociationEnd().isTemplateParametersPresent();
1950    }
1951
1952    /**
1953     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1954     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1955     * Enumerations and Interfaces, optionally applies on other model elements.
1956     * @see ModelElementFacade#isValidIdentifierName()
1957     */
1958    public boolean isValidIdentifierName()
1959    {
1960        return this.getSuperEntityAssociationEnd().isValidIdentifierName();
1961    }
1962
1963    /**
1964     * Searches for the constraint with the specified 'name' on this model element, and if found
1965     * translates it using the specified 'translation' from a translation library discovered by the
1966     * framework.
1967     * @see ModelElementFacade#translateConstraint(String name, String translation)
1968     */
1969    public String translateConstraint(String name, String translation)
1970    {
1971        return this.getSuperEntityAssociationEnd().translateConstraint(name, translation);
1972    }
1973
1974    /**
1975     * Translates all constraints belonging to this model element with the given 'translation'.
1976     * @see ModelElementFacade#translateConstraints(String translation)
1977     */
1978    public String[] translateConstraints(String translation)
1979    {
1980        return this.getSuperEntityAssociationEnd().translateConstraints(translation);
1981    }
1982
1983    /**
1984     * Translates the constraints of the specified 'kind' belonging to this model element.
1985     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1986     */
1987    public String[] translateConstraints(String kind, String translation)
1988    {
1989        return this.getSuperEntityAssociationEnd().translateConstraints(kind, translation);
1990    }
1991
1992    /**
1993     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1994     */
1995    @Override
1996    public void initialize()
1997    {
1998        this.getSuperEntityAssociationEnd().initialize();
1999    }
2000
2001    /**
2002     * @return Object getSuperEntityAssociationEnd().getValidationOwner()
2003     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
2004     */
2005    @Override
2006    public Object getValidationOwner()
2007    {
2008        Object owner = this.getSuperEntityAssociationEnd().getValidationOwner();
2009        return owner;
2010    }
2011
2012    /**
2013     * @return String getSuperEntityAssociationEnd().getValidationName()
2014     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
2015     */
2016    @Override
2017    public String getValidationName()
2018    {
2019        String name = this.getSuperEntityAssociationEnd().getValidationName();
2020        return name;
2021    }
2022
2023    /**
2024     * @param validationMessages Collection<ModelValidationMessage>
2025     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
2026     */
2027    @Override
2028    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
2029    {
2030        this.getSuperEntityAssociationEnd().validateInvariants(validationMessages);
2031    }
2032
2033    /**
2034     * The property that stores the name of the metafacade.
2035     */
2036    private static final String NAME_PROPERTY = "name";
2037    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
2038
2039    /**
2040     * @see Object#toString()
2041     */
2042    @Override
2043    public String toString()
2044    {
2045        final StringBuilder toString = new StringBuilder(this.getClass().getName());
2046        toString.append("[");
2047        try
2048        {
2049            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
2050        }
2051        catch (final Throwable tryAgain)
2052        {
2053            try
2054            {
2055                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
2056            }
2057            catch (final Throwable ignore)
2058            {
2059                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
2060            }
2061        }
2062        toString.append("]");
2063        return toString.toString();
2064    }
2065}