Package com.cfinkel.reports.ajax.methods

Source Code of com.cfinkel.reports.ajax.methods.InputChangeHandler

package com.cfinkel.reports.ajax.methods;

import com.cfinkel.reports.ReportSessionInfo;
import com.cfinkel.reports.ajax.beans.InputMarkup;
import com.cfinkel.reports.ajax.exceptions.InvalidSessionException;
import com.cfinkel.reports.web.AttributeNames;
import com.cfinkel.reports.web.WebContext;
import com.cfinkel.reports.wrappers.Input;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import uk.ltd.getahead.dwr.WebContextFactory;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

/**
* $Author:charles $
* $Revision:10429 $
* $Date:2006-07-26 18:00:43 -0400 (Wed, 26 Jul 2006) $
* <p/>
* created:
* User: charles
* Date: Feb 3, 2006
* Time: 4:07:12 PM
*
* handles ajax changed inputs
*/
public class InputChangeHandler {
    private static Logger log = Logger.getLogger(InputChangeHandler.class);

    public static InputMarkup inputChanged(String reportPath, String parentInputName,
                                           String parentValue, String dependentName) throws Exception {

        HttpServletRequest request = setLocalThreadInfo();

        HttpSession session = WebContextFactory.get().getSession();
        ReportSessionInfo reportSessionInfo = getReportSessionInfo(reportPath,session);

        Input input = reportSessionInfo.getReport().getAllInputs().get(parentInputName);
        if (input == null)
            throw new Exception("No input found with name " + parentInputName );

        Input dependentInput = input.getDependents().get(dependentName);
        if (dependentInput == null)
            throw new Exception("Dependent input is null");

        setRequestAttributes(parentInputName, parentValue, request, reportSessionInfo, dependentInput);

        String description = StringUtils.trim( WebContextFactory.get().forwardToString("/includes/input_description.jsp") );
        String control = StringUtils.trim( WebContextFactory.get().forwardToString("/includes/input_control.jsp") );
        return new InputMarkup(description,control);

    }

    private static HttpServletRequest setLocalThreadInfo() {
        HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
        WebContext webContext = new WebContext();
        webContext.set(request,WebContextFactory.get().getHttpServletResponse(),WebContextFactory.get().getServletContext());
        return request;
    }

    private static void setRequestAttributes(String parentInputName, String parentValue,
                                             HttpServletRequest request, ReportSessionInfo reportSessionInfo, Input dependentInput) {

        // add reportSessionInfo to request:
        request.setAttribute(AttributeNames.reportSessionInfo, reportSessionInfo);
        request.setAttribute(AttributeNames.input, dependentInput);
        request.setAttribute(AttributeNames.thisIsAjax, true);

        setParameterMap(parentInputName, parentValue, request);
    }

    /**
     * There should be a better way for dependent inputs to get the parent value...
     * @param parentInputName
     * @param parentValue
     * @param request
     */
    public static void setParameterMap(String parentInputName, String parentValue, HttpServletRequest request) {
        Map<String,String> parentValueMap = new HashMap<String,String>();
        parentValueMap.put(parentInputName,parentValue);
        request.setAttribute(AttributeNames.parentValueMap,parentValueMap);
    }

    private static ReportSessionInfo getReportSessionInfo(String reportPath,HttpSession session) throws Exception {
        Map<String,ReportSessionInfo> reportSessionInfos = (Map<String,ReportSessionInfo>)session.getAttribute(AttributeNames.reportSessionInfos);
        if (reportSessionInfos == null) {
            String error = "No reportSessionInfos in session when trying to get reportSessionInfo with Ajax";
            Exception e = new InvalidSessionException(error);
            log.error(error,e);
            throw e;
        }
        ReportSessionInfo reportSessionInfo = reportSessionInfos.get(reportPath);
        if (reportSessionInfo == null) {
            String error = "No reportSessionInfo in session when trying to get with Ajax";
            Exception e = new InvalidSessionException(error);
            log.error(error,e);
            throw e;
        }
        return reportSessionInfo;
    }

}
TOP

Related Classes of com.cfinkel.reports.ajax.methods.InputChangeHandler

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.