JsfVariableResolver.java

// license-header java merge-point
// Generated by andromda-jsf cartridge (utils\JsfVariableResolver.java.vsl) DO NOT EDIT!
package org.andromda.presentation.jsf;

import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.VariableResolver;
import javax.servlet.http.HttpServletRequest;
import org.apache.myfaces.trinidad.context.RequestContext;

/**
 *
 */
public class JsfVariableResolver extends VariableResolver
{
    private VariableResolver originalVariableResolver;

    /**
    * Constructor.
    * @param originalVariableResolverIn Original JSF variable resolver.
    */
    public JsfVariableResolver(VariableResolver originalVariableResolverIn) {
       this.originalVariableResolver = originalVariableResolverIn;
    }

    /**
     * @see javax.faces.el.VariableResolver#resolveVariable(javax.faces.context.FacesContext, java.lang.String)
     */
    @Override
    @SuppressWarnings("unchecked")
    public Object resolveVariable(FacesContext context, String name) throws EvaluationException
    {
        Object result = this.originalVariableResolver.resolveVariable(context, name);
        if(result == null)
        {
            final Map<String, Object> pageFlowScope = RequestContext.getCurrentInstance().getPageFlowScope();
            final Map<String, Object> controllerForms = (Map<String, Object>)pageFlowScope.get(ControllerBase.USE_CASE_FORMS_KEY);

            if(controllerForms != null)
            {
                result = controllerForms.get(name);
            }

            if(result == null)
            {
                final Map<String, Object> controllerVariables = (Map<String, Object>)pageFlowScope.get(ControllerBase.USE_CASE_PAGE_VARIABLES_KEY);
                if(controllerVariables != null)
                {
                    result = controllerVariables.get(name);
                }
            }

            if(result != null)
            {
                getRequest(context).setAttribute(name,result);
            }
        }

        return result;
    }

    /**
     * A helper method that gets the current request from the faces
     * context.
     *
     * @param context a faces context
     * @return the current request instance.
     */
    protected HttpServletRequest getRequest(FacesContext context)
    {
        return (HttpServletRequest)context.getExternalContext().getRequest();
    }
}