You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ha...@apache.org on 2008/06/07 23:10:07 UTC

svn commit: r664387 - /myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java

Author: hazems
Date: Sat Jun  7 14:10:06 2008
New Revision: 664387

URL: http://svn.apache.org/viewvc?rev=664387&view=rev
Log:
Adding more features to the Exporter component.

Modified:
    myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java?rev=664387&r1=664386&r2=664387&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/ExcelExporterUtil.java Sat Jun  7 14:10:06 2008
@@ -27,9 +27,9 @@
 import javax.faces.component.ValueHolder;
 import javax.faces.component.html.HtmlDataTable;
 import javax.faces.context.FacesContext;
-import javax.portlet.RenderResponse;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.myfaces.custom.datascroller.HtmlDataScroller;
 import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFRow;
@@ -50,19 +50,6 @@
 		}
 	}
 
-	private static void addColumnValues(HSSFSheet sheet, List columns,
-			HtmlDataTable dataTable) {
-		for (int i = 0; i < dataTable.getRowCount(); i++) {
-			dataTable.setRowIndex(i);
-			HSSFRow row = sheet.createRow(i + 1);
-			for (int j = 0; j < columns.size(); j++) {
-				UIColumn column = (UIColumn) columns.get(j);
-				addColumnValue(row, (UIComponent) column.getChildren().get(0),
-						j);
-			}
-		}
-	}
-
 	private static List getColumns(HtmlDataTable table) {
 		List columns = new ArrayList();
 		for (int i = 0; i < table.getChildCount(); i++) {
@@ -83,45 +70,140 @@
 					.getCurrentInstance(), component);
 			cell.setCellValue(stringValue);
 		}
-	}	
-
-	public static void generateEXCEL(HSSFWorkbook workBook,
-			HttpServletResponse response, String filename) throws IOException {
-		response.setContentType("application/vnd.ms-excel");
-		response.setHeader("Expires", "0");
-		response.setHeader("Cache-Control",
-				"must-revalidate, post-check=0, pre-check=0");
-		response.setHeader("Pragma", "public");
-		response.setHeader("Content-disposition", "attachment;filename="
-				+ filename + ".xls");
-
-		workBook.write(response.getOutputStream());
-	}
-
-	public static void generateEXCEL(HSSFWorkbook workBook,
-			RenderResponse response, String filename) throws IOException {
-		response.setContentType("application/vnd.ms-excel");
-		response.setProperty(RenderResponse.EXPIRATION_CACHE, "0");
-		response.setProperty("Cache-Control",
-				"must-revalidate, post-check=0, pre-check=0");
-		response.setProperty("Pragma", "public");
-		response.setProperty("Content-disposition", "attachment;filename="
-				+ filename + ".xls");
-
-		workBook.write(response.getPortletOutputStream());
-	}
-
-	public static HSSFWorkbook generateExcelTableModel(
-			FacesContext facesContext, HtmlDataTable table) {
-		HSSFWorkbook workbook = new HSSFWorkbook();
-		HSSFSheet sheet = workbook.createSheet(table.getId());
-		List columns = getColumns(table);
-		int currentRowIndex = table.getRowIndex();
-
-		addColumnHeaders(sheet, columns);
-		addColumnValues(sheet, columns, table);
-
-		table.setRowIndex(currentRowIndex);
-		return workbook;
 	}
