StrutsActionLogic.java

// license-header java merge-point
//
// Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
//
package org.andromda.cartridges.bpm4struts.metafacades;

import java.util.Collection;
import java.util.List;
import org.andromda.core.metafacade.MetafacadeBase;
import org.andromda.core.metafacade.ModelValidationMessage;
import org.andromda.translation.ocl.validation.OCLCollections;
import org.andromda.translation.ocl.validation.OCLIntrospector;
import org.andromda.translation.ocl.validation.OCLResultEnsurer;
import org.apache.log4j.Logger;

/**
 * Represents a Struts action. Such an action typically is associated with a form bean.
 * This action model element extends a transition, but the actual logic contained by the action
 * envelops all action states called, until either a final state or JSP page is reached.
 * MetafacadeLogic for StrutsAction
 *
 * @see StrutsAction
 */
public abstract class StrutsActionLogic
    extends StrutsForwardLogicImpl
    implements StrutsAction
{
    /**
     * The underlying UML object
     * @see Object
     */
    protected Object metaObject;

    /** Create Metafacade implementation instance using the MetafacadeFactory from the context
     * @param metaObjectIn
     * @param context
     */
    protected StrutsActionLogic(Object metaObjectIn, String context)
    {
        super(metaObjectIn, getContext(context));
        this.metaObject = metaObjectIn;
    }

    /**
     * The logger instance.
     */
    private static final Logger logger = Logger.getLogger(StrutsActionLogic.class);

    /**
     * Gets the context for this metafacade logic instance.
     * @param context String. Set to StrutsAction if null
     * @return context String
     */
    private static String getContext(String context)
    {
        if (context == null)
        {
            context = "org.andromda.cartridges.bpm4struts.metafacades.StrutsAction";
        }
        return context;
    }

    /** Reset context only for non-root metafacades
     * @param context
     */
    @Override
    public void resetMetafacadeContext(String context)
    {
        if (!this.contextRoot) // reset context only for non-root metafacades
        {
            context = getContext(context);  // to have same value as in original constructor call
            setMetafacadeContext (context);
        }
    }

    /**
     * @return boolean true always
     * @see StrutsAction
     */
    public boolean isStrutsActionMetaType()
    {
        return true;
    }

    // --------------- attributes ---------------------

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionName()
    * @return String
    */
    protected abstract String handleGetActionName();

    private String __actionName1a;
    private boolean __actionName1aSet = false;

    /**
     * The action name corresponding to this action, as found in the struts deployment descriptor.
     * The action name maps the action to a form bean.
     * @return (String)handleGetActionName()
     */
    public final String getActionName()
    {
        String actionName1a = this.__actionName1a;
        if (!this.__actionName1aSet)
        {
            // actionName has no pre constraints
            actionName1a = handleGetActionName();
            // actionName has no post constraints
            this.__actionName1a = actionName1a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionName1aSet = true;
            }
        }
        return actionName1a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionPath()
    * @return String
    */
    protected abstract String handleGetActionPath();

    private String __actionPath2a;
    private boolean __actionPath2aSet = false;

    /**
     * Tthe action path corresponding to this action, as found in the struts deployment descriptor.
     * The action path specifies the URL to enter in order to call the action.
     * @return (String)handleGetActionPath()
     */
    public final String getActionPath()
    {
        String actionPath2a = this.__actionPath2a;
        if (!this.__actionPath2aSet)
        {
            // actionPath has no pre constraints
            actionPath2a = handleGetActionPath();
            // actionPath has no post constraints
            this.__actionPath2a = actionPath2a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionPath2aSet = true;
            }
        }
        return actionPath2a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionInput()
    * @return String
    */
    protected abstract String handleGetActionInput();

    private String __actionInput3a;
    private boolean __actionInput3aSet = false;

    /**
     * The action input corresponding to this action, as found in the struts deployment descriptor.
     * The action input maps the action to the page on which it originated.
     * @return (String)handleGetActionInput()
     */
    public final String getActionInput()
    {
        String actionInput3a = this.__actionInput3a;
        if (!this.__actionInput3aSet)
        {
            // actionInput has no pre constraints
            actionInput3a = handleGetActionInput();
            // actionInput has no post constraints
            this.__actionInput3a = actionInput3a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionInput3aSet = true;
            }
        }
        return actionInput3a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionRoles()
    * @return String
    */
    protected abstract String handleGetActionRoles();

    private String __actionRoles4a;
    private boolean __actionRoles4aSet = false;

    /**
     * The action roles corresponding to this action, as found in the struts deployment descriptor.
     * The action roles specifiy the roles in which the user must be in order to be authorized to
     * call the action. One of the roles must be satisfied.
     * @return (String)handleGetActionRoles()
     */
    public final String getActionRoles()
    {
        String actionRoles4a = this.__actionRoles4a;
        if (!this.__actionRoles4aSet)
        {
            // actionRoles has no pre constraints
            actionRoles4a = handleGetActionRoles();
            // actionRoles has no post constraints
            this.__actionRoles4a = actionRoles4a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionRoles4aSet = true;
            }
        }
        return actionRoles4a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isFormPost()
    * @return boolean
    */
    protected abstract boolean handleIsFormPost();

    private boolean __formPost5a;
    private boolean __formPost5aSet = false;

    /**
     * Specifies whether or not this action is represented by the posting of a form.
     * @return (boolean)handleIsFormPost()
     */
    public final boolean isFormPost()
    {
        boolean formPost5a = this.__formPost5a;
        if (!this.__formPost5aSet)
        {
            // formPost has no pre constraints
            formPost5a = handleIsFormPost();
            // formPost has no post constraints
            this.__formPost5a = formPost5a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formPost5aSet = true;
            }
        }
        return formPost5a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isHyperlink()
    * @return boolean
    */
    protected abstract boolean handleIsHyperlink();

    private boolean __hyperlink6a;
    private boolean __hyperlink6aSet = false;

    /**
     * Specifies whether or not this action is represented by clicking on a hyperlink.
     * @return (boolean)handleIsHyperlink()
     */
    public final boolean isHyperlink()
    {
        boolean hyperlink6a = this.__hyperlink6a;
        if (!this.__hyperlink6aSet)
        {
            // hyperlink has no pre constraints
            hyperlink6a = handleIsHyperlink();
            // hyperlink has no post constraints
            this.__hyperlink6a = hyperlink6a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__hyperlink6aSet = true;
            }
        }
        return hyperlink6a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionClassName()
    * @return String
    */
    protected abstract String handleGetActionClassName();

    private String __actionClassName7a;
    private boolean __actionClassName7aSet = false;

    /**
     * A good Java class name for this action. The name is constructed from the source page and the
     * name of the trigger.
     * @return (String)handleGetActionClassName()
     */
    public final String getActionClassName()
    {
        String actionClassName7a = this.__actionClassName7a;
        if (!this.__actionClassName7aSet)
        {
            // actionClassName has no pre constraints
            actionClassName7a = handleGetActionClassName();
            // actionClassName has no post constraints
            this.__actionClassName7a = actionClassName7a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionClassName7aSet = true;
            }
        }
        return actionClassName7a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormBeanClassName()
    * @return String
    */
    protected abstract String handleGetFormBeanClassName();

    private String __formBeanClassName8a;
    private boolean __formBeanClassName8aSet = false;

    /**
     * Returns the class name of the form bean associated to this action.
     * @return (String)handleGetFormBeanClassName()
     */
    public final String getFormBeanClassName()
    {
        String formBeanClassName8a = this.__formBeanClassName8a;
        if (!this.__formBeanClassName8aSet)
        {
            // formBeanClassName has no pre constraints
            formBeanClassName8a = handleGetFormBeanClassName();
            // formBeanClassName has no post constraints
            this.__formBeanClassName8a = formBeanClassName8a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formBeanClassName8aSet = true;
            }
        }
        return formBeanClassName8a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormBeanName()
    * @return String
    */
    protected abstract String handleGetFormBeanName();

    private String __formBeanName9a;
    private boolean __formBeanName9aSet = false;

    /**
     * The name of the form bean associated to this action. The name is returned as it should appear
     * in the Struts deployment descriptor.
     * @return (String)handleGetFormBeanName()
     */
    public final String getFormBeanName()
    {
        String formBeanName9a = this.__formBeanName9a;
        if (!this.__formBeanName9aSet)
        {
            // formBeanName has no pre constraints
            formBeanName9a = handleGetFormBeanName();
            // formBeanName has no post constraints
            this.__formBeanName9a = formBeanName9a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formBeanName9aSet = true;
            }
        }
        return formBeanName9a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormValidationMethodName()
    * @return String
    */
    protected abstract String handleGetFormValidationMethodName();

    private String __formValidationMethodName10a;
    private boolean __formValidationMethodName10aSet = false;

    /**
     * The Javascript function name of the validation method that will validate the action
     * parameters.
     * @return (String)handleGetFormValidationMethodName()
     */
    public final String getFormValidationMethodName()
    {
        String formValidationMethodName10a = this.__formValidationMethodName10a;
        if (!this.__formValidationMethodName10aSet)
        {
            // formValidationMethodName has no pre constraints
            formValidationMethodName10a = handleGetFormValidationMethodName();
            // formValidationMethodName has no post constraints
            this.__formValidationMethodName10a = formValidationMethodName10a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formValidationMethodName10aSet = true;
            }
        }
        return formValidationMethodName10a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isResettable()
    * @return boolean
    */
    protected abstract boolean handleIsResettable();

    private boolean __resettable11a;
    private boolean __resettable11aSet = false;

    /**
     * True if it should be possible to reset the form represented by this action. False otherwise.
     * @return (boolean)handleIsResettable()
     */
    public final boolean isResettable()
    {
        boolean resettable11a = this.__resettable11a;
        if (!this.__resettable11aSet)
        {
            // resettable has no pre constraints
            resettable11a = handleIsResettable();
            // resettable has no post constraints
            this.__resettable11a = resettable11a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__resettable11aSet = true;
            }
        }
        return resettable11a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isUseCaseStart()
    * @return boolean
    */
    protected abstract boolean handleIsUseCaseStart();

    private boolean __useCaseStart12a;
    private boolean __useCaseStart12aSet = false;

    /**
     * True if this action starts the use-case. False otherwise.
     * @return (boolean)handleIsUseCaseStart()
     */
    public final boolean isUseCaseStart()
    {
        boolean useCaseStart12a = this.__useCaseStart12a;
        if (!this.__useCaseStart12aSet)
        {
            // useCaseStart has no pre constraints
            useCaseStart12a = handleIsUseCaseStart();
            // useCaseStart has no post constraints
            this.__useCaseStart12a = useCaseStart12a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__useCaseStart12aSet = true;
            }
        }
        return useCaseStart12a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFullActionPath()
    * @return String
    */
    protected abstract String handleGetFullActionPath();

    private String __fullActionPath13a;
    private boolean __fullActionPath13aSet = false;

    /**
     * The full path for this action. The full path also contains the package name rendered as
     * directories.
     * @return (String)handleGetFullActionPath()
     */
    public final String getFullActionPath()
    {
        String fullActionPath13a = this.__fullActionPath13a;
        if (!this.__fullActionPath13aSet)
        {
            // fullActionPath has no pre constraints
            fullActionPath13a = handleGetFullActionPath();
            // fullActionPath has no post constraints
            this.__fullActionPath13a = fullActionPath13a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullActionPath13aSet = true;
            }
        }
        return fullActionPath13a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFullFormBeanPath()
    * @return String
    */
    protected abstract String handleGetFullFormBeanPath();

    private String __fullFormBeanPath14a;
    private boolean __fullFormBeanPath14aSet = false;

    /**
     * Returns the full path for the form bean associated to this action.
     * @return (String)handleGetFullFormBeanPath()
     */
    public final String getFullFormBeanPath()
    {
        String fullFormBeanPath14a = this.__fullFormBeanPath14a;
        if (!this.__fullFormBeanPath14aSet)
        {
            // fullFormBeanPath has no pre constraints
            fullFormBeanPath14a = handleGetFullFormBeanPath();
            // fullFormBeanPath has no post constraints
            this.__fullFormBeanPath14a = fullFormBeanPath14a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullFormBeanPath14aSet = true;
            }
        }
        return fullFormBeanPath14a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionPathRoot()
    * @return String
    */
    protected abstract String handleGetActionPathRoot();

    private String __actionPathRoot15a;
    private boolean __actionPathRoot15aSet = false;

    /**
     * The root of the action path, this is the same as the path for the use-case context for this
     * action, that is, the use-case holding the activity graph in which this action is contained.
     * @return (String)handleGetActionPathRoot()
     */
    public final String getActionPathRoot()
    {
        String actionPathRoot15a = this.__actionPathRoot15a;
        if (!this.__actionPathRoot15aSet)
        {
            // actionPathRoot has no pre constraints
            actionPathRoot15a = handleGetActionPathRoot();
            // actionPathRoot has no post constraints
            this.__actionPathRoot15a = actionPathRoot15a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionPathRoot15aSet = true;
            }
        }
        return actionPathRoot15a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isValidationRequired()
    * @return boolean
    */
    protected abstract boolean handleIsValidationRequired();

    private boolean __validationRequired16a;
    private boolean __validationRequired16aSet = false;

    /**
     * True if this action requires validation, false otherwise. An action requires validation if it
     * represented by a form and one or more fields require validation.
     * @return (boolean)handleIsValidationRequired()
     */
    public final boolean isValidationRequired()
    {
        boolean validationRequired16a = this.__validationRequired16a;
        if (!this.__validationRequired16aSet)
        {
            // validationRequired has no pre constraints
            validationRequired16a = handleIsValidationRequired();
            // validationRequired has no post constraints
            this.__validationRequired16a = validationRequired16a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__validationRequired16aSet = true;
            }
        }
        return validationRequired16a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormBeanType()
    * @return String
    */
    protected abstract String handleGetFormBeanType();

    private String __formBeanType17a;
    private boolean __formBeanType17aSet = false;

    /**
     * The fully qualified name of the form bean associated to this action.
     * @return (String)handleGetFormBeanType()
     */
    public final String getFormBeanType()
    {
        String formBeanType17a = this.__formBeanType17a;
        if (!this.__formBeanType17aSet)
        {
            // formBeanType has no pre constraints
            formBeanType17a = handleGetFormBeanType();
            // formBeanType has no post constraints
            this.__formBeanType17a = formBeanType17a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formBeanType17aSet = true;
            }
        }
        return formBeanType17a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getDocumentationValue()
    * @return String
    */
    protected abstract String handleGetDocumentationValue();

    private String __documentationValue18a;
    private boolean __documentationValue18aSet = false;

    /**
     * The documentation for this action as a String that can be used as a resource message (with
     * the backslashes at the end of the line).
     * @return (String)handleGetDocumentationValue()
     */
    public final String getDocumentationValue()
    {
        String documentationValue18a = this.__documentationValue18a;
        if (!this.__documentationValue18aSet)
        {
            // documentationValue has no pre constraints
            documentationValue18a = handleGetDocumentationValue();
            // documentationValue has no post constraints
            this.__documentationValue18a = documentationValue18a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__documentationValue18aSet = true;
            }
        }
        return documentationValue18a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getDocumentationKey()
    * @return String
    */
    protected abstract String handleGetDocumentationKey();

    private String __documentationKey19a;
    private boolean __documentationKey19aSet = false;

    /**
     * A key suited as a resource message key for the documentation for this action.
     * @return (String)handleGetDocumentationKey()
     */
    public final String getDocumentationKey()
    {
        String documentationKey19a = this.__documentationKey19a;
        if (!this.__documentationKey19aSet)
        {
            // documentationKey has no pre constraints
            documentationKey19a = handleGetDocumentationKey();
            // documentationKey has no post constraints
            this.__documentationKey19a = documentationKey19a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__documentationKey19aSet = true;
            }
        }
        return documentationKey19a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFullTilePath()
    * @return String
    */
    protected abstract String handleGetFullTilePath();

    private String __fullTilePath20a;
    private boolean __fullTilePath20aSet = false;

    /**
     * The name of a file that can be used as a JSP file name in case you want to have each action
     * rendered onto a different tile.
     * @return (String)handleGetFullTilePath()
     */
    public final String getFullTilePath()
    {
        String fullTilePath20a = this.__fullTilePath20a;
        if (!this.__fullTilePath20aSet)
        {
            // fullTilePath has no pre constraints
            fullTilePath20a = handleGetFullTilePath();
            // fullTilePath has no post constraints
            this.__fullTilePath20a = fullTilePath20a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__fullTilePath20aSet = true;
            }
        }
        return fullTilePath20a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isDateFieldPresent()
    * @return boolean
    */
    protected abstract boolean handleIsDateFieldPresent();

    private boolean __dateFieldPresent21a;
    private boolean __dateFieldPresent21aSet = false;

    /**
     * True if this action contains a parameter of type Date. The generated pages will contain
     * special javascript code to handle them (popup window etc...).
     * @return (boolean)handleIsDateFieldPresent()
     */
    public final boolean isDateFieldPresent()
    {
        boolean dateFieldPresent21a = this.__dateFieldPresent21a;
        if (!this.__dateFieldPresent21aSet)
        {
            // dateFieldPresent has no pre constraints
            dateFieldPresent21a = handleIsDateFieldPresent();
            // dateFieldPresent has no post constraints
            this.__dateFieldPresent21a = dateFieldPresent21a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__dateFieldPresent21aSet = true;
            }
        }
        return dateFieldPresent21a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isCalendarRequired()
    * @return boolean
    */
    protected abstract boolean handleIsCalendarRequired();

    private boolean __calendarRequired22a;
    private boolean __calendarRequired22aSet = false;

    /**
     * True if this action contains a parameter which requires a calendar popup.
     * @return (boolean)handleIsCalendarRequired()
     */
    public final boolean isCalendarRequired()
    {
        boolean calendarRequired22a = this.__calendarRequired22a;
        if (!this.__calendarRequired22aSet)
        {
            // calendarRequired has no pre constraints
            calendarRequired22a = handleIsCalendarRequired();
            // calendarRequired has no post constraints
            this.__calendarRequired22a = calendarRequired22a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__calendarRequired22aSet = true;
            }
        }
        return calendarRequired22a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isTableLink()
    * @return boolean
    */
    protected abstract boolean handleIsTableLink();

    private boolean __tableLink23a;
    private boolean __tableLink23aSet = false;

    /**
     * True if a table link name has been specified and it properly targets a table page-variable
     * from the input page.
     * @return (boolean)handleIsTableLink()
     */
    public final boolean isTableLink()
    {
        boolean tableLink23a = this.__tableLink23a;
        if (!this.__tableLink23aSet)
        {
            // tableLink has no pre constraints
            tableLink23a = handleIsTableLink();
            // tableLink has no post constraints
            this.__tableLink23a = tableLink23a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__tableLink23aSet = true;
            }
        }
        return tableLink23a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getOnlineHelpKey()
    * @return String
    */
    protected abstract String handleGetOnlineHelpKey();

    private String __onlineHelpKey24a;
    private boolean __onlineHelpKey24aSet = false;

    /**
     * The key to lookup the online help documentation. This documentation is gathered from the
     * documentation entered by the user, as well as analyzing the model.
     * @return (String)handleGetOnlineHelpKey()
     */
    public final String getOnlineHelpKey()
    {
        String onlineHelpKey24a = this.__onlineHelpKey24a;
        if (!this.__onlineHelpKey24aSet)
        {
            // onlineHelpKey has no pre constraints
            onlineHelpKey24a = handleGetOnlineHelpKey();
            // onlineHelpKey has no post constraints
            this.__onlineHelpKey24a = onlineHelpKey24a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__onlineHelpKey24aSet = true;
            }
        }
        return onlineHelpKey24a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getOnlineHelpValue()
    * @return String
    */
    protected abstract String handleGetOnlineHelpValue();

    private String __onlineHelpValue25a;
    private boolean __onlineHelpValue25aSet = false;

    /**
     * The online help documentation. This documentation is gathered from the documentation entered
     * by the user, as well as analyzing the model. The format is HTML without any style.
     * @return (String)handleGetOnlineHelpValue()
     */
    public final String getOnlineHelpValue()
    {
        String onlineHelpValue25a = this.__onlineHelpValue25a;
        if (!this.__onlineHelpValue25aSet)
        {
            // onlineHelpValue has no pre constraints
            onlineHelpValue25a = handleGetOnlineHelpValue();
            // onlineHelpValue has no post constraints
            this.__onlineHelpValue25a = onlineHelpValue25a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__onlineHelpValue25aSet = true;
            }
        }
        return onlineHelpValue25a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionScope()
    * @return String
    */
    protected abstract String handleGetActionScope();

    private String __actionScope26a;
    private boolean __actionScope26aSet = false;

    /**
     * The scope in which the form bean will be placed (could be page, request, session or
     * application).
     * @return (String)handleGetActionScope()
     */
    public final String getActionScope()
    {
        String actionScope26a = this.__actionScope26a;
        if (!this.__actionScope26aSet)
        {
            // actionScope has no pre constraints
            actionScope26a = handleGetActionScope();
            // actionScope has no post constraints
            this.__actionScope26a = actionScope26a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionScope26aSet = true;
            }
        }
        return actionScope26a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormBeanPackageName()
    * @return String
    */
    protected abstract String handleGetFormBeanPackageName();

    private String __formBeanPackageName27a;
    private boolean __formBeanPackageName27aSet = false;

    /**
     * The package for the form bean.
     * @return (String)handleGetFormBeanPackageName()
     */
    public final String getFormBeanPackageName()
    {
        String formBeanPackageName27a = this.__formBeanPackageName27a;
        if (!this.__formBeanPackageName27aSet)
        {
            // formBeanPackageName has no pre constraints
            formBeanPackageName27a = handleGetFormBeanPackageName();
            // formBeanPackageName has no post constraints
            this.__formBeanPackageName27a = formBeanPackageName27a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formBeanPackageName27aSet = true;
            }
        }
        return formBeanPackageName27a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getActionType()
    * @return String
    */
    protected abstract String handleGetActionType();

    private String __actionType28a;
    private boolean __actionType28aSet = false;

    /**
     * The fully qualified name for the action class.
     * @return (String)handleGetActionType()
     */
    public final String getActionType()
    {
        String actionType28a = this.__actionType28a;
        if (!this.__actionType28aSet)
        {
            // actionType has no pre constraints
            actionType28a = handleGetActionType();
            // actionType has no post constraints
            this.__actionType28a = actionType28a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__actionType28aSet = true;
            }
        }
        return actionType28a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getStyleId()
    * @return String
    */
    protected abstract String handleGetStyleId();

    private String __styleId29a;
    private boolean __styleId29aSet = false;

    /**
     * The name of the CSS id in which this action will be contained.
     * @return (String)handleGetStyleId()
     */
    public final String getStyleId()
    {
        String styleId29a = this.__styleId29a;
        if (!this.__styleId29aSet)
        {
            // styleId has no pre constraints
            styleId29a = handleGetStyleId();
            // styleId has no post constraints
            this.__styleId29a = styleId29a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__styleId29aSet = true;
            }
        }
        return styleId29a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isRedirect()
    * @return boolean
    */
    protected abstract boolean handleIsRedirect();

    private boolean __redirect30a;
    private boolean __redirect30aSet = false;

    /**
     * Defines whether or not when this action's forward is executed, an HTTP redirect should occur.
     *  Default value is based on the value of the 'defaultActionRedirect' namespace.
     * @return (boolean)handleIsRedirect()
     */
    public final boolean isRedirect()
    {
        boolean redirect30a = this.__redirect30a;
        if (!this.__redirect30aSet)
        {
            // redirect has no pre constraints
            redirect30a = handleIsRedirect();
            // redirect has no post constraints
            this.__redirect30a = redirect30a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__redirect30aSet = true;
            }
        }
        return redirect30a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getFormScope()
    * @return String
    */
    protected abstract String handleGetFormScope();

    private String __formScope31a;
    private boolean __formScope31aSet = false;

    /**
     * The scope to place the current "form" variable within when this action is executing.
     * @return (String)handleGetFormScope()
     */
    public final String getFormScope()
    {
        String formScope31a = this.__formScope31a;
        if (!this.__formScope31aSet)
        {
            // formScope has no pre constraints
            formScope31a = handleGetFormScope();
            // formScope has no post constraints
            this.__formScope31a = formScope31a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formScope31aSet = true;
            }
        }
        return formScope31a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isFormScopeSession()
    * @return boolean
    */
    protected abstract boolean handleIsFormScopeSession();

    private boolean __formScopeSession32a;
    private boolean __formScopeSession32aSet = false;

    /**
     * Indicates if the form scope is of type "session".
     * @return (boolean)handleIsFormScopeSession()
     */
    public final boolean isFormScopeSession()
    {
        boolean formScopeSession32a = this.__formScopeSession32a;
        if (!this.__formScopeSession32aSet)
        {
            // formScopeSession has no pre constraints
            formScopeSession32a = handleIsFormScopeSession();
            // formScopeSession has no post constraints
            this.__formScopeSession32a = formScopeSession32a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formScopeSession32aSet = true;
            }
        }
        return formScopeSession32a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isFormScopeRequest()
    * @return boolean
    */
    protected abstract boolean handleIsFormScopeRequest();

    private boolean __formScopeRequest33a;
    private boolean __formScopeRequest33aSet = false;

    /**
     * Indicates if the from scope is of type "request".
     * @return (boolean)handleIsFormScopeRequest()
     */
    public final boolean isFormScopeRequest()
    {
        boolean formScopeRequest33a = this.__formScopeRequest33a;
        if (!this.__formScopeRequest33aSet)
        {
            // formScopeRequest has no pre constraints
            formScopeRequest33a = handleIsFormScopeRequest();
            // formScopeRequest has no post constraints
            this.__formScopeRequest33a = formScopeRequest33a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formScopeRequest33aSet = true;
            }
        }
        return formScopeRequest33a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isFormScopeNone()
    * @return boolean
    */
    protected abstract boolean handleIsFormScopeNone();

    private boolean __formScopeNone34a;
    private boolean __formScopeNone34aSet = false;

    /**
     * Indicates if the form scope is of type "none".
     * @return (boolean)handleIsFormScopeNone()
     */
    public final boolean isFormScopeNone()
    {
        boolean formScopeNone34a = this.__formScopeNone34a;
        if (!this.__formScopeNone34aSet)
        {
            // formScopeNone has no pre constraints
            formScopeNone34a = handleIsFormScopeNone();
            // formScopeNone has no post constraints
            this.__formScopeNone34a = formScopeNone34a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__formScopeNone34aSet = true;
            }
        }
        return formScopeNone34a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getTableLinkName()
    * @return String
    */
    protected abstract String handleGetTableLinkName();

    private String __tableLinkName35a;
    private boolean __tableLinkName35aSet = false;

    /**
     * The name of the table link specified for this action.
     * @return (String)handleGetTableLinkName()
     */
    public final String getTableLinkName()
    {
        String tableLinkName35a = this.__tableLinkName35a;
        if (!this.__tableLinkName35aSet)
        {
            // tableLinkName has no pre constraints
            tableLinkName35a = handleGetTableLinkName();
            // tableLinkName has no post constraints
            this.__tableLinkName35a = tableLinkName35a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__tableLinkName35aSet = true;
            }
        }
        return tableLinkName35a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getTableLinkColumnName()
    * @return String
    */
    protected abstract String handleGetTableLinkColumnName();

    private String __tableLinkColumnName36a;
    private boolean __tableLinkColumnName36aSet = false;

    /**
     * The name of the column targetted by this action.
     * @return (String)handleGetTableLinkColumnName()
     */
    public final String getTableLinkColumnName()
    {
        String tableLinkColumnName36a = this.__tableLinkColumnName36a;
        if (!this.__tableLinkColumnName36aSet)
        {
            // tableLinkColumnName has no pre constraints
            tableLinkColumnName36a = handleGetTableLinkColumnName();
            // tableLinkColumnName has no post constraints
            this.__tableLinkColumnName36a = tableLinkColumnName36a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__tableLinkColumnName36aSet = true;
            }
        }
        return tableLinkColumnName36a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isImageLink()
    * @return boolean
    */
    protected abstract boolean handleIsImageLink();

    private boolean __imageLink37a;
    private boolean __imageLink37aSet = false;

    /**
     * Specifies whether or not this action is represented by clicking on an image.
     * @return (boolean)handleIsImageLink()
     */
    public final boolean isImageLink()
    {
        boolean imageLink37a = this.__imageLink37a;
        if (!this.__imageLink37aSet)
        {
            // imageLink has no pre constraints
            imageLink37a = handleIsImageLink();
            // imageLink has no post constraints
            this.__imageLink37a = imageLink37a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__imageLink37aSet = true;
            }
        }
        return imageLink37a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getImagePath()
    * @return String
    */
    protected abstract String handleGetImagePath();

    private String __imagePath38a;
    private boolean __imagePath38aSet = false;

    /**
     * If this action is an imageLink this property represents the path to the corresponding image.
     * @return (String)handleGetImagePath()
     */
    public final String getImagePath()
    {
        String imagePath38a = this.__imagePath38a;
        if (!this.__imagePath38aSet)
        {
            // imagePath has no pre constraints
            imagePath38a = handleGetImagePath();
            // imagePath has no post constraints
            this.__imagePath38a = imagePath38a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__imagePath38aSet = true;
            }
        }
        return imagePath38a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getMessageKey()
    * @return String
    */
    protected abstract String handleGetMessageKey();

    private String __messageKey39a;
    private boolean __messageKey39aSet = false;

    /**
     * TODO: Model Documentation for
     * org.andromda.cartridges.bpm4struts.metafacades.StrutsAction.messageKey
     * @return (String)handleGetMessageKey()
     */
    public final String getMessageKey()
    {
        String messageKey39a = this.__messageKey39a;
        if (!this.__messageKey39aSet)
        {
            // messageKey has no pre constraints
            messageKey39a = handleGetMessageKey();
            // messageKey has no post constraints
            this.__messageKey39a = messageKey39a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__messageKey39aSet = true;
            }
        }
        return messageKey39a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#getImageMessageKey()
    * @return String
    */
    protected abstract String handleGetImageMessageKey();

    private String __imageMessageKey40a;
    private boolean __imageMessageKey40aSet = false;

    /**
     * The resource message key used to look to location of the image for this action.
     * @return (String)handleGetImageMessageKey()
     */
    public final String getImageMessageKey()
    {
        String imageMessageKey40a = this.__imageMessageKey40a;
        if (!this.__imageMessageKey40aSet)
        {
            // imageMessageKey has no pre constraints
            imageMessageKey40a = handleGetImageMessageKey();
            // imageMessageKey has no post constraints
            this.__imageMessageKey40a = imageMessageKey40a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__imageMessageKey40aSet = true;
            }
        }
        return imageMessageKey40a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isTableAction()
    * @return boolean
    */
    protected abstract boolean handleIsTableAction();

    private boolean __tableAction41a;
    private boolean __tableAction41aSet = false;

    /**
     * Denotes this action works on all rows of the table from the table link relation.
     * @return (boolean)handleIsTableAction()
     */
    public final boolean isTableAction()
    {
        boolean tableAction41a = this.__tableAction41a;
        if (!this.__tableAction41aSet)
        {
            // tableAction has no pre constraints
            tableAction41a = handleIsTableAction();
            // tableAction has no post constraints
            this.__tableAction41a = tableAction41a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__tableAction41aSet = true;
            }
        }
        return tableAction41a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isTableRowAction()
    * @return boolean
    */
    protected abstract boolean handleIsTableRowAction();

    private boolean __tableRowAction42a;
    private boolean __tableRowAction42aSet = false;

    /**
     * Denotes this action works on a single row of the table from the table link relation.
     * @return (boolean)handleIsTableRowAction()
     */
    public final boolean isTableRowAction()
    {
        boolean tableRowAction42a = this.__tableRowAction42a;
        if (!this.__tableRowAction42aSet)
        {
            // tableRowAction has no pre constraints
            tableRowAction42a = handleIsTableRowAction();
            // tableRowAction has no post constraints
            this.__tableRowAction42a = tableRowAction42a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__tableRowAction42aSet = true;
            }
        }
        return tableRowAction42a;
    }

   /**
    * @see org.andromda.cartridges.bpm4struts.metafacades.StrutsAction#isMultipartFormData()
    * @return boolean
    */
    protected abstract boolean handleIsMultipartFormData();

    private boolean __multipartFormData43a;
    private boolean __multipartFormData43aSet = false;

    /**
     * True is this action is supposed to be rendered as enctype="multipart/form-data" on the page
     * form.
     * @return (boolean)handleIsMultipartFormData()
     */
    public final boolean isMultipartFormData()
    {
        boolean multipartFormData43a = this.__multipartFormData43a;
        if (!this.__multipartFormData43aSet)
        {
            // multipartFormData has no pre constraints
            multipartFormData43a = handleIsMultipartFormData();
            // multipartFormData has no post constraints
            this.__multipartFormData43a = multipartFormData43a;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__multipartFormData43aSet = true;
            }
        }
        return multipartFormData43a;
    }

    // ---------------- business methods ----------------------

    /**
     * Method to be implemented in descendants
     * Those parameters that are directly entering a final state and have been submitted into the
     * request, they will be able to survive a trip to the next use-case. All returned elements are
     * of type StrutsParameter.
     * @param finalState
     * @return List
     */
    protected abstract List handleGetInterUseCaseParameters(StrutsFinalState finalState);

    /**
     * Those parameters that are directly entering a final state and have been submitted into the
     * request, they will be able to survive a trip to the next use-case. All returned elements are
     * of type StrutsParameter.
     * @param finalState StrutsFinalState
     * TODO: Model Documentation for
     * org.andromda.cartridges.bpm4struts.metafacades.StrutsAction.getInterUseCaseParameters(finalState)
     * @return handleGetInterUseCaseParameters(finalState)
     */
    public List getInterUseCaseParameters(StrutsFinalState finalState)
    {
        // getInterUseCaseParameters has no pre constraints
        List returnValue = handleGetInterUseCaseParameters(finalState);
        // getInterUseCaseParameters has no post constraints
        return returnValue;
    }

    // ------------- associations ------------------

    private List<StrutsParameter> __getResettableActionParameters1r;
    private boolean __getResettableActionParameters1rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsParameter>)handleGetResettableActionParameters()
     */
    public final List<StrutsParameter> getResettableActionParameters()
    {
        List<StrutsParameter> getResettableActionParameters1r = this.__getResettableActionParameters1r;
        if (!this.__getResettableActionParameters1rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetResettableActionParameters();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getResettableActionParameters1r = (List<StrutsParameter>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getResettableActionParameters List<StrutsParameter> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getResettableActionParameters1r = getResettableActionParameters1r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getResettableActionParameters1rSet = true;
            }
        }
        return getResettableActionParameters1r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetResettableActionParameters();

    private StrutsJsp __getInput2r;
    private boolean __getInput2rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (StrutsJsp)handleGetInput()
     */
    public final StrutsJsp getInput()
    {
        StrutsJsp getInput2r = this.__getInput2r;
        if (!this.__getInput2rSet)
        {
            // strutsAction has no pre constraints
            Object result = handleGetInput();
            MetafacadeBase shieldedResult = this.shieldedElement(result);
            try
            {
                getInput2r = (StrutsJsp)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getInput StrutsJsp " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getInput2r = getInput2r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getInput2rSet = true;
            }
        }
        return getInput2r;
    }

    /**
     * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type
     * @return Object
     */
    protected abstract Object handleGetInput();

    private List<StrutsJsp> __getTargetPages3r;
    private boolean __getTargetPages3rSet = false;

    /**
     * Returns all actions that possibly result in returning this page.
     * @return (List<StrutsJsp>)handleGetTargetPages()
     */
    public final List<StrutsJsp> getTargetPages()
    {
        List<StrutsJsp> getTargetPages3r = this.__getTargetPages3r;
        if (!this.__getTargetPages3rSet)
        {
            // incomingActions has no pre constraints
            List result = handleGetTargetPages();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getTargetPages3r = (List<StrutsJsp>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getTargetPages List<StrutsJsp> " + result + ": " + shieldedResult);
            }
            // incomingActions has no post constraints
            this.__getTargetPages3r = getTargetPages3r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getTargetPages3rSet = true;
            }
        }
        return getTargetPages3r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetTargetPages();

    private List<StrutsExceptionHandler> __getActionExceptions4r;
    private boolean __getActionExceptions4rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsExceptionHandler>)handleGetActionExceptions()
     */
    public final List<StrutsExceptionHandler> getActionExceptions()
    {
        List<StrutsExceptionHandler> getActionExceptions4r = this.__getActionExceptions4r;
        if (!this.__getActionExceptions4rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetActionExceptions();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getActionExceptions4r = (List<StrutsExceptionHandler>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionExceptions List<StrutsExceptionHandler> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getActionExceptions4r = getActionExceptions4r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionExceptions4rSet = true;
            }
        }
        return getActionExceptions4r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetActionExceptions();

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsParameter>)handleGetTableNonColumnFormParameters()
     */
    public final List<StrutsParameter> getTableNonColumnFormParameters()
    {
        List<StrutsParameter> getTableNonColumnFormParameters5r = null;
        // strutsAction has no pre constraints
        List result = handleGetTableNonColumnFormParameters();
        List shieldedResult = this.shieldedElements(result);
        try
        {
            getTableNonColumnFormParameters5r = (List<StrutsParameter>)shieldedResult;
        }
        catch (ClassCastException ex)
        {
            // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
            StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getTableNonColumnFormParameters List<StrutsParameter> " + result + ": " + shieldedResult);
        }
        // strutsAction has no post constraints
        return getTableNonColumnFormParameters5r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetTableNonColumnFormParameters();

    private List<StrutsParameter> __getActionParameters6r;
    private boolean __getActionParameters6rSet = false;

    /**
     * The actions used when submitting forms for this table. Table actions that are hyperlinks are
     * not included. It only makes sense to call this property on parameters that represent a table
     * page-variable.
     * @return (List<StrutsParameter>)handleGetActionParameters()
     */
    public final List<StrutsParameter> getActionParameters()
    {
        List<StrutsParameter> getActionParameters6r = this.__getActionParameters6r;
        if (!this.__getActionParameters6rSet)
        {
            // tableFormActions has no pre constraints
            List result = handleGetActionParameters();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getActionParameters6r = (List<StrutsParameter>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionParameters List<StrutsParameter> " + result + ": " + shieldedResult);
            }
            // tableFormActions has no post constraints
            this.__getActionParameters6r = getActionParameters6r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionParameters6rSet = true;
            }
        }
        return getActionParameters6r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetActionParameters();

    private List<StrutsControllerOperation> __getDeferredOperations7r;
    private boolean __getDeferredOperations7rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsControllerOperation>)handleGetDeferredOperations()
     */
    public final List<StrutsControllerOperation> getDeferredOperations()
    {
        List<StrutsControllerOperation> getDeferredOperations7r = this.__getDeferredOperations7r;
        if (!this.__getDeferredOperations7rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetDeferredOperations();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getDeferredOperations7r = (List<StrutsControllerOperation>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getDeferredOperations List<StrutsControllerOperation> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getDeferredOperations7r = getDeferredOperations7r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getDeferredOperations7rSet = true;
            }
        }
        return getDeferredOperations7r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetDeferredOperations();

    private List<StrutsForward> __getActionForwards8r;
    private boolean __getActionForwards8rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsForward>)handleGetActionForwards()
     */
    public final List<StrutsForward> getActionForwards()
    {
        List<StrutsForward> getActionForwards8r = this.__getActionForwards8r;
        if (!this.__getActionForwards8rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetActionForwards();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getActionForwards8r = (List<StrutsForward>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionForwards List<StrutsForward> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getActionForwards8r = getActionForwards8r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionForwards8rSet = true;
            }
        }
        return getActionForwards8r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetActionForwards();

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsParameter>)handleGetHiddenActionParameters()
     */
    public final List<StrutsParameter> getHiddenActionParameters()
    {
        List<StrutsParameter> getHiddenActionParameters9r = null;
        // strutsAction has no pre constraints
        List result = handleGetHiddenActionParameters();
        List shieldedResult = this.shieldedElements(result);
        try
        {
            getHiddenActionParameters9r = (List<StrutsParameter>)shieldedResult;
        }
        catch (ClassCastException ex)
        {
            // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
            StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getHiddenActionParameters List<StrutsParameter> " + result + ": " + shieldedResult);
        }
        // strutsAction has no post constraints
        return getHiddenActionParameters9r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetHiddenActionParameters();

    private StrutsController __getController10r;
    private boolean __getController10rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (StrutsController)handleGetController()
     */
    public final StrutsController getController()
    {
        StrutsController getController10r = this.__getController10r;
        if (!this.__getController10rSet)
        {
            // strutsAction has no pre constraints
            Object result = handleGetController();
            MetafacadeBase shieldedResult = this.shieldedElement(result);
            try
            {
                getController10r = (StrutsController)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getController StrutsController " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getController10r = getController10r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getController10rSet = true;
            }
        }
        return getController10r;
    }

    /**
     * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type
     * @return Object
     */
    protected abstract Object handleGetController();

    private List<StrutsActionState> __getActionStates11r;
    private boolean __getActionStates11rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsActionState>)handleGetActionStates()
     */
    public final List<StrutsActionState> getActionStates()
    {
        List<StrutsActionState> getActionStates11r = this.__getActionStates11r;
        if (!this.__getActionStates11rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetActionStates();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getActionStates11r = (List<StrutsActionState>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionStates List<StrutsActionState> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getActionStates11r = getActionStates11r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionStates11rSet = true;
            }
        }
        return getActionStates11r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetActionStates();

    private StrutsParameter __getTableLinkParameter12r;
    private boolean __getTableLinkParameter12rSet = false;

    /**
     * Those actions that are working on this table and are to be represented as hyperlinks. It only
     * makes sense to call this property on parameters that represent a table page-variable.
     * @return (StrutsParameter)handleGetTableLinkParameter()
     */
    public final StrutsParameter getTableLinkParameter()
    {
        StrutsParameter getTableLinkParameter12r = this.__getTableLinkParameter12r;
        if (!this.__getTableLinkParameter12rSet)
        {
            // tableHyperlinkActions has no pre constraints
            Object result = handleGetTableLinkParameter();
            MetafacadeBase shieldedResult = this.shieldedElement(result);
            try
            {
                getTableLinkParameter12r = (StrutsParameter)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getTableLinkParameter StrutsParameter " + result + ": " + shieldedResult);
            }
            // tableHyperlinkActions has no post constraints
            this.__getTableLinkParameter12r = getTableLinkParameter12r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getTableLinkParameter12rSet = true;
            }
        }
        return getTableLinkParameter12r;
    }

    /**
     * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type
     * @return Object
     */
    protected abstract Object handleGetTableLinkParameter();

    private List<StrutsForward> __getDecisionTransitions13r;
    private boolean __getDecisionTransitions13rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsForward>)handleGetDecisionTransitions()
     */
    public final List<StrutsForward> getDecisionTransitions()
    {
        List<StrutsForward> getDecisionTransitions13r = this.__getDecisionTransitions13r;
        if (!this.__getDecisionTransitions13rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetDecisionTransitions();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getDecisionTransitions13r = (List<StrutsForward>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getDecisionTransitions List<StrutsForward> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getDecisionTransitions13r = getDecisionTransitions13r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getDecisionTransitions13rSet = true;
            }
        }
        return getDecisionTransitions13r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetDecisionTransitions();

    private List<StrutsForward> __getTransitions14r;
    private boolean __getTransitions14rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsForward>)handleGetTransitions()
     */
    public final List<StrutsForward> getTransitions()
    {
        List<StrutsForward> getTransitions14r = this.__getTransitions14r;
        if (!this.__getTransitions14rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetTransitions();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getTransitions14r = (List<StrutsForward>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getTransitions List<StrutsForward> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getTransitions14r = getTransitions14r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getTransitions14rSet = true;
            }
        }
        return getTransitions14r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetTransitions();

    private List<StrutsParameter> __getActionFormFields15r;
    private boolean __getActionFormFields15rSet = false;

    /**
     * Represents a Struts action. Such an action typically is associated with a form bean.
     * This action model element extends a transition, but the actual logic contained by the action
     * envelops all action states called, until either a final state or JSP page is reached.
     * @return (List<StrutsParameter>)handleGetActionFormFields()
     */
    public final List<StrutsParameter> getActionFormFields()
    {
        List<StrutsParameter> getActionFormFields15r = this.__getActionFormFields15r;
        if (!this.__getActionFormFields15rSet)
        {
            // strutsAction has no pre constraints
            List result = handleGetActionFormFields();
            List shieldedResult = this.shieldedElements(result);
            try
            {
                getActionFormFields15r = (List<StrutsParameter>)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionFormFields List<StrutsParameter> " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getActionFormFields15r = getActionFormFields15r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionFormFields15rSet = true;
            }
        }
        return getActionFormFields15r;
    }

    /**
     * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
     * @return  List
     */
    protected abstract List handleGetActionFormFields();

    private StrutsTrigger __getActionTrigger16r;
    private boolean __getActionTrigger16rSet = false;

    /**
     * If isActionTrigger() returns true them this association points to the action to which the
     * trigger has been associated.
     * @return (StrutsTrigger)handleGetActionTrigger()
     */
    public final StrutsTrigger getActionTrigger()
    {
        StrutsTrigger getActionTrigger16r = this.__getActionTrigger16r;
        if (!this.__getActionTrigger16rSet)
        {
            // strutsAction has no pre constraints
            Object result = handleGetActionTrigger();
            MetafacadeBase shieldedResult = this.shieldedElement(result);
            try
            {
                getActionTrigger16r = (StrutsTrigger)shieldedResult;
            }
            catch (ClassCastException ex)
            {
                // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
                StrutsActionLogic.logger.warn("incorrect metafacade cast for StrutsActionLogic.getActionTrigger StrutsTrigger " + result + ": " + shieldedResult);
            }
            // strutsAction has no post constraints
            this.__getActionTrigger16r = getActionTrigger16r;
            if (isMetafacadePropertyCachingEnabled())
            {
                this.__getActionTrigger16rSet = true;
            }
        }
        return getActionTrigger16r;
    }

    /**
     * UML Specific type is transformed by shieldedElements to AndroMDA Metafacade type
     * @return Object
     */
    protected abstract Object handleGetActionTrigger();

    /**
     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::each action must carry a trigger</p>
     * <p><b>Error:</b> Each action transition coming out of a page must have a trigger (the name could be sufficient), it is recommended to add a trigger of type 'signal'.</p>
     * <p><b>OCL:</b> context StrutsAction inv: exitingPage implies triggerPresent</p>
     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::table links must target an existing table page-variable</p>
     * <p><b>Error:</b> When specifying a table link for this action you will need to target a table page-variable from the input page, the specified table does not exist in that page.</p>
     * <p><b>OCL:</b> context StrutsAction inv: tableLinkName->notEmpty() implies tableLink</p>
     * <p><b>Constraint:</b> org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::hyperlink table actions need to indicate the column</p>
     * <p><b>Error:</b> This hyperlink table event is not specifying the target column name on the table link, you will need to do this in order to determine in which column to render the hyperlink.</p>
     * <p><b>OCL:</b> context StrutsAction inv: (hyperlink and tableLink) implies tableLinkColumnName->notEmpty()</p>
     * @param validationMessages Collection<ModelValidationMessage>
     * @see StrutsForwardLogicImpl#validateInvariants(Collection validationMessages)
     */
    @Override
    public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
    {
        super.validateInvariants(validationMessages);
        try
        {
            final Object contextElement = this.THIS();
            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"exitingPage"))).booleanValue())).booleanValue()?Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"triggerPresent"))).booleanValue():true));
            if (!constraintValid)
            {
                validationMessages.add(
                    new ModelValidationMessage(
                        (MetafacadeBase)contextElement ,
                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::each action must carry a trigger",
                        "Each action transition coming out of a page must have a trigger (the name could be sufficient), it is recommended to add a trigger of type 'signal'."));
            }
        }
        catch (Throwable th)
        {
            Throwable cause = th.getCause();
            int depth = 0; // Some throwables have infinite recursion
            while (cause != null && depth < 7)
            {
                th = cause;
                depth++;
            }
            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::each action must carry a trigger' ON "
                + this.THIS().toString() + ": " + th.getMessage(), th);
        }
        try
        {
            final Object contextElement = this.THIS();
            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf(OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"tableLinkName")))).booleanValue()?Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"tableLink"))).booleanValue():true));
            if (!constraintValid)
            {
                validationMessages.add(
                    new ModelValidationMessage(
                        (MetafacadeBase)contextElement ,
                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::table links must target an existing table page-variable",
                        "When specifying a table link for this action you will need to target a table page-variable from the input page, the specified table does not exist in that page."));
            }
        }
        catch (Throwable th)
        {
            Throwable cause = th.getCause();
            int depth = 0; // Some throwables have infinite recursion
            while (cause != null && depth < 7)
            {
                th = cause;
                depth++;
            }
            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::table links must target an existing table page-variable' ON "
                + this.THIS().toString() + ": " + th.getMessage(), th);
        }
        try
        {
            final Object contextElement = this.THIS();
            boolean constraintValid = OCLResultEnsurer.ensure((Boolean.valueOf(String.valueOf((Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"hyperlink"))).booleanValue()&&Boolean.valueOf(String.valueOf(OCLIntrospector.invoke(contextElement,"tableLink"))).booleanValue()))).booleanValue()?OCLCollections.notEmpty(OCLIntrospector.invoke(contextElement,"tableLinkColumnName")):true));
            if (!constraintValid)
            {
                validationMessages.add(
                    new ModelValidationMessage(
                        (MetafacadeBase)contextElement ,
                        "org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::hyperlink table actions need to indicate the column",
                        "This hyperlink table event is not specifying the target column name on the table link, you will need to do this in order to determine in which column to render the hyperlink."));
            }
        }
        catch (Throwable th)
        {
            Throwable cause = th.getCause();
            int depth = 0; // Some throwables have infinite recursion
            while (cause != null && depth < 7)
            {
                th = cause;
                depth++;
            }
            logger.error("Error validating constraint 'org::andromda::cartridges::bpm4struts::metafacades::StrutsAction::hyperlink table actions need to indicate the column' ON "
                + this.THIS().toString() + ": " + th.getMessage(), th);
        }
    }
}