org.fourfive.engine2.util.ReportServletWorker.java Source code

Java tutorial

Introduction

Here is the source code for org.fourfive.engine2.util.ReportServletWorker.java

Source

/*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing  rights and limitations under the
* License.
*
* The Original Code is fourfive code, released 12 July 2003.
*
* The Initial Developer of the Original Code is Jacek.
*
* Portions created by the Initial Developer are Copyright (C) 2003 Jacek. All Rights Reserved.
*
* Contributor(s):
* -
* check http://www.fourfive.org for the latest version of this file.
* Written by Jacek.
*/
package org.fourfive.engine2.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import java.util.TreeSet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.fourfive.adt.I_Report;
import org.fourfive.adt.SerialHashtab;
import org.fourfive.config.report.easy.Column;
import org.fourfive.config.report.easy.Columns;
import org.fourfive.config.report.easy.EasyReport;
import org.fourfive.engine2.component.ReportCell;
import org.fourfive.engine2.component.ReportData;
import org.fourfive.exceptions.SerialHashtabException;
import org.fourfive.factory.CacheFactory;
import org.fourfive.factory.ClusterFactory;
import org.fourfive.factory.ParserFactory;
import org.fourfive.factory.RequestResolverFactory;
import org.fourfive.factory.ResourceFactory;
import org.fourfive.factory.SecurityFactory;
import org.fourfive.highservice.LocalManager2;
import org.fourfive.kernel.ARCCommonsLogger;
import org.fourfive.kernel.DefaultKernel;
import org.fourfive.kernel.ReportDataUtil;
import org.fourfive.lowservice.BasicExceptionHandler;
import org.fourfive.lowservice.DefaultRequestResolver;
import org.fourfive.tree.ArcTreeReport;
import org.fourfive.tree.TreeView;
import org.fourfive.util.InterFrameWriteHelper;
import org.fourfive.webobjects.SimpleReportReport;
import org.fourfive.webobjects.SimpleReportService;

import com.manthan.arc.autoquery.Report;
import com.manthan.arc.config.kpimodel.ViewDefinition;
import com.manthan.arc.ui.ARCReportUtil;
import com.manthan.exception.ARCException;
import com.manthan.promax.db.ApplicationConfig;
import com.manthan.promax.report.UsageConstants;
import com.manthan.promax.report.UsageProcess;
import com.manthan.promax.security.Mailer;
import com.manthan.promax.util.ExcelUtil;

/* Changelog
 * ==========================================
 * created on 02.08.2003
 *
 */

/**<code>ReportServlet</code>
 * @author Jacek
 * @version 1.0
 * @since 1.0
 */
public class ReportServletWorker implements Names, UsageConstants {
    public static final String WEB_XML_NAME = "report";
    protected String connector = "?";
    private String configurationFileName;
    private DefaultKernel kernel;
    private LocalManager2 manager;
    private SerialHashtab params;
    private I_Report rep;
    private EasyReport component;
    private ReportData data;

