f14834c
From b72bf32dbabf4c18cf48bdbc344227fb0b2d5110 Mon Sep 17 00:00:00 2001
f6a46a8
From: Michael Simacek <msimacek@redhat.com>
f6a46a8
Date: Mon, 17 Aug 2015 17:15:05 +0200
f14834c
Subject: [PATCH 4/4] Port to fop-2.0
f6a46a8
f6a46a8
---
f6a46a8
 doxia-modules/doxia-module-fo/pom.xml              |  2 +-
f6a46a8
 .../org/apache/maven/doxia/module/fo/FoUtils.java  | 58 ++++++----------------
f6a46a8
 2 files changed, 16 insertions(+), 44 deletions(-)
f6a46a8
f6a46a8
diff --git a/doxia-modules/doxia-module-fo/pom.xml b/doxia-modules/doxia-module-fo/pom.xml
f14834c
index e66c736..6d261c8 100644
f6a46a8
--- a/doxia-modules/doxia-module-fo/pom.xml
f6a46a8
+++ b/doxia-modules/doxia-module-fo/pom.xml
f6a46a8
@@ -85,7 +85,7 @@ under the License.
f6a46a8
     <dependency>
f6a46a8
       <groupId>org.apache.xmlgraphics</groupId>
f6a46a8
       <artifactId>fop</artifactId>
f6a46a8
-      <version>0.95</version>
f6a46a8
+      <version>2.0</version>
f6a46a8
     </dependency>
f6a46a8
     <dependency>
f6a46a8
       <groupId>log4j</groupId>
f6a46a8
diff --git a/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java b/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
f6a46a8
index 0e7efc1..c398eaf 100644
f6a46a8
--- a/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
f6a46a8
+++ b/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
f6a46a8
@@ -24,6 +24,7 @@ import java.io.File;
f6a46a8
 import java.io.FileOutputStream;
f6a46a8
 import java.io.IOException;
f6a46a8
 import java.io.OutputStream;
f6a46a8
+import java.net.URI;
f6a46a8
 import java.util.Date;
f6a46a8
 
f6a46a8
 import javax.xml.transform.Result;
f6a46a8
@@ -38,6 +39,7 @@ import org.apache.fop.apps.FOPException;
f6a46a8
 import org.apache.fop.apps.FOUserAgent;
f6a46a8
 import org.apache.fop.apps.Fop;
f6a46a8
 import org.apache.fop.apps.FopFactory;
f6a46a8
+import org.apache.fop.apps.FopFactoryBuilder;
f6a46a8
 import org.apache.fop.apps.MimeConstants;
f6a46a8
 import org.apache.maven.doxia.document.DocumentModel;
f6a46a8
 import org.codehaus.plexus.util.IOUtil;
f6a46a8
@@ -52,28 +54,11 @@ import org.codehaus.plexus.util.StringUtils;
f6a46a8
  */
f6a46a8
 public class FoUtils
