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);
+
+ }
}