[OFBiz] SVN: r6535 - in trunk/framework: webapp/src/org/ofbiz/webapp/view widget/src/org/ofbiz/widget/screen
jaz@svn.ofbiz.org
jaz at svn.ofbiz.org
Sat Jan 21 21:54:03 CST 2006
Author: jaz
Date: 2006-01-21 21:53:59 -0600 (Sat, 21 Jan 2006)
New Revision: 6535
Added:
trunk/framework/webapp/src/org/ofbiz/webapp/view/FopRenderer.java
Modified:
trunk/framework/webapp/src/org/ofbiz/webapp/view/FopPdfViewHandler.java
trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenFopPdfViewHandler.java
Log:
small refactor of FOP rendering code for better re-use
Modified: trunk/framework/webapp/src/org/ofbiz/webapp/view/FopPdfViewHandler.java
===================================================================
--- trunk/framework/webapp/src/org/ofbiz/webapp/view/FopPdfViewHandler.java 2006-01-21 00:20:20 UTC (rev 6534)
+++ trunk/framework/webapp/src/org/ofbiz/webapp/view/FopPdfViewHandler.java 2006-01-22 03:53:59 UTC (rev 6535)
@@ -32,17 +32,8 @@
import javax.servlet.http.HttpServletResponse;
import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.base.util.GeneralException;
-import org.apache.avalon.framework.logger.Log4JLogger;
-import org.apache.avalon.framework.logger.Logger;
-import org.apache.fop.apps.Driver;
-import org.apache.fop.image.FopImageFactory;
-import org.apache.fop.messaging.MessageHandler;
-import org.apache.fop.tools.DocumentInputSource;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-
/**
* Uses XSL-FO formatted templates to generate PDF views
* This handler will use JPublish to generate the XSL-FO
@@ -70,36 +61,13 @@
Debug.logVerbose("XSL-FO : " + writer.toString(), module);
}
- // configure logging for the FOP
- Logger logger = new Log4JLogger(Debug.getLogger(module));
- MessageHandler.setScreenLogger(logger);
-
- // load the FOP driver
- Driver driver = new Driver();
- driver.setRenderer(Driver.RENDER_PDF);
- driver.setLogger(logger);
-
- // read the XSL-FO XML Document
- Document xslfo = null;
+ // render the byte array
+ ByteArrayOutputStream out = null;
try {
- xslfo = UtilXml.readXmlDocument(writer.toString());
- } catch (Throwable t) {
- throw new ViewHandlerException("Problems reading the parsed content to XML Document", t);
+ out = FopRenderer.render(writer);
+ } catch (GeneralException e) {
+ throw new ViewHandlerException(e.getMessage(), e.getNested());
}
-
- // create the output stream for the PDF
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- driver.setOutputStream(out);
-
- // set the input source (XSL-FO) and generate the PDF
- InputSource is = new DocumentInputSource(xslfo);
- driver.setInputSource(is);
- try {
- driver.run();
- FopImageFactory.resetCache();
- } catch (Throwable t) {
- throw new ViewHandlerException("Unable to generate PDF from XSL-FO", t);
- }
// set the content type and length
response.setContentType("application/pdf");
Added: trunk/framework/webapp/src/org/ofbiz/webapp/view/FopRenderer.java
===================================================================
--- trunk/framework/webapp/src/org/ofbiz/webapp/view/FopRenderer.java 2006-01-21 00:20:20 UTC (rev 6534)
+++ trunk/framework/webapp/src/org/ofbiz/webapp/view/FopRenderer.java 2006-01-22 03:53:59 UTC (rev 6535)
@@ -0,0 +1,100 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2001-2006 The Open For Business Project - www.ofbiz.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+ * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+package org.ofbiz.webapp.view;
+
+import java.io.ByteArrayOutputStream;
+import java.io.Writer;
+
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.logger.Log4JLogger;
+import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.apps.Driver;
+import org.apache.fop.tools.DocumentInputSource;
+import org.apache.fop.image.FopImageFactory;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.base.util.GeneralException;
+
+/**
+ * FopRenderer
+ *
+ * @author <a href="mailto:jaz at ofbiz.org">Andy Zeneski</a>
+ * @version $Rev$
+ * @since 3.5
+ */
+public class FopRenderer {
+
+ public static final String module = FopRenderer.class.getName();
+
+ public static ByteArrayOutputStream render(Writer writer) throws GeneralException {
+ // configure logging for the FOP
+ Logger logger = new Log4JLogger(Debug.getLogger(module));
+ MessageHandler.setScreenLogger(logger);
+
+ // load the FOP driver
+ Driver driver = new Driver();
+ driver.setRenderer(Driver.RENDER_PDF);
+ driver.setLogger(logger);
+
+ /*
+ try {
+ String buf = writer.toString();
+ java.io.FileWriter fw = new java.io.FileWriter(new java.io.File("/tmp/xslfo.out"));
+ fw.write(buf.toString());
+ fw.close();
+ } catch (IOException e) {
+ throw new GeneralException("Unable write to browser OutputStream", e);
+ }
+ */
+
+ // read the XSL-FO XML Document
+ Document xslfo = null;
+ try {
+ xslfo = UtilXml.readXmlDocument(writer.toString());
+ } catch (Throwable t) {
+ throw new GeneralException("Problems reading the parsed content to XML Document", t);
+ }
+
+ // create the output stream for the PDF
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ driver.setOutputStream(out);
+
+ // set the input source (XSL-FO) and generate the PDF
+ InputSource is = new DocumentInputSource(xslfo);
+ driver.setInputSource(is);
+ try {
+ driver.run();
+ FopImageFactory.resetCache();
+ } catch (Throwable t) {
+ throw new GeneralException("Unable to generate PDF from XSL-FO", t);
+ }
+
+ return out;
+ }
+
+}
Property changes on: trunk/framework/webapp/src/org/ofbiz/webapp/view/FopRenderer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id Rev Author
Name: svn:eol-style
+ native
Modified: trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenFopPdfViewHandler.java
===================================================================
--- trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenFopPdfViewHandler.java 2006-01-21 00:20:20 UTC (rev 6534)
+++ trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenFopPdfViewHandler.java 2006-01-22 03:53:59 UTC (rev 6535)
@@ -28,21 +28,13 @@
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.avalon.framework.logger.Log4JLogger;
-import org.apache.avalon.framework.logger.Logger;
-import org.apache.fop.apps.Driver;
-import org.apache.fop.image.FopImageFactory;
-import org.apache.fop.messaging.MessageHandler;
-import org.apache.fop.tools.DocumentInputSource;
import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.base.util.GeneralException;
+import org.ofbiz.webapp.view.FopRenderer;
import org.ofbiz.webapp.view.ViewHandlerException;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
/**
* Uses XSL-FO formatted templates to generate PDF views
@@ -53,9 +45,9 @@
* @since 3.0
*/
public class ScreenFopPdfViewHandler extends ScreenWidgetViewHandler {
-
+
public static final String module = ScreenFopPdfViewHandler.class.getName();
-
+
/**
* @see org.ofbiz.content.webapp.view.ViewHandler#render(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@@ -72,58 +64,25 @@
if (Debug.verboseOn()) {
// Debug.logVerbose("XSL-FO : " + writer.toString(), module);
}
-
- // configure logging for the FOP
- Logger logger = new Log4JLogger(Debug.getLogger(module));
- MessageHandler.setScreenLogger(logger);
-
- // load the FOP driver
- Driver driver = new Driver();
- driver.setRenderer(Driver.RENDER_PDF);
- driver.setLogger(logger);
-
- /*
+
+ // render the byte array
+ ByteArrayOutputStream out = null;
try {
- String buf = writer.toString();
- java.io.FileWriter fw = new java.io.FileWriter(new java.io.File("/tmp/xslfo.out"));
- fw.write(buf.toString());
- fw.close();
- } catch (IOException e) {
- throw new ViewHandlerException("Unable write to browser OutputStream", e);
- }
- */
- // read the XSL-FO XML Document
- Document xslfo = null;
- try {
- xslfo = UtilXml.readXmlDocument(writer.toString());
- } catch (Throwable t) {
- throw new ViewHandlerException("Problems reading the parsed content to XML Document", t);
+ out = FopRenderer.render(writer);
+ } catch (GeneralException e) {
+ throw new ViewHandlerException(e.getMessage(), e.getNested());
}
-
- // create the output stream for the PDF
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- driver.setOutputStream(out);
- // set the input source (XSL-FO) and generate the PDF
- InputSource is = new DocumentInputSource(xslfo);
- driver.setInputSource(is);
- try {
- driver.run();
- FopImageFactory.resetCache();
- } catch (Throwable t) {
- throw new ViewHandlerException("Unable to generate PDF from XSL-FO", t);
- }
-
// set the content type and length
- response.setContentType("application/pdf");
+ response.setContentType("application/pdf");
response.setContentLength(out.size());
-
+
// write to the browser
try {
out.writeTo(response.getOutputStream());
response.getOutputStream().flush();
} catch (IOException e) {
- throw new ViewHandlerException("Unable write to browser OutputStream", e);
- }
+ throw new ViewHandlerException("Unable write to browser OutputStream", e);
+ }
}
}
More information about the Svn
mailing list