[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