    /*===================================
     * E X P O S E D
     * ==================================
     */
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
        configurationFileName = req.getParameter(DefaultRequestResolver.CONFIGURATION);
        HttpSession session = req.getSession();
        try {
            /*component = ReportUtil.getEasyReportComponent(
                ApplicationConfig.getConfigPath() +
                "/dynamic/config/" +
                req.getParameter("configuration"));*/

            if ((Names.CSV_SELL.equals(req.getParameter(Names.OUTPUT_TYPE)))
                    || (Names.CSV_ALL.equals(req.getParameter(Names.OUTPUT_TYPE)))) {
                if (req.getParameter("opt").equals("print")) {
                    res.setContentType("application/vnd.ms-excel");
                } else {
                    res.setContentType("application/x-download");
                    res.setHeader("Content-Disposition", "attachment; filename=report.xls");
                }

                //ServletOutputStream sos = res.getOutputStream();
                ReportData rd = null;
                if (null != session.getAttribute("Rdata")) {
                    rd = (ReportData) session.getAttribute("Rdata");
                    component = rd.getReportDef();
                    writeExcelToOut(rd, res.getOutputStream(), null, component, req);
                }

            }
        } catch (Exception e) {
            //e.printStackTrace();
            res.setContentType("text/html");

            PrintWriter writer = res.getWriter();
            writer.println("<HTML><BODY>");

            writer.println(new BasicExceptionHandler().constructErrorMessage(e));
            writer.println("</BODY></HTML>");
            writer.flush();
            writer.close();
        }
    }

    // nikhil ===================================>
    // method added to get the report data object then we can display the
    // data how we want to display in jsp file
    public ReportData getReportData(HttpServletRequest req, HttpServletResponse res)
            throws ARCException, Exception {
        try {
            HttpSession session = req.getSession();

            if ((req.getAttribute("CALL_FROM_TREE") == null) && null == session.getAttribute("reportType")) {
                ReportData data = (ReportData) session.getAttribute("Rdata");
                if (req.getParameter(ConfigConstants.ORDERBY) != null && session.getAttribute("Rdata") != null) {
                    ReportDataComparator comparator = new ReportDataComparator();
                    String oType = req.getParameter(ConfigConstants.ORDER_BY_TYPE);
                    int orderByType = Integer.parseInt(oType);

                    //setting sort mode asc or desc
                    comparator.setMode(orderByType);

                    String orderBy = req.getParameter(ConfigConstants.ORDERBY);

                    // setting colindex for sorting
                    comparator.setSortColumnIndex(Integer.parseInt(orderBy));

                    ArrayList newList = new ArrayList();

                    ArrayList rows = (ArrayList) data.getRows();

                    for (int i = 2; i < rows.size(); i++) {
                        ArrayList row = (ArrayList) rows.get(i);
                        newList.add(row);
                    }

                    Collections.sort(newList, comparator);

                    //System.out.println("treeset size "+treeSet.size());
                    ArrayList sortedRows = new ArrayList();

                    for (int i = 0; i < 2; i++) {
                        ArrayList row = (ArrayList) rows.get(i);
                        sortedRows.add(row);
                    }

                    Iterator iterator = newList.iterator();

                    while (iterator.hasNext()) {
                        ArrayList row = (ArrayList) iterator.next();
                        sortedRows.add(row);
                    }

                    data.setRows(sortedRows);

                    Properties props = new Properties();

                    for (Enumeration e = req.getParameterNames(); e.hasMoreElements();) {
                        String param = (String) e.nextElement();
                        String paramVal = req.getParameter(param);
                        props.put(param, paramVal);
                    }

                    EasyReport eReport = data.getReportDef();

                    // sorting eReport w.r.t column position
                    Column[] columns = eReport.getDefinition().getSelect().getColumns().getColumn();
                    TreeSet colTreeSet = new TreeSet(new EasyReportColumnComparator());

                    for (int i = 0; i < columns.length; i++) {
                        colTreeSet.add(columns[i]);
                    }

                    Column[] sortedCols = new Column[columns.length];
                    iterator = colTreeSet.iterator();

                    int cIndex = 0;

                    while (iterator.hasNext()) {
                        sortedCols[cIndex] = (Column) iterator.next();
                        cIndex += 1;
                    }

                    eReport.getDefinition().getSelect().getColumns().setColumn(sortedCols);

                    // end of sorting eReport w.r.t column position.
                    /*DefaultKernel kernel = new DefaultKernel(
                        req,
                        res,
                        null,
                        connector,
                        WEB_XML_NAME,
                        null,
                        null);
                    kernel.addSortingURL(data, props, eReport);
                    //ReportDataUtil.handleSpecialReport(eReport, req);
                        
                    // Murali C - as part of Handling ID version
                    if(eReport.getDefinition().getSelect().getColumns().getColumn(0).getId() != null &&
                        !eReport.getDefinition().getSelect().getColumns().getColumn(0).getId().equals(""))
                    {
                    data = ReportDataUtil.proMaxReportFormater(data, eReport, req, session, props, true);
                    }else
                    {
                    data = ReportDataUtil.proMaxReportFormater(data, eReport, req, session, props);
                    }   */
                    TreeView view = new TreeView();
                    ArcTreeReport treeData = view.setArcTree(data, 1, data.getReportDef());
                    ArrayList nonCurrColumns = view.getNonCurrencyColumns(data, data.getReportDef());
                    treeData.setNonCurrencyColumns(nonCurrColumns);
                    req.getSession().setAttribute(TreeView.TREE_REPORT_DATA, treeData);
                    ;
                    return data;
                }
                if (req.getParameter("job") != null && (req.getParameter("job").equalsIgnoreCase("easysearch"))
                        && session.getAttribute("Rdata") != null) {
                    ARCReportUtil arcutil = new ARCReportUtil();
                    arcutil.formatCellColor(req);
                    arcutil.destroyObjects();
                    return data;
                } else if (req.getParameter("job") != null
                        && (req.getParameter("job").equalsIgnoreCase("hideColumn"))) {
                    return data;
                }
                // by rasmit
                // Is for the finalForecast grid display of Sales Forecasting
                else if (req.getParameter("job") != null
                        && (req.getParameter("job").equalsIgnoreCase("salesForecasting"))) {
                    data = new Report().getReportData((ViewDefinition) req.getAttribute("viewDefinition"));

                    req.getSession().removeAttribute("Rdata");
                    req.getSession().setAttribute("Rdata", data);

                    TreeView view = new TreeView();
                    ArcTreeReport treeData = view.setArcTree(data, 1, data.getReportDef());
                    ArrayList nonCurrColumns = view.getNonCurrencyColumns(data, data.getReportDef());
                    treeData.setNonCurrencyColumns(nonCurrColumns);

                    req.getSession().removeAttribute(TreeView.TREE_REPORT_DATA);
                    req.getSession().setAttribute(TreeView.TREE_REPORT_DATA, treeData);

                    return data;
                }
            }

            HashMap viewDetails = ApplicationConfig.getViewDetails();

            if (req.getParameter("view_id") == null && null != session && null != session.getAttribute("Viewid")) {
                HashMap viewDetail = (HashMap) viewDetails.get(session.getAttribute("Viewid"));
            } else {
                HashMap viewDetail = null;
                if (req.getAttribute("view_id") != null
                        && req.getAttribute("view_id").toString().trim().length() > 0
                        && req.getAttribute("callForMappedGraph") != null
                        && req.getAttribute("callForMappedGraph").toString().equalsIgnoreCase("true")) {
                    viewDetail = (HashMap) viewDetails.get(req.getAttribute("view_id"));
                } else {
                    viewDetail = (HashMap) viewDetails.get(req.getParameter("view_id"));
                }

                ReportData data = getReportData(req, res, (String) viewDetail.get("XML_NAME"));
            }
            TreeView view = new TreeView();
            ArcTreeReport treeData = view.setArcTree(data, 1, data.getReportDef());
            ArrayList nonCurrColumns = view.getNonCurrencyColumns(data, data.getReportDef());
            treeData.setNonCurrencyColumns(nonCurrColumns);
            if (null == req.getAttribute("callForMappedGraph")) {
                req.getSession().setAttribute(TreeView.TREE_REPORT_DATA, treeData);
                req.getSession().setAttribute("MAX_LEVEL", new Integer(1));
                req.getSession().setAttribute("NAME_KEY", data.getReportDef().getTitle().getValue());
            }
            return data;
        } catch (ARCException e) {
            throw e;
        } catch (Exception e) {
            ARCException ae = new ARCException("arc.error.building.report.data.failed", new String[] {});
            ae.setDetails(e);
            throw ae;
        }
    }

    // Replicated method for BCM which bypasses the security
    public ReportData getReportDataForBCM(HttpServletRequest req, HttpServletResponse res) throws Exception {
        com.manthan.promax.security.SecurityEngine.isSessionOver(req, res, "login.jsp");

        req.setAttribute("CALL_FROM_KPI_PUBLISHER", new Boolean(true));
        SerialHashtab params = new SerialHashtab();

        //String configurationFileName = config_file;
        // System.out.println("#########################################");
        // System.out.println("Processing - '"+config_file+"' - for BCM");
        // System.out.println("#########################################");
        HttpSession session = req.getSession();

        kernel = new DefaultKernel(req, res, null, connector, WEB_XML_NAME, null, null);

        manager = new LocalManager2(CacheFactory.EASY_CACHE, ResourceFactory.EASY_RESOURCE,
                ClusterFactory.NO_CLUSTER, RequestResolverFactory.DEFAULT_RESOLVER,
                ParserFactory.EASY_REPORT_CASTOR, SecurityFactory.EASY_SECURITY, kernel);

        try {
            /*if (req.getParameter(DefaultRequestResolver.USERNAME) != null)
                params.put(
                        DefaultRequestResolver.USERNAME,
                        req.getParameter(DefaultRequestResolver.USERNAME));
            if (req.getParameter(DefaultRequestResolver.USERID) != null)
                params.put(
                        DefaultRequestResolver.USERID,
                        req.getParameter(DefaultRequestResolver.USERID));
            if (req.getParameter(Names.NEW_QUERY) != null)
                params.put(Names.NEW_QUERY, req.getParameter(Names.NEW_QUERY));*/
            if (req.getParameter(Names.NO_CACHE) != null) {
                params.put(Names.NO_CACHE, req.getParameter(Names.NO_CACHE));
            }

            /*if (req.getParameter(DefaultRequestResolver.PASSWORD) != null)
                params.put(
                        DefaultRequestResolver.PASSWORD,
                        req.getParameter(DefaultRequestResolver.PASSWORD));*/
            if (req.getParameter(InterFrameWriteHelper.URT_REDIRECT) != null) {
                params.put(InterFrameWriteHelper.URT_REDIRECT,
                        req.getParameter(InterFrameWriteHelper.URT_REDIRECT));
            }

            params.put(DefaultRequestResolver.CLIENTIP, req.getRemoteAddr());
            params.put(DefaultRequestResolver.SERVLET_NAME, WEB_XML_NAME);
        } catch (SerialHashtabException e) {
            e.printStackTrace();
        }

        try {
            //rep = manager.getReport(configurationFileName, params);
            EasyReport easyReport = (EasyReport) req.getSession().getAttribute("EASYREPORT");

            rep = kernel.execute(new SimpleReportService((EasyReport) easyReport.clone()), params);
            data = ((SimpleReportReport) rep).getReportData();
            session.removeAttribute("NoExtraAND");
            session.removeAttribute("Addfilters");

            if (null == session.getAttribute("reportType")) {
                session.removeAttribute("Rdata");
                session.setAttribute("Rdata", data);
            }

            return data;
        } catch (Exception e) {
            e.printStackTrace();
            if (new BasicExceptionHandler().constructErrorMessage(e).equals("Service not allowed for the user.")
                    || new BasicExceptionHandler().constructErrorMessage(e).equals("Authentication Exception")) {
                String Msg = new BasicExceptionHandler().constructErrorMessage(e);

                // System.out.println(">>>>>>>>Adding Error Message=" +Msg);
                req.setAttribute("errorMsg", Msg);

                //writer.println("<script language='JavaScript' type='text/JavaScript'>");
                //writer.println("alert('You are not Authorised to view this report \n" +Msg +"')");
                //writer.println("</script>");
            } else {
                res.setContentType("text/html");

                PrintWriter writer = res.getWriter();
                writer.println("<HTML><BODY>");
                writer.println(new BasicExceptionHandler().constructErrorMessage(e));
                writer.println("</BODY></HTML>");
                writer.flush();
                writer.close();
            }
        }

        return null;
    }

    // end of replicated method
    public ReportData getReportData(HttpServletRequest req, HttpServletResponse res, boolean f) throws Exception {
        if (f == true) {
            return getReportData(req, res, req.getParameter(DefaultRequestResolver.CONFIGURATION));
        } else {
            HttpSession session = req.getSession();
            session.setAttribute("Addfilters", "no");
            session.setAttribute("NoExtraAND", "yes");
            session.setAttribute("NoOrderBy", "yes");

            return getReportData(req, res, req.getParameter(DefaultRequestResolver.CONFIGURATION));
        }
    }

    public ReportData getReportData(HttpServletRequest req, HttpServletResponse res, String config_file, boolean f)
            throws Exception {
        if (f == true) {
            return getReportData(req, res, config_file);
        } else {
            //System.out.println("----------->>>>>>>>>>>>>>>>>>>>>Calling new");
            HttpSession session = req.getSession();
            session.setAttribute("Addfilters", "no");
            session.setAttribute("NoExtraAND", "yes");
            session.setAttribute("NoOrderBy", "yes");

            return getReportData(req, res, config_file);
        }
    }

    public ReportData getReportData(HttpServletRequest req, HttpServletResponse res, String config_file,
            String treeCall) throws Exception {
        req.setAttribute("CALL_FROM_TREE", "YES");

        return getReportData(req, res, config_file);
    }

    public ReportData getReportData(HttpServletRequest req, HttpServletResponse res, String config_file)
            throws ARCException, Exception {

        try {
            HttpSession session = req.getSession(false);
            java.util.Date dt = new java.util.Date();

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd 'at' HH:mm:ss SSS");

            String jStartTime = sdf.format(new java.util.Date(System.currentTimeMillis()));
            long st = dt.getTime();
            ARCCommonsLogger.printDebug("####################################################");
            ARCCommonsLogger
                    .printDebug("Process started at:" + sdf.format(new java.util.Date(System.currentTimeMillis())));
            // processing sorting..

            //   Murali C - 31-03-2006 - Added as part of capturing activity.
            if (session.getAttribute("ViewUsageTimeIn") != null) {
                session.removeAttribute("ViewUsageTimeIn");
            }

            if (session.getAttribute("DATA_SET") != null) {
                session.removeAttribute("DATA_SET");
            }

            if (session.getAttribute("QRY_START_TIME") != null) {
                session.removeAttribute("QRY_START_TIME");
            }

            if (session.getAttribute("QRY_END_TIME") != null) {
                session.removeAttribute("QRY_END_TIME");
            }

            if (session.getAttribute("FRM_START_TIME") != null) {
                session.removeAttribute("FRM_START_TIME");
            }

            if (session.getAttribute("FRM_END_TIME") != null) {
                session.removeAttribute("FRM_END_TIME");
            }

            if (Mailer.getPropValue("debug_mode") != null) {
                if (Mailer.getPropValue("debug_mode").equalsIgnoreCase("true")) {
                    //  Murali C - 31-03-2006 - Added as part of capturing activity.
                    Timestamp time_in = null;

                    if (session.getAttribute("reportType") == null && null == req.getAttribute("SUMMARY_CALL")) {
                        time_in = UsageProcess.formatDateTime();

                        if (time_in != null) {
                            session.setAttribute("ViewUsageTimeIn", time_in);
                        }
                    }
                }
            }

            // end of sorting..
            req.setAttribute("configXML", config_file);
            if (null == req.getParameter("fromMobileDashboard")) {
                com.manthan.promax.security.SecurityEngine.isSessionOver(req, res, "login.jsp");
            }
            SerialHashtab params = new SerialHashtab();
            String configurationFileName = config_file;

            ARCCommonsLogger.printConsole("#########################################");
            if (req.getParameter("view_id") == null) {
                System.out.println("req.getParameter(view_id) " + req.getParameter("view_id"));
                ARCCommonsLogger.printConsole("Processing : " + config_file + " For view : "
                        + ((HashMap) ((HashMap) com.manthan.promax.db.ApplicationConfig.getViewDetails())
                                .get(session.getAttribute("Viewid"))).get("VIEW_NAME").toString());
            } else {
                ARCCommonsLogger.printConsole("Processing : " + config_file + " For view : "
                        + ((HashMap) ((HashMap) com.manthan.promax.db.ApplicationConfig.getViewDetails())
                                .get(req.getParameter("view_id"))).get("VIEW_NAME").toString()
                        + " : and View ID : " + req.getParameter("view_id"));
            }
            ARCCommonsLogger.printConsole("#########################################");

            //###### DO THE SECURITY CHECKING  FOR XML ##############
            int SecurityLavel = 0;

            if (null != session.getAttribute("SecurityL")) {
                SecurityLavel = Integer.parseInt("" + session.getAttribute("SecurityL"));
            }

            boolean isTreeCall = false;
            boolean status = true;

            if (null != req.getAttribute("TREECALL")) {
                isTreeCall = ((Boolean) req.getAttribute("TREECALL")).booleanValue();
            }

            //################ END #########################
            kernel = new DefaultKernel(req, res, configurationFileName, connector, WEB_XML_NAME, null, null);

            manager = new LocalManager2(CacheFactory.EASY_CACHE, ResourceFactory.EASY_RESOURCE,
                    ClusterFactory.NO_CLUSTER, RequestResolverFactory.DEFAULT_RESOLVER,
                    ParserFactory.EASY_REPORT_CASTOR, SecurityFactory.EASY_SECURITY, kernel);

            if (req.getParameter(Names.NO_CACHE) != null) {
                params.put(Names.NO_CACHE, req.getParameter(Names.NO_CACHE));
            }

            /*if (req.getParameter(DefaultRequestResolver.PASSWORD) != null)
                params.put(
                        DefaultRequestResolver.PASSWORD,
                        req.getParameter(DefaultRequestResolver.PASSWORD));*/
            if (req.getParameter(InterFrameWriteHelper.URT_REDIRECT) != null) {
                params.put(InterFrameWriteHelper.URT_REDIRECT,
                        req.getParameter(InterFrameWriteHelper.URT_REDIRECT));
            }

            params.put(DefaultRequestResolver.CLIENTIP, req.getRemoteAddr());
            params.put(DefaultRequestResolver.SERVLET_NAME, WEB_XML_NAME);

            //try {
            rep = manager.getReport(configurationFileName, params);
            data = ((SimpleReportReport) rep).getReportData();
            session.removeAttribute("NoExtraAND");
            session.removeAttribute("Addfilters");

            /*GeneralGraphBuilder graphbuilder = new GeneralGraphBuilder( data,session );
            if(null!=session.getAttribute("SUMMARY_CHART_0")){
            ChartDetails chartDetails=(ChartDetails)session.getAttribute("SUMMARY_CHART_0");
            if(data.getChartXmlOutput() != null && data.getChartXmlOutput().trim().length()>0 ){
               chartDetails.setGraphXml(data.getChartXmlOutput());
            }
                
            }*/

            if (null == session.getAttribute("reportType") && req.getParameter("job") == null) {
                ARCCommonsLogger.printConsole("caching ReportData.........");

                if (null != req.getAttribute("callForMappedGraph")
                        && req.getAttribute("callForMappedGraph").toString().equalsIgnoreCase("true")) {
                    session.removeAttribute("Gdata");
                    session.setAttribute("Gdata", data);
                } else {
                    session.removeAttribute("Rdata");
                    session.removeAttribute("Gdata");
                    session.setAttribute("Rdata", data);
                }
            }

            java.util.Date dt2 = new java.util.Date();
            //System.out.println("exe Process : "+(dt2.getTime()-st));

            ARCCommonsLogger.printDebug("Total Process Taken in sec : " + (dt2.getTime() - st) / 1000.00);
            ARCCommonsLogger.printDebug("####################################################\n");
            return data;
            /* } catch (Exception e) {
                 if (
            new BasicExceptionHandler().constructErrorMessage(e).equals(
                    "Service not allowed for the user.") ||
                new BasicExceptionHandler().constructErrorMessage(e).equals(
                    "Authentication Exception")) {
            String Msg = new BasicExceptionHandler().constructErrorMessage(
                    e);
                
            // System.out.println(">>>>>>>>Adding Error Message=" +Msg);
            req.setAttribute("errorMsg", Msg);
                
            //writer.println("<script language='JavaScript' type='text/JavaScript'>");
            //writer.println("alert('You are not Authorised to view this report \n" +Msg +"')");
            //writer.println("</script>");
                 } else {
            res.setContentType("text/html");
                
            PrintWriter writer = res.getWriter();
            writer.println("<HTML><BODY>");
            writer.println(
                new BasicExceptionHandler().constructErrorMessage(e));
            writer.println("</BODY></HTML>");
            writer.flush();
            writer.close();
                 }
             }*/
        } catch (ARCException e) {
            throw e;
        } catch (Exception e) {
            ARCException ae = new ARCException("arc.error.building.report.data.failed", new String[] {});
            ae.setDetails(e);
            throw ae;
        }

    }

    // nihkil : getter methods to get the values for all members added
    public DefaultKernel getKernel() {
        return kernel;
    }

    public String getConfigurationFileName() {
        return configurationFileName;
    }

    public LocalManager2 getManager() {
        return manager;
    }

    public SerialHashtab getParams() {
        return params;
    }

    public I_Report getRep() {
        return rep;
    }

    public EasyReport getComponent() {
        return component;
    }

    public ReportData getReportData() {
        return data;
    }

    // method added to export the report data to excel
    public String exportDataToExcel(HttpServletRequest req, HttpServletResponse res) throws Exception {
        ReportData rd = null;
        /*if(null!=((HttpSession)req.getSession()).getAttribute("Rdata")){
           rd=(ReportData)((HttpSession)req.getSession()).getAttribute("Rdata");
        }else{
           ((SimpleReportReport) rep).getService().getReport();
           rd=(ReportData)((SimpleReportReport) rep).getReportData();
        }*/

        res.setContentType("application/vnd.ms-excel");

        ServletOutputStream sos = res.getOutputStream();
        writeExcelToOut(rd, sos, kernel.getParamList(), component, req);

        return null;
    }

    public void writeExcelToOut(ReportData data, ServletOutputStream out, ArrayList paramList, EasyReport component,
            HttpServletRequest req) throws Exception {
        HttpSession session = req.getSession();
        HSSFWorkbook wb = new HSSFWorkbook();
        ExcelUtil excelUtil = new ExcelUtil(wb);
        excelUtil.setSession(session);
        // Murali C
        HashMap dataformat = null;
        ArrayList crosstabColumnIds = null;
        //
        //         ArrayList nonCurrItems = ReportDataUtil.getNotCurrency(data,component);
        Columns columns = component.getDefinition().getSelect().getColumns();
        Hashtable ht = com.manthan.promax.report.ReportUtil.getLabels(session);
        String reportType = ReportDataUtil.getReportType(component);
        //component.getTitle().getValue()
        //excelUtil.getSheetTitle(component.getTitle().getValue())
        //String title = (String) com.manthan.promax.report.ReportUtil.getLabels(session).get(component.getTitle().getValue());
        String title = component.getTitle().getValue();
        HSSFSheet sheet1 = wb.createSheet(excelUtil.getSheetTitle(title));

        excelUtil.setSheetStyle();
        excelUtil.isExpanded(true);
        excelUtil.getLogo(session.getServletContext());
        int rowStart = 4;
        int colStart = 0;
        HSSFRow titleRow = sheet1.createRow((short) (rowStart));
        HSSFCell titleCell = titleRow.createCell((short) (colStart));
        titleCell.setCellStyle(excelUtil.getTitleStyle());
        titleCell.setCellValue(new HSSFRichTextString(data.getTitle()));
        sheet1.addMergedRegion(new Region(rowStart, (short) (colStart), rowStart, (short) (colStart + 10)));
        rowStart = rowStart + 2;

        HSSFRow selectionRow = sheet1.createRow((short) rowStart);
        selectionRow.setHeightInPoints(40);
        HSSFCell selectionCell = selectionRow.createCell((short) colStart);
        selectionCell.setCellStyle(excelUtil.getSelectionStyle());
        selectionCell.setCellValue(new HSSFRichTextString(excelUtil.getCurrentSelection(req).toString()));
        sheet1.addMergedRegion(new Region(rowStart, (short) (colStart), rowStart, (short) (colStart + 10)));
        rowStart = rowStart + 1;
        int colWidth = 10;

        excelUtil.setPrintAndPageSettings(rowStart + 1, rowStart + 2, title,
                ((ArrayList) data.getRows().get(0)).size());
        excelUtil.setStartWidthColumn(rowStart + 2);

        ArrayList row = (ArrayList) data.getRows().get(0);
        ReportCell rcell = null;

        ArrayList nonVisibleCol = new ArrayList();
        for (int j = 0; j < row.size(); j++) {
            rcell = (ReportCell) row.get(j);
            if (!rcell.getVisible()) {
                nonVisibleCol.add(new Integer(j));
            }
        }

        HSSFCell excel_cell = null;
        HSSFRow excelRow = sheet1.createRow((short) rowStart);
        HashMap crossTabDetails = data.getCrossTabReportDetails();
        if (reportType != null && reportType.equalsIgnoreCase(DefaultKernel.CROSSTAB_REPORT_TYPE)) {
            ArrayList columnList = (ArrayList) crossTabDetails.get("COLUMN_LIST");
            ArrayList growingColumns = (ArrayList) crossTabDetails.get(DefaultKernel.XTAB_DYNAMIC);
            ArrayList staticColumns = (ArrayList) crossTabDetails.get(DefaultKernel.XTAB_STATIC);
            // Murali C
            if (crossTabDetails.get("COLUMN_IDS_LIST") != null) {
                crosstabColumnIds = (ArrayList) crossTabDetails.get("COLUMN_IDS_LIST");
            }

            if (crossTabDetails.get("CROSSTABDATAFORMAT") != null) {
                dataformat = (HashMap) crossTabDetails.get("CROSSTABDATAFORMAT");
            }
            //

            int noGrowingColumns = growingColumns.size();
            int noStaticColumns = staticColumns.size();
            int staticColSpan = noStaticColumns;
            int dynamicColSpan = noGrowingColumns;
            for (int colCount = 0; colCount < staticColumns.size(); colCount++) {
                if (nonVisibleCol.contains(new Integer(colCount))) {
                    staticColSpan--;
                }
            }
            for (int colCount = 0; colCount < growingColumns.size(); colCount++) {
                if (nonVisibleCol.contains(new Integer(colCount + noStaticColumns))) {
                    dynamicColSpan--;

                }
            }

            for (int i = 0; i < columnList.size(); i++) {

                short cellIndex = (short) ((staticColSpan) + (dynamicColSpan * i));
                excel_cell = excelRow.createCell(cellIndex);
                excel_cell.setCellStyle(excelUtil.getHeaderStyle());
                excel_cell.setCellValue(new HSSFRichTextString((String) columnList.get(i)));

                for (short index = (short) (cellIndex + 1); index < cellIndex + dynamicColSpan; index++) {
                    excel_cell = excelRow.createCell(index);
                    excel_cell.setCellStyle(excelUtil.getHeaderStyle());
                }
                sheet1.addMergedRegion(new Region(rowStart, (short) (cellIndex), rowStart,
                        (short) (cellIndex + dynamicColSpan - 1)));
            }

            // we are getting first row for column headers or column titles
        }
        rowStart++;
        sheet1.createFreezePane(2, 10);
        for (int i = 0; i < data.getRows().size(); i++) {
            row = (ArrayList) data.getRows().get(i);
            excelRow = sheet1.createRow((short) (i + rowStart));
            if (i == 0)
                excelRow.setHeightInPoints(45);
            else
                excelRow.setHeightInPoints(20);
            int incr = 0;
            //String dataInString = null;
            for (int j = 0; j < row.size(); j++) {
                ReportCell cell = (ReportCell) row.get(j);
                if (!cell.getName().startsWith("<img") && cell.getVisible()) {

                    String columnTitle = (String) cell.getName();
                    String columnTitleFromProp = "";
                    String datatype = "";
                    try {
                        // Murali C
                        if (null != component.getDefinition().getReportType()
                                && component.getDefinition().getReportType().equalsIgnoreCase("crosstab")) {
                            datatype = dataformat.get(crosstabColumnIds.get(j).toString()).toString();
                        } else {
                            datatype = ((Column) component.getDefinition().getSelect().getColumns().getColumn(j))
                                    .getDataFormat();
                        }

                        double val = Double.parseDouble(cell.getName());

                        HSSFCell dataCell = excelRow.createCell((short) (j + colStart + incr));
                        dataCell.setCellValue(val);
                        if (i == 1) {
                            if (datatype.equalsIgnoreCase("currency")) {
                                dataCell.setCellStyle(excelUtil.getTotalStyle(true));
                            } else if (datatype.equalsIgnoreCase("number")) {
                                dataCell.setCellStyle(excelUtil.getTotalStyle(false));
                            }
                        } else {
                            if (datatype.equalsIgnoreCase("currency")) {
                                dataCell.setCellStyle(excelUtil.getDataStyleFormat());
                            } else if (datatype.equalsIgnoreCase("number")) {
                                dataCell.setCellStyle(excelUtil.getDataStyleFormatLess());
                            } else {
                                dataCell.setCellValue(new HSSFRichTextString(cell.getName()));
                                dataCell.setCellStyle(excelUtil.firstColStyle());
                            }
                        }

                        //dataInString = ""+val;
                    } catch (NumberFormatException ee) {
                        /*if (i==0)
                        {
                            if (reportType == null || !reportType.equalsIgnoreCase(DefaultKernel.CROSSTAB_REPORT_TYPE)) {
                         if( columns.getColumn(j).getId() != null && null != ht.get(columns.getColumn(j).getId().toLowerCase()))
                         {
                             columnTitleFromProp = (String) (ht.get(columns.getColumn(j).getId().toLowerCase()));
                         }else{
                             columnTitleFromProp = columnTitle;
                         }
                            }else{
                         ArrayList idsList = (ArrayList) crossTabDetails.get("COLUMN_IDS_LIST");
                        if(idsList.get(j)!=null && ht.get(((String)idsList.get(j)).toLowerCase()) != null){
                            columnTitleFromProp = (String)ht.get(((String)idsList.get(j)).toLowerCase());
                        }else{
                            columnTitleFromProp = columnTitle;
                        }
                            }
                        }
                        else
                        {
                           columnTitleFromProp = columnTitle;
                        }*/
                        columnTitleFromProp = columnTitle;
                        HSSFCell headerCell = excelRow.createCell((short) (j + colStart + incr));
                        if (i == 1) {
                            headerCell.setCellStyle(excelUtil.getTotalStyle(false));
                        } else {
                            if (i == 0)
                                headerCell.setCellStyle(excelUtil.getHeaderStyle());
                            else
                                headerCell.setCellStyle(excelUtil.getDataTextStyle());
                        }
                        headerCell.setCellValue(new HSSFRichTextString(columnTitleFromProp));
                        //dataInString = ""+columnTitleFromProp;
                    }
                } else {
                    incr = incr - 1;
                }
                /*if(dataInString.length()>colWidth)
                {
                   colWidth = dataInString.length();
                }*/

            }

        }
        excelUtil.setWidth();
        //sheet1.setDefaultColumnWidth((short)(10));
        try {
            wb.write(out);
            out.flush();
            out.close();
        } catch (IOException e) {
        }
    }
}

/*
 * $Author: fourfive $
 * $Log: ReportServletWorker.java,v $
 * Revision 1.3  2004/06/23 08:24:33  fourfive
 * minor cosmetic changes
 *
 * Revision 1.2  2004/06/20 08:52:12  fourfive
 * refactoring for support for zeroconf.
 *
 * Revision 1.1  2004/06/19 12:56:45  fourfive
 * refactoring due to the zeroconf beginning of implementation.
 *
 *
 */