SearchTimecardsPopulator.java
// license-header java merge-point
// Generated by andromda-jsf cartridge (flow\ViewPopulator.java.vsl) DO NOT EDIT!
package org.andromda.timetracker.web.timecardsearch;
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.faces.el.VariableResolver;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.andromda.presentation.jsf.AdfFacesContextWrapper;
import org.andromda.presentation.jsf.FacesContextUtils;
import org.andromda.presentation.jsf.FormPopulator;
import org.andromda.presentation.jsf.JsfUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.myfaces.trinidad.context.RequestContext;
/**
* This filter handles the population of forms for the <em>Search Timecards</code>
* view.
*/
public class SearchTimecardsPopulator
implements Filter
{
private FilterConfig config;
/**
* Initialize the filter
*
* @param configIn the configuration
* @see javax.servlet.Filter#init(FilterConfig)
*/
public void init(FilterConfig configIn)
{
this.config = configIn;
}
/**
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
// - we need to retrieve the faces context differently since we're outside of the
// faces servlet
populateFormAndViewVariables(FacesContextUtils.getFacesContext(request, response), null);
chain.doFilter(request, response);
}
/**
* @see javax.servlet.Filter#destroy()
*/
public void destroy()
{
this.config = null;
}
/**
* @param facesContext
* @param form
* @throws ServletException
*/
public static void populateFormAndViewVariables(final FacesContext facesContext, Object form)
throws ServletException
{
final HttpServletRequest request = (HttpServletRequest)facesContext.getExternalContext().getRequest();
final HttpSession session = (HttpSession)facesContext.getExternalContext().getSession(true);
RequestContext adfContext = RequestContext.getCurrentInstance();
final VariableResolver variableResolver = facesContext.getApplication().getVariableResolver();
if (form == null)
{
// - first try getting the form from the ADF PageFlowScope
form = adfContext.getPageFlowScope().get("form");
// - if the form is null, try getting the current adfContext from the session (and then remove it from the session)
if (form == null)
{
final AdfFacesContextWrapper contextWrapper =
(AdfFacesContextWrapper)session.getAttribute("AndroMDAADFContext");
adfContext = contextWrapper != null ? contextWrapper.getCurrentInstance() : null;
form = adfContext != null ? adfContext.getPageFlowScope().get("form") : null;
if (form == null)
{
form = session.getAttribute("form");
session.removeAttribute("form");
}
// - if the form is still null, see if we can get it from a serialized state
if (form == null)
{
form = JsfUtils.getSerializedForm(facesContext);
}
if (form != null)
{
// - add the form to the current process scope since it wasn't in the current one to begin with
RequestContext.getCurrentInstance().getPageFlowScope().put("form", form);
}
}
else
{
// - remove the ADF context in the event that its present
session.removeAttribute("AndroMDAADFContext");
}
}
else
{
// - since the form argument is not null, set it as the "form" in the PageFlowScope
// (to replace the existing "form" attribute)
adfContext.getPageFlowScope().put("form", form);
}
try
{
// - populate the forms
if (form != null)
{
SearchTimecardsSearchFormImpl searchTimecardsSearchTimecardsSearchForm =
(SearchTimecardsSearchFormImpl)variableResolver.resolveVariable(
facesContext,
"searchTimecardsSearchTimecardsSearchForm");
// - populate the searchTimecardsSearchTimecardsSearchForm with any parameters from the previous form
FormPopulator.populateForm(form, searchTimecardsSearchTimecardsSearchForm, false);
request.setAttribute("searchTimecardsSearchTimecardsSearchForm", searchTimecardsSearchTimecardsSearchForm);
SearchTimecardsDetailsFormImpl searchTimecardsSearchTimecardsDetailsForm =
(SearchTimecardsDetailsFormImpl)variableResolver.resolveVariable(
facesContext,
"searchTimecardsSearchTimecardsDetailsForm");
// - populate the searchTimecardsSearchTimecardsDetailsForm with any parameters from the previous form
FormPopulator.populateForm(form, searchTimecardsSearchTimecardsDetailsForm, false);
request.setAttribute("searchTimecardsSearchTimecardsDetailsForm", searchTimecardsSearchTimecardsDetailsForm);
}
// - serialize the form
if (form != null)
{
JsfUtils.serializeForm(facesContext, form);
}
// - populate the view variables
if (form != null)
{
final boolean timecardSummariesReadable = PropertyUtils.isReadable(form, "timecardSummaries");
if (timecardSummariesReadable)
{
Boolean propertySet = null;
final String isSetPropertyName = "timecardSummariesSet";
if (PropertyUtils.isReadable(form, isSetPropertyName))
{
propertySet = (Boolean)PropertyUtils.getProperty(form, isSetPropertyName);
}
// - only set the property if its been set, or we can't tell if it has
if (propertySet == null || propertySet.booleanValue())
{
request.setAttribute("timecardSummaries", PropertyUtils.getProperty(form, "timecardSummaries"));
}
}
final boolean submitterBackingListReadable = PropertyUtils.isReadable(form, "submitterBackingList");
if (submitterBackingListReadable)
{
Object backingList = PropertyUtils.getProperty(form, "submitterBackingList");
request.setAttribute("submitterBackingList", backingList);
}
final boolean approverBackingListReadable = PropertyUtils.isReadable(form, "approverBackingList");
if (approverBackingListReadable)
{
Object backingList = PropertyUtils.getProperty(form, "approverBackingList");
request.setAttribute("approverBackingList", backingList);
}
final boolean statusBackingListReadable = PropertyUtils.isReadable(form, "statusBackingList");
if (statusBackingListReadable)
{
Object backingList = PropertyUtils.getProperty(form, "statusBackingList");
request.setAttribute("statusBackingList", backingList);
}
}
}
catch (final Throwable throwable)
{
throw new ServletException(throwable);
}
}
}