f6a46a8
 {
f6a46a8
-    /** To reuse the FopFactory **/
f6a46a8
-    private static final FopFactory FOP_FACTORY = FopFactory.newInstance();
f6a46a8
-
f6a46a8
     /** To reuse the TransformerFactory **/
f6a46a8
     private static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance();
f6a46a8
 
f6a46a8
-    /**
f6a46a8
-     * Converts an FO file to a PDF file using FOP.
f6a46a8
-     *
f6a46a8
-     * @param fo the FO file, not null.
f6a46a8
-     * @param pdf the target PDF file, not null.
f6a46a8
-     * @param resourceDir The base directory for relative path resolution, could be null.
f6a46a8
-     * If null, defaults to the parent directory of fo.
f6a46a8
-     * @param documentModel the document model to add PDF metadatas like author, title and keywords, could be null.
f6a46a8
-     * @throws javax.xml.transform.TransformerException In case of a conversion problem.
f6a46a8
-     * @since 1.1.1
f6a46a8
-     */
f6a46a8
-    public static void convertFO2PDF( File fo, File pdf, String resourceDir, DocumentModel documentModel )
f6a46a8
-        throws TransformerException
f6a46a8
-    {
f6a46a8
-        FOUserAgent foUserAgent = getDefaultUserAgent( fo, resourceDir );
f6a46a8
 
f6a46a8
+    private static void prepareUserAgent( FOUserAgent foUserAgent, DocumentModel documentModel ) {
f6a46a8
         if ( documentModel != null && documentModel.getMeta() != null )
f6a46a8
         {
f6a46a8
             // http://xmlgraphics.apache.org/fop/embedding.html#user-agent
f6a46a8
@@ -113,8 +98,6 @@ public class FoUtils
f6a46a8
         {
f6a46a8
             foUserAgent.setCreationDate( new Date() );
f6a46a8
         }
f6a46a8
-
f6a46a8
-        convertFO2PDF( fo, pdf, resourceDir, foUserAgent );
f6a46a8
     }
f6a46a8
 
f6a46a8
     /**
f6a46a8
@@ -124,16 +107,13 @@ public class FoUtils
f6a46a8
      * @param pdf the target PDF file, not null.
f6a46a8
      * @param resourceDir The base directory for relative path resolution, could be null.
f6a46a8
      * If null, defaults to the parent directory of fo.
f6a46a8
-     * @param foUserAgent the FOUserAgent to use.
f6a46a8
-     *      May be null, in which case a default user agent will be used.
f6a46a8
+     * @param documentModel the document model to add PDF metadatas like author, title and keywords, could be null.
f6a46a8
      * @throws javax.xml.transform.TransformerException In case of a conversion problem.
f6a46a8
      * @since 1.1.1
f6a46a8
      */
f6a46a8
-    public static void convertFO2PDF( File fo, File pdf, String resourceDir, FOUserAgent foUserAgent )
f6a46a8
+    public static void convertFO2PDF( File fo, File pdf, String resourceDir, DocumentModel documentModel )
f6a46a8
         throws TransformerException
f6a46a8
     {
f6a46a8
-        FOUserAgent userAgent = ( foUserAgent == null ? getDefaultUserAgent( fo, resourceDir ) : foUserAgent );
f6a46a8
-
f6a46a8
         OutputStream out = null;
f6a46a8
         try
f6a46a8
         {
f6a46a8
@@ -149,7 +129,11 @@ public class FoUtils
f6a46a8
             Result res = null;
f6a46a8
             try
f6a46a8
             {
f6a46a8
-                Fop fop = FOP_FACTORY.newFop( MimeConstants.MIME_PDF, userAgent, out );
f6a46a8
+                URI baseURI = getBaseURI( fo, resourceDir );
f6a46a8
+                FopFactory fopFactory = new FopFactoryBuilder( baseURI ).build();
f6a46a8
+                FOUserAgent userAgent = fopFactory.newFOUserAgent();
f6a46a8
+                prepareUserAgent( userAgent, documentModel );
f6a46a8
+                Fop fop = fopFactory.newFop( MimeConstants.MIME_PDF, userAgent, out );
f6a46a8
                 res = new SAXResult( fop.getDefaultHandler() );
f6a46a8
             }
f6a46a8
             catch ( FOPException e )
f6a46a8
@@ -193,34 +177,22 @@ public class FoUtils
f6a46a8
     }
f6a46a8
 
f6a46a8
     /**
f6a46a8
-     * Returns a base URL to be used by the FOUserAgent.
f6a46a8
+     * Returns a base URI.
f6a46a8
      *
f6a46a8
      * @param fo the FO file.
f6a46a8
      * @param resourceDir the resource directory.
f6a46a8
-     * @return String.
f6a46a8
+     * @return URI.
f6a46a8
      */
f6a46a8
-    private static String getBaseURL( File fo, String resourceDir )
f6a46a8
+    private static URI getBaseURI( File fo, String resourceDir )
f6a46a8
     {
f6a46a8
-        String url = null;
f6a46a8
-
f6a46a8
         if ( resourceDir == null )
f6a46a8
         {
f6a46a8
-            url = "file:///" + fo.getParent() + "/";
f6a46a8
+            return fo.getParentFile().toURI();
f6a46a8
         }
f6a46a8
         else
f6a46a8
         {
f6a46a8
-            url = "file:///" + resourceDir + "/";
f6a46a8
+            return new File( resourceDir + "/" ).toURI();
f6a46a8
         }
f6a46a8
-
f6a46a8
-        return url;
f6a46a8
-    }
f6a46a8
-
f6a46a8
-    private static FOUserAgent getDefaultUserAgent( File fo, String resourceDir )
f6a46a8
-    {
f6a46a8
-        FOUserAgent foUserAgent = FOP_FACTORY.newFOUserAgent();
f6a46a8
-        foUserAgent.setBaseURL( getBaseURL( fo, resourceDir ) );
f6a46a8
-
f6a46a8
-        return foUserAgent;
f6a46a8
     }
f6a46a8
 
f6a46a8
     private FoUtils()
f6a46a8
-- 
f14834c
2.5.5
f6a46a8