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.EntityAttribute;
018import org.andromda.metafacades.uml.ManageableEntityAssociationEnd;
019import org.andromda.metafacades.uml.ModelElementFacade;
020import org.andromda.metafacades.uml.ModelFacade;
021import org.andromda.metafacades.uml.PackageFacade;
022import org.andromda.metafacades.uml.StateMachineFacade;
023import org.andromda.metafacades.uml.StereotypeFacade;
024import org.andromda.metafacades.uml.TaggedValueFacade;
025import org.andromda.metafacades.uml.TemplateParameterFacade;
026import org.andromda.metafacades.uml.TypeMappings;
027
028/**
029 * TODO: Model Documentation for
030 * org.andromda.cartridges.ejb3.metafacades.EJB3ManageableEntityAssociationEndFacade
031 * MetafacadeLogic for EJB3ManageableEntityAssociationEndFacade
032 *
033 * @see EJB3ManageableEntityAssociationEndFacade
034 */
035public abstract class EJB3ManageableEntityAssociationEndFacadeLogic
036    extends MetafacadeBase
037    implements EJB3ManageableEntityAssociationEndFacade
038{
039    /**
040     * The underlying UML object
041     * @see Object
042     */
043    protected Object metaObject;
044
045    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
046     * @param metaObjectIn
047     * @param context
048     */
049    protected EJB3ManageableEntityAssociationEndFacadeLogic(Object metaObjectIn, String context)
050    {
051        super(metaObjectIn, getContext(context));
052        this.superManageableEntityAssociationEnd =
053           (ManageableEntityAssociationEnd)
054            MetafacadeFactory.getInstance().createFacadeImpl(
055                    "org.andromda.metafacades.uml.ManageableEntityAssociationEnd",
056                    metaObjectIn,
057                    getContext(context));
058        this.superEJB3AssociationEndFacade =
059           (EJB3AssociationEndFacade)
060            MetafacadeFactory.getInstance().createFacadeImpl(
061                    "org.andromda.cartridges.ejb3.metafacades.EJB3AssociationEndFacade",
062                    metaObjectIn,
063                    getContext(context));
064        this.metaObject = metaObjectIn;
065    }
066
067    /**
068     * Gets the context for this metafacade logic instance.
069     * @param context String. Set to EJB3ManageableEntityAssociationEndFacade if null
070     * @return context String
071     */
072    private static String getContext(String context)
073    {
074        if (context == null)
075        {
076            context = "org.andromda.cartridges.ejb3.metafacades.EJB3ManageableEntityAssociationEndFacade";
077        }
078        return context;
079    }
080
081    private ManageableEntityAssociationEnd superManageableEntityAssociationEnd;
082    private boolean superManageableEntityAssociationEndInitialized = false;
083
084    /**
085     * Gets the ManageableEntityAssociationEnd parent instance.
086     * @return this.superManageableEntityAssociationEnd ManageableEntityAssociationEnd
087     */
088    protected ManageableEntityAssociationEnd getSuperManageableEntityAssociationEnd()
089    {
090        if (!this.superManageableEntityAssociationEndInitialized)
091        {
092            ((MetafacadeBase)this.superManageableEntityAssociationEnd).setMetafacadeContext(this.getMetafacadeContext());
093            this.superManageableEntityAssociationEndInitialized = true;
094        }
095        return this.superManageableEntityAssociationEnd;
096    }
097
098    private EJB3AssociationEndFacade superEJB3AssociationEndFacade;
099    private boolean superEJB3AssociationEndFacadeInitialized = false;
100
101    /**
102     * Gets the EJB3AssociationEndFacade parent instance.
103     * @return this.superEJB3AssociationEndFacade EJB3AssociationEndFacade
104     */
105    protected EJB3AssociationEndFacade getSuperEJB3AssociationEndFacade()
106    {
107        if (!this.superEJB3AssociationEndFacadeInitialized)
108        {
109            ((MetafacadeBase)this.superEJB3AssociationEndFacade).setMetafacadeContext(this.getMetafacadeContext());
110            this.superEJB3AssociationEndFacadeInitialized = true;
111        }
112        return this.superEJB3AssociationEndFacade;
113    }
114
115    /** Reset context only for non-root metafacades
116     * @param context
117     * @see org.andromda.core.metafacade.MetafacadeBase#resetMetafacadeContext(String context)
118     */
119    @Override
120    public void resetMetafacadeContext(String context)
121    {
122        if (!this.contextRoot) // reset context only for non-root metafacades
123        {
124            context = getContext(context);  // to have same value as in original constructor call
125            setMetafacadeContext (context);
126            if (this.superManageableEntityAssociationEndInitialized)
127            {
128                ((MetafacadeBase)this.superManageableEntityAssociationEnd).resetMetafacadeContext(context);
129            }
130            if (this.superEJB3AssociationEndFacadeInitialized)
131            {
132                ((MetafacadeBase)this.superEJB3AssociationEndFacade).resetMetafacadeContext(context);
133            }
134        }
135    }
136
137    /**
138     * @return boolean true always
139     * @see EJB3ManageableEntityAssociationEndFacade
140     */
141    public boolean isEJB3ManageableEntityAssociationEndFacadeMetaType()
142    {
143        return true;
144    }
145
146    /**
147     * @return true
148     * @see EJB3AssociationEndFacade
149     */
150    public boolean isEJB3AssociationEndFacadeMetaType()
151    {
152        return true;
153    }
154
155    /**
156     * @return true
157     * @see ManageableEntityAssociationEnd
158     */
159    public boolean isManageableEntityAssociationEndMetaType()
160    {
161        return true;
162    }
163
164    /**
165     * @return true
166     * @see org.andromda.metafacades.uml.EntityAssociationEnd
167     */
168    public boolean isEntityAssociationEndMetaType()
169    {
170        return true;
171    }
172
173    /**
174     * @return true
175     * @see AssociationEndFacade
176     */
177    public boolean isAssociationEndFacadeMetaType()
178    {
179        return true;
180    }
181
182    /**
183     * @return true
184     * @see ModelElementFacade
185     */
186    public boolean isModelElementFacadeMetaType()
187    {
188        return true;
189    }
190
191    // ----------- delegates to ManageableEntityAssociationEnd ------------
192    /**
193     * Represents an attribute of an entity.
194     * @see ManageableEntityAssociationEnd#getManageableIdentifier()
195     */
196    public EntityAttribute getManageableIdentifier()
197    {
198        return this.getSuperManageableEntityAssociationEnd().getManageableIdentifier();
199    }
200
201    /**
202     * Whether or not this association end should be displayed.
203     * @see ManageableEntityAssociationEnd#isDisplay()
204     */
205    public boolean isDisplay()
206    {
207        return this.getSuperManageableEntityAssociationEnd().isDisplay();
208    }
209
210    // ----------- delegates to EJB3AssociationEndFacade ------------
211    /**
212     * Returns the default cascade property specified for UML aggregation.
213     * @see EJB3AssociationEndFacade#getAggregationCascadeType()
214     */
215    public String getAggregationCascadeType()
216    {
217        return this.getSuperEJB3AssociationEndFacade().getAggregationCascadeType();
218    }
219
220    /**
221     * Provides the cache policy for the entity association Collection.
222     * Posible values are NONE, READ_WRITE, NONSTRICT_READ_WRITE, READ_ONLY, TRANSACTIONAL.
223     * @see EJB3AssociationEndFacade#getCacheType()
224     */
225    public String getCacheType()
226    {
227        return this.getSuperEJB3AssociationEndFacade().getCacheType();
228    }
229
230    /**
231     * Return the cascade type attributes as an array of this association end or null if no relevant
232     * cascade attribute is found.
233     * @see EJB3AssociationEndFacade#getCascadeType()
234     */
235    public String getCascadeType()
236    {
237        return this.getSuperEJB3AssociationEndFacade().getCascadeType();
238    }
239
240    /**
241     * Returns the association end collection index name.
242     * @see EJB3AssociationEndFacade#getCollectionIndexName()
243     */
244    public String getCollectionIndexName()
245    {
246        return this.getSuperEJB3AssociationEndFacade().getCollectionIndexName();
247    }
248
249    /**
250     * this will only apply for Maps; it will return the type of the attribute specified on the
251     * CollectionIndexName tagged value
252     * @see EJB3AssociationEndFacade#getCollectionIndexType()
253     */
254    public String getCollectionIndexType()
255    {
256        return this.getSuperEJB3AssociationEndFacade().getCollectionIndexType();
257    }
258
259    /**
260     * Returns the collection type defined on this association end using the
261     * andromda_persistence_collection_type tagged value.
262     * If undefined use the following strategy:
263     * - If ordered collection type: return a list
264     * - Otherwise, return the default association collection type.
265     * @see EJB3AssociationEndFacade#getCollectionType()
266     */
267    public String getCollectionType()
268    {
269        return this.getSuperEJB3AssociationEndFacade().getCollectionType();
270    }
271
272    /**
273     * The fully qualified class name of the collection implementation type.
274     * @see EJB3AssociationEndFacade#getCollectionTypeImplemenationClass()
275     */
276    public String getCollectionTypeImplemenationClass()
277    {
278        return this.getSuperEJB3AssociationEndFacade().getCollectionTypeImplemenationClass();
279    }
280
281    /**
282     * The actual implementation of the collection type.
283     * @see EJB3AssociationEndFacade#getCollectionTypeImplementation()
284     */
285    public String getCollectionTypeImplementation()
286    {
287        return this.getSuperEJB3AssociationEndFacade().getCollectionTypeImplementation();
288    }
289
290    /**
291     * The actual implementation of the collection type.
292     * @see EJB3AssociationEndFacade#getCollectionTypeImplementation(String arg)
293     */
294    public String getCollectionTypeImplementation(String arg)
295    {
296        return this.getSuperEJB3AssociationEndFacade().getCollectionTypeImplementation(arg);
297    }
298
299    /**
300     * Defines the column definition DDL used when creating table schema - use to override default
301     * container DDL.
302     * @see EJB3AssociationEndFacade#getColumnDefinition()
303     */
304    public String getColumnDefinition()
305    {
306        return this.getSuperEJB3AssociationEndFacade().getColumnDefinition();
307    }
308
309    /**
310     * Returns the default cascade property specified for UML composition.
311     * @see EJB3AssociationEndFacade#getCompositionCascadeType()
312     */
313    public String getCompositionCascadeType()
314    {
315        return this.getSuperEJB3AssociationEndFacade().getCompositionCascadeType();
316    }
317
318    /**
319     * Returns the default collection interface from namespace descriptor.
320     * @see EJB3AssociationEndFacade#getDefaultCollectionInterface()
321     */
322    public String getDefaultCollectionInterface()
323    {
324        return this.getSuperEJB3AssociationEndFacade().getDefaultCollectionInterface();
325    }
326
327    /**
328     * Get the fetch type for this association end(CMR).
329     * If no fetch type tagged value is specified and COMPOSITION_DEFINES_EAGER_LOADING is enabled,
330     * then:
331     * <ul><li>aggregation: lazy-loaded</li><li>composition: eager-loaded</li></ul>
332     * Otherwise, the default fetch type for CMR of type One2Many and Many2Many is LAZY.
333     * Default fetch type for CMR of type Many2One and One2One is EAGER.
334     * This will return either EAGER or LAZY.
335     * @see EJB3AssociationEndFacade#getFetchType()
336     */
337    public String getFetchType()
338    {
339        return this.getSuperEJB3AssociationEndFacade().getFetchType();
340    }
341
342    /**
343     * Returns the name of the foreign key constraint to use for name property of
344     * org.hibernate.annotations.ForeignKey annotation used for Many-To-One,
345     * One-To-One and Many-To-Many relationships.
346     * @see EJB3AssociationEndFacade#getForeignKeyConstraintName(String suffix)
347     */
348    public String getForeignKeyConstraintName(String suffix)
349    {
350        return this.getSuperEJB3AssociationEndFacade().getForeignKeyConstraintName(suffix);
351    }
352
353    /**
354     * Returns the name of the foreign key to use for name property of JoinColumn/InverseJoinColumn
355     * used in JoinTable for One-To-Many and Many-To-Many relationships.
356     * @see EJB3AssociationEndFacade#getForeignKeyName(String suffix)
357     */
358    public String getForeignKeyName(String suffix)
359    {
360        return this.getSuperEJB3AssociationEndFacade().getForeignKeyName(suffix);
361    }
362
363    /**
364     * Returns the getter name for the label name of the display attribute of the manageable entity.
365     * @see EJB3AssociationEndFacade#getGetterLabelName()
366     */
367    public String getGetterLabelName()
368    {
369        return this.getSuperEJB3AssociationEndFacade().getGetterLabelName();
370    }
371
372    /**
373     * Returns the Hibernate cascade attribute of this association end.
374     * @see EJB3AssociationEndFacade#getHibernateCascadeType()
375     */
376    public String getHibernateCascadeType()
377    {
378        return this.getSuperEJB3AssociationEndFacade().getHibernateCascadeType();
379    }
380
381    /**
382     * Returns the label name for the association end used as the display attribute for manageable
383     * entities.
384     * @see EJB3AssociationEndFacade#getLabelName()
385     */
386    public String getLabelName()
387    {
388        return this.getSuperEJB3AssociationEndFacade().getLabelName();
389    }
390
391    /**
392     * The order by clause set to order the returning Collection object on the many side of an
393     * association.
394     * @see EJB3AssociationEndFacade#getOrderByClause()
395     */
396    public String getOrderByClause()
397    {
398        return this.getSuperEJB3AssociationEndFacade().getOrderByClause();
399    }
400
401    /**
402     * Returns the setter name for the label name of the display attribute of the manageable entity.
403     * @see EJB3AssociationEndFacade#getSetterLabelName()
404     */
405    public String getSetterLabelName()
406    {
407        return this.getSuperEJB3AssociationEndFacade().getSetterLabelName();
408    }
409
410    /**
411     * Returns true if the tagged value with the specified name exists for the association end.
412     * @see EJB3AssociationEndFacade#hasTaggedValue(String name)
413     */
414    public boolean hasTaggedValue(String name)
415    {
416        return this.getSuperEJB3AssociationEndFacade().hasTaggedValue(name);
417    }
418
419    /**
420     * Returns true if association caching has been enabled via namespace property
421     * hibernateEnableAssociationCache.
422     * @see EJB3AssociationEndFacade#isAssociationCacheEnabled()
423     */
424    public boolean isAssociationCacheEnabled()
425    {
426        return this.getSuperEJB3AssociationEndFacade().isAssociationCacheEnabled();
427    }
428
429    /**
430     * Returns true if the collection type is a collection.  This will only be the case if the
431     * association end multiplicity is defined as ordered.
432     * @see EJB3AssociationEndFacade#isCollection()
433     */
434    public boolean isCollection()
435    {
436        return this.getSuperEJB3AssociationEndFacade().isCollection();
437    }
438
439    /**
440     * Returns true if the collection interface for this association end is java.util.SortedSet.
441     * @see EJB3AssociationEndFacade#isCollectionInterfaceSortedSet()
442     */
443    public boolean isCollectionInterfaceSortedSet()
444    {
445        return this.getSuperEJB3AssociationEndFacade().isCollectionInterfaceSortedSet();
446    }
447
448    /**
449     * Whether the column can be nullable.  False for identifier and unique fields.  If
450     * andromda_persistence_column_nullable tag is set, the tagged value is used.  Otherwise,
451     * determine if this attribute is required from the multiplicity set on the attribute.
452     * @see EJB3AssociationEndFacade#isColumnNullable()
453     */
454    public boolean isColumnNullable()
455    {
456        return this.getSuperEJB3AssociationEndFacade().isColumnNullable();
457    }
458
459    /**
460     * Determine if the fetch type for this entity relationship end is eager loading.
461     * @see EJB3AssociationEndFacade#isEager()
462     */
463    public boolean isEager()
464    {
465        return this.getSuperEJB3AssociationEndFacade().isEager();
466    }
467
468    /**
469     * Returns true if a foreign key constraint has been defined explicitly by the user.  Otherwise
470     * returns false.  This will determine if the ForeignKey annotation will be rendered.  We
471     * require this because there is no clean way of defining the constraint name for all
472     * constraints as there may be a chance that two constraints may have the same name. This
473     * vilates the database integrity.
474     * @see EJB3AssociationEndFacade#isForeignKeyConstraintDefined()
475     */
476    public boolean isForeignKeyConstraintDefined()
477    {
478        return this.getSuperEJB3AssociationEndFacade().isForeignKeyConstraintDefined();
479    }
480
481    /**
482     * Returns true if a Hibernate cascade attribute is defined for this association end.
483     * @see EJB3AssociationEndFacade#isHibernateCascadeExists()
484     */
485    public boolean isHibernateCascadeExists()
486    {
487        return this.getSuperEJB3AssociationEndFacade().isHibernateCascadeExists();
488    }
489
490    /**
491     * Determine if the fetch type for this entity relationship end is lazy loading.
492     * @see EJB3AssociationEndFacade#isLazy()
493     */
494    public boolean isLazy()
495    {
496        return this.getSuperEJB3AssociationEndFacade().isLazy();
497    }
498
499    /**
500     * Returns true if the collection type is a list.  This will only be the case if the association
501     * end multiplicity is defined as ordered.
502     * @see EJB3AssociationEndFacade#isList()
503     */
504    public boolean isList()
505    {
506        return this.getSuperEJB3AssociationEndFacade().isList();
507    }
508
509    /**
510     * Returns true if the collection type is a map.  This will only be the case if the association
511     * end multiplicity is defined as unordered.
512     * @see EJB3AssociationEndFacade#isMap()
513     */
514    public boolean isMap()
515    {
516        return this.getSuperEJB3AssociationEndFacade().isMap();
517    }
518
519    /**
520     * Sets the optional attribute on the annotation to determine if a null value is allowed.  If
521     * set to false, non-null relationships must always exist.  If the andromda_persistence_optional
522     * tag is set, then use the tagged value, otherwise determine if null value is allowed by way of
523     * multiplicity on the association end.
524     * @see EJB3AssociationEndFacade#isOptional()
525     */
526    public boolean isOptional()
527    {
528        return this.getSuperEJB3AssociationEndFacade().isOptional();
529    }
530
531    /**
532     * Determines if this association end if the owning side.  Used in one-to-one and many-to-many
533     * relationships.
534     * @see EJB3AssociationEndFacade#isOwning()
535     */
536    public boolean isOwning()
537    {
538        return this.getSuperEJB3AssociationEndFacade().isOwning();
539    }
540
541    /**
542     * Returns true if the collection type is a set.  This will only be the case if the association
543     * end multiplicity is defined as unordered.
544     * @see EJB3AssociationEndFacade#isSet()
545     */
546    public boolean isSet()
547    {
548        return this.getSuperEJB3AssociationEndFacade().isSet();
549    }
550
551    /**
552     * A name suitable for use when adding new elements to this association end in programming code.
553     * @see AssociationEndFacade#getAdderName()
554     */
555    public String getAdderName()
556    {
557        return this.getSuperEJB3AssociationEndFacade().getAdderName();
558    }
559
560    /**
561     * Returns the value of the 'Aggregation' attribute (none, shared, composite). The default value
562     * is "none". The literals are from the enumeration org.eclipse.uml2.uml.AggregationKind.
563     * Specifies the kind of aggregation that applies to the Property.
564     * @see AssociationEndFacade#getAggregationKind()
565     */
566    public String getAggregationKind()
567    {
568        return this.getSuperEJB3AssociationEndFacade().getAggregationKind();
569    }
570
571    /**
572     * The association owning this association end.
573     * @see AssociationEndFacade#getAssociation()
574     */
575    public AssociationFacade getAssociation()
576    {
577        return this.getSuperEJB3AssociationEndFacade().getAssociation();
578    }
579
580    /**
581     * UML2: Returns the value of the 'Default' attribute. Specifies a String that represents a
582     * value to be used when no argument is supplied for the Property. A String that is evaluated to
583     * give a default value for the Property when an object of the owning Classifier is
584     * instantiated.  Can be something like: new ValueObject(values);
585     * @see AssociationEndFacade#getDefault()
586     */
587    public String getDefault()
588    {
589        return this.getSuperEJB3AssociationEndFacade().getDefault();
590    }
591
592    /**
593     * A name suitable for use when accessing this association end in programming code.
594     * @see AssociationEndFacade#getGetterName()
595     */
596    public String getGetterName()
597    {
598        return this.getSuperEJB3AssociationEndFacade().getGetterName();
599    }
600
601    /**
602     * The name of the type that is returned on the accessor and mutator operations,  determined in
603     * part by the multiplicity.
604     * @see AssociationEndFacade#getGetterSetterTypeName()
605     */
606    public String getGetterSetterTypeName()
607    {
608        return this.getSuperEJB3AssociationEndFacade().getGetterSetterTypeName();
609    }
610
611    /**
612     * the lower value for the multiplicity
613     * -only applicable for UML2
614     * @see AssociationEndFacade#getLower()
615     */
616    public int getLower()
617    {
618        return this.getSuperEJB3AssociationEndFacade().getLower();
619    }
620
621    /**
622     * The other association end owned by this end's association.
623     * @see AssociationEndFacade#getOtherEnd()
624     */
625    public AssociationEndFacade getOtherEnd()
626    {
627        return this.getSuperEJB3AssociationEndFacade().getOtherEnd();
628    }
629
630    /**
631     * A name suitable for use when removing element from this association end in programming code.
632     * @see AssociationEndFacade#getRemoverName()
633     */
634    public String getRemoverName()
635    {
636        return this.getSuperEJB3AssociationEndFacade().getRemoverName();
637    }
638
639    /**
640     * A name suitable for use when accessing this association end in programming code.
641     * @see AssociationEndFacade#getSetterName()
642     */
643    public String getSetterName()
644    {
645        return this.getSuperEJB3AssociationEndFacade().getSetterName();
646    }
647
648    /**
649     * The classifier attached to this association end.
650     * @see AssociationEndFacade#getType()
651     */
652    public ClassifierFacade getType()
653    {
654        return this.getSuperEJB3AssociationEndFacade().getType();
655    }
656
657    /**
658     * the upper value for the multiplicity (will be -1 for *)
659     * -only applicable for UML2
660     * @see AssociationEndFacade#getUpper()
661     */
662    public int getUpper()
663    {
664        return this.getSuperEJB3AssociationEndFacade().getUpper();
665    }
666
667    /**
668     * True if this association end represents an aggregation relationship.
669     * @see AssociationEndFacade#isAggregation()
670     */
671    public boolean isAggregation()
672    {
673        return this.getSuperEJB3AssociationEndFacade().isAggregation();
674    }
675
676    /**
677     * Is true if update of one side of the association should also update the other side. false if
678     * not.
679     * @see AssociationEndFacade#isBidirectional()
680     */
681    public boolean isBidirectional()
682    {
683        return this.getSuperEJB3AssociationEndFacade().isBidirectional();
684    }
685
686    /**
687     * Returns whether or not (true/false) this association end is the child end of the assocation
688     * (i.e. the other end's aggregation is composition).
689     * @see AssociationEndFacade#isChild()
690     */
691    public boolean isChild()
692    {
693        return this.getSuperEJB3AssociationEndFacade().isChild();
694    }
695
696    /**
697     * True if this association end represents a composition relationship.
698     * @see AssociationEndFacade#isComposition()
699     */
700    public boolean isComposition()
701    {
702        return this.getSuperEJB3AssociationEndFacade().isComposition();
703    }
704
705    /**
706     * If the association end is derived (its value is computed). UML2 only. UML14 always returns
707     * false. Default=false.
708     * @see AssociationEndFacade#isDerived()
709     */
710    public boolean isDerived()
711    {
712        return this.getSuperEJB3AssociationEndFacade().isDerived();
713    }
714
715    /**
716     * IsLeaf property in the association end property. If true, attribute is final, cannot be
717     * extended or implemented by a descendant. Default=false.
718     * @see AssociationEndFacade#isLeaf()
719     */
720    public boolean isLeaf()
721    {
722        return this.getSuperEJB3AssociationEndFacade().isLeaf();
723    }
724
725    /**
726     * True if this association end's multiplicity is greater than one.
727     * @see AssociationEndFacade#isMany()
728     */
729    public boolean isMany()
730    {
731        return this.getSuperEJB3AssociationEndFacade().isMany();
732    }
733
734    /**
735     * True if this association end's and the other end's multiplicities are both many.
736     * @see AssociationEndFacade#isMany2Many()
737     */
738    public boolean isMany2Many()
739    {
740        return this.getSuperEJB3AssociationEndFacade().isMany2Many();
741    }
742
743    /**
744     * True if this association end's multiplicity is many while the other end's is one.
745     * @see AssociationEndFacade#isMany2One()
746     */
747    public boolean isMany2One()
748    {
749        return this.getSuperEJB3AssociationEndFacade().isMany2One();
750    }
751
752    /**
753     * True if it is possible to navigate from the other end to this association end .
754     * @see AssociationEndFacade#isNavigable()
755     */
756    public boolean isNavigable()
757    {
758        return this.getSuperEJB3AssociationEndFacade().isNavigable();
759    }
760
761    /**
762     * True if this association end's multiplicity is one while the other end's is many.
763     * @see AssociationEndFacade#isOne2Many()
764     */
765    public boolean isOne2Many()
766    {
767        return this.getSuperEJB3AssociationEndFacade().isOne2Many();
768    }
769
770    /**
771     * True if this association end's and the other end's multiplicities are both one.
772     * @see AssociationEndFacade#isOne2One()
773     */
774    public boolean isOne2One()
775    {
776        return this.getSuperEJB3AssociationEndFacade().isOne2One();
777    }
778
779    /**
780     * Indicates whether or not the association ends are ordered (if multiplicity is greater than
781     * 1).
782     * @see AssociationEndFacade#isOrdered()
783     */
784    public boolean isOrdered()
785    {
786        return this.getSuperEJB3AssociationEndFacade().isOrdered();
787    }
788
789    /**
790     * True if the association end cannot be changed.
791     * @see AssociationEndFacade#isReadOnly()
792     */
793    public boolean isReadOnly()
794    {
795        return this.getSuperEJB3AssociationEndFacade().isReadOnly();
796    }
797
798    /**
799     * True if this association end's multiplicity is strictly greater than zero.
800     * @see AssociationEndFacade#isRequired()
801     */
802    public boolean isRequired()
803    {
804        return this.getSuperEJB3AssociationEndFacade().isRequired();
805    }
806
807    /**
808     * Indicates if this associationEnd is 'static', meaning it has a classifier scope.
809     * @see AssociationEndFacade#isStatic()
810     */
811    public boolean isStatic()
812    {
813        return this.getSuperEJB3AssociationEndFacade().isStatic();
814    }
815
816    /**
817     * UML2: If the association attribute is unique within the Collection type. UML14 always returns
818     * false. Unique+Ordered determines the implementation Collection type. Default=false.
819     * @see AssociationEndFacade#isUnique()
820     */
821    public boolean isUnique()
822    {
823        return this.getSuperEJB3AssociationEndFacade().isUnique();
824    }
825
826    /**
827     * The name of the index to create on a column that persists the foreign key attribute.
828     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getColumnIndex()
829     */
830    public String getColumnIndex()
831    {
832        return this.getSuperEJB3AssociationEndFacade().getColumnIndex();
833    }
834
835    /**
836     * The name of the column that makes up the foreign key.
837     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getColumnName()
838     */
839    public String getColumnName()
840    {
841        return this.getSuperEJB3AssociationEndFacade().getColumnName();
842    }
843
844    /**
845     * The name of the foreign key constraint to use for databases.
846     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getForeignKeyConstraintName()
847     */
848    public String getForeignKeyConstraintName()
849    {
850        return this.getSuperEJB3AssociationEndFacade().getForeignKeyConstraintName();
851    }
852
853    /**
854     * The current foreign key suffix specified for this entity association end facade.
855     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getForeignKeySuffix()
856     */
857    public String getForeignKeySuffix()
858    {
859        return this.getSuperEJB3AssociationEndFacade().getForeignKeySuffix();
860    }
861
862    /**
863     * The SQL type for this the foreign key column of this association end.
864     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getSqlType()
865     */
866    public String getSqlType()
867    {
868        return this.getSuperEJB3AssociationEndFacade().getSqlType();
869    }
870
871    /**
872     * The name of the unique-key that this unique association end belongs
873     * @see org.andromda.metafacades.uml.EntityAssociationEnd#getUniqueGroup()
874     */
875    public String getUniqueGroup()
876    {
877        return this.getSuperEJB3AssociationEndFacade().getUniqueGroup();
878    }
879
880    /**
881     * Indicates whether or not a foreign identifier should be used for the entity that owns this
882     * association end.  This would only make sense in the case of a child in a one-to-one
883     * parent-child association.  If this flag is true, then the identifier of this entity should
884     * also be used as the foreign key to the related parent entity.
885     * @see org.andromda.metafacades.uml.EntityAssociationEnd#isForeignIdentifier()
886     */
887    public boolean isForeignIdentifier()
888    {
889        return this.getSuperEJB3AssociationEndFacade().isForeignIdentifier();
890    }
891
892    /**
893     * True if this association is an identifier for its entity.
894     * @see org.andromda.metafacades.uml.EntityAssociationEnd#isIdentifier()
895     */
896    public boolean isIdentifier()
897    {
898        return this.getSuperEJB3AssociationEndFacade().isIdentifier();
899    }
900
901    /**
902     * True if the associationEnd is marked with identifiers stereotype, false otherwise.
903     * @see org.andromda.metafacades.uml.EntityAssociationEnd#isIdentifiersPresent()
904     */
905    public boolean isIdentifiersPresent()
906    {
907        return this.getSuperEJB3AssociationEndFacade().isIdentifiersPresent();
908    }
909
910    /**
911     * Indicates this association end should be ignored by the persistence layer.
912     * @see org.andromda.metafacades.uml.EntityAssociationEnd#isTransient()
913     */
914    public boolean isTransient()
915    {
916        return this.getSuperEJB3AssociationEndFacade().isTransient();
917    }
918
919    /**
920     * Copies all tagged values from the given ModelElementFacade to this model element facade.
921     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
922     */
923    public void copyTaggedValues(ModelElementFacade element)
924    {
925        this.getSuperEJB3AssociationEndFacade().copyTaggedValues(element);
926    }
927
928    /**
929     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
930     * one found will be returned.
931     * @see ModelElementFacade#findTaggedValue(String tagName)
932     */
933    public Object findTaggedValue(String tagName)
934    {
935        return this.getSuperEJB3AssociationEndFacade().findTaggedValue(tagName);
936    }
937
938    /**
939     * Returns all the values for the tagged value with the specified name. The returned collection
940     * will contains only String instances, or will be empty. Never null.
941     * @see ModelElementFacade#findTaggedValues(String tagName)
942     */
943    public Collection<Object> findTaggedValues(String tagName)
944    {
945        return this.getSuperEJB3AssociationEndFacade().findTaggedValues(tagName);
946    }
947
948    /**
949     * Returns the fully qualified name of the model element. The fully qualified name includes
950     * complete package qualified name of the underlying model element. The templates parameter will
951     * be replaced by the correct one given the binding relation of the parameter to this element.
952     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
953     */
954    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
955    {
956        return this.getSuperEJB3AssociationEndFacade().getBindedFullyQualifiedName(bindedElement);
957    }
958
959    /**
960     * Gets all constraints belonging to the model element.
961     * @see ModelElementFacade#getConstraints()
962     */
963    public Collection<ConstraintFacade> getConstraints()
964    {
965        return this.getSuperEJB3AssociationEndFacade().getConstraints();
966    }
967
968    /**
969     * Returns the constraints of the argument kind that have been placed onto this model. Typical
970     * kinds are "inv", "pre" and "post". Other kinds are possible.
971     * @see ModelElementFacade#getConstraints(String kind)
972     */
973    public Collection<ConstraintFacade> getConstraints(String kind)
974    {
975        return this.getSuperEJB3AssociationEndFacade().getConstraints(kind);
976    }
977
978    /**
979     * Gets the documentation for the model element, The indent argument is prefixed to each line.
980     * By default this method wraps lines after 64 characters.
981     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
982     * @see ModelElementFacade#getDocumentation(String indent)
983     */
984    public String getDocumentation(String indent)
985    {
986        return this.getSuperEJB3AssociationEndFacade().getDocumentation(indent);
987    }
988
989    /**
990     * This method returns the documentation for this model element, with the lines wrapped after
991     * the specified number of characters, values of less than 1 will indicate no line wrapping is
992     * required. By default paragraphs are returned as HTML.
993     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
994     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
995     */
996    public String getDocumentation(String indent, int lineLength)
997    {
998        return this.getSuperEJB3AssociationEndFacade().getDocumentation(indent, lineLength);
999    }
1000
1001    /**
1002     * This method returns the documentation for this model element, with the lines wrapped after
1003     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1004     * required. HTML style determines if HTML Escaping is applied.
1005     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1006     */
1007    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1008    {
1009        return this.getSuperEJB3AssociationEndFacade().getDocumentation(indent, lineLength, htmlStyle);
1010    }
1011
1012    /**
1013     * The fully qualified name of this model element.
1014     * @see ModelElementFacade#getFullyQualifiedName()
1015     */
1016    public String getFullyQualifiedName()
1017    {
1018        return this.getSuperEJB3AssociationEndFacade().getFullyQualifiedName();
1019    }
1020
1021    /**
1022     * Returns the fully qualified name of the model element. The fully qualified name includes
1023     * complete package qualified name of the underlying model element.  If modelName is true, then
1024     * the original name of the model element (the name contained within the model) will be the name
1025     * returned, otherwise a name from a language mapping will be returned.
1026     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1027     */
1028    public String getFullyQualifiedName(boolean modelName)
1029    {
1030        return this.getSuperEJB3AssociationEndFacade().getFullyQualifiedName(modelName);
1031    }
1032
1033    /**
1034     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1035     * '/'.
1036     * @see ModelElementFacade#getFullyQualifiedNamePath()
1037     */
1038    public String getFullyQualifiedNamePath()
1039    {
1040        return this.getSuperEJB3AssociationEndFacade().getFullyQualifiedNamePath();
1041    }
1042
1043    /**
1044     * Gets the unique identifier of the underlying model element.
1045     * @see ModelElementFacade#getId()
1046     */
1047    public String getId()
1048    {
1049        return this.getSuperEJB3AssociationEndFacade().getId();
1050    }
1051
1052    /**
1053     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1054     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1055     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1056     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1057     * JDK5 compiler level.
1058     * @see ModelElementFacade#getKeywords()
1059     */
1060    public Collection<String> getKeywords()
1061    {
1062        return this.getSuperEJB3AssociationEndFacade().getKeywords();
1063    }
1064
1065    /**
1066     * UML2: Retrieves a localized label for this named element.
1067     * @see ModelElementFacade#getLabel()
1068     */
1069    public String getLabel()
1070    {
1071        return this.getSuperEJB3AssociationEndFacade().getLabel();
1072    }
1073
1074    /**
1075     * The language mappings that have been set for this model element.
1076     * @see ModelElementFacade#getLanguageMappings()
1077     */
1078    public TypeMappings getLanguageMappings()
1079    {
1080        return this.getSuperEJB3AssociationEndFacade().getLanguageMappings();
1081    }
1082
1083    /**
1084     * Return the model containing this model element (multiple models may be loaded and processed
1085     * at the same time).
1086     * @see ModelElementFacade#getModel()
1087     */
1088    public ModelFacade getModel()
1089    {
1090        return this.getSuperEJB3AssociationEndFacade().getModel();
1091    }
1092
1093    /**
1094     * The name of the model element.
1095     * @see ModelElementFacade#getName()
1096     */
1097    public String getName()
1098    {
1099        return this.getSuperEJB3AssociationEndFacade().getName();
1100    }
1101
1102    /**
1103     * Gets the package to which this model element belongs.
1104     * @see ModelElementFacade#getPackage()
1105     */
1106    public ModelElementFacade getPackage()
1107    {
1108        return this.getSuperEJB3AssociationEndFacade().getPackage();
1109    }
1110
1111    /**
1112     * The name of this model element's package.
1113     * @see ModelElementFacade#getPackageName()
1114     */
1115    public String getPackageName()
1116    {
1117        return this.getSuperEJB3AssociationEndFacade().getPackageName();
1118    }
1119
1120    /**
1121     * Gets the package name (optionally providing the ability to retrieve the model name and not
1122     * the mapped name).
1123     * @see ModelElementFacade#getPackageName(boolean modelName)
1124     */
1125    public String getPackageName(boolean modelName)
1126    {
1127        return this.getSuperEJB3AssociationEndFacade().getPackageName(modelName);
1128    }
1129
1130    /**
1131     * Returns the package as a path, the returned value always starts with out a slash '/'.
1132     * @see ModelElementFacade#getPackagePath()
1133     */
1134    public String getPackagePath()
1135    {
1136        return this.getSuperEJB3AssociationEndFacade().getPackagePath();
1137    }
1138
1139    /**
1140     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1141     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1142     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1143     * the name of the NamedElement itself.
1144     * @see ModelElementFacade#getQualifiedName()
1145     */
1146    public String getQualifiedName()
1147    {
1148        return this.getSuperEJB3AssociationEndFacade().getQualifiedName();
1149    }
1150
1151    /**
1152     * Gets the root package for the model element.
1153     * @see ModelElementFacade#getRootPackage()
1154     */
1155    public PackageFacade getRootPackage()
1156    {
1157        return this.getSuperEJB3AssociationEndFacade().getRootPackage();
1158    }
1159
1160    /**
1161     * Gets the dependencies for which this model element is the source.
1162     * @see ModelElementFacade#getSourceDependencies()
1163     */
1164    public Collection<DependencyFacade> getSourceDependencies()
1165    {
1166        return this.getSuperEJB3AssociationEndFacade().getSourceDependencies();
1167    }
1168
1169    /**
1170     * If this model element is the context of an activity graph, this represents that activity
1171     * graph.
1172     * @see ModelElementFacade#getStateMachineContext()
1173     */
1174    public StateMachineFacade getStateMachineContext()
1175    {
1176        return this.getSuperEJB3AssociationEndFacade().getStateMachineContext();
1177    }
1178
1179    /**
1180     * The collection of ALL stereotype names for this model element.
1181     * @see ModelElementFacade#getStereotypeNames()
1182     */
1183    public Collection<String> getStereotypeNames()
1184    {
1185        return this.getSuperEJB3AssociationEndFacade().getStereotypeNames();
1186    }
1187
1188    /**
1189     * Gets all stereotypes for this model element.
1190     * @see ModelElementFacade#getStereotypes()
1191     */
1192    public Collection<StereotypeFacade> getStereotypes()
1193    {
1194        return this.getSuperEJB3AssociationEndFacade().getStereotypes();
1195    }
1196
1197    /**
1198     * Return the TaggedValues associated with this model element, under all stereotypes.
1199     * @see ModelElementFacade#getTaggedValues()
1200     */
1201    public Collection<TaggedValueFacade> getTaggedValues()
1202    {
1203        return this.getSuperEJB3AssociationEndFacade().getTaggedValues();
1204    }
1205
1206    /**
1207     * Gets the dependencies for which this model element is the target.
1208     * @see ModelElementFacade#getTargetDependencies()
1209     */
1210    public Collection<DependencyFacade> getTargetDependencies()
1211    {
1212        return this.getSuperEJB3AssociationEndFacade().getTargetDependencies();
1213    }
1214
1215    /**
1216     * Get the template parameter for this model element having the parameterName
1217     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1218     */
1219    public Object getTemplateParameter(String parameterName)
1220    {
1221        return this.getSuperEJB3AssociationEndFacade().getTemplateParameter(parameterName);
1222    }
1223
1224    /**
1225     * Get the template parameters for this model element
1226     * @see ModelElementFacade#getTemplateParameters()
1227     */
1228    public Collection<TemplateParameterFacade> getTemplateParameters()
1229    {
1230        return this.getSuperEJB3AssociationEndFacade().getTemplateParameters();
1231    }
1232
1233    /**
1234     * The visibility (i.e. public, private, protected or package) of the model element, will
1235     * attempt a lookup for these values in the language mappings (if any).
1236     * @see ModelElementFacade#getVisibility()
1237     */
1238    public String getVisibility()
1239    {
1240        return this.getSuperEJB3AssociationEndFacade().getVisibility();
1241    }
1242
1243    /**
1244     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1245     * is taken into account when searching for the stereotype), false otherwise.
1246     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1247     */
1248    public boolean hasExactStereotype(String stereotypeName)
1249    {
1250        return this.getSuperEJB3AssociationEndFacade().hasExactStereotype(stereotypeName);
1251    }
1252
1253    /**
1254     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1255     * pipe, semicolon, or << >>
1256     * @see ModelElementFacade#hasKeyword(String keywordName)
1257     */
1258    public boolean hasKeyword(String keywordName)
1259    {
1260        return this.getSuperEJB3AssociationEndFacade().hasKeyword(keywordName);
1261    }
1262
1263    /**
1264     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1265     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1266     * one of the stereotype's ancestors has a matching name this method will return true, false
1267     * otherwise.
1268     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1269     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1270     * method with 'stereotypeName' defined as 'exception' the method would return true since
1271     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1272     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1273     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1274     */
1275    public boolean hasStereotype(String stereotypeName)
1276    {
1277        return this.getSuperEJB3AssociationEndFacade().hasStereotype(stereotypeName);
1278    }
1279
1280    /**
1281     * True if there are target dependencies from this element that are instances of BindingFacade.
1282     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1283     * @see ModelElementFacade#isBindingDependenciesPresent()
1284     */
1285    public boolean isBindingDependenciesPresent()
1286    {
1287        return this.getSuperEJB3AssociationEndFacade().isBindingDependenciesPresent();
1288    }
1289
1290    /**
1291     * Indicates if any constraints are present on this model element.
1292     * @see ModelElementFacade#isConstraintsPresent()
1293     */
1294    public boolean isConstraintsPresent()
1295    {
1296        return this.getSuperEJB3AssociationEndFacade().isConstraintsPresent();
1297    }
1298
1299    /**
1300     * Indicates if any documentation is present on this model element.
1301     * @see ModelElementFacade#isDocumentationPresent()
1302     */
1303    public boolean isDocumentationPresent()
1304    {
1305        return this.getSuperEJB3AssociationEndFacade().isDocumentationPresent();
1306    }
1307
1308    /**
1309     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1310     * @see ModelElementFacade#isReservedWord()
1311     */
1312    public boolean isReservedWord()
1313    {
1314        return this.getSuperEJB3AssociationEndFacade().isReservedWord();
1315    }
1316
1317    /**
1318     * True is there are template parameters on this model element. For UML2, applies to Class,
1319     * Operation, Property, and Parameter.
1320     * @see ModelElementFacade#isTemplateParametersPresent()
1321     */
1322    public boolean isTemplateParametersPresent()
1323    {
1324        return this.getSuperEJB3AssociationEndFacade().isTemplateParametersPresent();
1325    }
1326
1327    /**
1328     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1329     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1330     * Enumerations and Interfaces, optionally applies on other model elements.
1331     * @see ModelElementFacade#isValidIdentifierName()
1332     */
1333    public boolean isValidIdentifierName()
1334    {
1335        return this.getSuperEJB3AssociationEndFacade().isValidIdentifierName();
1336    }
1337
1338    /**
1339     * Searches for the constraint with the specified 'name' on this model element, and if found
1340     * translates it using the specified 'translation' from a translation library discovered by the
1341     * framework.
1342     * @see ModelElementFacade#translateConstraint(String name, String translation)
1343     */
1344    public String translateConstraint(String name, String translation)
1345    {
1346        return this.getSuperEJB3AssociationEndFacade().translateConstraint(name, translation);
1347    }
1348
1349    /**
1350     * Translates all constraints belonging to this model element with the given 'translation'.
1351     * @see ModelElementFacade#translateConstraints(String translation)
1352     */
1353    public String[] translateConstraints(String translation)
1354    {
1355        return this.getSuperEJB3AssociationEndFacade().translateConstraints(translation);
1356    }
1357
1358    /**
1359     * Translates the constraints of the specified 'kind' belonging to this model element.
1360     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1361     */
1362    public String[] translateConstraints(String kind, String translation)
1363    {
1364        return this.getSuperEJB3AssociationEndFacade().translateConstraints(kind, translation);
1365    }
1366
1367    /**
1368     * @see org.andromda.core.metafacade.MetafacadeBase#initialize()
1369     */
1370    @Override
1371    public void initialize()
1372    {
1373        this.getSuperManageableEntityAssociationEnd().initialize();
1374        this.getSuperEJB3AssociationEndFacade().initialize();
1375    }
1376
1377    /**
1378     * @return Object getSuperManageableEntityAssociationEnd().getValidationOwner()
1379     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationOwner()
1380     */
1381    @Override
1382    public Object getValidationOwner()
1383    {
1384        Object owner = this.getSuperManageableEntityAssociationEnd().getValidationOwner();
1385        if (owner == null)
1386        {
1387            owner = this.getSuperEJB3AssociationEndFacade().getValidationOwner();
1388        }
1389        return owner;
1390    }
1391
1392    /**
1393     * @return String getSuperManageableEntityAssociationEnd().getValidationName()
1394     * @see org.andromda.core.metafacade.MetafacadeBase#getValidationName()
1395     */
1396    @Override
1397    public String getValidationName()
1398    {
1399        String name = this.getSuperManageableEntityAssociationEnd().getValidationName();
1400        if (name == null)
1401        {
1402            name = this.getSuperEJB3AssociationEndFacade().getValidationName();
1403        }
1404        return name;
1405    }
1406
1407    /**
1408     * @param validationMessages Collection<ModelValidationMessage>
1409     * @see org.andromda.core.metafacade.MetafacadeBase#validateInvariants(Collection validationMessages)
1410     */
1411    @Override
1412    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1413    {
1414        this.getSuperManageableEntityAssociationEnd().validateInvariants(validationMessages);
1415        this.getSuperEJB3AssociationEndFacade().validateInvariants(validationMessages);
1416    }
1417
1418    /**
1419     * The property that stores the name of the metafacade.
1420     */
1421    private static final String NAME_PROPERTY = "name";
1422    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1423
1424    /**
1425     * @see Object#toString()
1426     */
1427    @Override
1428    public String toString()
1429    {
1430        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1431        toString.append("[");
1432        try
1433        {
1434            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1435        }
1436        catch (final Throwable tryAgain)
1437        {
1438            try
1439            {
1440                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1441            }
1442            catch (final Throwable ignore)
1443            {
1444                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1445            }
1446        }
1447        toString.append("]");
1448        return toString.toString();
1449    }
1450}