package org.opencustomer.framework.webapp.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.opencustomer.framework.webapp.panel.Panel;
import org.opencustomer.framework.webapp.struts.Action;
public abstract class CommonAction<E extends CommonForm> extends Action<E>
{
private static Logger log = Logger.getLogger(CommonAction.class);
@Override
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping mapping, E form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
if (log.isDebugEnabled())
log.debug("common action");
ActionMessages errors = new ActionMessages();
Panel panel = Panel.getPanelStack(request).peek();
if(panel == null || !getPanelName().equals(panel.getName())) {
panel = createPanel(form, request, response);
panel.setName(getPanelName());
Panel.getPanelStack(request).push(panel);
}
execute(panel, form, mapping, request, response);
if(!errors.isEmpty())
this.saveErrors(request, errors);
return findForward(mapping, form, request, response);
}
protected abstract void execute(Panel panel, E form, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response);
protected abstract Panel createPanel(E form, HttpServletRequest request, HttpServletResponse response);
protected final String getPanelName() {
return this.getClass().getName();
}
protected ActionForward findForward(ActionMapping mapping, E form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
return mapping.getInputForward();
}
}