001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.bpm4struts.metafacades;
006
007import java.util.Collection;
008import java.util.List;
009import java.util.Map;
010import javax.swing.tree.TreeNode;
011import org.andromda.core.common.Introspector;
012import org.andromda.core.metafacade.MetafacadeBase;
013import org.andromda.core.metafacade.MetafacadeFactory;
014import org.andromda.core.metafacade.ModelValidationMessage;
015import org.andromda.metafacades.uml.ActivityGraphFacade;
016import org.andromda.metafacades.uml.AssociationEndFacade;
017import org.andromda.metafacades.uml.AttributeFacade;
018import org.andromda.metafacades.uml.ClassifierFacade;
019import org.andromda.metafacades.uml.ConstraintFacade;
020import org.andromda.metafacades.uml.DependencyFacade;
021import org.andromda.metafacades.uml.ExtendFacade;
022import org.andromda.metafacades.uml.ExtensionPointFacade;
023import org.andromda.metafacades.uml.FrontEndAction;
024import org.andromda.metafacades.uml.FrontEndActivityGraph;
025import org.andromda.metafacades.uml.FrontEndController;
026import org.andromda.metafacades.uml.FrontEndFinalState;
027import org.andromda.metafacades.uml.FrontEndParameter;
028import org.andromda.metafacades.uml.FrontEndUseCase;
029import org.andromda.metafacades.uml.FrontEndView;
030import org.andromda.metafacades.uml.GeneralizableElementFacade;
031import org.andromda.metafacades.uml.GeneralizationFacade;
032import org.andromda.metafacades.uml.IncludeFacade;
033import org.andromda.metafacades.uml.ModelElementFacade;
034import org.andromda.metafacades.uml.ModelFacade;
035import org.andromda.metafacades.uml.OperationFacade;
036import org.andromda.metafacades.uml.PackageFacade;
037import org.andromda.metafacades.uml.Role;
038import org.andromda.metafacades.uml.StateMachineFacade;
039import org.andromda.metafacades.uml.StereotypeFacade;
040import org.andromda.metafacades.uml.TaggedValueFacade;
041import org.andromda.metafacades.uml.TemplateParameterFacade;
042import org.andromda.metafacades.uml.TypeMappings;
043import org.andromda.translation.ocl.validation.OCLCollections;
044import org.andromda.translation.ocl.validation.OCLIntrospector;
045import org.andromda.translation.ocl.validation.OCLResultEnsurer;
046import org.apache.log4j.Logger;
047
048/**
049 * A Struts use-case represents a set of related client/server requests and communication.
050 * MetafacadeLogic for StrutsUseCase
051 *
052 * @see StrutsUseCase
053 */
054public abstract class StrutsUseCaseLogic
055    extends MetafacadeBase
056    implements StrutsUseCase
057{
058    /**
059     * The underlying UML object
060     * @see Object
061     */
062    protected Object metaObject;
063
064    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
065     * @param metaObjectIn
066     * @param context
067     */
068    protected StrutsUseCaseLogic(Object metaObjectIn, String context)
069    {
070        super(metaObjectIn, getContext(context));
071        this.superFrontEndUseCase =
072           (FrontEndUseCase)
073            MetafacadeFactory.getInstance().createFacadeImpl(
074                    "org.andromda.metafacades.uml.FrontEndUseCase",
075                    metaObjectIn,
076                    getContext(context));
077        this.metaObject = metaObjectIn;
078    }
079
080    /**
081     * The logger instance.
082     */
083    private static final Logger logger = Logger.getLogger(StrutsUseCaseLogic.class);
084
085    /**
086     * Gets the context for this metafacade logic instance.
087     * @param context String. Set to StrutsUseCase if null
088     * @return context String
089     */
090    private static String getContext(String context)
091    {
092        if (context == null)
093        {
094            context = "org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase";
095        }
096        return context;
097    }
098
099    private FrontEndUseCase superFrontEndUseCase;
100    private boolean superFrontEndUseCaseInitialized = false;
101
102    /**
103     * Gets the FrontEndUseCase parent instance.
104     * @return this.superFrontEndUseCase FrontEndUseCase
105     */
106    private FrontEndUseCase getSuperFrontEndUseCase()
107    {
108        if (!this.superFrontEndUseCaseInitialized)
109        {
110            ((MetafacadeBase)this.superFrontEndUseCase).setMetafacadeContext(this.getMetafacadeContext());
111            this.superFrontEndUseCaseInitialized = true;
112        }
113        return this.superFrontEndUseCase;
114    }
115
116    /** Reset context only for non-root metafacades
117     * @param context
118     * @see MetafacadeBase#resetMetafacadeContext(String context)
119     */
120    @Override
121    public void resetMetafacadeContext(String context)
122    {
123        if (!this.contextRoot) // reset context only for non-root metafacades
124        {
125            context = getContext(context);  // to have same value as in original constructor call
126            setMetafacadeContext (context);
127            if (this.superFrontEndUseCaseInitialized)
128            {
129                ((MetafacadeBase)this.superFrontEndUseCase).resetMetafacadeContext(context);
130            }
131        }
132    }
133
134    /**
135     * @return boolean true always
136     * @see StrutsUseCase
137     */
138    public boolean isStrutsUseCaseMetaType()
139    {
140        return true;
141    }
142
143    // --------------- attributes ---------------------
144
145   /**
146    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getTitleKey()
147    * @return String
148    */
149    protected abstract String handleGetTitleKey();
150
151    private String __titleKey1a;
152    private boolean __titleKey1aSet = false;
153
154    /**
155     * The title message key for this use-case.
156     * @return (String)handleGetTitleKey()
157     */
158    public final String getTitleKey()
159    {
160        String titleKey1a = this.__titleKey1a;
161        if (!this.__titleKey1aSet)
162        {
163            // titleKey has no pre constraints
164            titleKey1a = handleGetTitleKey();
165            // titleKey has no post constraints
166            this.__titleKey1a = titleKey1a;
167            if (isMetafacadePropertyCachingEnabled())
168            {
169                this.__titleKey1aSet = true;
170            }
171        }
172        return titleKey1a;
173    }
174
175   /**
176    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getTitleValue()
177    * @return String
178    */
179    protected abstract String handleGetTitleValue();
180
181    private String __titleValue2a;
182    private boolean __titleValue2aSet = false;
183
184    /**
185     * The title message value for this use-case.
186     * @return (String)handleGetTitleValue()
187     */
188    public final String getTitleValue()
189    {
190        String titleValue2a = this.__titleValue2a;
191        if (!this.__titleValue2aSet)
192        {
193            // titleValue has no pre constraints
194            titleValue2a = handleGetTitleValue();
195            // titleValue has no post constraints
196            this.__titleValue2a = titleValue2a;
197            if (isMetafacadePropertyCachingEnabled())
198            {
199                this.__titleValue2aSet = true;
200            }
201        }
202        return titleValue2a;
203    }
204
205   /**
206    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getActionPath()
207    * @return String
208    */
209    protected abstract String handleGetActionPath();
210
211    private String __actionPath3a;
212    private boolean __actionPath3aSet = false;
213
214    /**
215     * This use-case's action path.
216     * @return (String)handleGetActionPath()
217     */
218    public final String getActionPath()
219    {
220        String actionPath3a = this.__actionPath3a;
221        if (!this.__actionPath3aSet)
222        {
223            // actionPath has no pre constraints
224            actionPath3a = handleGetActionPath();
225            // actionPath has no post constraints
226            this.__actionPath3a = actionPath3a;
227            if (isMetafacadePropertyCachingEnabled())
228            {
229                this.__actionPath3aSet = true;
230            }
231        }
232        return actionPath3a;
233    }
234
235   /**
236    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getActionPathRoot()
237    * @return String
238    */
239    protected abstract String handleGetActionPathRoot();
240
241    private String __actionPathRoot4a;
242    private boolean __actionPathRoot4aSet = false;
243
244    /**
245     * The root of the action path.
246     * @return (String)handleGetActionPathRoot()
247     */
248    public final String getActionPathRoot()
249    {
250        String actionPathRoot4a = this.__actionPathRoot4a;
251        if (!this.__actionPathRoot4aSet)
252        {
253            // actionPathRoot has no pre constraints
254            actionPathRoot4a = handleGetActionPathRoot();
255            // actionPathRoot has no post constraints
256            this.__actionPathRoot4a = actionPathRoot4a;
257            if (isMetafacadePropertyCachingEnabled())
258            {
259                this.__actionPathRoot4aSet = true;
260            }
261        }
262        return actionPathRoot4a;
263    }
264
265   /**
266    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getActionRoles()
267    * @return String
268    */
269    protected abstract String handleGetActionRoles();
270
271    private String __actionRoles5a;
272    private boolean __actionRoles5aSet = false;
273
274    /**
275     * Returns the action roles corresponding to this use-case's action, as found in the struts
276     * deployment descriptor. The action roles specifiy the roles in which the user must be in order
277     * to be authorized to call the action. One of the roles must be satisfied.
278     * @return (String)handleGetActionRoles()
279     */
280    public final String getActionRoles()
281    {
282        String actionRoles5a = this.__actionRoles5a;
283        if (!this.__actionRoles5aSet)
284        {
285            // actionRoles has no pre constraints
286            actionRoles5a = handleGetActionRoles();
287            // actionRoles has no post constraints
288            this.__actionRoles5a = actionRoles5a;
289            if (isMetafacadePropertyCachingEnabled())
290            {
291                this.__actionRoles5aSet = true;
292            }
293        }
294        return actionRoles5a;
295    }
296
297   /**
298    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#isApplicationValidationRequired()
299    * @return boolean
300    */
301    protected abstract boolean handleIsApplicationValidationRequired();
302
303    private boolean __applicationValidationRequired6a;
304    private boolean __applicationValidationRequired6aSet = false;
305
306    /**
307     * True if at least one client/server parameter found in the collection of existing use-cases
308     * requires validation.
309     * @return (boolean)handleIsApplicationValidationRequired()
310     */
311    public final boolean isApplicationValidationRequired()
312    {
313        boolean applicationValidationRequired6a = this.__applicationValidationRequired6a;
314        if (!this.__applicationValidationRequired6aSet)
315        {
316            // applicationValidationRequired has no pre constraints
317            applicationValidationRequired6a = handleIsApplicationValidationRequired();
318            // applicationValidationRequired has no post constraints
319            this.__applicationValidationRequired6a = applicationValidationRequired6a;
320            if (isMetafacadePropertyCachingEnabled())
321            {
322                this.__applicationValidationRequired6aSet = true;
323            }
324        }
325        return applicationValidationRequired6a;
326    }
327
328   /**
329    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#isValidationRequired()
330    * @return boolean
331    */
332    protected abstract boolean handleIsValidationRequired();
333
334    private boolean __validationRequired7a;
335    private boolean __validationRequired7aSet = false;
336
337    /**
338     * True if some client/server parameters require validation for this use-case.
339     * @return (boolean)handleIsValidationRequired()
340     */
341    public final boolean isValidationRequired()
342    {
343        boolean validationRequired7a = this.__validationRequired7a;
344        if (!this.__validationRequired7aSet)
345        {
346            // validationRequired has no pre constraints
347            validationRequired7a = handleIsValidationRequired();
348            // validationRequired has no post constraints
349            this.__validationRequired7a = validationRequired7a;
350            if (isMetafacadePropertyCachingEnabled())
351            {
352                this.__validationRequired7aSet = true;
353            }
354        }
355        return validationRequired7a;
356    }
357
358   /**
359    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getOnlineHelpKey()
360    * @return String
361    */
362    protected abstract String handleGetOnlineHelpKey();
363
364    private String __onlineHelpKey8a;
365    private boolean __onlineHelpKey8aSet = false;
366
367    /**
368     * The key to lookup the online help documentation. This documentation is gathered from the
369     * documentation entered by the user, as well as analyzing the model.
370     * @return (String)handleGetOnlineHelpKey()
371     */
372    public final String getOnlineHelpKey()
373    {
374        String onlineHelpKey8a = this.__onlineHelpKey8a;
375        if (!this.__onlineHelpKey8aSet)
376        {
377            // onlineHelpKey has no pre constraints
378            onlineHelpKey8a = handleGetOnlineHelpKey();
379            // onlineHelpKey has no post constraints
380            this.__onlineHelpKey8a = onlineHelpKey8a;
381            if (isMetafacadePropertyCachingEnabled())
382            {
383                this.__onlineHelpKey8aSet = true;
384            }
385        }
386        return onlineHelpKey8a;
387    }
388
389   /**
390    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getOnlineHelpValue()
391    * @return String
392    */
393    protected abstract String handleGetOnlineHelpValue();
394
395    private String __onlineHelpValue9a;
396    private boolean __onlineHelpValue9aSet = false;
397
398    /**
399     * The online help documentation. This documentation is gathered from the documentation entered
400     * by the user, as well as analyzing the model. The format is HTML without any style.
401     * @return (String)handleGetOnlineHelpValue()
402     */
403    public final String getOnlineHelpValue()
404    {
405        String onlineHelpValue9a = this.__onlineHelpValue9a;
406        if (!this.__onlineHelpValue9aSet)
407        {
408            // onlineHelpValue has no pre constraints
409            onlineHelpValue9a = handleGetOnlineHelpValue();
410            // onlineHelpValue has no post constraints
411            this.__onlineHelpValue9a = onlineHelpValue9a;
412            if (isMetafacadePropertyCachingEnabled())
413            {
414                this.__onlineHelpValue9aSet = true;
415            }
416        }
417        return onlineHelpValue9a;
418    }
419
420   /**
421    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#isApplicationUseCase()
422    * @return boolean
423    */
424    protected abstract boolean handleIsApplicationUseCase();
425
426    private boolean __applicationUseCase10a;
427    private boolean __applicationUseCase10aSet = false;
428
429    /**
430     * True if this use-case is where the application starts.
431     * @return (boolean)handleIsApplicationUseCase()
432     */
433    public final boolean isApplicationUseCase()
434    {
435        boolean applicationUseCase10a = this.__applicationUseCase10a;
436        if (!this.__applicationUseCase10aSet)
437        {
438            // applicationUseCase has no pre constraints
439            applicationUseCase10a = handleIsApplicationUseCase();
440            // applicationUseCase has no post constraints
441            this.__applicationUseCase10a = applicationUseCase10a;
442            if (isMetafacadePropertyCachingEnabled())
443            {
444                this.__applicationUseCase10aSet = true;
445            }
446        }
447        return applicationUseCase10a;
448    }
449
450   /**
451    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getApplicationHierarchyRoot()
452    * @return TreeNode
453    */
454    protected abstract TreeNode handleGetApplicationHierarchyRoot();
455
456    private TreeNode __applicationHierarchyRoot11a;
457    private boolean __applicationHierarchyRoot11aSet = false;
458
459    /**
460     * The root node of the application usecase hierarchy. Only makes sense when this usecase is an
461     * application usecase. Each usecase is only listed once in it's subtree, meaning when cycles ar
462     * edetected in the applicaion usecase graph the usecase will not be added when it already
463     * exists as an ancestor.
464     * @return (TreeNode)handleGetApplicationHierarchyRoot()
465     */
466    public final TreeNode getApplicationHierarchyRoot()
467    {
468        TreeNode applicationHierarchyRoot11a = this.__applicationHierarchyRoot11a;
469        if (!this.__applicationHierarchyRoot11aSet)
470        {
471            // applicationHierarchyRoot has no pre constraints
472            applicationHierarchyRoot11a = handleGetApplicationHierarchyRoot();
473            // applicationHierarchyRoot has no post constraints
474            this.__applicationHierarchyRoot11a = applicationHierarchyRoot11a;
475            if (isMetafacadePropertyCachingEnabled())
476            {
477                this.__applicationHierarchyRoot11aSet = true;
478            }
479        }
480        return applicationHierarchyRoot11a;
481    }
482
483   /**
484    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getHierarchyRoot()
485    * @return TreeNode
486    */
487    protected abstract TreeNode handleGetHierarchyRoot();
488
489    private TreeNode __hierarchyRoot12a;
490    private boolean __hierarchyRoot12aSet = false;
491
492    /**
493     * The root of the hierarchy of application usecases where this usecase is at the top. It is
494     * possible not all usecases are included in the descendants, they can be found in the
495     * collection of ancestor nodes.
496     * @return (TreeNode)handleGetHierarchyRoot()
497     */
498    public final TreeNode getHierarchyRoot()
499    {
500        TreeNode hierarchyRoot12a = this.__hierarchyRoot12a;
501        if (!this.__hierarchyRoot12aSet)
502        {
503            // hierarchyRoot has no pre constraints
504            hierarchyRoot12a = handleGetHierarchyRoot();
505            // hierarchyRoot has no post constraints
506            this.__hierarchyRoot12a = hierarchyRoot12a;
507            if (isMetafacadePropertyCachingEnabled())
508            {
509                this.__hierarchyRoot12aSet = true;
510            }
511        }
512        return hierarchyRoot12a;
513    }
514
515   /**
516    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getCssFileName()
517    * @return String
518    */
519    protected abstract String handleGetCssFileName();
520
521    private String __cssFileName13a;
522    private boolean __cssFileName13aSet = false;
523
524    /**
525     * The name of the file containing specific styles for this use-case only.
526     * @return (String)handleGetCssFileName()
527     */
528    public final String getCssFileName()
529    {
530        String cssFileName13a = this.__cssFileName13a;
531        if (!this.__cssFileName13aSet)
532        {
533            // cssFileName has no pre constraints
534            cssFileName13a = handleGetCssFileName();
535            // cssFileName has no post constraints
536            this.__cssFileName13a = cssFileName13a;
537            if (isMetafacadePropertyCachingEnabled())
538            {
539                this.__cssFileName13aSet = true;
540            }
541        }
542        return cssFileName13a;
543    }
544
545   /**
546    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getAllMessages()
547    * @return Map
548    */
549    protected abstract Map handleGetAllMessages();
550
551    private Map __allMessages14a;
552    private boolean __allMessages14aSet = false;
553
554    /**
555     * A map with keys sorted alphabetically, normalized across all different use-cases and pages
556     * etc..
557     * @return (Map)handleGetAllMessages()
558     */
559    public final Map getAllMessages()
560    {
561        Map allMessages14a = this.__allMessages14a;
562        if (!this.__allMessages14aSet)
563        {
564            // allMessages has no pre constraints
565            allMessages14a = handleGetAllMessages();
566            // allMessages has no post constraints
567            this.__allMessages14a = allMessages14a;
568            if (isMetafacadePropertyCachingEnabled())
569            {
570                this.__allMessages14aSet = true;
571            }
572        }
573        return allMessages14a;
574    }
575
576   /**
577    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#isCyclic()
578    * @return boolean
579    */
580    protected abstract boolean handleIsCyclic();
581
582    private boolean __cyclic15a;
583    private boolean __cyclic15aSet = false;
584
585    /**
586     * TODO: Model Documentation for
587     * org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase.cyclic
588     * @return (boolean)handleIsCyclic()
589     */
590    public final boolean isCyclic()
591    {
592        boolean cyclic15a = this.__cyclic15a;
593        if (!this.__cyclic15aSet)
594        {
595            // cyclic has no pre constraints
596            cyclic15a = handleIsCyclic();
597            // cyclic has no post constraints
598            this.__cyclic15a = cyclic15a;
599            if (isMetafacadePropertyCachingEnabled())
600            {
601                this.__cyclic15aSet = true;
602            }
603        }
604        return cyclic15a;
605    }
606
607   /**
608    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getOnlineHelpPagePath()
609    * @return String
610    */
611    protected abstract String handleGetOnlineHelpPagePath();
612
613    private String __onlineHelpPagePath16a;
614    private boolean __onlineHelpPagePath16aSet = false;
615
616    /**
617     * The full path to this use-case's online help page. The returned String does not have a suffix
618     * such as '.jsp'.
619     * @return (String)handleGetOnlineHelpPagePath()
620     */
621    public final String getOnlineHelpPagePath()
622    {
623        String onlineHelpPagePath16a = this.__onlineHelpPagePath16a;
624        if (!this.__onlineHelpPagePath16aSet)
625        {
626            // onlineHelpPagePath has no pre constraints
627            onlineHelpPagePath16a = handleGetOnlineHelpPagePath();
628            // onlineHelpPagePath has no post constraints
629            this.__onlineHelpPagePath16a = onlineHelpPagePath16a;
630            if (isMetafacadePropertyCachingEnabled())
631            {
632                this.__onlineHelpPagePath16aSet = true;
633            }
634        }
635        return onlineHelpPagePath16a;
636    }
637
638   /**
639    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getOnlineHelpActionPath()
640    * @return String
641    */
642    protected abstract String handleGetOnlineHelpActionPath();
643
644    private String __onlineHelpActionPath17a;
645    private boolean __onlineHelpActionPath17aSet = false;
646
647    /**
648     * The full path to this use-case's online help action. The returned String does not have a
649     * suffix such as '.do'.
650     * @return (String)handleGetOnlineHelpActionPath()
651     */
652    public final String getOnlineHelpActionPath()
653    {
654        String onlineHelpActionPath17a = this.__onlineHelpActionPath17a;
655        if (!this.__onlineHelpActionPath17aSet)
656        {
657            // onlineHelpActionPath has no pre constraints
658            onlineHelpActionPath17a = handleGetOnlineHelpActionPath();
659            // onlineHelpActionPath has no post constraints
660            this.__onlineHelpActionPath17a = onlineHelpActionPath17a;
661            if (isMetafacadePropertyCachingEnabled())
662            {
663                this.__onlineHelpActionPath17aSet = true;
664            }
665        }
666        return onlineHelpActionPath17a;
667    }
668
669   /**
670    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsUseCase#getFormKey()
671    * @return String
672    */
673    protected abstract String handleGetFormKey();
674
675    private String __formKey18a;
676    private boolean __formKey18aSet = false;
677
678    /**
679     * The key under which to store the forms contained in this use-case.
680     * @return (String)handleGetFormKey()
681     */
682    public final String getFormKey()
683    {
684        String formKey18a = this.__formKey18a;
685        if (!this.__formKey18aSet)
686        {
687            // formKey has no pre constraints
688            formKey18a = handleGetFormKey();
689            // formKey has no post constraints
690            this.__formKey18a = formKey18a;
691            if (isMetafacadePropertyCachingEnabled())
692            {
693                this.__formKey18aSet = true;
694            }
695        }
696        return formKey18a;
697    }
698
699    // ------------- associations ------------------
700
701    private List<StrutsParameter> __getPageVariables1r;
702    private boolean __getPageVariables1rSet = false;
703
704    /**
705     * A Struts use-case represents a set of related client/server requests and communication.
706     * @return (List<StrutsParameter>)handleGetPageVariables()
707     */
708    public final List<StrutsParameter> getPageVariables()
709    {
710        List<StrutsParameter> getPageVariables1r = this.__getPageVariables1r;
711        if (!this.__getPageVariables1rSet)
712        {
713            // strutsUseCase has no pre constraints
714            List result = handleGetPageVariables();
715            List shieldedResult = this.shieldedElements(result);
716            try
717            {
718                getPageVariables1r = (List<StrutsParameter>)shieldedResult;
719            }
720            catch (ClassCastException ex)
721            {
722                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
723                StrutsUseCaseLogic.logger.warn("incorrect metafacade cast for StrutsUseCaseLogic.getPageVariables List<StrutsParameter> " + result + ": " + shieldedResult);
724            }
725            // strutsUseCase has no post constraints
726            this.__getPageVariables1r = getPageVariables1r;
727            if (isMetafacadePropertyCachingEnabled())
728            {
729                this.__getPageVariables1rSet = true;
730            }
731        }
732        return getPageVariables1r;
733    }
734
735    /**
736     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
737     * @return  List
738     */
739    protected abstract List handleGetPageVariables();
740
741    private List<StrutsJsp> __getAllPages2r;
742    private boolean __getAllPages2rSet = false;
743
744    /**
745     * A Struts use-case represents a set of related client/server requests and communication.
746     * @return (List<StrutsJsp>)handleGetAllPages()
747     */
748    public final List<StrutsJsp> getAllPages()
749    {
750        List<StrutsJsp> getAllPages2r = this.__getAllPages2r;
751        if (!this.__getAllPages2rSet)
752        {
753            // strutsUseCase has no pre constraints
754            List result = handleGetAllPages();
755            List shieldedResult = this.shieldedElements(result);
756            try
757            {
758                getAllPages2r = (List<StrutsJsp>)shieldedResult;
759            }
760            catch (ClassCastException ex)
761            {
762                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
763                StrutsUseCaseLogic.logger.warn("incorrect metafacade cast for StrutsUseCaseLogic.getAllPages List<StrutsJsp> " + result + ": " + shieldedResult);
764            }
765            // strutsUseCase has no post constraints
766            this.__getAllPages2r = getAllPages2r;
767            if (isMetafacadePropertyCachingEnabled())
768            {
769                this.__getAllPages2rSet = true;
770            }
771        }
772        return getAllPages2r;
773    }
774
775    /**
776     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
777     * @return  List
778     */
779    protected abstract List handleGetAllPages();
780
781    private List<StrutsParameter> __getFormFields3r;
782    private boolean __getFormFields3rSet = false;
783
784    /**
785     * A Struts use-case represents a set of related client/server requests and communication.
786     * @return (List<StrutsParameter>)handleGetFormFields()
787     */
788    public final List<StrutsParameter> getFormFields()
789    {
790        List<StrutsParameter> getFormFields3r = this.__getFormFields3r;
791        if (!this.__getFormFields3rSet)
792        {
793            // strutsUseCase has no pre constraints
794            List result = handleGetFormFields();
795            List shieldedResult = this.shieldedElements(result);
796            try
797            {
798                getFormFields3r = (List<StrutsParameter>)shieldedResult;
799            }
800            catch (ClassCastException ex)
801            {
802                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
803                StrutsUseCaseLogic.logger.warn("incorrect metafacade cast for StrutsUseCaseLogic.getFormFields List<StrutsParameter> " + result + ": " + shieldedResult);
804            }
805            // strutsUseCase has no post constraints
806            this.__getFormFields3r = getFormFields3r;
807            if (isMetafacadePropertyCachingEnabled())
808            {
809                this.__getFormFields3rSet = true;
810            }
811        }
812        return getFormFields3r;
813    }
814
815    /**
816     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
817     * @return  List
818     */
819    protected abstract List handleGetFormFields();
820
821    private List<StrutsJsp> __getPages4r;
822    private boolean __getPages4rSet = false;
823
824    /**
825     * A Struts use-case represents a set of related client/server requests and communication.
826     * @return (List<StrutsJsp>)handleGetPages()
827     */
828    public final List<StrutsJsp> getPages()
829    {
830        List<StrutsJsp> getPages4r = this.__getPages4r;
831        if (!this.__getPages4rSet)
832        {
833            // strutsUseCase has no pre constraints
834            List result = handleGetPages();
835            List shieldedResult = this.shieldedElements(result);
836            try
837            {
838                getPages4r = (List<StrutsJsp>)shieldedResult;
839            }
840            catch (ClassCastException ex)
841            {
842                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
843                StrutsUseCaseLogic.logger.warn("incorrect metafacade cast for StrutsUseCaseLogic.getPages List<StrutsJsp> " + result + ": " + shieldedResult);
844            }
845            // strutsUseCase has no post constraints
846            this.__getPages4r = getPages4r;
847            if (isMetafacadePropertyCachingEnabled())
848            {
849                this.__getPages4rSet = true;
850            }
851        }
852        return getPages4r;
853    }
854
855    /**
856     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
857     * @return  List
858     */
859    protected abstract List handleGetPages();
860
861    /**
862     * @return true
863     * @see FrontEndUseCase
864     */
865    public boolean isFrontEndUseCaseMetaType()
866    {
867        return true;
868    }
869
870    /**
871     * @return true
872     * @see org.andromda.metafacades.uml.UseCaseFacade
873     */
874    public boolean isUseCaseFacadeMetaType()
875    {
876        return true;
877    }
878
879    /**
880     * @return true
881     * @see org.andromda.metafacades.uml.NamespaceFacade
882     */
883    public boolean isNamespaceFacadeMetaType()
884    {
885        return true;
886    }
887
888    /**
889     * @return true
890     * @see ClassifierFacade
891     */
892    public boolean isClassifierFacadeMetaType()
893    {
894        return true;
895    }
896
897    /**
898     * @return true
899     * @see GeneralizableElementFacade
900     */
901    public boolean isGeneralizableElementFacadeMetaType()
902    {
903        return true;
904    }
905
906    /**
907     * @return true
908     * @see ModelElementFacade
909     */
910    public boolean isModelElementFacadeMetaType()
911    {
912        return true;
913    }
914
915    // ----------- delegates to FrontEndUseCase ------------
916    /**
917     * Return the attribute which name matches the parameter
918     * @see ClassifierFacade#findAttribute(String name)
919     */
920    public AttributeFacade findAttribute(String name)
921    {
922        return this.getSuperFrontEndUseCase().findAttribute(name);
923    }
924
925    /**
926     * Those abstraction dependencies for which this classifier is the client.
927     * @see ClassifierFacade#getAbstractions()
928     */
929    public Collection<ClassifierFacade> getAbstractions()
930    {
931        return this.getSuperFrontEndUseCase().getAbstractions();
932    }
933
934    /**
935     * Lists all classes associated to this one and any ancestor classes (through generalization).
936     * There will be no duplicates. The order of the elements is predictable.
937     * @see ClassifierFacade#getAllAssociatedClasses()
938     */
939    public Collection<ClassifierFacade> getAllAssociatedClasses()
940    {
941        return this.getSuperFrontEndUseCase().getAllAssociatedClasses();
942    }
943
944    /**
945     * A collection containing all 'properties' of the classifier and its ancestors.  Properties are
946     * any attributes and navigable connecting association ends.
947     * @see ClassifierFacade#getAllProperties()
948     */
949    public Collection<ModelElementFacade> getAllProperties()
950    {
951        return this.getSuperFrontEndUseCase().getAllProperties();
952    }
953
954    /**
955     * A collection containing all required and/or read-only 'properties' of the classifier and its
956     * ancestors. Properties are any attributes and navigable connecting association ends.
957     * @see ClassifierFacade#getAllRequiredConstructorParameters()
958     */
959    public Collection<ModelElementFacade> getAllRequiredConstructorParameters()
960    {
961        return this.getSuperFrontEndUseCase().getAllRequiredConstructorParameters();
962    }
963
964    /**
965     * Gets the array type for this classifier.  If this classifier already represents an array, it
966     * just returns itself.
967     * @see ClassifierFacade#getArray()
968     */
969    public ClassifierFacade getArray()
970    {
971        return this.getSuperFrontEndUseCase().getArray();
972    }
973
974    /**
975     * The name of the classifier as an array.
976     * @see ClassifierFacade#getArrayName()
977     */
978    public String getArrayName()
979    {
980        return this.getSuperFrontEndUseCase().getArrayName();
981    }
982
983    /**
984     * Lists the classes associated to this one, there is no repitition of classes. The order of the
985     * elements is predictable.
986     * @see ClassifierFacade#getAssociatedClasses()
987     */
988    public Collection<ClassifierFacade> getAssociatedClasses()
989    {
990        return this.getSuperFrontEndUseCase().getAssociatedClasses();
991    }
992
993    /**
994     * Gets the association ends belonging to a classifier.
995     * @see ClassifierFacade#getAssociationEnds()
996     */
997    public List<AssociationEndFacade> getAssociationEnds()
998    {
999        return this.getSuperFrontEndUseCase().getAssociationEnds();
1000    }
1001
1002    /**
1003     * Gets the attributes that belong to the classifier.
1004     * @see ClassifierFacade#getAttributes()
1005     */
1006    public List<AttributeFacade> getAttributes()
1007    {
1008        return this.getSuperFrontEndUseCase().getAttributes();
1009    }
1010
1011    /**
1012     * Gets all attributes for the classifier and if 'follow' is true goes up the inheritance
1013     * hierarchy and gets the attributes from the super classes as well.
1014     * @see ClassifierFacade#getAttributes(boolean follow)
1015     */
1016    public List<AttributeFacade> getAttributes(boolean follow)
1017    {
1018        return this.getSuperFrontEndUseCase().getAttributes(follow);
1019    }
1020
1021    /**
1022     * The fully qualified name of the classifier as an array.
1023     * @see ClassifierFacade#getFullyQualifiedArrayName()
1024     */
1025    public String getFullyQualifiedArrayName()
1026    {
1027        return this.getSuperFrontEndUseCase().getFullyQualifiedArrayName();
1028    }
1029
1030    /**
1031     * Returns all those operations that could be implemented at this classifier's level. This means
1032     * the operations owned by this classifier as well as any realized interface's operations
1033     * (recursively) in case this classifier itself is not already an interface, or generalized when
1034     * this classifier is an interface.
1035     * @see ClassifierFacade#getImplementationOperations()
1036     */
1037    public Collection<OperationFacade> getImplementationOperations()
1038    {
1039        return this.getSuperFrontEndUseCase().getImplementationOperations();
1040    }
1041
1042    /**
1043     * A comma separated list of the fully qualified names of all implemented interfaces.
1044     * @see ClassifierFacade#getImplementedInterfaceList()
1045     */
1046    public String getImplementedInterfaceList()
1047    {
1048        return this.getSuperFrontEndUseCase().getImplementedInterfaceList();
1049    }
1050
1051    /**
1052     * Those attributes that are scoped to an instance of this class.
1053     * @see ClassifierFacade#getInstanceAttributes()
1054     */
1055    public Collection<AttributeFacade> getInstanceAttributes()
1056    {
1057        return this.getSuperFrontEndUseCase().getInstanceAttributes();
1058    }
1059
1060    /**
1061     * Those operations that are scoped to an instance of this class.
1062     * @see ClassifierFacade#getInstanceOperations()
1063     */
1064    public List<OperationFacade> getInstanceOperations()
1065    {
1066        return this.getSuperFrontEndUseCase().getInstanceOperations();
1067    }
1068
1069    /**
1070     * Those interfaces that are abstractions of this classifier, this basically means this
1071     * classifier realizes them.
1072     * @see ClassifierFacade#getInterfaceAbstractions()
1073     */
1074    public Collection<ClassifierFacade> getInterfaceAbstractions()
1075    {
1076        return this.getSuperFrontEndUseCase().getInterfaceAbstractions();
1077    }
1078
1079    /**
1080     * A String representing a new Constructor declaration for this classifier type to be used in a
1081     * Java environment.
1082     * @see ClassifierFacade#getJavaNewString()
1083     */
1084    public String getJavaNewString()
1085    {
1086        return this.getSuperFrontEndUseCase().getJavaNewString();
1087    }
1088
1089    /**
1090     * A String representing the null-value for this classifier type to be used in a Java
1091     * environment.
1092     * @see ClassifierFacade#getJavaNullString()
1093     */
1094    public String getJavaNullString()
1095    {
1096        return this.getSuperFrontEndUseCase().getJavaNullString();
1097    }
1098
1099    /**
1100     * The other ends of this classifier's association ends which are navigable.
1101     * @see ClassifierFacade#getNavigableConnectingEnds()
1102     */
1103    public Collection<AssociationEndFacade> getNavigableConnectingEnds()
1104    {
1105        return this.getSuperFrontEndUseCase().getNavigableConnectingEnds();
1106    }
1107
1108    /**
1109     * Get the other ends of this classifier's association ends which are navigable and if 'follow'
1110     * is true goes up the inheritance hierarchy and gets the super association ends as well.
1111     * @see ClassifierFacade#getNavigableConnectingEnds(boolean follow)
1112     */
1113    public List<AssociationEndFacade> getNavigableConnectingEnds(boolean follow)
1114    {
1115        return this.getSuperFrontEndUseCase().getNavigableConnectingEnds(follow);
1116    }
1117
1118    /**
1119     * Assuming that the classifier is an array, this will return the non array type of the
1120     * classifier from
1121     * the model.  If the classifier is NOT an array, it will just return itself.
1122     * @see ClassifierFacade#getNonArray()
1123     */
1124    public ClassifierFacade getNonArray()
1125    {
1126        return this.getSuperFrontEndUseCase().getNonArray();
1127    }
1128
1129    /**
1130     * The attributes from this classifier in the form of an operation call (this example would be
1131     * in Java): '(String attributeOne, String attributeTwo).  If there were no attributes on the
1132     * classifier, the result would be an empty '()'.
1133     * @see ClassifierFacade#getOperationCallFromAttributes()
1134     */
1135    public String getOperationCallFromAttributes()
1136    {
1137        return this.getSuperFrontEndUseCase().getOperationCallFromAttributes();
1138    }
1139
1140    /**
1141     * The operations owned by this classifier.
1142     * @see ClassifierFacade#getOperations()
1143     */
1144    public List<OperationFacade> getOperations()
1145    {
1146        return this.getSuperFrontEndUseCase().getOperations();
1147    }
1148
1149    /**
1150     * A collection containing all 'properties' of the classifier.  Properties are any attributes
1151     * and navigable connecting association ends.
1152     * @see ClassifierFacade#getProperties()
1153     */
1154    public List<ModelElementFacade> getProperties()
1155    {
1156        return this.getSuperFrontEndUseCase().getProperties();
1157    }
1158
1159    /**
1160     * Gets all properties (attributes and navigable association ends) for the classifier and if
1161     * 'follow' is true goes up the inheritance hierarchy and gets the properties from the super
1162     * classes as well.
1163     * @see ClassifierFacade#getProperties(boolean follow)
1164     */
1165    public List getProperties(boolean follow)
1166    {
1167        return this.getSuperFrontEndUseCase().getProperties(follow);
1168    }
1169
1170    /**
1171     * A collection containing all required and/or read-only 'properties' of the classifier. 
1172     * Properties are any attributes and navigable connecting association ends.
1173     * @see ClassifierFacade#getRequiredConstructorParameters()
1174     */
1175    public Collection<ModelElementFacade> getRequiredConstructorParameters()
1176    {
1177        return this.getSuperFrontEndUseCase().getRequiredConstructorParameters();
1178    }
1179
1180    /**
1181     * Returns the serial version UID of the underlying model element.
1182     * @see ClassifierFacade#getSerialVersionUID()
1183     */
1184    public long getSerialVersionUID()
1185    {
1186        return this.getSuperFrontEndUseCase().getSerialVersionUID();
1187    }
1188
1189    /**
1190     * Those attributes that are scoped to the definition of this class.
1191     * @see ClassifierFacade#getStaticAttributes()
1192     */
1193    public Collection<AttributeFacade> getStaticAttributes()
1194    {
1195        return this.getSuperFrontEndUseCase().getStaticAttributes();
1196    }
1197
1198    /**
1199     * Those operations that are scoped to the definition of this class.
1200     * @see ClassifierFacade#getStaticOperations()
1201     */
1202    public List<OperationFacade> getStaticOperations()
1203    {
1204        return this.getSuperFrontEndUseCase().getStaticOperations();
1205    }
1206
1207    /**
1208     * This class' superclass, returns the generalization if it is a ClassifierFacade, null
1209     * otherwise.
1210     * @see ClassifierFacade#getSuperClass()
1211     */
1212    public ClassifierFacade getSuperClass()
1213    {
1214        return this.getSuperFrontEndUseCase().getSuperClass();
1215    }
1216
1217    /**
1218     * The wrapper name for this classifier if a mapped type has a defined wrapper class (ie. 'long'
1219     * maps to 'Long').  If the classifier doesn't have a wrapper defined for it, this method will
1220     * return a null.  Note that wrapper mappings must be defined for the namespace by defining the
1221     * 'wrapperMappingsUri', this property must point to the location of the mappings file which
1222     * maps the primitives to wrapper types.
1223     * @see ClassifierFacade#getWrapperName()
1224     */
1225    public String getWrapperName()
1226    {
1227        return this.getSuperFrontEndUseCase().getWrapperName();
1228    }
1229
1230    /**
1231     * Indicates if this classifier is 'abstract'.
1232     * @see ClassifierFacade#isAbstract()
1233     */
1234    public boolean isAbstract()
1235    {
1236        return this.getSuperFrontEndUseCase().isAbstract();
1237    }
1238
1239    /**
1240     * True if this classifier represents an array type. False otherwise.
1241     * @see ClassifierFacade#isArrayType()
1242     */
1243    public boolean isArrayType()
1244    {
1245        return this.getSuperFrontEndUseCase().isArrayType();
1246    }
1247
1248    /**
1249     * True if the ClassifierFacade is an AssociationClass.
1250     * @see ClassifierFacade#isAssociationClass()
1251     */
1252    public boolean isAssociationClass()
1253    {
1254        return this.getSuperFrontEndUseCase().isAssociationClass();
1255    }
1256
1257    /**
1258     * Returns true if this type represents a Blob type.
1259     * @see ClassifierFacade#isBlobType()
1260     */
1261    public boolean isBlobType()
1262    {
1263        return this.getSuperFrontEndUseCase().isBlobType();
1264    }
1265
1266    /**
1267     * Indicates if this type represents a boolean type or not.
1268     * @see ClassifierFacade#isBooleanType()
1269     */
1270    public boolean isBooleanType()
1271    {
1272        return this.getSuperFrontEndUseCase().isBooleanType();
1273    }
1274
1275    /**
1276     * Indicates if this type represents a char, Character, or java.lang.Character type or not.
1277     * @see ClassifierFacade#isCharacterType()
1278     */
1279    public boolean isCharacterType()
1280    {
1281        return this.getSuperFrontEndUseCase().isCharacterType();
1282    }
1283
1284    /**
1285     * Returns true if this type represents a Clob type.
1286     * @see ClassifierFacade#isClobType()
1287     */
1288    public boolean isClobType()
1289    {
1290        return this.getSuperFrontEndUseCase().isClobType();
1291    }
1292
1293    /**
1294     * True if this classifier represents a collection type. False otherwise.
1295     * @see ClassifierFacade#isCollectionType()
1296     */
1297    public boolean isCollectionType()
1298    {
1299        return this.getSuperFrontEndUseCase().isCollectionType();
1300    }
1301
1302    /**
1303     * True/false depending on whether or not this classifier represents a datatype. A data type is
1304     * a type whose instances are identified only by their value. A data type may contain attributes
1305     * to support the modeling of structured data types.
1306     * @see ClassifierFacade#isDataType()
1307     */
1308    public boolean isDataType()
1309    {
1310        return this.getSuperFrontEndUseCase().isDataType();
1311    }
1312
1313    /**
1314     * True when this classifier is a date type.
1315     * @see ClassifierFacade#isDateType()
1316     */
1317    public boolean isDateType()
1318    {
1319        return this.getSuperFrontEndUseCase().isDateType();
1320    }
1321
1322    /**
1323     * Indicates if this type represents a Double type or not.
1324     * @see ClassifierFacade#isDoubleType()
1325     */
1326    public boolean isDoubleType()
1327    {
1328        return this.getSuperFrontEndUseCase().isDoubleType();
1329    }
1330
1331    /**
1332     * Indicates whether or not this classifier represents an "EmbeddedValue'.
1333     * @see ClassifierFacade#isEmbeddedValue()
1334     */
1335    public boolean isEmbeddedValue()
1336    {
1337        return this.getSuperFrontEndUseCase().isEmbeddedValue();
1338    }
1339
1340    /**
1341     * True if this classifier is in fact marked as an enumeration.
1342     * @see ClassifierFacade#isEnumeration()
1343     */
1344    public boolean isEnumeration()
1345    {
1346        return this.getSuperFrontEndUseCase().isEnumeration();
1347    }
1348
1349    /**
1350     * Returns true if this type represents a 'file' type.
1351     * @see ClassifierFacade#isFileType()
1352     */
1353    public boolean isFileType()
1354    {
1355        return this.getSuperFrontEndUseCase().isFileType();
1356    }
1357
1358    /**
1359     * Indicates if this type represents a Float type or not.
1360     * @see ClassifierFacade#isFloatType()
1361     */
1362    public boolean isFloatType()
1363    {
1364        return this.getSuperFrontEndUseCase().isFloatType();
1365    }
1366
1367    /**
1368     * Indicates if this type represents an int or Integer or java.lang.Integer type or not.
1369     * @see ClassifierFacade#isIntegerType()
1370     */
1371    public boolean isIntegerType()
1372    {
1373        return this.getSuperFrontEndUseCase().isIntegerType();
1374    }
1375
1376    /**
1377     * True/false depending on whether or not this Classifier represents an interface.
1378     * @see ClassifierFacade#isInterface()
1379     */
1380    public boolean isInterface()
1381    {
1382        return this.getSuperFrontEndUseCase().isInterface();
1383    }
1384
1385    /**
1386     * True if this classifier cannot be extended and represent a leaf in the inheritance tree.
1387     * @see ClassifierFacade#isLeaf()
1388     */
1389    public boolean isLeaf()
1390    {
1391        return this.getSuperFrontEndUseCase().isLeaf();
1392    }
1393
1394    /**
1395     * True if this classifier represents a list type. False otherwise.
1396     * @see ClassifierFacade#isListType()
1397     */
1398    public boolean isListType()
1399    {
1400        return this.getSuperFrontEndUseCase().isListType();
1401    }
1402
1403    /**
1404     * Indicates if this type represents a Long type or not.
1405     * @see ClassifierFacade#isLongType()
1406     */
1407    public boolean isLongType()
1408    {
1409        return this.getSuperFrontEndUseCase().isLongType();
1410    }
1411
1412    /**
1413     * Indicates whether or not this classifier represents a Map type.
1414     * @see ClassifierFacade#isMapType()
1415     */
1416    public boolean isMapType()
1417    {
1418        return this.getSuperFrontEndUseCase().isMapType();
1419    }
1420
1421    /**
1422     * Indicates whether or not this classifier represents a primitive type.
1423     * @see ClassifierFacade#isPrimitive()
1424     */
1425    public boolean isPrimitive()
1426    {
1427        return this.getSuperFrontEndUseCase().isPrimitive();
1428    }
1429
1430    /**
1431     * True if this classifier represents a set type. False otherwise.
1432     * @see ClassifierFacade#isSetType()
1433     */
1434    public boolean isSetType()
1435    {
1436        return this.getSuperFrontEndUseCase().isSetType();
1437    }
1438
1439    /**
1440     * Indicates whether or not this classifier represents a string type.
1441     * @see ClassifierFacade#isStringType()
1442     */
1443    public boolean isStringType()
1444    {
1445        return this.getSuperFrontEndUseCase().isStringType();
1446    }
1447
1448    /**
1449     * Indicates whether or not this classifier represents a time type.
1450     * @see ClassifierFacade#isTimeType()
1451     */
1452    public boolean isTimeType()
1453    {
1454        return this.getSuperFrontEndUseCase().isTimeType();
1455    }
1456
1457    /**
1458     * Returns true if this type is a wrapped primitive type.
1459     * @see ClassifierFacade#isWrappedPrimitive()
1460     */
1461    public boolean isWrappedPrimitive()
1462    {
1463        return this.getSuperFrontEndUseCase().isWrappedPrimitive();
1464    }
1465
1466    /**
1467     * The actions for this use-case. This will include the initial action to start the use-case.
1468     * @see FrontEndUseCase#getActions()
1469     */
1470    public List<FrontEndAction> getActions()
1471    {
1472        return this.getSuperFrontEndUseCase().getActions();
1473    }
1474
1475    /**
1476     * Returns the activity graph describing this use-case in more detail.
1477     * @see FrontEndUseCase#getActivityGraph()
1478     */
1479    public FrontEndActivityGraph getActivityGraph()
1480    {
1481        return this.getSuperFrontEndUseCase().getActivityGraph();
1482    }
1483
1484    /**
1485     * All roles that directly or indirectly related to any "front-end" use cases.
1486     * @see FrontEndUseCase#getAllRoles()
1487     */
1488    public List<Role> getAllRoles()
1489    {
1490        return this.getSuperFrontEndUseCase().getAllRoles();
1491    }
1492
1493    /**
1494     * Returns all struts use-cases in this "front end" application.
1495     * @see FrontEndUseCase#getAllUseCases()
1496     */
1497    public List<FrontEndUseCase> getAllUseCases()
1498    {
1499        return this.getSuperFrontEndUseCase().getAllUseCases();
1500    }
1501
1502    /**
1503     * Returns the controller for this use-case.
1504     * @see FrontEndUseCase#getController()
1505     */
1506    public FrontEndController getController()
1507    {
1508        return this.getSuperFrontEndUseCase().getController();
1509    }
1510
1511    /**
1512     * The first view of this use case, this may actually return a view of another use case if the
1513     * first is found by traveling through the final state.
1514     * @see FrontEndUseCase#getInitialView()
1515     */
1516    public FrontEndView getInitialView()
1517    {
1518        return this.getSuperFrontEndUseCase().getInitialView();
1519    }
1520
1521    /**
1522     * The final states linking to this use case
1523     * @see FrontEndUseCase#getReferencingFinalStates()
1524     */
1525    public List<FrontEndFinalState> getReferencingFinalStates()
1526    {
1527        return this.getSuperFrontEndUseCase().getReferencingFinalStates();
1528    }
1529
1530    /**
1531     * Returns all roles that are directly and indirectly associated to this use-case.
1532     * @see FrontEndUseCase#getRoles()
1533     */
1534    public List<Role> getRoles()
1535    {
1536        return this.getSuperFrontEndUseCase().getRoles();
1537    }
1538
1539    /**
1540     * The variables for all views in this use-case. A parameter qualifies to be a variable when it
1541     * explicitely and directly receives it via an action.
1542     * @see FrontEndUseCase#getViewVariables()
1543     */
1544    public List<FrontEndParameter> getViewVariables()
1545    {
1546        return this.getSuperFrontEndUseCase().getViewVariables();
1547    }
1548
1549    /**
1550     * All views that are part of this use case.
1551     * @see FrontEndUseCase#getViews()
1552     */
1553    public List<FrontEndView> getViews()
1554    {
1555        return this.getSuperFrontEndUseCase().getViews();
1556    }
1557
1558    /**
1559     * True if this use-case is the entry point to the front end.
1560     * @see FrontEndUseCase#isEntryUseCase()
1561     */
1562    public boolean isEntryUseCase()
1563    {
1564        return this.getSuperFrontEndUseCase().isEntryUseCase();
1565    }
1566
1567    /**
1568     * Indicates if this use case is "secured".  This is true when there is at least one role
1569     * associated to it.
1570     * @see FrontEndUseCase#isSecured()
1571     */
1572    public boolean isSecured()
1573    {
1574        return this.getSuperFrontEndUseCase().isSecured();
1575    }
1576
1577    /**
1578     * Finds the tagged value optional searching the entire inheritance hierarchy if 'follow' is set
1579     * to true.
1580     * @see GeneralizableElementFacade#findTaggedValue(String tagName, boolean follow)
1581     */
1582    public Object findTaggedValue(String tagName, boolean follow)
1583    {
1584        return this.getSuperFrontEndUseCase().findTaggedValue(tagName, follow);
1585    }
1586
1587    /**
1588     * All generalizations for this generalizable element, goes up the inheritance tree.
1589     * @see GeneralizableElementFacade#getAllGeneralizations()
1590     */
1591    public Collection<GeneralizableElementFacade> getAllGeneralizations()
1592    {
1593        return this.getSuperFrontEndUseCase().getAllGeneralizations();
1594    }
1595
1596    /**
1597     * All specializations (travels down the inheritance hierarchy).
1598     * @see GeneralizableElementFacade#getAllSpecializations()
1599     */
1600    public Collection<GeneralizableElementFacade> getAllSpecializations()
1601    {
1602        return this.getSuperFrontEndUseCase().getAllSpecializations();
1603    }
1604
1605    /**
1606     * Gets the direct generalization for this generalizable element.
1607     * @see GeneralizableElementFacade#getGeneralization()
1608     */
1609    public GeneralizableElementFacade getGeneralization()
1610    {
1611        return this.getSuperFrontEndUseCase().getGeneralization();
1612    }
1613
1614    /**
1615     * Gets the actual links that this generalization element is part of (it plays either the
1616     * specialization or generalization).
1617     * @see GeneralizableElementFacade#getGeneralizationLinks()
1618     */
1619    public Collection<GeneralizationFacade> getGeneralizationLinks()
1620    {
1621        return this.getSuperFrontEndUseCase().getGeneralizationLinks();
1622    }
1623
1624    /**
1625     * A comma separated list of the fully qualified names of all generalizations.
1626     * @see GeneralizableElementFacade#getGeneralizationList()
1627     */
1628    public String getGeneralizationList()
1629    {
1630        return this.getSuperFrontEndUseCase().getGeneralizationList();
1631    }
1632
1633    /**
1634     * The element found when you recursively follow the generalization path up to the root. If an
1635     * element has no generalization itself will be considered the root.
1636     * @see GeneralizableElementFacade#getGeneralizationRoot()
1637     */
1638    public GeneralizableElementFacade getGeneralizationRoot()
1639    {
1640        return this.getSuperFrontEndUseCase().getGeneralizationRoot();
1641    }
1642
1643    /**
1644     * Return all generalizations (ancestors) from this generalizable element.
1645     * @see GeneralizableElementFacade#getGeneralizations()
1646     */
1647    public Collection<GeneralizableElementFacade> getGeneralizations()
1648    {
1649        return this.getSuperFrontEndUseCase().getGeneralizations();
1650    }
1651
1652    /**
1653     * Gets the direct specializations (i.e. sub elements) for this generalizatble element.
1654     * @see GeneralizableElementFacade#getSpecializations()
1655     */
1656    public Collection<GeneralizableElementFacade> getSpecializations()
1657    {
1658        return this.getSuperFrontEndUseCase().getSpecializations();
1659    }
1660
1661    /**
1662     * Copies all tagged values from the given ModelElementFacade to this model element facade.
1663     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1664     */
1665    public void copyTaggedValues(ModelElementFacade element)
1666    {
1667        this.getSuperFrontEndUseCase().copyTaggedValues(element);
1668    }
1669
1670    /**
1671     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1672     * one found will be returned.
1673     * @see ModelElementFacade#findTaggedValue(String tagName)
1674     */
1675    public Object findTaggedValue(String tagName)
1676    {
1677        return this.getSuperFrontEndUseCase().findTaggedValue(tagName);
1678    }
1679
1680    /**
1681     * Returns all the values for the tagged value with the specified name. The returned collection
1682     * will contains only String instances, or will be empty. Never null.
1683     * @see ModelElementFacade#findTaggedValues(String tagName)
1684     */
1685    public Collection<Object> findTaggedValues(String tagName)
1686    {
1687        return this.getSuperFrontEndUseCase().findTaggedValues(tagName);
1688    }
1689
1690    /**
1691     * Returns the fully qualified name of the model element. The fully qualified name includes
1692     * complete package qualified name of the underlying model element. The templates parameter will
1693     * be replaced by the correct one given the binding relation of the parameter to this element.
1694     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1695     */
1696    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1697    {
1698        return this.getSuperFrontEndUseCase().getBindedFullyQualifiedName(bindedElement);
1699    }
1700
1701    /**
1702     * Gets all constraints belonging to the model element.
1703     * @see ModelElementFacade#getConstraints()
1704     */
1705    public Collection<ConstraintFacade> getConstraints()
1706    {
1707        return this.getSuperFrontEndUseCase().getConstraints();
1708    }
1709
1710    /**
1711     * Returns the constraints of the argument kind that have been placed onto this model. Typical
1712     * kinds are "inv", "pre" and "post". Other kinds are possible.
1713     * @see ModelElementFacade#getConstraints(String kind)
1714     */
1715    public Collection<ConstraintFacade> getConstraints(String kind)
1716    {
1717        return this.getSuperFrontEndUseCase().getConstraints(kind);
1718    }
1719
1720    /**
1721     * Gets the documentation for the model element, The indent argument is prefixed to each line.
1722     * By default this method wraps lines after 64 characters.
1723     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1724     * @see ModelElementFacade#getDocumentation(String indent)
1725     */
1726    public String getDocumentation(String indent)
1727    {
1728        return this.getSuperFrontEndUseCase().getDocumentation(indent);
1729    }
1730
1731    /**
1732     * This method returns the documentation for this model element, with the lines wrapped after
1733     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1734     * required. By default paragraphs are returned as HTML.
1735     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1736     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1737     */
1738    public String getDocumentation(String indent, int lineLength)
1739    {
1740        return this.getSuperFrontEndUseCase().getDocumentation(indent, lineLength);
1741    }
1742
1743    /**
1744     * This method returns the documentation for this model element, with the lines wrapped after
1745     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1746     * required. HTML style determines if HTML Escaping is applied.
1747     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1748     */
1749    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1750    {
1751        return this.getSuperFrontEndUseCase().getDocumentation(indent, lineLength, htmlStyle);
1752    }
1753
1754    /**
1755     * The fully qualified name of this model element.
1756     * @see ModelElementFacade#getFullyQualifiedName()
1757     */
1758    public String getFullyQualifiedName()
1759    {
1760        return this.getSuperFrontEndUseCase().getFullyQualifiedName();
1761    }
1762
1763    /**
1764     * Returns the fully qualified name of the model element. The fully qualified name includes
1765     * complete package qualified name of the underlying model element.  If modelName is true, then
1766     * the original name of the model element (the name contained within the model) will be the name
1767     * returned, otherwise a name from a language mapping will be returned.
1768     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1769     */
1770    public String getFullyQualifiedName(boolean modelName)
1771    {
1772        return this.getSuperFrontEndUseCase().getFullyQualifiedName(modelName);
1773    }
1774
1775    /**
1776     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1777     * '/'.
1778     * @see ModelElementFacade#getFullyQualifiedNamePath()
1779     */
1780    public String getFullyQualifiedNamePath()
1781    {
1782        return this.getSuperFrontEndUseCase().getFullyQualifiedNamePath();
1783    }
1784
1785    /**
1786     * Gets the unique identifier of the underlying model element.
1787     * @see ModelElementFacade#getId()
1788     */
1789    public String getId()
1790    {
1791        return this.getSuperFrontEndUseCase().getId();
1792    }
1793
1794    /**
1795     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1796     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1797     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1798     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1799     * JDK5 compiler level.
1800     * @see ModelElementFacade#getKeywords()
1801     */
1802    public Collection<String> getKeywords()
1803    {
1804        return this.getSuperFrontEndUseCase().getKeywords();
1805    }
1806
1807    /**
1808     * UML2: Retrieves a localized label for this named element.
1809     * @see ModelElementFacade#getLabel()
1810     */
1811    public String getLabel()
1812    {
1813        return this.getSuperFrontEndUseCase().getLabel();
1814    }
1815
1816    /**
1817     * The language mappings that have been set for this model element.
1818     * @see ModelElementFacade#getLanguageMappings()
1819     */
1820    public TypeMappings getLanguageMappings()
1821    {
1822        return this.getSuperFrontEndUseCase().getLanguageMappings();
1823    }
1824
1825    /**
1826     * Return the model containing this model element (multiple models may be loaded and processed
1827     * at the same time).
1828     * @see ModelElementFacade#getModel()
1829     */
1830    public ModelFacade getModel()
1831    {
1832        return this.getSuperFrontEndUseCase().getModel();
1833    }
1834
1835    /**
1836     * The name of the model element.
1837     * @see ModelElementFacade#getName()
1838     */
1839    public String getName()
1840    {
1841        return this.getSuperFrontEndUseCase().getName();
1842    }
1843
1844    /**
1845     * Gets the package to which this model element belongs.
1846     * @see ModelElementFacade#getPackage()
1847     */
1848    public ModelElementFacade getPackage()
1849    {
1850        return this.getSuperFrontEndUseCase().getPackage();
1851    }
1852
1853    /**
1854     * The name of this model element's package.
1855     * @see ModelElementFacade#getPackageName()
1856     */
1857    public String getPackageName()
1858    {
1859        return this.getSuperFrontEndUseCase().getPackageName();
1860    }
1861
1862    /**
1863     * Gets the package name (optionally providing the ability to retrieve the model name and not
1864     * the mapped name).
1865     * @see ModelElementFacade#getPackageName(boolean modelName)
1866     */
1867    public String getPackageName(boolean modelName)
1868    {
1869        return this.getSuperFrontEndUseCase().getPackageName(modelName);
1870    }
1871
1872    /**
1873     * Returns the package as a path, the returned value always starts with out a slash '/'.
1874     * @see ModelElementFacade#getPackagePath()
1875     */
1876    public String getPackagePath()
1877    {
1878        return this.getSuperFrontEndUseCase().getPackagePath();
1879    }
1880
1881    /**
1882     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1883     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1884     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1885     * the name of the NamedElement itself.
1886     * @see ModelElementFacade#getQualifiedName()
1887     */
1888    public String getQualifiedName()
1889    {
1890        return this.getSuperFrontEndUseCase().getQualifiedName();
1891    }
1892
1893    /**
1894     * Gets the root package for the model element.
1895     * @see ModelElementFacade#getRootPackage()
1896     */
1897    public PackageFacade getRootPackage()
1898    {
1899        return this.getSuperFrontEndUseCase().getRootPackage();
1900    }
1901
1902    /**
1903     * Gets the dependencies for which this model element is the source.
1904     * @see ModelElementFacade#getSourceDependencies()
1905     */
1906    public Collection<DependencyFacade> getSourceDependencies()
1907    {
1908        return this.getSuperFrontEndUseCase().getSourceDependencies();
1909    }
1910
1911    /**
1912     * If this model element is the context of an activity graph, this represents that activity
1913     * graph.
1914     * @see ModelElementFacade#getStateMachineContext()
1915     */
1916    public StateMachineFacade getStateMachineContext()
1917    {
1918        return this.getSuperFrontEndUseCase().getStateMachineContext();
1919    }
1920
1921    /**
1922     * The collection of ALL stereotype names for this model element.
1923     * @see ModelElementFacade#getStereotypeNames()
1924     */
1925    public Collection<String> getStereotypeNames()
1926    {
1927        return this.getSuperFrontEndUseCase().getStereotypeNames();
1928    }
1929
1930    /**
1931     * Gets all stereotypes for this model element.
1932     * @see ModelElementFacade#getStereotypes()
1933     */
1934    public Collection<StereotypeFacade> getStereotypes()
1935    {
1936        return this.getSuperFrontEndUseCase().getStereotypes();
1937    }
1938
1939    /**
1940     * Return the TaggedValues associated with this model element, under all stereotypes.
1941     * @see ModelElementFacade#getTaggedValues()
1942     */
1943    public Collection<TaggedValueFacade> getTaggedValues()
1944    {
1945        return this.getSuperFrontEndUseCase().getTaggedValues();
1946    }
1947
1948    /**
1949     * Gets the dependencies for which this model element is the target.
1950     * @see ModelElementFacade#getTargetDependencies()
1951     */
1952    public Collection<DependencyFacade> getTargetDependencies()
1953    {
1954        return this.getSuperFrontEndUseCase().getTargetDependencies();
1955    }
1956
1957    /**
1958     * Get the template parameter for this model element having the parameterName
1959     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1960     */
1961    public Object getTemplateParameter(String parameterName)
1962    {
1963        return this.getSuperFrontEndUseCase().getTemplateParameter(parameterName);
1964    }
1965
1966    /**
1967     * Get the template parameters for this model element
1968     * @see ModelElementFacade#getTemplateParameters()
1969     */
1970    public Collection<TemplateParameterFacade> getTemplateParameters()
1971    {
1972        return this.getSuperFrontEndUseCase().getTemplateParameters();
1973    }
1974
1975    /**
1976     * The visibility (i.e. public, private, protected or package) of the model element, will
1977     * attempt a lookup for these values in the language mappings (if any).
1978     * @see ModelElementFacade#getVisibility()
1979     */
1980    public String getVisibility()
1981    {
1982        return this.getSuperFrontEndUseCase().getVisibility();
1983    }
1984
1985    /**
1986     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1987     * is taken into account when searching for the stereotype), false otherwise.
1988     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1989     */
1990    public boolean hasExactStereotype(String stereotypeName)
1991    {
1992        return this.getSuperFrontEndUseCase().hasExactStereotype(stereotypeName);
1993    }
1994
1995    /**
1996     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1997     * pipe, semicolon, or << >>
1998     * @see ModelElementFacade#hasKeyword(String keywordName)
1999     */
2000    public boolean hasKeyword(String keywordName)
2001    {
2002        return this.getSuperFrontEndUseCase().hasKeyword(keywordName);
2003    }
2004
2005    /**
2006     * Returns true if the model element has the specified stereotype.  If the stereotype itself
2007     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
2008     * one of the stereotype's ancestors has a matching name this method will return true, false
2009     * otherwise.
2010     * For example, if we have a certain stereotype called <<exception>> and a model element has a
2011     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
2012     * method with 'stereotypeName' defined as 'exception' the method would return true since
2013     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
2014     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
2015     * @see ModelElementFacade#hasStereotype(String stereotypeName)
2016     */
2017    public boolean hasStereotype(String stereotypeName)
2018    {
2019        return this.getSuperFrontEndUseCase().hasStereotype(stereotypeName);
2020    }
2021
2022    /**
2023     * True if there are target dependencies from this element that are instances of BindingFacade.
2024     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
2025     * @see ModelElementFacade#isBindingDependenciesPresent()
2026     */
2027    public boolean isBindingDependenciesPresent()
2028    {
2029        return this.getSuperFrontEndUseCase().isBindingDependenciesPresent();
2030    }
2031
2032    /**
2033     * Indicates if any constraints are present on this model element.
2034     * @see ModelElementFacade#isConstraintsPresent()
2035     */
2036    public boolean isConstraintsPresent()
2037    {
2038        return this.getSuperFrontEndUseCase().isConstraintsPresent();
2039    }
2040
2041    /**
2042     * Indicates if any documentation is present on this model element.
2043     * @see ModelElementFacade#isDocumentationPresent()
2044     */
2045    public boolean isDocumentationPresent()
2046    {
2047        return this.getSuperFrontEndUseCase().isDocumentationPresent();
2048    }
2049
2050    /**
2051     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
2052     * @see ModelElementFacade#isReservedWord()
2053     */
2054    public boolean isReservedWord()
2055    {
2056        return this.getSuperFrontEndUseCase().isReservedWord();
2057    }
2058
2059    /**
2060     * True is there are template parameters on this model element. For UML2, applies to Class,
2061     * Operation, Property, and Parameter.
2062     * @see ModelElementFacade#isTemplateParametersPresent()
2063     */
2064    public boolean isTemplateParametersPresent()
2065    {
2066        return this.getSuperFrontEndUseCase().isTemplateParametersPresent();
2067    }
2068
2069    /**
2070     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
2071     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
2072     * Enumerations and Interfaces, optionally applies on other model elements.
2073     * @see ModelElementFacade#isValidIdentifierName()
2074     */
2075    public boolean isValidIdentifierName()
2076    {
2077        return this.getSuperFrontEndUseCase().isValidIdentifierName();
2078    }
2079
2080    /**
2081     * Searches for the constraint with the specified 'name' on this model element, and if found
2082     * translates it using the specified 'translation' from a translation library discovered by the
2083     * framework.
2084     * @see ModelElementFacade#translateConstraint(String name, String translation)
2085     */
2086    public String translateConstraint(String name, String translation)
2087    {
2088        return this.getSuperFrontEndUseCase().translateConstraint(name, translation);
2089    }
2090
2091    /**
2092     * Translates all constraints belonging to this model element with the given 'translation'.
2093     * @see ModelElementFacade#translateConstraints(String translation)
2094     */
2095    public String[] translateConstraints(String translation)
2096    {
2097        return this.getSuperFrontEndUseCase().translateConstraints(translation);
2098    }
2099
2100    /**
2101     * Translates the constraints of the specified 'kind' belonging to this model element.
2102     * @see ModelElementFacade#translateConstraints(String kind, String translation)
2103     */
2104    public String[] translateConstraints(String kind, String translation)
2105    {
2106        return this.getSuperFrontEndUseCase().translateConstraints(kind, translation);
2107    }
2108
2109    /**
2110     * Gets the model elements which this namespace owns.
2111     * @see org.andromda.metafacades.uml.NamespaceFacade#getOwnedElements()
2112     */
2113    public Collection<ModelElementFacade> getOwnedElements()
2114    {
2115        return this.getSuperFrontEndUseCase().getOwnedElements();
2116    }
2117
2118    /**
2119     * The extend instances related to this use-case.
2120     * @see org.andromda.metafacades.uml.UseCaseFacade#getExtends()
2121     */
2122    public Collection<ExtendFacade> getExtends()
2123    {
2124        return this.getSuperFrontEndUseCase().getExtends();
2125    }
2126
2127    /**
2128     * The extension points related to this use-case.
2129     * @see org.andromda.metafacades.uml.UseCaseFacade#getExtensionPoints()
2130     */
2131    public Collection<ExtensionPointFacade> getExtensionPoints()
2132    {
2133        return this.getSuperFrontEndUseCase().getExtensionPoints();
2134    }
2135
2136    /**
2137     * The first activity graph directly owned by this use-case.
2138     * @see org.andromda.metafacades.uml.UseCaseFacade#getFirstActivityGraph()
2139     */
2140    public ActivityGraphFacade getFirstActivityGraph()
2141    {
2142        return this.getSuperFrontEndUseCase().getFirstActivityGraph();
2143    }
2144
2145    /**
2146     * The included instances related to this use-case.
2147     * @see org.andromda.metafacades.uml.UseCaseFacade#getIncludes()
2148     */
2149    public Collection<IncludeFacade> getIncludes()
2150    {
2151        return this.getSuperFrontEndUseCase().getIncludes();
2152    }
2153
2154    /**
2155     * @see MetafacadeBase#initialize()
2156     */
2157    @Override
2158    public void initialize()
2159    {
2160        this.getSuperFrontEndUseCase().initialize();
2161    }
2162
2163    /**
2164     * @return Object getSuperFrontEndUseCase().getValidationOwner()
2165     * @see MetafacadeBase#getValidationOwner()
2166     */
2167    @Override
2168    public Object getValidationOwner()
2169    {
2170        Object owner = this.getSuperFrontEndUseCase().getValidationOwner();
2171        return owner;
2172    }
2173
2174    /**
2175     * @return String getSuperFrontEndUseCase().getValidationName()
2176     * @see MetafacadeBase#getValidationName()
2177     */
2178    @Override
2179    public String getValidationName()
2180    {
2181        String name = this.getSuperFrontEndUseCase().getValidationName();
2182        return name;
2183    }
2184
2185    /**
2186     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsUseCase::use-cases that loop need at least one page</p>
2187     * <p><b>Error:</b> This use-case has a final state targetting the same use-case, while at the same time no pages have been modeled. This will lead to an infinite loop at runtime since the same event will keep invoking itself.</p>
2188     * <p><b>OCL:</b> context StrutsUseCase inv: cyclic implies pages->notEmpty()</p>
2189     * @param validationMessages Collection<ModelValidationMessage>
2190     * @see MetafacadeBase#validateInvariants(Collection validationMessages)
2191     */
2192    @Override
2193    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
2194    {
2195        this.getSuperFrontEndUseCase().validateInvariants(validationMessages);
2196        try
2197        {
2198            final Object contextElement = this.THIS();
2199            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"cyclic"))).booleanValue()?OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"pages")):true));
2200            if (!constraintValid)
2201            {
2202                validationMessages.add(
2203                    new ModelValidationMessage(
2204                        (MetafacadeBase)contextElement ,
2205                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsUseCase::use-cases that loop need at least one page",
2206                        "This use-case has a final state targetting the same use-case, while at the same time no pages have been modeled. This will lead to an infinite loop at runtime since the same event will keep invoking itself."));
2207            }
2208        }
2209        catch (Throwable th)
2210        {
2211            Throwable cause = th.getCause();
2212            int depth = 0; // Some throwables have infinite recursion
2213            while (cause != null && depth < 7)
2214            {
2215                th = cause;
2216                depth++;
2217            }
2218            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsUseCase::use-cases that loop need at least one page' ON "
2219                + this.THIS().toString() + ": " + th.getMessage(), th);
2220        }
2221    }
2222
2223    /**
2224     * The property that stores the name of the metafacade.
2225     */
2226    private static final String NAME_PROPERTY = "name";
2227    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
2228
2229    /**
2230     * @see Object#toString()
2231     */
2232    @Override
2233    public String toString()
2234    {
2235        final StringBuilder toString = new StringBuilder(this.getClass().getName());
2236        toString.append("[");
2237        try
2238        {
2239            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
2240        }
2241        catch (final Throwable tryAgain)
2242        {
2243            try
2244            {
2245                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
2246            }
2247            catch (final Throwable ignore)
2248            {
2249                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
2250            }
2251        }
2252        toString.append("]");
2253        return toString.toString();
2254    }
2255}