001// license-header java merge-point
002//
003// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
004//
005package org.andromda.cartridges.jsf.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.ActionFacade;
014import org.andromda.metafacades.uml.ConstraintFacade;
015import org.andromda.metafacades.uml.DependencyFacade;
016import org.andromda.metafacades.uml.EventFacade;
017import org.andromda.metafacades.uml.FrontEndAction;
018import org.andromda.metafacades.uml.FrontEndExceptionHandler;
019import org.andromda.metafacades.uml.FrontEndForward;
020import org.andromda.metafacades.uml.FrontEndParameter;
021import org.andromda.metafacades.uml.FrontEndUseCase;
022import org.andromda.metafacades.uml.FrontEndView;
023import org.andromda.metafacades.uml.ModelElementFacade;
024import org.andromda.metafacades.uml.ModelFacade;
025import org.andromda.metafacades.uml.OperationFacade;
026import org.andromda.metafacades.uml.PackageFacade;
027import org.andromda.metafacades.uml.PartitionFacade;
028import org.andromda.metafacades.uml.StateFacade;
029import org.andromda.metafacades.uml.StateMachineFacade;
030import org.andromda.metafacades.uml.StereotypeFacade;
031import org.andromda.metafacades.uml.TaggedValueFacade;
032import org.andromda.metafacades.uml.TemplateParameterFacade;
033import org.andromda.metafacades.uml.TransitionFacade;
034import org.andromda.metafacades.uml.TypeMappings;
035import org.andromda.translation.ocl.validation.OCLCollections;
036import org.andromda.translation.ocl.validation.OCLIntrospector;
037import org.andromda.translation.ocl.validation.OCLResultEnsurer;
038import org.apache.commons.collections.Transformer;
039import org.apache.log4j.Logger;
040
041/**
042 * Represents a JSF view for a front-end application.
043 * MetafacadeLogic for JSFView
044 *
045 * @see JSFView
046 */
047public abstract class JSFViewLogic
048    extends MetafacadeBase
049    implements JSFView
050{
051    /**
052     * The underlying UML object
053     * @see Object
054     */
055    protected Object metaObject;
056
057    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
058     * @param metaObjectIn
059     * @param context
060     */
061    protected JSFViewLogic(Object metaObjectIn, String context)
062    {
063        super(metaObjectIn, getContext(context));
064        this.superFrontEndView =
065           (FrontEndView)
066            MetafacadeFactory.getInstance().createFacadeImpl(
067                    "org.andromda.metafacades.uml.FrontEndView",
068                    metaObjectIn,
069                    getContext(context));
070        this.metaObject = metaObjectIn;
071    }
072
073    /**
074     * The logger instance.
075     */
076    private static final Logger logger = Logger.getLogger(JSFViewLogic.class);
077
078    /**
079     * Gets the context for this metafacade logic instance.
080     * @param context String. Set to JSFView if null
081     * @return context String
082     */
083    private static String getContext(String context)
084    {
085        if (context == null)
086        {
087            context = "org.andromda.cartridges.jsf.metafacades.JSFView";
088        }
089        return context;
090    }
091
092    private FrontEndView superFrontEndView;
093    private boolean superFrontEndViewInitialized = false;
094
095    /**
096     * Gets the FrontEndView parent instance.
097     * @return this.superFrontEndView FrontEndView
098     */
099    private FrontEndView getSuperFrontEndView()
100    {
101        if (!this.superFrontEndViewInitialized)
102        {
103            ((MetafacadeBase)this.superFrontEndView).setMetafacadeContext(this.getMetafacadeContext());
104            this.superFrontEndViewInitialized = true;
105        }
106        return this.superFrontEndView;
107    }
108
109    /** Reset context only for non-root metafacades
110     * @param context
111     * @see MetafacadeBase#resetMetafacadeContext(String context)
112     */
113    @Override
114    public void resetMetafacadeContext(String context)
115    {
116        if (!this.contextRoot) // reset context only for non-root metafacades
117        {
118            context = getContext(context);  // to have same value as in original constructor call
119            setMetafacadeContext (context);
120            if (this.superFrontEndViewInitialized)
121            {
122                ((MetafacadeBase)this.superFrontEndView).resetMetafacadeContext(context);
123            }
124        }
125    }
126
127    /**
128     * @return boolean true always
129     * @see JSFView
130     */
131    public boolean isJSFViewMetaType()
132    {
133        return true;
134    }
135
136    // --------------- attributes ---------------------
137
138   /**
139    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getPath()
140    * @return String
141    */
142    protected abstract String handleGetPath();
143
144    private String __path1a;
145    private boolean __path1aSet = false;
146
147    /**
148     * The full path of the view resources (i.e. the JSP page).
149     * @return (String)handleGetPath()
150     */
151    public final String getPath()
152    {
153        String path1a = this.__path1a;
154        if (!this.__path1aSet)
155        {
156            // path has no pre constraints
157            path1a = handleGetPath();
158            // path has no post constraints
159            this.__path1a = path1a;
160            if (isMetafacadePropertyCachingEnabled())
161            {
162                this.__path1aSet = true;
163            }
164        }
165        return path1a;
166    }
167
168   /**
169    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getTitleKey()
170    * @return String
171    */
172    protected abstract String handleGetTitleKey();
173
174    private String __titleKey2a;
175    private boolean __titleKey2aSet = false;
176
177    /**
178     * A resource message key suited for the view's title.
179     * @return (String)handleGetTitleKey()
180     */
181    public final String getTitleKey()
182    {
183        String titleKey2a = this.__titleKey2a;
184        if (!this.__titleKey2aSet)
185        {
186            // titleKey has no pre constraints
187            titleKey2a = handleGetTitleKey();
188            // titleKey has no post constraints
189            this.__titleKey2a = titleKey2a;
190            if (isMetafacadePropertyCachingEnabled())
191            {
192                this.__titleKey2aSet = true;
193            }
194        }
195        return titleKey2a;
196    }
197
198   /**
199    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getTitleValue()
200    * @return String
201    */
202    protected abstract String handleGetTitleValue();
203
204    private String __titleValue3a;
205    private boolean __titleValue3aSet = false;
206
207    /**
208     * A default resource message value suited for the page's title.
209     * @return (String)handleGetTitleValue()
210     */
211    public final String getTitleValue()
212    {
213        String titleValue3a = this.__titleValue3a;
214        if (!this.__titleValue3aSet)
215        {
216            // titleValue has no pre constraints
217            titleValue3a = handleGetTitleValue();
218            // titleValue has no post constraints
219            this.__titleValue3a = titleValue3a;
220            if (isMetafacadePropertyCachingEnabled())
221            {
222                this.__titleValue3aSet = true;
223            }
224        }
225        return titleValue3a;
226    }
227
228   /**
229    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getMessageKey()
230    * @return String
231    */
232    protected abstract String handleGetMessageKey();
233
234    private String __messageKey4a;
235    private boolean __messageKey4aSet = false;
236
237    /**
238     * The default resource message key for this view.
239     * @return (String)handleGetMessageKey()
240     */
241    public final String getMessageKey()
242    {
243        String messageKey4a = this.__messageKey4a;
244        if (!this.__messageKey4aSet)
245        {
246            // messageKey has no pre constraints
247            messageKey4a = handleGetMessageKey();
248            // messageKey has no post constraints
249            this.__messageKey4a = messageKey4a;
250            if (isMetafacadePropertyCachingEnabled())
251            {
252                this.__messageKey4aSet = true;
253            }
254        }
255        return messageKey4a;
256    }
257
258   /**
259    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getDocumentationKey()
260    * @return String
261    */
262    protected abstract String handleGetDocumentationKey();
263
264    private String __documentationKey5a;
265    private boolean __documentationKey5aSet = false;
266
267    /**
268     * A resource message key suited for the page's documentation.
269     * @return (String)handleGetDocumentationKey()
270     */
271    public final String getDocumentationKey()
272    {
273        String documentationKey5a = this.__documentationKey5a;
274        if (!this.__documentationKey5aSet)
275        {
276            // documentationKey has no pre constraints
277            documentationKey5a = handleGetDocumentationKey();
278            // documentationKey has no post constraints
279            this.__documentationKey5a = documentationKey5a;
280            if (isMetafacadePropertyCachingEnabled())
281            {
282                this.__documentationKey5aSet = true;
283            }
284        }
285        return documentationKey5a;
286    }
287
288   /**
289    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getDocumentationValue()
290    * @return String
291    */
292    protected abstract String handleGetDocumentationValue();
293
294    private String __documentationValue6a;
295    private boolean __documentationValue6aSet = false;
296
297    /**
298     * A resource message value suited for the view's documentation.
299     * @return (String)handleGetDocumentationValue()
300     */
301    public final String getDocumentationValue()
302    {
303        String documentationValue6a = this.__documentationValue6a;
304        if (!this.__documentationValue6aSet)
305        {
306            // documentationValue has no pre constraints
307            documentationValue6a = handleGetDocumentationValue();
308            // documentationValue has no post constraints
309            this.__documentationValue6a = documentationValue6a;
310            if (isMetafacadePropertyCachingEnabled())
311            {
312                this.__documentationValue6aSet = true;
313            }
314        }
315        return documentationValue6a;
316    }
317
318   /**
319    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getMessageValue()
320    * @return String
321    */
322    protected abstract String handleGetMessageValue();
323
324    private String __messageValue7a;
325    private boolean __messageValue7aSet = false;
326
327    /**
328     * A displayable version of this view's name.
329     * @return (String)handleGetMessageValue()
330     */
331    public final String getMessageValue()
332    {
333        String messageValue7a = this.__messageValue7a;
334        if (!this.__messageValue7aSet)
335        {
336            // messageValue has no pre constraints
337            messageValue7a = handleGetMessageValue();
338            // messageValue has no post constraints
339            this.__messageValue7a = messageValue7a;
340            if (isMetafacadePropertyCachingEnabled())
341            {
342                this.__messageValue7aSet = true;
343            }
344        }
345        return messageValue7a;
346    }
347
348   /**
349    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getFullyQualifiedPopulator()
350    * @return String
351    */
352    protected abstract String handleGetFullyQualifiedPopulator();
353
354    private String __fullyQualifiedPopulator8a;
355    private boolean __fullyQualifiedPopulator8aSet = false;
356
357    /**
358     * The fully qualified name of this view's form populator.
359     * @return (String)handleGetFullyQualifiedPopulator()
360     */
361    public final String getFullyQualifiedPopulator()
362    {
363        String fullyQualifiedPopulator8a = this.__fullyQualifiedPopulator8a;
364        if (!this.__fullyQualifiedPopulator8aSet)
365        {
366            // fullyQualifiedPopulator has no pre constraints
367            fullyQualifiedPopulator8a = handleGetFullyQualifiedPopulator();
368            // fullyQualifiedPopulator has no post constraints
369            this.__fullyQualifiedPopulator8a = fullyQualifiedPopulator8a;
370            if (isMetafacadePropertyCachingEnabled())
371            {
372                this.__fullyQualifiedPopulator8aSet = true;
373            }
374        }
375        return fullyQualifiedPopulator8a;
376    }
377
378   /**
379    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getPopulator()
380    * @return String
381    */
382    protected abstract String handleGetPopulator();
383
384    private String __populator9a;
385    private boolean __populator9aSet = false;
386
387    /**
388     * The name of the form populator for this view.
389     * @return (String)handleGetPopulator()
390     */
391    public final String getPopulator()
392    {
393        String populator9a = this.__populator9a;
394        if (!this.__populator9aSet)
395        {
396            // populator has no pre constraints
397            populator9a = handleGetPopulator();
398            // populator has no post constraints
399            this.__populator9a = populator9a;
400            if (isMetafacadePropertyCachingEnabled())
401            {
402                this.__populator9aSet = true;
403            }
404        }
405        return populator9a;
406    }
407
408   /**
409    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getPopulatorPath()
410    * @return String
411    */
412    protected abstract String handleGetPopulatorPath();
413
414    private String __populatorPath10a;
415    private boolean __populatorPath10aSet = false;
416
417    /**
418     * The path to the form populator.
419     * @return (String)handleGetPopulatorPath()
420     */
421    public final String getPopulatorPath()
422    {
423        String populatorPath10a = this.__populatorPath10a;
424        if (!this.__populatorPath10aSet)
425        {
426            // populatorPath has no pre constraints
427            populatorPath10a = handleGetPopulatorPath();
428            // populatorPath has no post constraints
429            this.__populatorPath10a = populatorPath10a;
430            if (isMetafacadePropertyCachingEnabled())
431            {
432                this.__populatorPath10aSet = true;
433            }
434        }
435        return populatorPath10a;
436    }
437
438   /**
439    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isPopulatorRequired()
440    * @return boolean
441    */
442    protected abstract boolean handleIsPopulatorRequired();
443
444    private boolean __populatorRequired11a;
445    private boolean __populatorRequired11aSet = false;
446
447    /**
448     * Indicates if a populator is required for this view.
449     * @return (boolean)handleIsPopulatorRequired()
450     */
451    public final boolean isPopulatorRequired()
452    {
453        boolean populatorRequired11a = this.__populatorRequired11a;
454        if (!this.__populatorRequired11aSet)
455        {
456            // populatorRequired has no pre constraints
457            populatorRequired11a = handleIsPopulatorRequired();
458            // populatorRequired has no post constraints
459            this.__populatorRequired11a = populatorRequired11a;
460            if (isMetafacadePropertyCachingEnabled())
461            {
462                this.__populatorRequired11aSet = true;
463            }
464        }
465        return populatorRequired11a;
466    }
467
468   /**
469    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isValidationRequired()
470    * @return boolean
471    */
472    protected abstract boolean handleIsValidationRequired();
473
474    private boolean __validationRequired12a;
475    private boolean __validationRequired12aSet = false;
476
477    /**
478     * Indicates whether or not at least one parameter of an outgoing action in this view requires
479     * validation.
480     * @return (boolean)handleIsValidationRequired()
481     */
482    public final boolean isValidationRequired()
483    {
484        boolean validationRequired12a = this.__validationRequired12a;
485        if (!this.__validationRequired12aSet)
486        {
487            // validationRequired has no pre constraints
488            validationRequired12a = handleIsValidationRequired();
489            // validationRequired has no post constraints
490            this.__validationRequired12a = validationRequired12a;
491            if (isMetafacadePropertyCachingEnabled())
492            {
493                this.__validationRequired12aSet = true;
494            }
495        }
496        return validationRequired12a;
497    }
498
499   /**
500    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isPopup()
501    * @return boolean
502    */
503    protected abstract boolean handleIsPopup();
504
505    private boolean __popup13a;
506    private boolean __popup13aSet = false;
507
508    /**
509     * Indicates if this view represents a popup.
510     * @return (boolean)handleIsPopup()
511     */
512    public final boolean isPopup()
513    {
514        boolean popup13a = this.__popup13a;
515        if (!this.__popup13aSet)
516        {
517            // popup has no pre constraints
518            popup13a = handleIsPopup();
519            // popup has no post constraints
520            this.__popup13a = popup13a;
521            if (isMetafacadePropertyCachingEnabled())
522            {
523                this.__popup13aSet = true;
524            }
525        }
526        return popup13a;
527    }
528
529   /**
530    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isNonTableVariablesPresent()
531    * @return boolean
532    */
533    protected abstract boolean handleIsNonTableVariablesPresent();
534
535    private boolean __nonTableVariablesPresent14a;
536    private boolean __nonTableVariablesPresent14aSet = false;
537
538    /**
539     * Indicates whether or not any non-table view variables are present in this view.
540     * @return (boolean)handleIsNonTableVariablesPresent()
541     */
542    public final boolean isNonTableVariablesPresent()
543    {
544        boolean nonTableVariablesPresent14a = this.__nonTableVariablesPresent14a;
545        if (!this.__nonTableVariablesPresent14aSet)
546        {
547            // nonTableVariablesPresent has no pre constraints
548            nonTableVariablesPresent14a = handleIsNonTableVariablesPresent();
549            // nonTableVariablesPresent has no post constraints
550            this.__nonTableVariablesPresent14a = nonTableVariablesPresent14a;
551            if (isMetafacadePropertyCachingEnabled())
552            {
553                this.__nonTableVariablesPresent14aSet = true;
554            }
555        }
556        return nonTableVariablesPresent14a;
557    }
558
559   /**
560    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isHasNameOfUseCase()
561    * @return boolean
562    */
563    protected abstract boolean handleIsHasNameOfUseCase();
564
565    private boolean __hasNameOfUseCase15a;
566    private boolean __hasNameOfUseCase15aSet = false;
567
568    /**
569     * Indicates whether or not this view has the same name as the use case in which it is
570     * contained.
571     * @return (boolean)handleIsHasNameOfUseCase()
572     */
573    public final boolean isHasNameOfUseCase()
574    {
575        boolean hasNameOfUseCase15a = this.__hasNameOfUseCase15a;
576        if (!this.__hasNameOfUseCase15aSet)
577        {
578            // hasNameOfUseCase has no pre constraints
579            hasNameOfUseCase15a = handleIsHasNameOfUseCase();
580            // hasNameOfUseCase has no post constraints
581            this.__hasNameOfUseCase15a = hasNameOfUseCase15a;
582            if (isMetafacadePropertyCachingEnabled())
583            {
584                this.__hasNameOfUseCase15aSet = true;
585            }
586        }
587        return hasNameOfUseCase15a;
588    }
589
590   /**
591    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getFormKey()
592    * @return String
593    */
594    protected abstract String handleGetFormKey();
595
596    private String __formKey16a;
597    private boolean __formKey16aSet = false;
598
599    /**
600     * The key that stores the form in which information is passed from one action to another.
601     * @return (String)handleGetFormKey()
602     */
603    public final String getFormKey()
604    {
605        String formKey16a = this.__formKey16a;
606        if (!this.__formKey16aSet)
607        {
608            // formKey has no pre constraints
609            formKey16a = handleGetFormKey();
610            // formKey has no post constraints
611            this.__formKey16a = formKey16a;
612            if (isMetafacadePropertyCachingEnabled())
613            {
614                this.__formKey16aSet = true;
615            }
616        }
617        return formKey16a;
618    }
619
620   /**
621    * @see org.andromda.cartridges.jsf.metafacades.JSFView#getFromOutcome()
622    * @return String
623    */
624    protected abstract String handleGetFromOutcome();
625
626    private String __fromOutcome17a;
627    private boolean __fromOutcome17aSet = false;
628
629    /**
630     * The name that corresponds to the from-outcome in an navigational rule.
631     * @return (String)handleGetFromOutcome()
632     */
633    public final String getFromOutcome()
634    {
635        String fromOutcome17a = this.__fromOutcome17a;
636        if (!this.__fromOutcome17aSet)
637        {
638            // fromOutcome has no pre constraints
639            fromOutcome17a = handleGetFromOutcome();
640            // fromOutcome has no post constraints
641            this.__fromOutcome17a = fromOutcome17a;
642            if (isMetafacadePropertyCachingEnabled())
643            {
644                this.__fromOutcome17aSet = true;
645            }
646        }
647        return fromOutcome17a;
648    }
649
650   /**
651    * @see org.andromda.cartridges.jsf.metafacades.JSFView#isNeedsFileUpload()
652    * @return boolean
653    */
654    protected abstract boolean handleIsNeedsFileUpload();
655
656    private boolean __needsFileUpload18a;
657    private boolean __needsFileUpload18aSet = false;
658
659    /**
660     * TODO: Model Documentation for org.andromda.cartridges.jsf.metafacades.JSFView.needsFileUpload
661     * @return (boolean)handleIsNeedsFileUpload()
662     */
663    public final boolean isNeedsFileUpload()
664    {
665        boolean needsFileUpload18a = this.__needsFileUpload18a;
666        if (!this.__needsFileUpload18aSet)
667        {
668            // needsFileUpload has no pre constraints
669            needsFileUpload18a = handleIsNeedsFileUpload();
670            // needsFileUpload has no post constraints
671            this.__needsFileUpload18a = needsFileUpload18a;
672            if (isMetafacadePropertyCachingEnabled())
673            {
674                this.__needsFileUpload18aSet = true;
675            }
676        }
677        return needsFileUpload18a;
678    }
679
680    // ------------- associations ------------------
681
682    private List<JSFForward> __getForwards1r;
683    private boolean __getForwards1rSet = false;
684
685    /**
686     * Represents a JSF view for a front-end application.
687     * @return (List<JSFForward>)handleGetForwards()
688     */
689    public final List<JSFForward> getForwards()
690    {
691        List<JSFForward> getForwards1r = this.__getForwards1r;
692        if (!this.__getForwards1rSet)
693        {
694            // jSFView has no pre constraints
695            List result = handleGetForwards();
696            List shieldedResult = this.shieldedElements(result);
697            try
698            {
699                getForwards1r = (List<JSFForward>)shieldedResult;
700            }
701            catch (ClassCastException ex)
702            {
703                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
704                JSFViewLogic.logger.warn("incorrect metafacade cast for JSFViewLogic.getForwards List<JSFForward> " + result + ": " + shieldedResult);
705            }
706            // jSFView has no post constraints
707            this.__getForwards1r = getForwards1r;
708            if (isMetafacadePropertyCachingEnabled())
709            {
710                this.__getForwards1rSet = true;
711            }
712        }
713        return getForwards1r;
714    }
715
716    /**
717     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
718     * @return  List
719     */
720    protected abstract List handleGetForwards();
721
722    /**
723     * Represents a JSF view for a front-end application.
724     * @return (List<JSFParameter>)handleGetBackingValueVariables()
725     */
726    public final List<JSFParameter> getBackingValueVariables()
727    {
728        List<JSFParameter> getBackingValueVariables2r = null;
729        // jSFView has no pre constraints
730        List result = handleGetBackingValueVariables();
731        List shieldedResult = this.shieldedElements(result);
732        try
733        {
734            getBackingValueVariables2r = (List<JSFParameter>)shieldedResult;
735        }
736        catch (ClassCastException ex)
737        {
738            // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
739            JSFViewLogic.logger.warn("incorrect metafacade cast for JSFViewLogic.getBackingValueVariables List<JSFParameter> " + result + ": " + shieldedResult);
740        }
741        // jSFView has no post constraints
742        return getBackingValueVariables2r;
743    }
744
745    /**
746     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
747     * @return  List
748     */
749    protected abstract List handleGetBackingValueVariables();
750
751    private List<JSFAction> __getFormActions3r;
752    private boolean __getFormActions3rSet = false;
753
754    /**
755     * Represents a JSF view for a front-end application.
756     * @return (List<JSFAction>)handleGetFormActions()
757     */
758    public final List<JSFAction> getFormActions()
759    {
760        List<JSFAction> getFormActions3r = this.__getFormActions3r;
761        if (!this.__getFormActions3rSet)
762        {
763            // jSFView has no pre constraints
764            List result = handleGetFormActions();
765            List shieldedResult = this.shieldedElements(result);
766            try
767            {
768                getFormActions3r = (List<JSFAction>)shieldedResult;
769            }
770            catch (ClassCastException ex)
771            {
772                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
773                JSFViewLogic.logger.warn("incorrect metafacade cast for JSFViewLogic.getFormActions List<JSFAction> " + result + ": " + shieldedResult);
774            }
775            // jSFView has no post constraints
776            this.__getFormActions3r = getFormActions3r;
777            if (isMetafacadePropertyCachingEnabled())
778            {
779                this.__getFormActions3rSet = true;
780            }
781        }
782        return getFormActions3r;
783    }
784
785    /**
786     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
787     * @return  List
788     */
789    protected abstract List handleGetFormActions();
790
791    private List<JSFAction> __getActionForwards4r;
792    private boolean __getActionForwards4rSet = false;
793
794    /**
795     * Represents a JSF view for a front-end application.
796     * @return (List<JSFAction>)handleGetActionForwards()
797     */
798    public final List<JSFAction> getActionForwards()
799    {
800        List<JSFAction> getActionForwards4r = this.__getActionForwards4r;
801        if (!this.__getActionForwards4rSet)
802        {
803            // jSFView has no pre constraints
804            List result = handleGetActionForwards();
805            List shieldedResult = this.shieldedElements(result);
806            try
807            {
808                getActionForwards4r = (List<JSFAction>)shieldedResult;
809            }
810            catch (ClassCastException ex)
811            {
812                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
813                JSFViewLogic.logger.warn("incorrect metafacade cast for JSFViewLogic.getActionForwards List<JSFAction> " + result + ": " + shieldedResult);
814            }
815            // jSFView has no post constraints
816            this.__getActionForwards4r = getActionForwards4r;
817            if (isMetafacadePropertyCachingEnabled())
818            {
819                this.__getActionForwards4rSet = true;
820            }
821        }
822        return getActionForwards4r;
823    }
824
825    /**
826     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
827     * @return  List
828     */
829    protected abstract List handleGetActionForwards();
830
831    /**
832     * @return true
833     * @see FrontEndView
834     */
835    public boolean isFrontEndViewMetaType()
836    {
837        return true;
838    }
839
840    /**
841     * @return true
842     * @see org.andromda.metafacades.uml.FrontEndActionState
843     */
844    public boolean isFrontEndActionStateMetaType()
845    {
846        return true;
847    }
848
849    /**
850     * @return true
851     * @see org.andromda.metafacades.uml.ActionStateFacade
852     */
853    public boolean isActionStateFacadeMetaType()
854    {
855        return true;
856    }
857
858    /**
859     * @return true
860     * @see StateFacade
861     */
862    public boolean isStateFacadeMetaType()
863    {
864        return true;
865    }
866
867    /**
868     * @return true
869     * @see org.andromda.metafacades.uml.StateVertexFacade
870     */
871    public boolean isStateVertexFacadeMetaType()
872    {
873        return true;
874    }
875
876    /**
877     * @return true
878     * @see ModelElementFacade
879     */
880    public boolean isModelElementFacadeMetaType()
881    {
882        return true;
883    }
884
885    // ----------- delegates to FrontEndView ------------
886    /**
887     * The entry action for this action state (if any).
888     * @see org.andromda.metafacades.uml.ActionStateFacade#getEntry()
889     */
890    public ActionFacade getEntry()
891    {
892        return this.getSuperFrontEndView().getEntry();
893    }
894
895    /**
896     * The method name representing this action state.
897     * @see org.andromda.metafacades.uml.FrontEndActionState#getActionMethodName()
898     */
899    public String getActionMethodName()
900    {
901        return this.getSuperFrontEndView().getActionMethodName();
902    }
903
904    /**
905     * The actions that pass through this action state.
906     * @see org.andromda.metafacades.uml.FrontEndActionState#getContainerActions()
907     */
908    public List<FrontEndAction> getContainerActions()
909    {
910        return this.getSuperFrontEndView().getContainerActions();
911    }
912
913    /**
914     * All calls deferred to the controller by this action state.
915     * @see org.andromda.metafacades.uml.FrontEndActionState#getControllerCalls()
916     */
917    public List<OperationFacade> getControllerCalls()
918    {
919        return this.getSuperFrontEndView().getControllerCalls();
920    }
921
922    /**
923     * All exceptions modelled on this action state.
924     * @see org.andromda.metafacades.uml.FrontEndActionState#getExceptions()
925     */
926    public List<FrontEndExceptionHandler> getExceptions()
927    {
928        return this.getSuperFrontEndView().getExceptions();
929    }
930
931    /**
932     * The next transition, there can be only one transition going out of an action state, otherwise
933     * decision points should be used (triggers are not supported at the server-side).
934     * @see org.andromda.metafacades.uml.FrontEndActionState#getForward()
935     */
936    public FrontEndForward getForward()
937    {
938        return this.getSuperFrontEndView().getForward();
939    }
940
941    /**
942     * All calls deferred to the services by this action state.
943     * @see org.andromda.metafacades.uml.FrontEndActionState#getServiceCalls()
944     */
945    public List<OperationFacade> getServiceCalls()
946    {
947        return this.getSuperFrontEndView().getServiceCalls();
948    }
949
950    /**
951     * True if this element is contained in a FrontEndUseCase.
952     * @see org.andromda.metafacades.uml.FrontEndActionState#isContainedInFrontEndUseCase()
953     */
954    public boolean isContainedInFrontEndUseCase()
955    {
956        return this.getSuperFrontEndView().isContainedInFrontEndUseCase();
957    }
958
959    /**
960     * Indicates whether or not this front end action state is server side. Pages, for example, are
961     * also action states but they return control to the client.
962     * @see org.andromda.metafacades.uml.FrontEndActionState#isServerSide()
963     */
964    public boolean isServerSide()
965    {
966        return this.getSuperFrontEndView().isServerSide();
967    }
968
969    /**
970     * All actions that can be triggered on this view.
971     * @see FrontEndView#getActions()
972     */
973    public List<FrontEndAction> getActions()
974    {
975        return this.getSuperFrontEndView().getActions();
976    }
977
978    /**
979     * All parameters for each action going out of this view.
980     * @see FrontEndView#getAllActionParameters()
981     */
982    public List<FrontEndParameter> getAllActionParameters()
983    {
984        return this.getSuperFrontEndView().getAllActionParameters();
985    }
986
987    /**
988     * All fields from all forms on the given view.
989     * @see FrontEndView#getAllFormFields()
990     */
991    public List<FrontEndParameter> getAllFormFields()
992    {
993        return this.getSuperFrontEndView().getAllFormFields();
994    }
995
996    /**
997     * All tables belonging to the front end view.
998     * @see FrontEndView#getTables()
999     */
1000    public List<FrontEndParameter> getTables()
1001    {
1002        return this.getSuperFrontEndView().getTables();
1003    }
1004
1005    /**
1006     * The use-case of which this view is a member.
1007     * @see FrontEndView#getUseCase()
1008     */
1009    public FrontEndUseCase getUseCase()
1010    {
1011        return this.getSuperFrontEndView().getUseCase();
1012    }
1013
1014    /**
1015     * All those variables that will be present as variables in the target view. These are the
1016     * trigger parameters on the incoming transitions.
1017     * @see FrontEndView#getVariables()
1018     */
1019    public List<FrontEndParameter> getVariables()
1020    {
1021        return this.getSuperFrontEndView().getVariables();
1022    }
1023
1024    /**
1025     * True if this element carries the FrontEndView stereotype.
1026     * @see FrontEndView#isFrontEndView()
1027     */
1028    public boolean isFrontEndView()
1029    {
1030        return this.getSuperFrontEndView().isFrontEndView();
1031    }
1032
1033    /**
1034     * Copies all tagged values from the given ModelElementFacade to this model element facade.
1035     * @see ModelElementFacade#copyTaggedValues(ModelElementFacade element)
1036     */
1037    public void copyTaggedValues(ModelElementFacade element)
1038    {
1039        this.getSuperFrontEndView().copyTaggedValues(element);
1040    }
1041
1042    /**
1043     * Finds the tagged value with the specified 'tagName'. In case there are more values the first
1044     * one found will be returned.
1045     * @see ModelElementFacade#findTaggedValue(String tagName)
1046     */
1047    public Object findTaggedValue(String tagName)
1048    {
1049        return this.getSuperFrontEndView().findTaggedValue(tagName);
1050    }
1051
1052    /**
1053     * Returns all the values for the tagged value with the specified name. The returned collection
1054     * will contains only String instances, or will be empty. Never null.
1055     * @see ModelElementFacade#findTaggedValues(String tagName)
1056     */
1057    public Collection<Object> findTaggedValues(String tagName)
1058    {
1059        return this.getSuperFrontEndView().findTaggedValues(tagName);
1060    }
1061
1062    /**
1063     * Returns the fully qualified name of the model element. The fully qualified name includes
1064     * complete package qualified name of the underlying model element. The templates parameter will
1065     * be replaced by the correct one given the binding relation of the parameter to this element.
1066     * @see ModelElementFacade#getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1067     */
1068    public String getBindedFullyQualifiedName(ModelElementFacade bindedElement)
1069    {
1070        return this.getSuperFrontEndView().getBindedFullyQualifiedName(bindedElement);
1071    }
1072
1073    /**
1074     * Gets all constraints belonging to the model element.
1075     * @see ModelElementFacade#getConstraints()
1076     */
1077    public Collection<ConstraintFacade> getConstraints()
1078    {
1079        return this.getSuperFrontEndView().getConstraints();
1080    }
1081
1082    /**
1083     * Returns the constraints of the argument kind that have been placed onto this model. Typical
1084     * kinds are "inv", "pre" and "post". Other kinds are possible.
1085     * @see ModelElementFacade#getConstraints(String kind)
1086     */
1087    public Collection<ConstraintFacade> getConstraints(String kind)
1088    {
1089        return this.getSuperFrontEndView().getConstraints(kind);
1090    }
1091
1092    /**
1093     * Gets the documentation for the model element, The indent argument is prefixed to each line.
1094     * By default this method wraps lines after 64 characters.
1095     * This method is equivalent to <code>getDocumentation(indent, 64)</code>.
1096     * @see ModelElementFacade#getDocumentation(String indent)
1097     */
1098    public String getDocumentation(String indent)
1099    {
1100        return this.getSuperFrontEndView().getDocumentation(indent);
1101    }
1102
1103    /**
1104     * This method returns the documentation for this model element, with the lines wrapped after
1105     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1106     * required. By default paragraphs are returned as HTML.
1107     * This method is equivalent to <code>getDocumentation(indent, lineLength, true)</code>.
1108     * @see ModelElementFacade#getDocumentation(String indent, int lineLength)
1109     */
1110    public String getDocumentation(String indent, int lineLength)
1111    {
1112        return this.getSuperFrontEndView().getDocumentation(indent, lineLength);
1113    }
1114
1115    /**
1116     * This method returns the documentation for this model element, with the lines wrapped after
1117     * the specified number of characters, values of less than 1 will indicate no line wrapping is
1118     * required. HTML style determines if HTML Escaping is applied.
1119     * @see ModelElementFacade#getDocumentation(String indent, int lineLength, boolean htmlStyle)
1120     */
1121    public String getDocumentation(String indent, int lineLength, boolean htmlStyle)
1122    {
1123        return this.getSuperFrontEndView().getDocumentation(indent, lineLength, htmlStyle);
1124    }
1125
1126    /**
1127     * The fully qualified name of this model element.
1128     * @see ModelElementFacade#getFullyQualifiedName()
1129     */
1130    public String getFullyQualifiedName()
1131    {
1132        return this.getSuperFrontEndView().getFullyQualifiedName();
1133    }
1134
1135    /**
1136     * Returns the fully qualified name of the model element. The fully qualified name includes
1137     * complete package qualified name of the underlying model element.  If modelName is true, then
1138     * the original name of the model element (the name contained within the model) will be the name
1139     * returned, otherwise a name from a language mapping will be returned.
1140     * @see ModelElementFacade#getFullyQualifiedName(boolean modelName)
1141     */
1142    public String getFullyQualifiedName(boolean modelName)
1143    {
1144        return this.getSuperFrontEndView().getFullyQualifiedName(modelName);
1145    }
1146
1147    /**
1148     * Returns the fully qualified name as a path, the returned value always starts with out a slash
1149     * '/'.
1150     * @see ModelElementFacade#getFullyQualifiedNamePath()
1151     */
1152    public String getFullyQualifiedNamePath()
1153    {
1154        return this.getSuperFrontEndView().getFullyQualifiedNamePath();
1155    }
1156
1157    /**
1158     * Gets the unique identifier of the underlying model element.
1159     * @see ModelElementFacade#getId()
1160     */
1161    public String getId()
1162    {
1163        return this.getSuperFrontEndView().getId();
1164    }
1165
1166    /**
1167     * UML2: Retrieves the keywords for this element. Used to modify implementation properties which
1168     * are not represented by other properties, i.e. native, transient, volatile, synchronized,
1169     * (added annotations) override, deprecated. Can also be used to suppress compiler warnings:
1170     * (added annotations) unchecked, fallthrough, path, serial, finally, all. Annotations require
1171     * JDK5 compiler level.
1172     * @see ModelElementFacade#getKeywords()
1173     */
1174    public Collection<String> getKeywords()
1175    {
1176        return this.getSuperFrontEndView().getKeywords();
1177    }
1178
1179    /**
1180     * UML2: Retrieves a localized label for this named element.
1181     * @see ModelElementFacade#getLabel()
1182     */
1183    public String getLabel()
1184    {
1185        return this.getSuperFrontEndView().getLabel();
1186    }
1187
1188    /**
1189     * The language mappings that have been set for this model element.
1190     * @see ModelElementFacade#getLanguageMappings()
1191     */
1192    public TypeMappings getLanguageMappings()
1193    {
1194        return this.getSuperFrontEndView().getLanguageMappings();
1195    }
1196
1197    /**
1198     * Return the model containing this model element (multiple models may be loaded and processed
1199     * at the same time).
1200     * @see ModelElementFacade#getModel()
1201     */
1202    public ModelFacade getModel()
1203    {
1204        return this.getSuperFrontEndView().getModel();
1205    }
1206
1207    /**
1208     * The name of the model element.
1209     * @see ModelElementFacade#getName()
1210     */
1211    public String getName()
1212    {
1213        return this.getSuperFrontEndView().getName();
1214    }
1215
1216    /**
1217     * Gets the package to which this model element belongs.
1218     * @see ModelElementFacade#getPackage()
1219     */
1220    public ModelElementFacade getPackage()
1221    {
1222        return this.getSuperFrontEndView().getPackage();
1223    }
1224
1225    /**
1226     * The name of this model element's package.
1227     * @see ModelElementFacade#getPackageName()
1228     */
1229    public String getPackageName()
1230    {
1231        return this.getSuperFrontEndView().getPackageName();
1232    }
1233
1234    /**
1235     * Gets the package name (optionally providing the ability to retrieve the model name and not
1236     * the mapped name).
1237     * @see ModelElementFacade#getPackageName(boolean modelName)
1238     */
1239    public String getPackageName(boolean modelName)
1240    {
1241        return this.getSuperFrontEndView().getPackageName(modelName);
1242    }
1243
1244    /**
1245     * Returns the package as a path, the returned value always starts with out a slash '/'.
1246     * @see ModelElementFacade#getPackagePath()
1247     */
1248    public String getPackagePath()
1249    {
1250        return this.getSuperFrontEndView().getPackagePath();
1251    }
1252
1253    /**
1254     * UML2: Returns the value of the 'Qualified Name' attribute. A name which allows the
1255     * NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from
1256     * the names of the containing namespaces starting at the root of the hierarchy and ending with
1257     * the name of the NamedElement itself.
1258     * @see ModelElementFacade#getQualifiedName()
1259     */
1260    public String getQualifiedName()
1261    {
1262        return this.getSuperFrontEndView().getQualifiedName();
1263    }
1264
1265    /**
1266     * Gets the root package for the model element.
1267     * @see ModelElementFacade#getRootPackage()
1268     */
1269    public PackageFacade getRootPackage()
1270    {
1271        return this.getSuperFrontEndView().getRootPackage();
1272    }
1273
1274    /**
1275     * Gets the dependencies for which this model element is the source.
1276     * @see ModelElementFacade#getSourceDependencies()
1277     */
1278    public Collection<DependencyFacade> getSourceDependencies()
1279    {
1280        return this.getSuperFrontEndView().getSourceDependencies();
1281    }
1282
1283    /**
1284     * If this model element is the context of an activity graph, this represents that activity
1285     * graph.
1286     * @see ModelElementFacade#getStateMachineContext()
1287     */
1288    public StateMachineFacade getStateMachineContext()
1289    {
1290        return this.getSuperFrontEndView().getStateMachineContext();
1291    }
1292
1293    /**
1294     * The collection of ALL stereotype names for this model element.
1295     * @see ModelElementFacade#getStereotypeNames()
1296     */
1297    public Collection<String> getStereotypeNames()
1298    {
1299        return this.getSuperFrontEndView().getStereotypeNames();
1300    }
1301
1302    /**
1303     * Gets all stereotypes for this model element.
1304     * @see ModelElementFacade#getStereotypes()
1305     */
1306    public Collection<StereotypeFacade> getStereotypes()
1307    {
1308        return this.getSuperFrontEndView().getStereotypes();
1309    }
1310
1311    /**
1312     * Return the TaggedValues associated with this model element, under all stereotypes.
1313     * @see ModelElementFacade#getTaggedValues()
1314     */
1315    public Collection<TaggedValueFacade> getTaggedValues()
1316    {
1317        return this.getSuperFrontEndView().getTaggedValues();
1318    }
1319
1320    /**
1321     * Gets the dependencies for which this model element is the target.
1322     * @see ModelElementFacade#getTargetDependencies()
1323     */
1324    public Collection<DependencyFacade> getTargetDependencies()
1325    {
1326        return this.getSuperFrontEndView().getTargetDependencies();
1327    }
1328
1329    /**
1330     * Get the template parameter for this model element having the parameterName
1331     * @see ModelElementFacade#getTemplateParameter(String parameterName)
1332     */
1333    public Object getTemplateParameter(String parameterName)
1334    {
1335        return this.getSuperFrontEndView().getTemplateParameter(parameterName);
1336    }
1337
1338    /**
1339     * Get the template parameters for this model element
1340     * @see ModelElementFacade#getTemplateParameters()
1341     */
1342    public Collection<TemplateParameterFacade> getTemplateParameters()
1343    {
1344        return this.getSuperFrontEndView().getTemplateParameters();
1345    }
1346
1347    /**
1348     * The visibility (i.e. public, private, protected or package) of the model element, will
1349     * attempt a lookup for these values in the language mappings (if any).
1350     * @see ModelElementFacade#getVisibility()
1351     */
1352    public String getVisibility()
1353    {
1354        return this.getSuperFrontEndView().getVisibility();
1355    }
1356
1357    /**
1358     * Returns true if the model element has the exact stereotype (meaning no stereotype inheritance
1359     * is taken into account when searching for the stereotype), false otherwise.
1360     * @see ModelElementFacade#hasExactStereotype(String stereotypeName)
1361     */
1362    public boolean hasExactStereotype(String stereotypeName)
1363    {
1364        return this.getSuperFrontEndView().hasExactStereotype(stereotypeName);
1365    }
1366
1367    /**
1368     * Does the UML Element contain the named Keyword? Keywords can be separated by space, comma,
1369     * pipe, semicolon, or << >>
1370     * @see ModelElementFacade#hasKeyword(String keywordName)
1371     */
1372    public boolean hasKeyword(String keywordName)
1373    {
1374        return this.getSuperFrontEndView().hasKeyword(keywordName);
1375    }
1376
1377    /**
1378     * Returns true if the model element has the specified stereotype.  If the stereotype itself
1379     * does not match, then a search will be made up the stereotype inheritance hierarchy, and if
1380     * one of the stereotype's ancestors has a matching name this method will return true, false
1381     * otherwise.
1382     * For example, if we have a certain stereotype called <<exception>> and a model element has a
1383     * stereotype called <<applicationException>> which extends <<exception>>, when calling this
1384     * method with 'stereotypeName' defined as 'exception' the method would return true since
1385     * <<applicationException>> inherits from <<exception>>.  If you want to check if the model
1386     * element has the exact stereotype, then use the method 'hasExactStereotype' instead.
1387     * @see ModelElementFacade#hasStereotype(String stereotypeName)
1388     */
1389    public boolean hasStereotype(String stereotypeName)
1390    {
1391        return this.getSuperFrontEndView().hasStereotype(stereotypeName);
1392    }
1393
1394    /**
1395     * True if there are target dependencies from this element that are instances of BindingFacade.
1396     * Deprecated in UML2: Use TemplateBinding parameters instead of dependencies.
1397     * @see ModelElementFacade#isBindingDependenciesPresent()
1398     */
1399    public boolean isBindingDependenciesPresent()
1400    {
1401        return this.getSuperFrontEndView().isBindingDependenciesPresent();
1402    }
1403
1404    /**
1405     * Indicates if any constraints are present on this model element.
1406     * @see ModelElementFacade#isConstraintsPresent()
1407     */
1408    public boolean isConstraintsPresent()
1409    {
1410        return this.getSuperFrontEndView().isConstraintsPresent();
1411    }
1412
1413    /**
1414     * Indicates if any documentation is present on this model element.
1415     * @see ModelElementFacade#isDocumentationPresent()
1416     */
1417    public boolean isDocumentationPresent()
1418    {
1419        return this.getSuperFrontEndView().isDocumentationPresent();
1420    }
1421
1422    /**
1423     * True if this element name is a reserved word in Java, C#, ANSI or ISO C, C++, JavaScript.
1424     * @see ModelElementFacade#isReservedWord()
1425     */
1426    public boolean isReservedWord()
1427    {
1428        return this.getSuperFrontEndView().isReservedWord();
1429    }
1430
1431    /**
1432     * True is there are template parameters on this model element. For UML2, applies to Class,
1433     * Operation, Property, and Parameter.
1434     * @see ModelElementFacade#isTemplateParametersPresent()
1435     */
1436    public boolean isTemplateParametersPresent()
1437    {
1438        return this.getSuperFrontEndView().isTemplateParametersPresent();
1439    }
1440
1441    /**
1442     * True if this element name is a valid identifier name in Java, C#, ANSI or ISO C, C++,
1443     * JavaScript. Contains no spaces, special characters etc. Constraint always applied on
1444     * Enumerations and Interfaces, optionally applies on other model elements.
1445     * @see ModelElementFacade#isValidIdentifierName()
1446     */
1447    public boolean isValidIdentifierName()
1448    {
1449        return this.getSuperFrontEndView().isValidIdentifierName();
1450    }
1451
1452    /**
1453     * Searches for the constraint with the specified 'name' on this model element, and if found
1454     * translates it using the specified 'translation' from a translation library discovered by the
1455     * framework.
1456     * @see ModelElementFacade#translateConstraint(String name, String translation)
1457     */
1458    public String translateConstraint(String name, String translation)
1459    {
1460        return this.getSuperFrontEndView().translateConstraint(name, translation);
1461    }
1462
1463    /**
1464     * Translates all constraints belonging to this model element with the given 'translation'.
1465     * @see ModelElementFacade#translateConstraints(String translation)
1466     */
1467    public String[] translateConstraints(String translation)
1468    {
1469        return this.getSuperFrontEndView().translateConstraints(translation);
1470    }
1471
1472    /**
1473     * Translates the constraints of the specified 'kind' belonging to this model element.
1474     * @see ModelElementFacade#translateConstraints(String kind, String translation)
1475     */
1476    public String[] translateConstraints(String kind, String translation)
1477    {
1478        return this.getSuperFrontEndView().translateConstraints(kind, translation);
1479    }
1480
1481    /**
1482     * Events to which is being deferred in this action state.
1483     * @see StateFacade#getDeferrableEvents()
1484     */
1485    public Collection<EventFacade> getDeferrableEvents()
1486    {
1487        return this.getSuperFrontEndView().getDeferrableEvents();
1488    }
1489
1490    /**
1491     * Models a situation during which some (usually implicit) invariant condition holds. The states
1492     * of
1493     * protocol state machines are exposed to the users of their context classifiers. A protocol
1494     * state
1495     * represents an exposed stable situation of its context classifier: when an instance of the
1496     * classifier
1497     * is not processing any operation, users of this instance can always know its state
1498     * configuration.
1499     * @see org.andromda.metafacades.uml.StateVertexFacade#getContainer()
1500     */
1501    public StateFacade getContainer()
1502    {
1503        return this.getSuperFrontEndView().getContainer();
1504    }
1505
1506    /**
1507     * A directed relationship between a source vertex and a target vertex. It may be part of a
1508     * compound
1509     * transition, which takes the state machine from one state configuration to another,
1510     * representing the
1511     * complete response of the state machine to an occurrence of an event of a particular type.
1512     * @see org.andromda.metafacades.uml.StateVertexFacade#getIncomings()
1513     */
1514    public Collection<TransitionFacade> getIncomings()
1515    {
1516        return this.getSuperFrontEndView().getIncomings();
1517    }
1518
1519    /**
1520     * A directed relationship between a source vertex and a target vertex. It may be part of a
1521     * compound
1522     * transition, which takes the state machine from one state configuration to another,
1523     * representing the
1524     * complete response of the state machine to an occurrence of an event of a particular type.
1525     * @see org.andromda.metafacades.uml.StateVertexFacade#getOutgoings()
1526     */
1527    public Collection<TransitionFacade> getOutgoings()
1528    {
1529        return this.getSuperFrontEndView().getOutgoings();
1530    }
1531
1532    /**
1533     * The partition (if any) to which this vertex belongs.
1534     * @see org.andromda.metafacades.uml.StateVertexFacade#getPartition()
1535     */
1536    public PartitionFacade getPartition()
1537    {
1538        return this.getSuperFrontEndView().getPartition();
1539    }
1540
1541    /**
1542     * State machines can be used to express the behavior of part of a system. Behavior is modeled
1543     * as a
1544     * traversal of a graph of state nodes interconnected by one or more joined transition arcs that
1545     * are
1546     * triggered by the dispatching of series of (event) occurrences. During this traversal, the
1547     * state
1548     * machine executes a series of activities associated with various elements of the state
1549     * machine.
1550     * @see org.andromda.metafacades.uml.StateVertexFacade#getStateMachine()
1551     */
1552    public StateMachineFacade getStateMachine()
1553    {
1554        return this.getSuperFrontEndView().getStateMachine();
1555    }
1556
1557    /**
1558     * @see MetafacadeBase#initialize()
1559     */
1560    @Override
1561    public void initialize()
1562    {
1563        this.getSuperFrontEndView().initialize();
1564    }
1565
1566    /**
1567     * @return Object getSuperFrontEndView().getValidationOwner()
1568     * @see MetafacadeBase#getValidationOwner()
1569     */
1570    @Override
1571    public Object getValidationOwner()
1572    {
1573        Object owner = this.getSuperFrontEndView().getValidationOwner();
1574        return owner;
1575    }
1576
1577    /**
1578     * @return String getSuperFrontEndView().getValidationName()
1579     * @see MetafacadeBase#getValidationName()
1580     */
1581    @Override
1582    public String getValidationName()
1583    {
1584        String name = this.getSuperFrontEndView().getValidationName();
1585        return name;
1586    }
1587
1588    /**
1589     * <p><b>Constraint:</b> org::andromda::cartridges::jsf::metafacades::JSFView::duplicate view action names not allowed</p>
1590     * <p><b>Error:</b> Each view must contain actions which each have a unique name, this view has actions with duplicate names or names that cause an action name to be duplicated in faces-config.xml.</p>
1591     * <p><b>OCL:</b> context JSFView inv: actions->isUnique(name)</p>
1592     * @param validationMessages Collection<ModelValidationMessage>
1593     * @see MetafacadeBase#validateInvariants(Collection validationMessages)
1594     */
1595    @Override
1596    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
1597    {
1598        this.getSuperFrontEndView().validateInvariants(validationMessages);
1599        try
1600        {
1601            final Object contextElement = this.THIS();
1602            boolean constraintValid = OCLResultEnsurer.ensure(OCLCollections.isUnique(OCLIntrospector.invoke(contextElement,"actions"),new Transformer(){public Object transform(Object object){return OCLIntrospector.invoke(object,"name");}}));
1603            if (!constraintValid)
1604            {
1605                validationMessages.add(
1606                    new ModelValidationMessage(
1607                        (MetafacadeBase)contextElement ,
1608                        "org::andromda::cartridges::jsf::metafacades::JSFView::duplicate view action names not allowed",
1609                        "Each view must contain actions which each have a unique name, this view has actions with duplicate names or names that cause an action name to be duplicated in faces-config.xml."));
1610            }
1611        }
1612        catch (Throwable th)
1613        {
1614            Throwable cause = th.getCause();
1615            int depth = 0; // Some throwables have infinite recursion
1616            while (cause != null && depth < 7)
1617            {
1618                th = cause;
1619                depth++;
1620            }
1621            logger.error("Error validating constraint 'org::andromda::cartridges::jsf::metafacades::JSFView::duplicate view action names not allowed' ON "
1622                + this.THIS().toString() + ": " + th.getMessage(), th);
1623        }
1624    }
1625
1626    /**
1627     * The property that stores the name of the metafacade.
1628     */
1629    private static final String NAME_PROPERTY = "name";
1630    private static final String FQNAME_PROPERTY = "fullyQualifiedName";
1631
1632    /**
1633     * @see Object#toString()
1634     */
1635    @Override
1636    public String toString()
1637    {
1638        final StringBuilder toString = new StringBuilder(this.getClass().getName());
1639        toString.append("[");
1640        try
1641        {
1642            toString.append(Introspector.instance().getProperty(this, FQNAME_PROPERTY));
1643        }
1644        catch (final Throwable tryAgain)
1645        {
1646            try
1647            {
1648                toString.append(Introspector.instance().getProperty(this, NAME_PROPERTY));
1649            }
1650            catch (final Throwable ignore)
1651            {
1652                // - just ignore when the metafacade doesn't have a name or fullyQualifiedName property
1653            }
1654        }
1655        toString.append("]");
1656        return toString.toString();
1657    }
1658}