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:09:44 UTC

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

Author: hazems
Date: Sat Jun  7 14:09:44 2008
New Revision: 664386

URL: http://svn.apache.org/viewvc?rev=664386&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/PDFExporterUtil.java

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/PDFExporterUtil.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/PDFExporterUtil.java?rev=664386&r1=664385&r2=664386&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/PDFExporterUtil.java (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/exporter/util/PDFExporterUtil.java Sat Jun  7 14:09:44 2008
@@ -30,6 +30,7 @@
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.myfaces.custom.datascroller.HtmlDataScroller;
 import org.apache.myfaces.custom.util.ComponentUtils;
 import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
 
@@ -41,130 +42,174 @@
  * This class is a utility class for serving PDF exporting.
  */
 public class PDFExporterUtil {
-	
-	/*
-	 * This method is used for setting the response headers of the pdf.
-	 */
-	private static void setPDFResponseHeaders(HttpServletResponse response,
-			ByteArrayOutputStream byteArrayStream, String fileName)
-			throws IOException {
-
-		// setting response headers.
-		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 + ".pdf");
-
-		// setting the content type.
-		response.setContentType("application/pdf");
-
-		// the contentlength is needed for MSIE.
-		response.setContentLength(byteArrayStream.size());
-
-		// write ByteArrayOutputStream to the ServletOutputStream.
-		ServletOutputStream outputStream = response.getOutputStream();
-
-		byteArrayStream.writeTo(outputStream);
-		outputStream.flush();
-	}		
-	
-	/*
-	 * This method is used for adding the columns headers to the pdfTable.
-	 */
-	private static void addColumnHeaders(PdfPTable pdfTable, List columns) {
-
-		for (int i = 0; i < columns.size(); i++) {
-			UIColumn column = (UIColumn) columns.get(i);
-			UIComponent columnHeaderCell = column.getHeader();
-			if (columnHeaderCell instanceof ValueHolder) {
-				String cellValue = RendererUtils.getStringValue(FacesContext
-						.getCurrentInstance(), columnHeaderCell);
-				pdfTable.addCell(cellValue);
-			}
-		}
-	}	
-	
-	/*
-	 * This method is used for adding the columns values to the pdfTable.
-	 */
-	private static void addColumnValues(PdfPTable pdfTable, List columns,
-			HtmlDataTable dataTable) {
-		
-		int numberOfColumns = columns.size();
-		int numberOfRows = dataTable.getRowCount();
-		
-		for (int i = 0; i < numberOfRows; ++i) {
-			dataTable.setRowIndex(i);
-			for (int j = 0; j < numberOfColumns; ++j) {
-				UIComponent valueHolder = (UIComponent) ((UIColumn) columns
-						.get(j)).getChildren().get(0);
-				if (valueHolder instanceof ValueHolder) {
-					String cellValue = RendererUtils.getStringValue(
-							FacesContext.getCurrentInstance(), valueHolder);
-					pdfTable.addCell(cellValue);
-				}
-			}
-		}
-	}	
-	
-	/*
-	 * This method is used for creating the PDFTable model.
-	 */	
-	public static PdfPTable generatePDFTableModel(FacesContext facesContext,
-			HtmlDataTable dataTable) {
-
-		int numberOfColumns;
-		List columns = null;
-		PdfPTable pdfTable = null;
-
-		// getting the HTMLDataTable Columns.
-		columns = ComponentUtils.getHTMLDataTableColumns(dataTable);
-
-		if (columns.size() == 0) {
-			return null;
-		} else {
-			numberOfColumns = columns.size();
-		}
-
-		// creating the PDF Table.
-		pdfTable = new PdfPTable(numberOfColumns);
-
-		addColumnHeaders(pdfTable, columns);
-
-		addColumnValues(pdfTable, columns, dataTable);
-
-		return pdfTable;
-	}	
-	
-	/*
-	 * This method is responsible for writing the PDF to the response stream.
-	 */
-	public static void generatePDF(FacesContext facesContext,
-			HttpServletResponse response, String fileName,
-			HtmlDataTable dataTable) throws Exception {
-
-		int currentRowIndex;
-		Document document = new Document();		
-		ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
-		PdfWriter.getInstance(document, byteArrayStream);		
-		PdfPTable pdfTable = null;
-
-		currentRowIndex = dataTable.getRowIndex();
-
-		// generate the PDF table model.
-		pdfTable = generatePDFTableModel(facesContext, dataTable);
-		
-		// open the document and write the generated PDF.
-		document.open();
-		document.add(pdfTable);
-		document.close();
 
-		// write the response headers.
-		setPDFResponseHeaders(response, byteArrayStream, fileName);
+    /*
+     * This method is used for setting the response headers of the pdf.
+     */
+    private static void setPDFResponseHeaders(HttpServletResponse response,
+            ByteArrayOutputStream byteArrayStream, String fileName)
+            throws IOException {
+
+        // setting response headers.
+        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 + ".pdf");
+
+        // setting the content type.
+        response.setContentType("application/pdf");
+
+        // the contentlength is needed for MSIE.
+        response.setContentLength(byteArrayStream.size());
+
+        // write ByteArrayOutputStream to the ServletOutputStream.
+        ServletOutputStream outputStream = response.getOutputStream();
+
+        byteArrayStream.writeTo(outputStream);
+        outputStream.flush();
+    }
+
+    /*
+     * This method is used for adding the columns headers to the pdfTable.
+     */
+    private static void generateTableHeader(PdfPTable pdfTable, List columns) {
+
+        for (int i = 0; i < columns.size(); i++) {
+            UIColumn column = (UIColumn) columns.get(i);
+            UIComponent columnHeaderCell = column.getHeader();
+            if (columnHeaderCell instanceof ValueHolder) {
+                String cellValue = RendererUtils.getStringValue(FacesContext
+                        .getCurrentInstance(), columnHeaderCell);
+                pdfTable.addCell(cellValue);
+            }
+        }
+    }
+
+    /*
+     * This method is used for adding the columns values to the pdfTable.
+     */
+    private static void generateTableContent(FacesContext facesContext,
+            PdfPTable pdfTable, List columns, HtmlDataScroller dataScroller,
+            boolean selectedPage) {
+
+        int numberOfColumns = columns.size();
+        int numberOfRows = dataScroller.getRowCount();
+        int startFrom = 0;
+        int endAt = numberOfRows;
+
+        HtmlDataTable tomahawkDataTable = ExporterUtil
+                .getDataTableFromDataScroller(facesContext, dataScroller);
+        
+        
+        /* 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);
+            for (int j = 0; j < numberOfColumns; ++j) {
+                UIComponent valueHolder = (UIComponent) ((UIColumn) columns
+                        .get(j)).getChildren().get(0);
+                if (valueHolder instanceof ValueHolder) {
+                    String cellValue = RendererUtils.getStringValue(
+                            FacesContext.getCurrentInstance(), valueHolder);
+                    pdfTable.addCell(cellValue);
+                }
+            }
+        }
+    }
+
+    /*
+     * This method is used for creating the PDFTable model.
+     */
+    public static PdfPTable generatePDFTableModel(FacesContext facesContext,
+            HtmlDataScroller dataScroller, boolean selectedPage) {
+
+        int numberOfColumns;
+        List columns = null;
+        PdfPTable pdfTable = null;
+
+        /* get the parent dataTable component */
+        HtmlDataTable tomahawkDataTable = ExporterUtil
+                .getDataTableFromDataScroller(facesContext, dataScroller);
+
+        /* getting the HTMLDataTable Columns */
+        columns = ComponentUtils.getHTMLDataTableColumns(tomahawkDataTable);
+
+        if (columns.size() == 0) {
+            return null;
+        }
+        else {
+            numberOfColumns = columns.size();
+        }
+
+        /* creating the PDF Table */
+        pdfTable = new PdfPTable(numberOfColumns);
+
+        generateTableHeader(pdfTable, columns);
+
+        generateTableContent(facesContext, pdfTable, columns,
+                dataScroller, selectedPage);
+
+        return pdfTable;
+    }
+    
+    /**
+     * This method is responsible for writing the PDF to the response stream.
+     * @param facesContext
+     * @param response
+     * @param fileName
+     * @param dataScroller
+     */
+    public static void generatePDF(FacesContext facesContext,
+            HttpServletResponse response, String fileName,
+            HtmlDataScroller dataScroller, boolean selectedPage) throws Exception {
+
+        int currentRowIndex;
+        Document document = new Document();
+        ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
+        PdfWriter.getInstance(document, byteArrayStream);
+        PdfPTable pdfTable = null;
+
+        /* get the parent dataTable component */
+        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();
+        }        
+
+        currentRowIndex = tomahawkDataTable.getRowIndex();
+
+        // generate the PDF table model.
+        pdfTable = generatePDFTableModel(facesContext, dataScroller, selectedPage);
+
+        // open the document and write the generated PDF.
+        document.open();
+        document.add(pdfTable);
+        document.close();
 
-		dataTable.setRowIndex(currentRowIndex);
+        // write the response headers.
+        setPDFResponseHeaders(response, byteArrayStream, fileName);
 
-	}		
+        tomahawkDataTable.setRowIndex(currentRowIndex);
+
+    }
 }