Package org.opencustomer.framework.webapp.action

Source Code of org.opencustomer.framework.webapp.action.ChooseAction

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.db.util.Sort;
import org.opencustomer.framework.webapp.panel.EntityPanel;
import org.opencustomer.framework.webapp.panel.Panel;
import org.opencustomer.framework.webapp.struts.Action;

public abstract class ChooseAction<E extends ChooseForm> extends Action<E>
{
    private static Logger log = Logger.getLogger(ChooseAction.class);
   
    public final static String LIST_KEY = "list";

    public final static String LISTSCROLL_KEY = "listScroll";
   
    @Override
    public final ActionForward execute(ActionMapping mapping, E form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        if (log.isDebugEnabled())
            log.debug("choose action");

        EntityPanel panel = null;
       
        if(Panel.getPanelStack(request).isTypeOnTop(Panel.Type.CHOOSE)) {
            panel = (EntityPanel)Panel.getPanelStack(request).peek();
        } else if(!isUnderEditPanel() || Panel.getPanelStack(request).isTypeOnTop(Panel.Type.EDIT)) {
            EntityPanel mainPanel = (EntityPanel)Panel.getPanelStack(request).peek();

            panel = createPanel(mainPanel, form, request, response);
           
            Panel.getPanelStack(request).push(panel);
        } else {
            log.error("missing valid panel: "+Panel.getPanelStack(request).peek());
        }

        boolean back = false;
        ActionMessages errors = new ActionMessages();
       
        if (form.getId() > 0) {
            if (log.isDebugEnabled())
                log.debug("choose entity");
           
            chooseEntity(panel, form, errors, request, response);
            if(errors.isEmpty() && Panel.getPanelStack(request).peek(2) != null)
                back = true;
        }
        else if (form.getDoBack().isSelected()) {
            if (log.isDebugEnabled())
                log.debug("go back");
           
            back = true;
        }

        if (!back)
            search(panel, form, errors, request, response);

        if(!errors.isEmpty())
            this.saveErrors(request, errors);
       
        ActionForward forward = mapping.getInputForward();
        if(back){
            Panel.getPanelStack(request).pop();
            forward = Panel.getForward(Panel.getPanelStack(request).peek().getPath(), request);
        }

        if (log.isDebugEnabled())
            log.debug("forward: "+forward);
       
        return forward;
    }
   
    protected Sort extractSort(Panel panel, E form, int defaultSort) {
        Sort sort = (Sort)panel.getAttribute("sort");
       
        if (form.getSort() != null) {
            sort = Sort.parseParam(form.getSort());
        }
       
        if(sort == null) {
            sort = new Sort(defaultSort, true);
        }
       
        panel.setAttribute("sort", sort);
       
        return sort;
    }
   
    protected abstract void chooseEntity(EntityPanel panel, E form, ActionMessages errors, HttpServletRequest request, HttpServletResponse response);
   
    protected abstract void search(EntityPanel panel, E form, ActionMessages errors, HttpServletRequest request, HttpServletResponse response);
   
    protected abstract EntityPanel createPanel(EntityPanel mainPanel, E form, HttpServletRequest request, HttpServletResponse response);  

    protected boolean isUnderEditPanel() {
        return true;
    }
}
TOP

Related Classes of org.opencustomer.framework.webapp.action.ChooseAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.