+    
+    /*
+     * This method is used for adding the columns values to the HSSFSheet.
+     */
+    private static void generateTableContent(FacesContext facesContext,
+            HSSFSheet sheet, List columns, HtmlDataScroller dataScroller,
+            boolean selectedPage) {
+
+        HtmlDataTable tomahawkDataTable = ExporterUtil
+                .getDataTableFromDataScroller(facesContext, dataScroller);
+        
+        int numberOfColumns = columns.size();
+        int numberOfRows = dataScroller.getRowCount();        
+        int startFrom = 0;
+        int currentIndex = 0;
+        int endAt = numberOfRows;
+
+        /* if the current page is selected only, then generate only in the report */
+        if (selectedPage) 
+        {
+            startFrom = (dataScroller.getPageIndex() - 1) * dataScroller.getRows();
+            endAt = startFrom + dataScroller.getRows();
+            
+            if(endAt > numberOfRows) 
+            {
+                endAt = numberOfRows;
+            }
+            
+        }          
+    
+        /* fill the table with the data. */
+        for (int i = startFrom; i < endAt; ++i) {
+            tomahawkDataTable.setRowIndex(i);
+            HSSFRow row = sheet.createRow(currentIndex++);
+            for (int j = 0; j < numberOfColumns; ++j) {
+                UIColumn column = (UIColumn) columns.get(j);
+                addColumnValue(row, (UIComponent) column.getChildren().get(0),
+                        j);
+            }
+        }
+    }    
+    
+    /*
+     * This utility method is used for writing the excelModel (generatedExcel)
+     * to the response (response) and uses the (fileName) as the generated file 
+     * name.
+     */
+    private static void writeExcelToResponse(HttpServletResponse response,
+            HSSFWorkbook generatedExcel, String fileName) throws IOException {
+
+        /* write the model to the stream */
+        response.setContentType("application/vnd.ms-excel");
+        response.setHeader("Expires", "0");
+        response.setHeader("Cache-Control",
+                "must-revalidate, post-check=0, pre-check=0");
+        response.setHeader("Pragma", "public");
+        response.setHeader("Content-disposition", "attachment;filename="
+                + fileName + ".xls");
+
+        generatedExcel.write(response.getOutputStream());
+    }
+    
+    /*
+     * This utility method is used for generating the (HSSFWorkbook) 
+     * excel table model from the passed (HtmlDataTable).
+     * @param facesContext
+     * @param table the passed (HtmlDataTable).
+     * @return the (HSSFWorkbook) object. 
+     */
+    private static HSSFWorkbook generateExcelTableModel(
+            FacesContext facesContext, HtmlDataScroller dataScroller,
+            boolean selectedPage) {
+  
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HtmlDataTable tomahawkDataTable = ExporterUtil
+                .getDataTableFromDataScroller(facesContext, dataScroller);        
+        HSSFSheet sheet = workbook.createSheet(tomahawkDataTable.getId());
+        List columns = getColumns(tomahawkDataTable);
+        int currentRowIndex = tomahawkDataTable.getRowIndex();
+
+        addColumnHeaders(sheet, columns);
+        generateTableContent(facesContext, sheet, columns, dataScroller,
+                selectedPage);
+
+        tomahawkDataTable.setRowIndex(currentRowIndex);
+        return workbook;
+    }    
+
+    /**
+     * This utility method is used for generating the excel 
+     * table to the HttpServletResponse object. 
+     * @param workBook
+     * @param response
+     * @param fileName
+     * @throws IOException
+     */    
+	public static void generateEXCEL(FacesContext facesContext,
+            HttpServletResponse response, String fileName,
+            HtmlDataScroller dataScroller, boolean selectedPage)
+            throws IOException {
+
+        /* get the dataScroller dataTable object */
+        HtmlDataTable tomahawkDataTable = ExporterUtil
+                .getDataTableFromDataScroller(facesContext, dataScroller);
+
+        /*
+         * By default if the fileName is not specified, then use the
+         * table id.
+         */
+        if (fileName == null) 
+        {
+            fileName = tomahawkDataTable.getId();
+        }
+
+        /* generate the excel model */
+        HSSFWorkbook generatedExcel = ExcelExporterUtil
+                .generateExcelTableModel(facesContext, dataScroller,
+                        selectedPage);
+
+        writeExcelToResponse(response, generatedExcel, fileName);
+    }
+
+
+// public static void generateEXCEL(HSSFWorkbook workBook,
+// RenderResponse response, String filename) throws IOException {
+//		response.setContentType("application/vnd.ms-excel");
+//		response.setProperty(RenderResponse.EXPIRATION_CACHE, "0");
+//		response.setProperty("Cache-Control",
+//				"must-revalidate, post-check=0, pre-check=0");
+//		response.setProperty("Pragma", "public");
+//		response.setProperty("Content-disposition", "attachment;filename="
+//				+ filename + ".xls");
+//
+//		workBook.write(response.getPortletOutputStream());
+//	}
 }