Java tutorial
/* * 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. * * */