001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.jbpm.metafacades;
006
007import java.util.Collection;
008import java.util.List;
009import org.andromda.core.common.Introspector;
010import org.andromda.core.metafacade.MetafacadeBase;
011import org.andromda.core.metafacade.MetafacadeFactory;
012import org.andromda.core.metafacade.ModelValidationMessage;
013import org.andromda.metafacades.uml.ActivityGraphFacade;
014import org.andromda.metafacades.uml.AssociationEndFacade;
015import org.andromda.metafacades.uml.AttributeFacade;
016import org.andromda.metafacades.uml.ClassifierFacade;
017import org.andromda.metafacades.uml.ConstraintFacade;
018import org.andromda.metafacades.uml.DependencyFacade;
019import org.andromda.metafacades.uml.ExtendFacade;
020import org.andromda.metafacades.uml.ExtensionPointFacade;
021import org.andromda.metafacades.uml.GeneralizableElementFacade;
022import org.andromda.metafacades.uml.GeneralizationFacade;
023import org.andromda.metafacades.uml.IncludeFacade;
024import org.andromda.metafacades.uml.ModelElementFacade;
025import org.andromda.metafacades.uml.ModelFacade;
026import org.andromda.metafacades.uml.OperationFacade;
027import org.andromda.metafacades.uml.PackageFacade;
028import org.andromda.metafacades.uml.StateMachineFacade;
029import org.andromda.metafacades.uml.StereotypeFacade;
030import org.andromda.metafacades.uml.TaggedValueFacade;
031import org.andromda.metafacades.uml.TemplateParameterFacade;
032import org.andromda.metafacades.uml.TypeMappings;
033import org.andromda.metafacades.uml.UseCaseFacade;
034import org.apache.log4j.Logger;
035
036/**
037 * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
038 * MetafacadeLogic for JBpmProcessDefinition
039 *
040 * @see JBpmProcessDefinition
041 */
042public abstract class JBpmProcessDefinitionLogic
043    extends MetafacadeBase
044    implements JBpmProcessDefinition
045{
046    /**
047     * The underlying UML object
048     * @see Object
049     */
050    protected Object metaObject;
051
052    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
053     * @param metaObjectIn
054     * @param context
055     */
056    protected JBpmProcessDefinitionLogic(Object metaObjectIn, String context)
057    {
058        super(metaObjectIn, getContext(context));
059        this.superUseCaseFacade =
060           (UseCaseFacade)
061            MetafacadeFactory.getInstance().createFacadeImpl(
062                    "org.andromda.metafacades.uml.UseCaseFacade",
063                    metaObjectIn,
064                    getContext(context));
065        this.metaObject = metaObjectIn;
066    }
067
068    /**
069     * The logger instance.
070     */
071    private static final Logger logger = Logger.getLogger(JBpmProcessDefinitionLogic.class);
072
073    /**
074     * Gets the context for this metafacade logic instance.
075     * @param context String. Set to JBpmProcessDefinition if null
076     * @return context String
077     */
078    private static String getContext(String context)
079    {
080        if (context == null)
081        {
082            context = "org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition";
083        }
084        return context;
085    }
086
087    private UseCaseFacade superUseCaseFacade;
088    private boolean superUseCaseFacadeInitialized = false;
089
090    /**
091     * Gets the UseCaseFacade parent instance.
092     * @return this.superUseCaseFacade UseCaseFacade
093     */
094    private UseCaseFacade getSuperUseCaseFacade()
095    {
096        if (!this.superUseCaseFacadeInitialized)
097        {
098            ((MetafacadeBase)this.superUseCaseFacade).setMetafacadeContext(this.getMetafacadeContext());
099            this.superUseCaseFacadeInitialized = true;
100        }
101        return this.superUseCaseFacade;
102    }
103
104    /** Reset context only for non-root metafacades
105     * @param context
106     * @see MetafacadeBase#resetMetafacadeContext(String context)
107     */
108    @Override
109    public void resetMetafacadeContext(String context)
110    {
111        if (!this.contextRoot) // reset context only for non-root metafacades
112        {
113            context = getContext(context);  // to have same value as in original constructor call
114            setMetafacadeContext (context);
115            if (this.superUseCaseFacadeInitialized)
116            {
117                ((MetafacadeBase)this.superUseCaseFacade).resetMetafacadeContext(context);
118            }
119        }
120    }
121
122    /**
123     * @return boolean true always
124     * @see JBpmProcessDefinition
125     */
126    public boolean isJBpmProcessDefinitionMetaType()
127    {
128        return true;
129    }
130
131    // --------------- attributes ---------------------
132
133   /**
134    * @see org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition#isBusinessProcess()
135    * @return boolean
136    */
137    protected abstract boolean handleIsBusinessProcess();
138
139    private boolean __businessProcess1a;
140    private boolean __businessProcess1aSet = false;
141
142    /**
143     * TODO: Model Documentation for
144     * org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition.businessProcess
145     * @return (boolean)handleIsBusinessProcess()
146     */
147    public final boolean isBusinessProcess()
148    {
149        boolean businessProcess1a = this.__businessProcess1a;
150        if (!this.__businessProcess1aSet)
151        {
152            // businessProcess has no pre constraints
153            businessProcess1a = handleIsBusinessProcess();
154            // businessProcess has no post constraints
155            this.__businessProcess1a = businessProcess1a;
156            if (isMetafacadePropertyCachingEnabled())
157            {
158                this.__businessProcess1aSet = true;
159            }
160        }
161        return businessProcess1a;
162    }
163
164   /**
165    * @see org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition#getDescriptorFullPath()
166    * @return String
167    */
168    protected abstract String handleGetDescriptorFullPath();
169
170    private String __descriptorFullPath2a;
171    private boolean __descriptorFullPath2aSet = false;
172
173    /**
174     * TODO: Model Documentation for
175     * org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition.descriptorFullPath
176     * @return (String)handleGetDescriptorFullPath()
177     */
178    public final String getDescriptorFullPath()
179    {
180        String descriptorFullPath2a = this.__descriptorFullPath2a;
181        if (!this.__descriptorFullPath2aSet)
182        {
183            // descriptorFullPath has no pre constraints
184            descriptorFullPath2a = handleGetDescriptorFullPath();
185            // descriptorFullPath has no post constraints
186            this.__descriptorFullPath2a = descriptorFullPath2a;
187            if (isMetafacadePropertyCachingEnabled())
188            {
189                this.__descriptorFullPath2aSet = true;
190            }
191        }
192        return descriptorFullPath2a;
193    }
194
195   /**
196    * @see org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition#getNodeInterfaceName()
197    * @return String
198    */
199    protected abstract String handleGetNodeInterfaceName();
200
201    private String __nodeInterfaceName3a;
202    private boolean __nodeInterfaceName3aSet = false;
203
204    /**
205     * TODO: Model Documentation for
206     * org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition.nodeInterfaceName
207     * @return (String)handleGetNodeInterfaceName()
208     */
209    public final String getNodeInterfaceName()
210    {
211        String nodeInterfaceName3a = this.__nodeInterfaceName3a;
212        if (!this.__nodeInterfaceName3aSet)
213        {
214            // nodeInterfaceName has no pre constraints
215            nodeInterfaceName3a = handleGetNodeInterfaceName();
216            // nodeInterfaceName has no post constraints
217            this.__nodeInterfaceName3a = nodeInterfaceName3a;
218            if (isMetafacadePropertyCachingEnabled())
219            {
220                this.__nodeInterfaceName3aSet = true;
221            }
222        }
223        return nodeInterfaceName3a;
224    }
225
226    // ------------- associations ------------------
227
228    private List<JBpmNode> __getTaskNodes1r;
229    private boolean __getTaskNodes1rSet = false;
230
231    /**
232     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
233     * @return (List<JBpmNode>)handleGetTaskNodes()
234     */
235    public final List<JBpmNode> getTaskNodes()
236    {
237        List<JBpmNode> getTaskNodes1r = this.__getTaskNodes1r;
238        if (!this.__getTaskNodes1rSet)
239        {
240            // jBpmProcessDefinition has no pre constraints
241            List result = handleGetTaskNodes();
242            List shieldedResult = this.shieldedElements(result);
243            try
244            {
245                getTaskNodes1r = (List<JBpmNode>)shieldedResult;
246            }
247            catch (ClassCastException ex)
248            {
249                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
250                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getTaskNodes List<JBpmNode> " + result + ": " + shieldedResult);
251            }
252            // jBpmProcessDefinition has no post constraints
253            this.__getTaskNodes1r = getTaskNodes1r;
254            if (isMetafacadePropertyCachingEnabled())
255            {
256                this.__getTaskNodes1rSet = true;
257            }
258        }
259        return getTaskNodes1r;
260    }
261
262    /**
263     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
264     * @return  List
265     */
266    protected abstract List handleGetTaskNodes();
267
268    private List<JBpmAction> __getTasks2r;
269    private boolean __getTasks2rSet = false;
270
271    /**
272     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
273     * @return (List<JBpmAction>)handleGetTasks()
274     */
275    public final List<JBpmAction> getTasks()
276    {
277        List<JBpmAction> getTasks2r = this.__getTasks2r;
278        if (!this.__getTasks2rSet)
279        {
280            // jBpmProcessDefinition has no pre constraints
281            List result = handleGetTasks();
282            List shieldedResult = this.shieldedElements(result);
283            try
284            {
285                getTasks2r = (List<JBpmAction>)shieldedResult;
286            }
287            catch (ClassCastException ex)
288            {
289                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
290                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getTasks List<JBpmAction> " + result + ": " + shieldedResult);
291            }
292            // jBpmProcessDefinition has no post constraints
293            this.__getTasks2r = getTasks2r;
294            if (isMetafacadePropertyCachingEnabled())
295            {
296                this.__getTasks2rSet = true;
297            }
298        }
299        return getTasks2r;
300    }
301
302    /**
303     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
304     * @return  List
305     */
306    protected abstract List handleGetTasks();
307
308    private JBpmPseudostate __getStartState3r;
309    private boolean __getStartState3rSet = false;
310
311    /**
312     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
313     * @return (JBpmPseudostate)handleGetStartState()
314     */
315    public final JBpmPseudostate getStartState()
316    {
317        JBpmPseudostate getStartState3r = this.__getStartState3r;
318        if (!this.__getStartState3rSet)
319        {
320            // jBpmProcessDefinition has no pre constraints
321            Object result = handleGetStartState();
322            MetafacadeBase shieldedResult = this.shieldedElement(result);
323            try
324            {
325                getStartState3r = (JBpmPseudostate)shieldedResult;
326            }
327            catch (ClassCastException ex)
328            {
329                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
330                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getStartState JBpmPseudostate " + result + ": " + shieldedResult);
331            }
332            // jBpmProcessDefinition has no post constraints
333            this.__getStartState3r = getStartState3r;
334            if (isMetafacadePropertyCachingEnabled())
335            {
336                this.__getStartState3rSet = true;
337            }
338        }
339        return getStartState3r;
340    }
341
342    /**
343     * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type
344     * @return Object
345     */
346    protected abstract Object handleGetStartState();
347
348    private List<JBpmNode> __getNodes4r;
349    private boolean __getNodes4rSet = false;
350
351    /**
352     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
353     * @return (List<JBpmNode>)handleGetNodes()
354     */
355    public final List<JBpmNode> getNodes()
356    {
357        List<JBpmNode> getNodes4r = this.__getNodes4r;
358        if (!this.__getNodes4rSet)
359        {
360            // jBpmProcessDefinition has no pre constraints
361            List result = handleGetNodes();
362            List shieldedResult = this.shieldedElements(result);
363            try
364            {
365                getNodes4r = (List<JBpmNode>)shieldedResult;
366            }
367            catch (ClassCastException ex)
368            {
369                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
370                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getNodes List<JBpmNode> " + result + ": " + shieldedResult);
371            }
372            // jBpmProcessDefinition has no post constraints
373            this.__getNodes4r = getNodes4r;
374            if (isMetafacadePropertyCachingEnabled())
375            {
376                this.__getNodes4rSet = true;
377            }
378        }
379        return getNodes4r;
380    }
381
382    /**
383     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
384     * @return  List
385     */
386    protected abstract List handleGetNodes();
387
388    private List<JBpmPseudostate> __getForks5r;
389    private boolean __getForks5rSet = false;
390
391    /**
392     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
393     * @return (List<JBpmPseudostate>)handleGetForks()
394     */
395    public final List<JBpmPseudostate> getForks()
396    {
397        List<JBpmPseudostate> getForks5r = this.__getForks5r;
398        if (!this.__getForks5rSet)
399        {
400            // jBpmProcessDefinition has no pre constraints
401            List result = handleGetForks();
402            List shieldedResult = this.shieldedElements(result);
403            try
404            {
405                getForks5r = (List<JBpmPseudostate>)shieldedResult;
406            }
407            catch (ClassCastException ex)
408            {
409                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
410                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getForks List<JBpmPseudostate> " + result + ": " + shieldedResult);
411            }
412            // jBpmProcessDefinition has no post constraints
413            this.__getForks5r = getForks5r;
414            if (isMetafacadePropertyCachingEnabled())
415            {
416                this.__getForks5rSet = true;
417            }
418        }
419        return getForks5r;
420    }
421
422    /**
423     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
424     * @return  List
425     */
426    protected abstract List handleGetForks();
427
428    private List<JBpmSwimlane> __getSwimlanes6r;
429    private boolean __getSwimlanes6rSet = false;
430
431    /**
432     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
433     * @return (List<JBpmSwimlane>)handleGetSwimlanes()
434     */
435    public final List<JBpmSwimlane> getSwimlanes()
436    {
437        List<JBpmSwimlane> getSwimlanes6r = this.__getSwimlanes6r;
438        if (!this.__getSwimlanes6rSet)
439        {
440            // jBpmProcessDefinition has no pre constraints
441            List result = handleGetSwimlanes();
442            List shieldedResult = this.shieldedElements(result);
443            try
444            {
445                getSwimlanes6r = (List<JBpmSwimlane>)shieldedResult;
446            }
447            catch (ClassCastException ex)
448            {
449                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
450                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getSwimlanes List<JBpmSwimlane> " + result + ": " + shieldedResult);
451            }
452            // jBpmProcessDefinition has no post constraints
453            this.__getSwimlanes6r = getSwimlanes6r;
454            if (isMetafacadePropertyCachingEnabled())
455            {
456                this.__getSwimlanes6rSet = true;
457            }
458        }
459        return getSwimlanes6r;
460    }
461
462    /**
463     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
464     * @return  List
465     */
466    protected abstract List handleGetSwimlanes();
467
468    private List<JBpmState> __getStates7r;
469    private boolean __getStates7rSet = false;
470
471    /**
472     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
473     * @return (List<JBpmState>)handleGetStates()
474     */
475    public final List<JBpmState> getStates()
476    {
477        List<JBpmState> getStates7r = this.__getStates7r;
478        if (!this.__getStates7rSet)
479        {
480            // jBpmProcessDefinition has no pre constraints
481            List result = handleGetStates();
482            List shieldedResult = this.shieldedElements(result);
483            try
484            {
485                getStates7r = (List<JBpmState>)shieldedResult;
486            }
487            catch (ClassCastException ex)
488            {
489                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
490                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getStates List<JBpmState> " + result + ": " + shieldedResult);
491            }
492            // jBpmProcessDefinition has no post constraints
493            this.__getStates7r = getStates7r;
494            if (isMetafacadePropertyCachingEnabled())
495            {
496                this.__getStates7rSet = true;
497            }
498        }
499        return getStates7r;
500    }
501
502    /**
503     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
504     * @return  List
505     */
506    protected abstract List handleGetStates();
507
508    private List<JBpmPseudostate> __getDecisions8r;
509    private boolean __getDecisions8rSet = false;
510
511    /**
512     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
513     * @return (List<JBpmPseudostate>)handleGetDecisions()
514     */
515    public final List<JBpmPseudostate> getDecisions()
516    {
517        List<JBpmPseudostate> getDecisions8r = this.__getDecisions8r;
518        if (!this.__getDecisions8rSet)
519        {
520            // jBpmProcessDefinition has no pre constraints
521            List result = handleGetDecisions();
522            List shieldedResult = this.shieldedElements(result);
523            try
524            {
525                getDecisions8r = (List<JBpmPseudostate>)shieldedResult;
526            }
527            catch (ClassCastException ex)
528            {
529                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
530                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getDecisions List<JBpmPseudostate> " + result + ": " + shieldedResult);
531            }
532            // jBpmProcessDefinition has no post constraints
533            this.__getDecisions8r = getDecisions8r;
534            if (isMetafacadePropertyCachingEnabled())
535            {
536                this.__getDecisions8rSet = true;
537            }
538        }
539        return getDecisions8r;
540    }
541
542    /**
543     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
544     * @return  List
545     */
546    protected abstract List handleGetDecisions();
547
548    private List<JBpmEndState> __getEndStates9r;
549    private boolean __getEndStates9rSet = false;
550
551    /**
552     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
553     * @return (List<JBpmEndState>)handleGetEndStates()
554     */
555    public final List<JBpmEndState> getEndStates()
556    {
557        List<JBpmEndState> getEndStates9r = this.__getEndStates9r;
558        if (!this.__getEndStates9rSet)
559        {
560            // jBpmProcessDefinition has no pre constraints
561            List result = handleGetEndStates();
562            List shieldedResult = this.shieldedElements(result);
563            try
564            {
565                getEndStates9r = (List<JBpmEndState>)shieldedResult;
566            }
567            catch (ClassCastException ex)
568            {
569                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
570                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getEndStates List<JBpmEndState> " + result + ": " + shieldedResult);
571            }
572            // jBpmProcessDefinition has no post constraints
573            this.__getEndStates9r = getEndStates9r;
574            if (isMetafacadePropertyCachingEnabled())
575            {
576                this.__getEndStates9rSet = true;
577            }
578        }
579        return getEndStates9r;
580    }
581
582    /**
583     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
584     * @return  List
585     */
586    protected abstract List handleGetEndStates();
587
588    private List<JBpmPseudostate> __getJoins10r;
589    private boolean __getJoins10rSet = false;
590
591    /**
592     * TODO: Model Documentation for org.andromda.cartridges.jbpm.metafacades.JBpmProcessDefinition
593     * @return (List<JBpmPseudostate>)handleGetJoins()
594     */
595    public final List<JBpmPseudostate> getJoins()
596    {
597        List<JBpmPseudostate> getJoins10r = this.__getJoins10r;
598        if (!this.__getJoins10rSet)
599        {
600            // jBpmProcessDefinition has no pre constraints
601            List result = handleGetJoins();
602            List shieldedResult = this.shieldedElements(result);
603            try
604            {
605                getJoins10r = (List<JBpmPseudostate>)shieldedResult;
606            }
607            catch (ClassCastException ex)
608            {
609                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
610                JBpmProcessDefinitionLogic.logger.warn("incorrect metafacade cast for JBpmProcessDefinitionLogic.getJoins List<JBpmPseudostate> " + result + ": " + shieldedResult);
611            }
612            // jBpmProcessDefinition has no post constraints
613            this.__getJoins10r = getJoins10r;
614            if (isMetafacadePropertyCachingEnabled())
615            {
616                this.__getJoins10rSet = true;
617            }
618        }
619        return getJoins10r;
620    }
621
622    /**
623     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
624     * @return  List
625     */
626    protected abstract List handleGetJoins();
627
628    /**
629     * @return true
630     * @see UseCaseFacade
631     */
632    public boolean isUseCaseFacadeMetaType()
633    {
634        return true;
635    }
636
637    /**
638     * @return true
639     * @see org.andromda.metafacades.uml.NamespaceFacade
640     */
641    public boolean isNamespaceFacadeMetaType()
642    {
643        return true;
644    }
645
646    /**
647     * @return true
648     * @see ClassifierFacade
649     */
650    public boolean isClassifierFacadeMetaType()
651    {
652        return true;
653    }
654
655    /**
656     * @return true
657     * @see GeneralizableElementFacade
658     */
659    public boolean isGeneralizableElementFacadeMetaType()
660    {
661        return true;
662    }
663
664    /**
665     * @return true
666     * @see ModelElementFacade
667     */
668    public boolean isModelElementFacadeMetaType()
669    {
670        return true;
671    }
672
673    // ----------- delegates to UseCaseFacade ------------
674    /**
675     * Return the attribute which name matches the parameter
676     * @see ClassifierFacade#findAttribute(String name)
677     */
678    public AttributeFacade findAttribute(String name)
679    {
680        return this.getSuperUseCaseFacade().findAttribute(name);
681    }
682
683    /**
684     * Those abstraction dependencies for which this classifier is the client.
685     * @see ClassifierFacade#getAbstractions()
686     */
687    public Collection<ClassifierFacade> getAbstractions()
688    {
689        return this.getSuperUseCaseFacade().getAbstractions();
690    }
691
692    /**
693     * Lists all classes associated to this one and any ancestor classes (through generalization).
694     * There will be no duplicates. The order of the elements is predictable.
695     * @see ClassifierFacade#getAllAssociatedClasses()
696     */
697    public Collection<ClassifierFacade> getAllAssociatedClasses()
698    {
699        return this.getSuperUseCaseFacade().getAllAssociatedClasses();
700    }
701
702    /**
703     * A collection containing all 'properties' of the classifier and its ancestors.  Properties are
704     * any attributes and navigable connecting association ends.
705     * @see ClassifierFacade#getAllProperties()
706     */
707    public Collection<ModelElementFacade> getAllProperties()
708    {
709        return this.getSuperUseCaseFacade().getAllProperties();
710    }
711
712    /**
713     * A collection containing all required and/or read-only 'properties' of the classifier and its
714     * ancestors. Properties are any attributes and navigable connecting association ends.
715     * @see ClassifierFacade#getAllRequiredConstructorParameters()
716     */
717    public Collection<ModelElementFacade> getAllRequiredConstructorParameters()
718    {
719        return this.getSuperUseCaseFacade().getAllRequiredConstructorParameters();
720    }
721
722    /**
723     * Gets the array type for this classifier.  If this classifier already represents an array, it
724     * just returns itself.
725     * @see ClassifierFacade#getArray()
726     */
727    public ClassifierFacade getArray()
728    {
729        return this.getSuperUseCaseFacade().getArray();
730    }
731
732    /**
733     * The name of the classifier as an array.
734     * @see ClassifierFacade#getArrayName()
735     */
736    public String getArrayName()
737    {
738        return this.getSuperUseCaseFacade().getArrayName();
739    }
740
741    /**
742     * Lists the classes associated to this one, there is no repitition of classes. The order of the
743     * elements is predictable.
744     * @see ClassifierFacade#getAssociatedClasses()
745     */
746    public Collection<ClassifierFacade> getAssociatedClasses()
747    {
748        return this.getSuperUseCaseFacade().getAssociatedClasses();
749    }
750
751    /**
752     * Gets the association ends belonging to a classifier.
753     * @see ClassifierFacade#getAssociationEnds()
754     */
755    public List<AssociationEndFacade> getAssociationEnds()
756    {
757        return this.getSuperUseCaseFacade().getAssociationEnds();
758    }
759
760    /**
761     * Gets the attributes that belong to the classifier.
762     * @see ClassifierFacade#getAttributes()
763     */
764    public List<AttributeFacade> getAttributes()
765    {
766        return this.getSuperUseCaseFacade().getAttributes();
767    }
768
769    /**
770     * Gets all attributes for the classifier and if 'follow' is true goes up the inheritance
771     * hierarchy and gets the attributes from the super classes as well.
772     * @see ClassifierFacade#getAttributes(boolean follow)
773     */
774    public List<AttributeFacade> getAttributes(boolean follow)
775    {
776        return this.getSuperUseCaseFacade().getAttributes(follow);
777    }
778
779    /**
780     * The fully qualified name of the classifier as an array.
781     * @see ClassifierFacade#getFullyQualifiedArrayName()
782     */
783    public String getFullyQualifiedArrayName()
784    {
785        return this.getSuperUseCaseFacade().getFullyQualifiedArrayName();
786    }
787
788    /**
789     * Returns all those operations that could be implemented at this classifier's level. This means
790     * the operations owned by this classifier as well as any realized interface's operations
791     * (recursively) in case this classifier itself is not already an interface, or generalized when
792     * this classifier is an interface.
793     * @see ClassifierFacade#getImplementationOperations()
794     */
795    public Collection<OperationFacade> getImplementationOperations()
796    {
797        return this.getSuperUseCaseFacade().getImplementationOperations();
798    }
799
800    /**
801     * A comma separated list of the fully qualified names of all implemented interfaces.
802     * @see ClassifierFacade#getImplementedInterfaceList()
803     */
804    public String getImplementedInterfaceList()
805    {
806        return this.getSuperUseCaseFacade().getImplementedInterfaceList();
807    }
808
809    /**
810     * Those attributes that are scoped to an instance of this class.
811     * @see ClassifierFacade#getInstanceAttributes()
812     */
813    public Collection<AttributeFacade> getInstanceAttributes()
814    {
815        return this.getSuperUseCaseFacade().getInstanceAttributes();
816    }
817
818    /**
819     * Those operations that are scoped to an instance of this class.
820     * @see ClassifierFacade#getInstanceOperations()
821     */
822    public List<OperationFacade> getInstanceOperations()
823    {
824        return this.getSuperUseCaseFacade().getInstanceOperations();
825    }
826
827    /**
828     * Those interfaces that are abstractions of this classifier, this basically means this
829     * classifier realizes them.
830     * @see ClassifierFacade#getInterfaceAbstractions()
831     */
832    public Collection<ClassifierFacade> getInterfaceAbstractions()
833    {
834        return this.getSuperUseCaseFacade().getInterfaceAbstractions();
835    }
836
837    /**
838     * A String representing a new Constructor declaration for this classifier type to be used in a
839     * Java environment.
840     * @see ClassifierFacade#getJavaNewString()
841     */
842    public String getJavaNewString()
843    {
844        return this.getSuperUseCaseFacade().getJavaNewString();
845    }
846
847    /**
848     * A String representing the null-value for this classifier type to be used in a Java
849     * environment.
850     * @see ClassifierFacade#getJavaNullString()
851     */
852    public String getJavaNullString()
853    {
854        return this.getSuperUseCaseFacade().getJavaNullString();
855    }
856
857    /**
858     * The other ends of this classifier's association ends which are navigable.
859     * @see ClassifierFacade#getNavigableConnectingEnds()
860     */
861    public Collection<AssociationEndFacade> getNavigableConnectingEnds()
862    {
863        return this.getSuperUseCaseFacade().getNavigableConnectingEnds();
864    }
865
866    /**
867     * Get the other ends of this classifier's association ends which are navigable and if 'follow'
868     * is true goes up the inheritance hierarchy and gets the super association ends as well.
869     * @see ClassifierFacade#getNavigableConnectingEnds(boolean follow)
870     */
871    public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow)
872    {
873        return this.getSuperUseCaseFacade().getNavigableConnectingEnds(follow);
874    }
875
876    /**
877     * Assuming that the classifier is an array, this will return the non array type of the
878     * classifier from
879     * the model.  If the classifier is NOT an array, it will just return itself.
880     * @see ClassifierFacade#getNonArray()
881     */
882    public ClassifierFacade getNonArray()
883    {
884        return this.getSuperUseCaseFacade().getNonArray();
885    }
886
887    /**
888     * The attributes from this classifier in the form of an operation call (this example would be
889     * in Java): '(String attributeOne, String attributeTwo).  If there were no attributes on the
890     * classifier, the result would be an empty '()'.
891     * @see ClassifierFacade#getOperationCallFromAttributes()
892     */
893    public String getOperationCallFromAttributes()
894    {
895        return this.getSuperUseCaseFacade().getOperationCallFromAttributes();
896    }
897
898    /**
899     * The operations owned by this classifier.
900     * @see ClassifierFacade#getOperations()
901     */
902    public List<OperationFacade> getOperations()
903    {
904        return this.getSuperUseCaseFacade().getOperations();
905    }
906
907    /**
908     * A collection containing all 'properties' of the classifier.  Properties are any attributes
909     * and navigable connecting association ends.
910     * @see ClassifierFacade#getProperties()
911     */
912    public List<ModelElementFacade> getProperties()
913    {
914        return this.getSuperUseCaseFacade().getProperties();
915    }
916
917    /**
918     * Gets all properties (attributes and navigable association ends) for the classifier and if
919     * 'follow' is true goes up the inheritance hierarchy and gets the properties from the super
920     * classes as well.
921     * @see ClassifierFacade#getProperties(boolean follow)
922     */
923    public List getProperties(boolean follow)
924    {
925        return this.getSuperUseCaseFacade().getProperties(follow);
926    }
927
928    /**
929     * A collection containing all required and/or read-only 'properties' of the classifier. 
930     * Properties are any attributes and navigable connecting association ends.
931     * @see ClassifierFacade#getRequiredConstructorParameters()
932     */
933    public Collection<ModelElementFacade> getRequiredConstructorParameters()
934    {
935        return this.getSuperUseCaseFacade().getRequiredConstructorParameters();
936    }
937
938    /**
939     * Returns the serial version UID of the underlying model element.
940     * @see ClassifierFacade#getSerialVersionUID()
941     */
942    public long getSerialVersionUID()
943    {
944        return this.getSuperUseCaseFacade().getSerialVersionUID();
945    }
946
947    /**
948     * Those attributes that are scoped to the definition of this class.
949     * @see ClassifierFacade#getStaticAttributes()
950     */
951    public Collection<AttributeFacade> getStaticAttributes()
952    {
953        return this.getSuperUseCaseFacade().getStaticAttributes();
954    }
955
956    /**
957     * Those operations that are scoped to the definition of this class.
958     * @see ClassifierFacade#getStaticOperations()
959     */
960    public List<OperationFacade> getStaticOperations()
961    {
962        return this.getSuperUseCaseFacade().getStaticOperations();
963    }
964
965    /**
966     * This class' superclass, returns the generalization if it is a ClassifierFacade, null
967     * otherwise.
968     * @see ClassifierFacade#getSuperClass()
969     */
970    public ClassifierFacade getSuperClass()
971    {
972        return this.getSuperUseCaseFacade().getSuperClass();
973    }
974
975    /**
976     * The wrapper name for this classifier if a mapped type has a defined wrapper class (ie. 'long'
977     * maps to 'Long').  If the classifier doesn't have a wrapper defined for it, this method will
978     * return a null.  Note that wrapper mappings must be defined for the namespace by defining the
979     * 'wrapperMappingsUri', this property must point to the location of the mappings file which
980     * maps the primitives to wrapper types.
981     * @see ClassifierFacade#getWrapperName()
982     */
983    public String getWrapperName()
984    {
985        return this.getSuperUseCaseFacade().getWrapperName();
986    }
987
988    /**
989     * Indicates if this classifier is 'abstract'.
990     * @see ClassifierFacade#isAbstract()
991     */
992    public boolean isAbstract()
993    {
994        return this.getSuperUseCaseFacade().isAbstract();
995    }
996
997    /**
998     * True if this classifier represents an array type. False otherwise.
999     * @see ClassifierFacade#isArrayType()
1000     */
1001    public boolean isArrayType()
1002    {
1003        return this.getSuperUseCaseFacade().isArrayType();
1004    }
1005
1006    /**
1007     * True if the ClassifierFacade is an AssociationClass.
1008     * @see ClassifierFacade#isAssociationClass()
1009     */
1010    public boolean isAssociationClass()
1011    {
1012        return this.getSuperUseCaseFacade().isAssociationClass();
1013    }
1014
1015    /**
1016     * Returns true if this type represents a Blob type.
1017     * @see ClassifierFacade#isBlobType()
1018     */
1019    public boolean isBlobType()
1020    {
1021        return this.getSuperUseCaseFacade().isBlobType();
1022    }
1023
1024    /**
1025     * Indicates if this type represents a boolean type or not.
1026     * @see ClassifierFacade#isBooleanType()
1027     */
1028    public boolean isBooleanType()
1029    {
1030        return this.getSuperUseCaseFacade().isBooleanType();
1031    }
1032
1033    /**
1034     * Indicates if this type represents a char, Character, or java.lang.Character type or not.
1035     * @see ClassifierFacade#isCharacterType()
1036     */
1037    public boolean isCharacterType()
1038    {
1039        return this.getSuperUseCaseFacade().isCharacterType();
1040    }
1041
1042    /**
1043     * Returns true if this type represents a Clob type.
1044     * @see ClassifierFacade#isClobType()
1045     */
1046    public boolean isClobType()
1047    {
1048        return this.getSuperUseCaseFacade().isClobType();
1049    }
1050
1051    /**
1052     * True if this classifier represents a collection type. False otherwise.
1053     * @see ClassifierFacade#isCollectionType()
1054     */
1055    public boolean isCollectionType()
1056    {
1057        return this.getSuperUseCaseFacade().isCollectionType();
1058    }
1059
1060    /**
1061     * True/false depending on whether or not this classifier represents a datatype. A data type is
1062     * a type whose instances are identified only by their value. A data type may contain attributes
1063     * to support the modeling of structured data types.
1064     * @see ClassifierFacade#isDataType()
1065     */
1066    public boolean isDataType()
1067    {
1068        return this.getSuperUseCaseFacade().isDataType();
1069    }
1070
1071    /**
1072     * True when this classifier is a date type.
1073     * @see ClassifierFacade#isDateType()
1074     */
1075    public boolean isDateType()
1076    {
1077        return this.getSuperUseCaseFacade().isDateType();
1078    }
1079
1080    /**
1081     * Indicates if this type represents a Double type or not.
1082     * @see ClassifierFacade#isDoubleType()
1083     */
1084    public boolean isDoubleType()
1085    {
1086        return this.getSuperUseCaseFacade().isDoubleType();
1087    }
1088
1089    /**
1090     * Indicates whether or not this classifier represents an "EmbeddedValue'.
1091     * @see ClassifierFacade#isEmbeddedValue()
1092     */
1093    public boolean isEmbeddedValue()
1094    {
1095        return this.getSuperUseCaseFacade().isEmbeddedValue();
1096    }
1097
1098    /**
1099     * True if this classifier is in fact marked as an enumeration.
1100     * @see ClassifierFacade#isEnumeration()
1101     */
1102    public boolean isEnumeration()
1103    {
1104        return this.getSuperUseCaseFacade().isEnumeration();
1105    }
1106
1107    /**
1108     * Returns true if this type represents a 'file' type.
1109     * @see ClassifierFacade#isFileType()
1110     */
1111    public boolean isFileType()
1112    {
1113        return this.getSuperUseCaseFacade().isFileType();
1114    }
1115
1116    /**
1117     * Indicates if this type represents a Float type or not.
1118     * @see ClassifierFacade#isFloatType()
1119     */
1120    public boolean isFloatType()
1121    {
1122        return this.getSuperUseCaseFacade().isFloatType();
1123    }
1124
1125    /**
1126     * Indicates if this type represents an int or Integer or java.lang.Integer type or not.
1127     * @see ClassifierFacade#isIntegerType()
1128     */
1129    public boolean isIntegerType()
1130    {
1131        return this.getSuperUseCaseFacade().isIntegerType();
1132    }
1133
1134    /**
1135     * True/false depending on whether or not this Classifier represents an interface.
1136     * @see ClassifierFacade#isInterface()
1137     */
1138    public boolean isInterface()
1139    {
1140        return this.getSuperUseCaseFacade().isInterface();
1141    }
1142
1143    /**
1144     * True if this classifier cannot be extended and represent a leaf in the inheritance tree.
1145     * @see ClassifierFacade#isLeaf()
1146     */
1147    public boolean isLeaf()
1148    {
1149        return this.getSuperUseCaseFacade().isLeaf();
1150    }
1151
1152    /**
1153     * True if this classifier represents a list type. False otherwise.
1154     * @see ClassifierFacade#isListType()
1155     */
1156    public boolean isListType()
1157    {
1158        return this.getSuperUseCaseFacade().isListType();
1159    }
1160
1161    /**
1162     * Indicates if this type represents a Long type or not.
1163     * @see ClassifierFacade#isLongType()
1164     */
1165    public boolean isLongType()
1166    {
1167        return this.getSuperUseCaseFacade().isLongType();
1168    }
1169
1170    /**
1171     * Indicates whether or not this classifier represents a Map type.
1172     * @see ClassifierFacade#isMapType()
1173     */
1174    public boolean isMapType()
1175    {
1176        return this.getSuperUseCaseFacade().isMapType();
1177    }
1178
1179    /**
1180     * Indicates whether or not this classifier represents a primitive type.
1181     * @see ClassifierFacade#isPrimitive()
1182     */
1183    public boolean isPrimitive()
1184    {
1185        return this.getSuperUseCaseFacade().isPrimitive();
1186    }
1187
1188    /**
1189     * True if this classifier represents a set type. False otherwise.
1190     * @see ClassifierFacade#isSetType()
1191     */
1192    public boolean isSetType()
1193    {
1194        return this.getSuperUseCaseFacade().isSetType();
1195    }
1196
1197    /**
1198     * Indicates whether or not this classifier represents a string type.
1199     * @see ClassifierFacade#isStringType()
1200     */
1201    public boolean isStringType()
1202    {
1203        return this.getSuperUseCaseFacade().isStringType();
1204    }
1205
1206    /**
1207     * Indicates whether or not this classifier represents a time type.
1208     * @see ClassifierFacade#isTimeType()
1209     */
1210    public boolean isTimeType()
1211    {
1212        return this.getSuperUseCaseFacade().isTimeType();
1213    }
1214
1215    /**
1216     * Returns true if this type is a wrapped primitive type.
1217     * @see ClassifierFacade#isWrappedPrimitive()
1218     */
1219    public boolean isWrappedPrimitive()
1220    {
1221        return this.getSuperUseCaseFacade().isWrappedPrimitive();
1222    }
1223
1224    /**
1225     * Finds the tagged value optional searching the entire inheritance hierarchy if 'follow' is set
1226     * to true.
1227     * @see GeneralizableElementFacade#findTaggedValue(String tagName, boolean follow)
1228     */
1229    public Object findTaggedValue(String tagName, boolean follow)
1230    {
1231        return this.getSuperUseCaseFacade().findTaggedValue(tagName, follow);
1232    }
1233
1234    /**
1235     * All generalizations for this generalizable element, goes up the inheritance tree.
1236     * @see GeneralizableElementFacade#getAllGeneralizations()
1237     */
1238    public Collection<GeneralizableElementFacade> getAllGeneralizations()
1239    {
1240        return this.getSuperUseCaseFacade().getAllGeneralizations();
1241    }
1242
1243    /**
1244     * All specializations (travels down the inheritance hierarchy).
1245     * @see GeneralizableElementFacade#getAllSpecializations()
1246     */
1247    public Collection<GeneralizableElementFacade> getAllSpecializations()
1248    {
1249        return this.getSuperUseCaseFacade().getAllSpecializations();
1250    }
1251
1252    /**
1253     * Gets the direct generalization for this generalizable element.
1254     * @see GeneralizableElementFacade#getGeneralization()
1255     */
1256    public GeneralizableElementFacade getGeneralization()
1257    {
1258        return this.getSuperUseCaseFacade().getGeneralization();
1259    }
1260
1261    /**
1262     * Gets the actual links that this generalization element is part of (it plays either the
1263     * specialization or generalization).
1264     * @see GeneralizableElementFacade#getGeneralizationLinks()
1265     */
1266    public Collection<GeneralizationFacade> getGeneralizationLinks()
1267    {
1268        return this.getSuperUseCaseFacade().getGeneralizationLinks();
1269    }
1270
1271    /**
1272     * A comma separated list of the fully qualified names of all generalizations.
1273     * @see GeneralizableElementFacade#getGeneralizationList()
1274     */
1275    public String getGeneralizationList()
1276    {
1277        return this.getSuperUseCaseFacade().getGeneralizationList();
1278    }
1279
1280    /**
1281     * The element found when you recursively follow the generalization path up to the root. If an
1282     * element has no generalization itself will be considered the root.
1283     * @see GeneralizableElementFacade#getGeneralizationRoot()
1284     */
1285    public GeneralizableElementFacade getGeneralizationRoot()
1286    {
1287        return this.getSuperUseCaseFacade().getGeneralizationRoot();
1288    }
1289
1290    /**
1291     * Return all generalizations (ancestors) from this generalizable element.
1292     * @see GeneralizableElementFacade#getGeneralizations()
1293     */
1294    public Collection<GeneralizableElementFacade> getGeneralizations()
1295    {
1296        return this.getSuperUseCaseFacade().getGeneralizations();
1297    }
1298
1299    /**
1300     * Gets the direct specializations (i.e. sub elements) for this generalizatble element.
1301     * @see GeneralizableElementFacade#getSpecializations()
1302     */
1303    public Collection<GeneralizableElementFacade> getSpecializations()
1304    {
1305        return this.getSuperUseCaseFacade().getSpecializations();
1306    }
1307
1308    /**
1309     * Copies all tagged values from the given ModelElementFacade to this model element facade.
1310     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1311     */
1312    public void copyTaggedValues(ModelElementFacade element)
1313    {
1314        this.getSuperUseCaseFacade().copyTaggedValues(element);
1315    }
1316
1317    /**
1318     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1319     * one found will be returned.
1320     * @see ModelElementFacade#findTaggedValue(String tagName)
1321     */
1322    public Object findTaggedValue(String tagName)
1323    {
1324        return this.getSuperUseCaseFacade().findTaggedValue(tagName);
1325    }
1326
1327    /**
1328     * Returns all the values for the tagged value with the specified name. The returned collection
1329     * will contains only String instances, or will be empty. Never null.
1330     * @see ModelElementFacade#findTaggedValues(String tagName)
1331     */
1332    public Collection<Object> findTaggedValues(String tagName)
1333    {
1334        return this.getSuperUseCaseFacade().findTaggedValues(tagName);
1335    }
1336
1337    /**
1338     * Returns the fully qualified name of the model element. The fully qualified name includes
1339     * complete package qualified name of the underlying model element. The templates parameter will
1340     * be replaced by the correct one given the binding relation of the parameter to this element.
1341     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1342     */
1343    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1344    {
1345        return this.getSuperUseCaseFacade().getBindedFullyQualifiedName(bindedElement);
1346    }
1347
1348    /**
1349     * Gets all constraints belonging to the model element.
1350     * @see ModelElementFacade#getConstraints()
1351     */
1352    public Collection<ConstraintFacade> getConstraints()
1353    {
1354        return this.getSuperUseCaseFacade().getConstraints();
1355    }
1356
1357    /**
1358     * Returns the constraints of the argument kind that have been placed onto this model. Typical
1359     * kinds are "inv", "pre" and "post". Other kinds are possible.
1360     * @see ModelElementFacade#getConstraints(String kind)
1361     */
1362    public Collection<ConstraintFacade> getConstraints(String kind)
1363    {
1364        return this.getSuperUseCaseFacade().getConstraints(kind);
1365    }
1366
1367    /**
1368     * Gets the documentation for the model element, The indent argument is prefixed to each line.
1369     * By default this method wraps lines after 64 characters.
1370     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1371     * @see ModelElementFacade#getDocumentation(String indent)
1372     */
1373    public String getDocumentation(String indent)
1374    {
1375        return this.getSuperUseCaseFacade().getDocumentation(indent);
1376    }
1377
1378    /**
1379     * This method returns the documentation for this model element, with the lines wrapped after
1380     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1381     * required. By default paragraphs are returned as HTML.
1382     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1383     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1384     */
1385    public String getDocumentation(String indent, int lineLength)
1386    {
1387        return this.getSuperUseCaseFacade().getDocumentation(indent, lineLength);
1388    }
1389
1390    /**
1391     * This method returns the documentation for this model element, with the lines wrapped after
1392     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1393     * required. HTML style determines if HTML Escaping is applied.
1394     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1395     */
1396    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1397    {
1398        return this.getSuperUseCaseFacade().getDocumentation(indent, lineLength, htmlStyle);
1399    }
1400
1401    /**
1402     * The fully qualified name of this model element.
1403     * @see ModelElementFacade#getFullyQualifiedName()
1404     */
1405    public String getFullyQualifiedName()
1406    {
1407        return this.getSuperUseCaseFacade().getFullyQualifiedName();
1408    }
1409
1410    /**
1411     * Returns the fully qualified name of the model element. The fully qualified name includes
1412     * complete package qualified name of the underlying model element.  If modelName is true, then
1413     * the original name of the model element (the name contained within the model) will be the name
1414     * returned, otherwise a name from a language mapping will be returned.
1415     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1416     */
1417    public String getFullyQualifiedName(boolean modelName)
1418    {
1419        return this.getSuperUseCaseFacade().getFullyQualifiedName(modelName);
1420    }
1421
1422    /**
1423     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1424     * '/'.
1425     * @see ModelElementFacade#getFullyQualifiedNamePath()
1426     */
1427    public String getFullyQualifiedNamePath()
1428    {
1429        return this.getSuperUseCaseFacade().getFullyQualifiedNamePath();
1430    }
1431
1432    /**
1433     * Gets the unique identifier of the underlying model element.
1434     * @see ModelElementFacade#getId()
1435     */
1436    public String getId()
1437    {
1438        return this.getSuperUseCaseFacade().getId();
1439    }
1440
1441    /**
1442     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1443     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1444     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1445     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1446     * JDK5 compiler level.
1447     * @see ModelElementFacade#getKeywords()
1448     */
1449    public Collection<String> getKeywords()
1450    {
1451        return this.getSuperUseCaseFacade().getKeywords();
1452    }
1453
1454    /**
1455     * UML2: Retrieves a localized label for this named element.
1456     * @see ModelElementFacade#getLabel()
1457     */
1458    public String getLabel()
1459    {
1460        return this.getSuperUseCaseFacade().getLabel();
1461    }
1462
1463    /**
1464     * The language mappings that have been set for this model element.
1465     * @see ModelElementFacade#getLanguageMappings()
1466     */
1467    public TypeMappings getLanguageMappings()
1468    {
1469        return this.getSuperUseCaseFacade().getLanguageMappings();
1470    }
1471
1472    /**
1473     * Return the model containing this model element (multiple models may be loaded and processed
1474     * at the same time).
1475     * @see ModelElementFacade#getModel()
1476     */
1477    public ModelFacade getModel()
1478    {
1479        return this.getSuperUseCaseFacade().getModel();
1480    }
1481
1482    /**
1483     * The name of the model element.
1484     * @see ModelElementFacade#getName()
1485     */
1486    public String getName()
1487    {
1488        return this.getSuperUseCaseFacade().getName();
1489    }
1490
1491    /**
1492     * Gets the package to which this model element belongs.
1493     * @see ModelElementFacade#getPackage()
1494     */
1495    public ModelElementFacade getPackage()
1496    {
1497        return this.getSuperUseCaseFacade().getPackage();
1498    }
1499
1500    /**
1501     * The name of this model element's package.
1502     * @see ModelElementFacade#getPackageName()
1503     */
1504    public String getPackageName()
1505    {
1506        return this.getSuperUseCaseFacade().getPackageName();
1507    }
1508
1509    /**
1510     * Gets the package name (optionally providing the ability to retrieve the model name and not
1511     * the mapped name).
1512     * @see ModelElementFacade#getPackageName(boolean modelName)
1513     */
1514    public String getPackageName(boolean modelName)
1515    {
1516        return this.getSuperUseCaseFacade().getPackageName(modelName);
1517    }
1518
1519    /**
1520     * Returns the package as a path, the returned value always starts with out a slash '/'.
1521     * @see ModelElementFacade#getPackagePath()
1522     */
1523    public String getPackagePath()
1524    {
1525        return this.getSuperUseCaseFacade().getPackagePath();
1526    }
1527
1528    /**
1529     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1530     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1531     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1532     * the name of the NamedElement itself.
1533     * @see ModelElementFacade#getQualifiedName()
1534     */
1535    public String getQualifiedName()
1536    {
1537        return this.getSuperUseCaseFacade().getQualifiedName();
1538    }
1539
1540    /**
1541     * Gets the root package for the model element.
1542     * @see ModelElementFacade#getRootPackage()
1543     */
1544    public PackageFacade getRootPackage()
1545    {
1546        return this.getSuperUseCaseFacade().getRootPackage();
1547    }
1548
1549    /**
1550     * Gets the dependencies for which this model element is the source.
1551     * @see ModelElementFacade#getSourceDependencies()
1552     */
1553    public Collection<DependencyFacade> getSourceDependencies()
1554    {
1555        return this.getSuperUseCaseFacade().getSourceDependencies();
1556    }
1557
1558    /**
1559     * If this model element is the context of an activity graph, this represents that activity
1560     * graph.
1561     * @see ModelElementFacade#getStateMachineContext()
1562     */
1563    public StateMachineFacade getStateMachineContext()
1564    {
1565        return this.getSuperUseCaseFacade().getStateMachineContext();
1566    }
1567
1568    /**
1569     * The collection of ALL stereotype names for this model element.
1570     * @see ModelElementFacade#getStereotypeNames()
1571     */
1572    public Collection<String> getStereotypeNames()
1573    {
1574        return this.getSuperUseCaseFacade().getStereotypeNames();
1575    }
1576
1577    /**
1578     * Gets all stereotypes for this model element.
1579     * @see ModelElementFacade#getStereotypes()
1580     */
1581    public Collection<StereotypeFacade> getStereotypes()
1582    {
1583        return this.getSuperUseCaseFacade().getStereotypes();
1584    }
1585
1586    /**
1587     * Return the TaggedValues associated with this model element, under all stereotypes.
1588     * @see ModelElementFacade#getTaggedValues()
1589     */
1590    public Collection<TaggedValueFacade> getTaggedValues()
1591    {
1592        return this.getSuperUseCaseFacade().getTaggedValues();
1593    }
1594
1595    /**
1596     * Gets the dependencies for which this model element is the target.
1597     * @see ModelElementFacade#getTargetDependencies()
1598     */
1599    public Collection<DependencyFacade> getTargetDependencies()
1600    {
1601        return this.getSuperUseCaseFacade().getTargetDependencies();
1602    }
1603
1604    /**
1605     * Get the template parameter for this model element having the parameterName
1606     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1607     */
1608    public Object getTemplateParameter(String parameterName)
1609    {
1610        return this.getSuperUseCaseFacade().getTemplateParameter(parameterName);
1611    }
1612
1613    /**
1614     * Get the template parameters for this model element
1615     * @see ModelElementFacade#getTemplateParameters()
1616     */
1617    public Collection<TemplateParameterFacade> getTemplateParameters()
1618    {
1619        return this.getSuperUseCaseFacade().getTemplateParameters();
1620    }
1621
1622    /**
1623     * The visibility (i.e. public, private, protected or package) of the model element, will
1624     * attempt a lookup for these values in the language mappings (if any).
1625     * @see ModelElementFacade#getVisibility()
1626     */
1627    public String getVisibility()
1628    {
1629        return this.getSuperUseCaseFacade().getVisibility();
1630    }
1631
1632    /**
1633     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1634     * is taken into account when searching for the stereotype), false otherwise.
1635     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1636     */
1637    public boolean hasExactStereotype(String stereotypeName)
1638    {
1639        return this.getSuperUseCaseFacade().hasExactStereotype(stereotypeName);
1640    }
1641
1642    /**
1643     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1644     * pipe, semicolon, or << >>
1645     * @see ModelElementFacade#hasKeyword(String keywordName)
1646     */
1647    public boolean hasKeyword(String keywordName)
1648    {
1649        return this.getSuperUseCaseFacade().hasKeyword(keywordName);
1650    }
1651
1652    /**
1653     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1654     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1655     * one of the stereotype's ancestors has a matching name this method will return true, false
1656     * otherwise.
1657     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1658     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1659     * method with 'stereotypeName' defined as 'exception' the method would return true since
1660     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1661     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1662     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1663     */
1664    public boolean hasStereotype(String stereotypeName)
1665    {
1666        return this.getSuperUseCaseFacade().hasStereotype(stereotypeName);
1667    }
1668
1669    /**
1670     * True if there are target dependencies from this element that are instances of BindingFacade.
1671     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1672     * @see ModelElementFacade#isBindingDependenciesPresent()
1673     */
1674    public boolean isBindingDependenciesPresent()
1675    {
1676        return this.getSuperUseCaseFacade().isBindingDependenciesPresent();
1677    }
1678
1679    /**
1680     * Indicates if any constraints are present on this model element.
1681     * @see ModelElementFacade#isConstraintsPresent()
1682     */
1683    public boolean isConstraintsPresent()
1684    {
1685        return this.getSuperUseCaseFacade().isConstraintsPresent();
1686    }
1687
1688    /**
1689     * Indicates if any documentation is present on this model element.
1690     * @see ModelElementFacade#isDocumentationPresent()
1691     */
1692    public boolean isDocumentationPresent()
1693    {
1694        return this.getSuperUseCaseFacade().isDocumentationPresent();
1695    }
1696
1697    /**
1698     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1699     * @see ModelElementFacade#isReservedWord()
1700     */
1701    public boolean isReservedWord()
1702    {
1703        return this.getSuperUseCaseFacade().isReservedWord();
1704    }
1705
1706    /**
1707     * True is there are template parameters on this model element. For UML2, applies to Class,
1708     * Operation, Property, and Parameter.
1709     * @see ModelElementFacade#isTemplateParametersPresent()
1710     */
1711    public boolean isTemplateParametersPresent()
1712    {
1713        return this.getSuperUseCaseFacade().isTemplateParametersPresent();
1714    }
1715
1716    /**
1717     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1718     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1719     * Enumerations and Interfaces, optionally applies on other model elements.
1720     * @see ModelElementFacade#isValidIdentifierName()
1721     */
1722    public boolean isValidIdentifierName()
1723    {
1724        return this.getSuperUseCaseFacade().isValidIdentifierName();
1725    }
1726
1727    /**
1728     * Searches for the constraint with the specified 'name' on this model element, and if found
1729     * translates it using the specified 'translation' from a translation library discovered by the
1730     * framework.
1731     * @see ModelElementFacade#translateConstraint(String name, String translation)
1732     */
1733    public String translateConstraint(String name, String translation)
1734    {
1735        return this.getSuperUseCaseFacade().translateConstraint(name, translation);
1736    }
1737
1738    /**
1739     * Translates all constraints belonging to this model element with the given 'translation'.
1740     * @see ModelElementFacade#translateConstraints(String translation)
1741     */
1742    public String[] translateConstraints(String translation)
1743    {
1744        return this.getSuperUseCaseFacade().translateConstraints(translation);
1745    }
1746
1747    /**
1748     * Translates the constraints of the specified 'kind' belonging to this model element.
1749     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1750     */
1751    public String[] translateConstraints(String kind, String translation)
1752    {
1753        return this.getSuperUseCaseFacade().translateConstraints(kind, translation);
1754    }
1755
1756    /**
1757     * Gets the model elements which this namespace owns.
1758     * @see org.andromda.metafacades.uml.NamespaceFacade#getOwnedElements()
1759     */
1760    public Collection<ModelElementFacade> getOwnedElements()
1761    {
1762        return this.getSuperUseCaseFacade().getOwnedElements();
1763    }
1764
1765    /**
1766     * The extend instances related to this use-case.
1767     * @see UseCaseFacade#getExtends()
1768     */
1769    public Collection<ExtendFacade> getExtends()
1770    {
1771        return this.getSuperUseCaseFacade().getExtends();
1772    }
1773
1774    /**
1775     * The extension points related to this use-case.
1776     * @see UseCaseFacade#getExtensionPoints()
1777     */
1778    public Collection<ExtensionPointFacade> getExtensionPoints()
1779    {
1780        return this.getSuperUseCaseFacade().getExtensionPoints();
1781    }
1782
1783    /**
1784     * The first activity graph directly owned by this use-case.
1785     * @see UseCaseFacade#getFirstActivityGraph()
1786     */
1787    public ActivityGraphFacade getFirstActivityGraph()
1788    {
1789        return this.getSuperUseCaseFacade().getFirstActivityGraph();
1790    }
1791
1792    /**
1793     * The included instances related to this use-case.
1794     * @see UseCaseFacade#getIncludes()
1795     */
1796    public Collection<IncludeFacade> getIncludes()
1797    {
1798        return this.getSuperUseCaseFacade().getIncludes();
1799    }
1800
1801    /**
1802     * @see MetafacadeBase#initialize()
1803     */
1804    @Override
1805    public void initialize()
1806    {
1807        this.getSuperUseCaseFacade().initialize();
1808    }
1809
1810    /**
1811     * @return Object getSuperUseCaseFacade().getValidationOwner()
1812     * @see MetafacadeBase#getValidationOwner()
1813     */
1814    @Override
1815    public Object getValidationOwner()
1816    {
1817        Object owner = this.getSuperUseCaseFacade().getValidationOwner();
1818        return owner;
1819    }
1820
1821    /**
1822     * @return String getSuperUseCaseFacade().getValidationName()
1823     * @see MetafacadeBase#getValidationName()
1824     */
1825    @Override
1826    public String getValidationName()
1827    {
1828        String name = this.getSuperUseCaseFacade().getValidationName();
1829        return name;
1830    }
1831
1832    /**
1833     * @param validationMessages Collection<ModelValidationMessage>
1834     * @see MetafacadeBase#validateInvariants(Collection validationMessages)
1835     */
1836    @Override
1837    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1838    {
1839        this.getSuperUseCaseFacade().validateInvariants(validationMessages);
1840    }
1841
1842    /**
1843     * The property that stores the name of the metafacade.
1844     */
1845    private static final String NAME_PROPERTY = "name";
1846    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1847
1848    /**
1849     * @see Object#toString()
1850     */
1851    @Override
1852    public String toString()
1853    {
1854        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1855        toString.append("[");
1856        try
1857        {
1858            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1859        }
1860        catch (final Throwable tryAgain)
1861        {
1862            try
1863            {
1864                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1865            }
1866            catch (final Throwable ignore)
1867            {
1868                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1869            }
1870        }
1871        toString.append("]");
1872        return toString.toString();
1873    }
1874}