]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Ensure the consistency of the created Fop object
authorSimon Pepping <spepping@apache.org>
Tue, 7 Mar 2006 19:33:32 +0000 (19:33 +0000)
committerSimon Pepping <spepping@apache.org>
Tue, 7 Mar 2006 19:33:32 +0000 (19:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_API_Finalization@383973 13f79535-47bb-0310-9956-ffa450edef68

examples/embedding/java/embedding/MultipleFO2PDF.java
src/java/org/apache/fop/apps/Fop.java
src/java/org/apache/fop/apps/FopFactory.java
src/java/org/apache/fop/cli/InputHandler.java
src/java/org/apache/fop/render/RendererFactory.java

index 6d268d4d23276cd181ff936609139433c7b78676..09dfb772e318b94b5d7c7db5a489328fbe96cf34 100644 (file)
@@ -43,7 +43,6 @@ import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.FormattingResults;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.apps.PageSequenceResults;
-import org.xml.sax.helpers.DefaultHandler;
 
 /**
  * This class demonstrates the conversion of multiple FO files to PDF using FOP.
@@ -83,14 +82,6 @@ public class MultipleFO2PDF {
             // Construct fop with desired output format and output stream
             fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
 
-            // This will also check the consistency of your setup
-            DefaultHandler handler;
-            try {
-                handler = fop.getDefaultHandler();
-            } catch (IllegalStateException e) {
-                throw new FOPException(e);
-            }
-
             // Setup JAXP using identity transformer
             TransformerFactory factory = TransformerFactory.newInstance();
             Transformer transformer = factory.newTransformer(); // identity transformer
@@ -99,7 +90,7 @@ public class MultipleFO2PDF {
             Source src = new StreamSource(fo);
 
             // Resulting SAX events (the generated FO) must be piped through to FOP
-            Result res = new SAXResult(handler);
+            Result res = new SAXResult(fop.getDefaultHandler());
             
             // Start XSLT transformation and FOP processing
             transformer.transform(src, res);
index 7066edc4da394ec227ba70d023a6bca7dc4ee13e..f4e4c048e00be664d9ce2776403701318d55849e 100644 (file)
@@ -64,8 +64,9 @@ public class Fop {
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
      * @param ua FOUserAgent object
      * @param stream the output stream
+     * @throws FOPException if setting up the DefaultHandler fails
      */
-    public Fop(String outputFormat, FOUserAgent ua, OutputStream stream) {
+    public Fop(String outputFormat, FOUserAgent ua, OutputStream stream) throws FOPException {
         this.outputFormat = outputFormat;
 
         foUserAgent = ua;
@@ -74,6 +75,8 @@ public class Fop {
         }
         
         this.stream = stream;
+        
+        createDefaultHandler();
     }
 
     /**
@@ -81,23 +84,28 @@ public class Fop {
      * output format (ex. "application/pdf" for PDF).
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
      * @param ua FOUserAgent object
+     * @throws FOPException if setting up the DefaultHandler fails
      */
-    public Fop(String outputFormat, FOUserAgent ua) {
+    public Fop(String outputFormat, FOUserAgent ua) throws FOPException {
         this.outputFormat = outputFormat;
 
         foUserAgent = ua;
         if (foUserAgent == null) {
             foUserAgent = new FOUserAgent();
         }
+        
+        createDefaultHandler();
     }
 
     /**
      * Constructor for FOP with a default FOUserAgent. It uses MIME types to select the 
      * output format (ex. "application/pdf" for PDF).
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
+     * @deprecated Use a constructor with an FOUserAgent instead!
      */
     public Fop(String outputFormat) {
-        this(outputFormat, null);
+        this.outputFormat = outputFormat;
+        foUserAgent = new FOUserAgent();
     }
 
     /**
@@ -118,19 +126,28 @@ public class Fop {
     }
 
     /**
-     * Returns a DefaultHandler object used to generate the document.
+     * Creates a DefaultHandler object used to generate the document.
      * Note this object implements the ContentHandler interface.
      * For processing with a Transformer object, this DefaultHandler object
      * can be used in the SAXResult constructor.
      * Alternatively, for processing with a SAXParser, this object can be
      * used as the DefaultHandler argument to its parse() methods.
      *
-     * @return a SAX DefaultHandler for handling the SAX events.
+     * @throws FOPException if setting up the DefaultHandler fails
+     */
+    private void createDefaultHandler() throws FOPException {
+        this.foTreeBuilder = new FOTreeBuilder(outputFormat, foUserAgent, stream);
+    }
+
+    /**
+     * Returns the DefaultHandler object used to generate the document.
+     * Checking for null and the exception is only for the deprecated constructor.
+     * @return the SAX DefaultHandler for handling the SAX events.
      * @throws FOPException if setting up the DefaultHandler fails
      */
     public DefaultHandler getDefaultHandler() throws FOPException {
         if (foTreeBuilder == null) {
-            this.foTreeBuilder = new FOTreeBuilder(outputFormat, foUserAgent, stream);
+            createDefaultHandler();
         }
         return this.foTreeBuilder;
     }
index 9d34ce6fb75bb98173efa797036692bb789f466c..e7849a85b91db82bef16f59a8b4bf07e99c91ed8 100644 (file)
@@ -133,8 +133,9 @@ public class FopFactory {
      * use the constants defined in {@link MimeConstants}.
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").     
      * @return the new Fop instance
+     * @throws FOPException when the constructor fails
      */
-    public Fop newFop(String outputFormat) {
+    public Fop newFop(String outputFormat) throws FOPException {
         return new Fop(outputFormat, newFOUserAgent());
     }
 
@@ -149,8 +150,9 @@ public class FopFactory {
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
      * @param userAgent the user agent that will be used to control the rendering run     
      * @return the new Fop instance
+     * @throws FOPException  when the constructor fails
      */
-    public Fop newFop(String outputFormat, FOUserAgent userAgent) {
+    public Fop newFop(String outputFormat, FOUserAgent userAgent) throws FOPException {
         if (userAgent == null) {
             throw new NullPointerException("The userAgent parameter must not be null!");
         }
@@ -166,8 +168,9 @@ public class FopFactory {
      * @param outputFormat the MIME type of the output format to use (ex. "application/pdf"). 
      * @param stream the output stream
      * @return the new Fop instance
+     * @throws FOPException when the constructor fails
      */
-    public Fop newFop(String outputFormat, OutputStream stream) {
+    public Fop newFop(String outputFormat, OutputStream stream) throws FOPException {
         return new Fop(outputFormat, newFOUserAgent(), stream);
     }
 
@@ -184,8 +187,9 @@ public class FopFactory {
      * @param userAgent the user agent that will be used to control the rendering run     
      * @param stream the output stream
      * @return the new Fop instance
+     * @throws FOPException when the constructor fails
      */
-    public Fop newFop(String outputFormat, FOUserAgent userAgent, OutputStream stream) {
+    public Fop newFop(String outputFormat, FOUserAgent userAgent, OutputStream stream) throws FOPException {
         if (userAgent == null) {
             throw new NullPointerException("The userAgent parameter must not be null!");
         }
@@ -199,8 +203,9 @@ public class FopFactory {
      * instance instead of the default ones created internally by FOP.
      * @param userAgent the user agent that will be used to control the rendering run     
      * @return the new Fop instance
+     * @throws FOPException when the constructor fails
      */
-    public Fop newFop(FOUserAgent userAgent) {
+    public Fop newFop(FOUserAgent userAgent) throws FOPException {
         if (userAgent.getRendererOverride() == null 
                 && userAgent.getFOEventHandlerOverride() == null) {
             throw new IllegalStateException("Either the overriding renderer or the overriding"
index 554f5d5728cb682988f66bcccf7c738b772d821c..5fbea4ef1fc1ec3e2187ba78aa376dba7aedfae1 100644 (file)
@@ -85,10 +85,12 @@ public class InputHandler implements ErrorListener, Renderable {
      */
     public void renderTo(FOUserAgent userAgent, String outputFormat, OutputStream out) 
                 throws FOPException {
-        
-        Fop fop = new Fop(outputFormat, userAgent);
+
+        Fop fop;
         if (out != null) {
-            fop.setOutputStream(out);
+            fop = new Fop(outputFormat, userAgent, out);
+        } else {
+            fop = new Fop(outputFormat, userAgent);
         }
 
         // if base URL was not explicitly set in FOUserAgent, obtain here
index c6ed0f6411ddddb2a4def8a894ba8a47b1271609..c351344a45a9ec11d7e5de41b3b5149bccee4b47 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005 The Apache Software Foundation.
+ * Copyright 2004-2006 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -248,7 +248,7 @@ public class RendererFactory {
                     if (out == null 
                             && userAgent.getRendererOverride() == null 
                             && rendMaker.needsOutputStream()) {
-                        throw new IllegalStateException(
+                        throw new FOPException(
                             "OutputStream has not been set");
                     }
                     //Found a Renderer so we need to construct an AreaTreeHandler.