]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Relative URIs in the configuration file are evaluated relative to the base URI of...
authorSimon Pepping <spepping@apache.org>
Fri, 14 Jan 2011 11:15:16 +0000 (11:15 +0000)
committerSimon Pepping <spepping@apache.org>
Fri, 14 Jan 2011 11:15:16 +0000 (11:15 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1058945 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/trunk/configuration.xml
src/java/org/apache/fop/apps/FopFactory.java
src/java/org/apache/fop/apps/FopFactoryConfigurator.java
src/java/org/apache/fop/fonts/FontManagerConfigurator.java
status.xml
test/test-no-xml-metrics.xconf

index 3ef8795b77afaf2458512eae20d215e323d950b8..26707edbf739d9d156d1d1592701c34d76e23069 100644 (file)
@@ -89,6 +89,9 @@
         </td>
         <td>disabled</td>
       </tr>
+         <tr>
+               <td colspan="4">Relative URIs for the above three properties are evaluated relative to the base URI of the configuration file. If the configuration is provided programmatically, the base URI can be set with <code>FopFactory.setUserConfigBaseURI</code>; default is the current working directory.</td>
+         </tr>
          <tr>
                <td>hyphenation-pattern</td>
                <td>String, attribute lang, attribute country (optional)</td>
index b86c52cf694b963b950336d9b26ed1f7c58c9f89..181bc85da56628e0b862ffe1b592d466692470db 100644 (file)
@@ -24,6 +24,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.MalformedURLException;
+import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -700,6 +701,15 @@ public class FopFactory implements ImageContext {
         config.setUserConfig(userConfig);
     }
 
+    /**
+     * Set the base URI for the user configuration
+     * Useful for programmatic configurations
+     * @param baseURI the base URI
+     */
+    public void setUserConfigBaseURI(URI baseURI) {
+        config.setBaseURI(baseURI);
+    }
+
     /**
      * Get the user configuration.
      * @return the user configuration
index 161bd4a8fdcf3fe9f4ddc94cc3b34ac7c556b0d8..6c1986cb21d5919e32eb17f56bea5a03b16af03d 100644 (file)
@@ -22,6 +22,8 @@ package org.apache.fop.apps;
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -78,6 +80,9 @@ public class FopFactoryConfigurator {
     /** Fop factory configuration */
     private Configuration cfg = null;
 
+    /** The base URI of the configuration file **/
+    private URI baseURI = null;
+
     /**
      * Default constructor
      * @param factory fop factory
@@ -130,17 +135,23 @@ public class FopFactoryConfigurator {
 
         // base definitions for relative path resolution
         if (cfg.getChild("base", false) != null) {
+            String path = cfg.getChild("base").getValue(null);
+            if (baseURI != null) {
+                path = baseURI.resolve(path).normalize().toString();
+            }
             try {
-                factory.setBaseURL(
-                        cfg.getChild("base").getValue(null));
+                factory.setBaseURL(path);
             } catch (MalformedURLException mfue) {
                 LogUtil.handleException(log, mfue, strict);
             }
         }
         if (cfg.getChild("hyphenation-base", false) != null) {
+            String path = cfg.getChild("hyphenation-base").getValue(null);
+            if (baseURI != null) {
+                path = baseURI.resolve(path).normalize().toString();
+            }
             try {
-                factory.setHyphenBaseURL(
-                        cfg.getChild("hyphenation-base").getValue(null));
+                factory.setHyphenBaseURL(path);
             } catch (MalformedURLException mfue) {
                 LogUtil.handleException(log, mfue, strict);
             }
@@ -259,7 +270,7 @@ public class FopFactoryConfigurator {
         }
 
         // configure font manager
-        new FontManagerConfigurator(cfg).configure(factory.getFontManager(), strict);
+        new FontManagerConfigurator(cfg, baseURI).configure(factory.getFontManager(), strict);
 
         // configure image loader framework
         configureImageLoading(cfg.getChild("image-loading", false), strict);
@@ -339,6 +350,7 @@ public class FopFactoryConfigurator {
      */
     public void setUserConfig(Configuration cfg) throws FOPException {
         this.cfg = cfg;
+        setBaseURI();
         configure(this.factory);
     }
 
@@ -349,4 +361,34 @@ public class FopFactoryConfigurator {
     public Configuration getUserConfig() {
         return this.cfg;
     }
+
+    /**
+     * @return the baseURI
+     */
+    public URI getBaseURI() {
+        return baseURI;
+    }
+
+    /**
+     * @param baseURI the baseURI to set
+     */
+    public void setBaseURI(URI baseURI) {
+        this.baseURI = baseURI;
+    }
+
+    private void setBaseURI() throws FOPException {
+        String[] locationParts = cfg.getLocation().split(":");
+        try {
+            if (locationParts != null && locationParts.length >= 2
+                    && "file".equals(locationParts[0])) {
+                baseURI = new URI(locationParts[0], locationParts[1], null);
+            }
+            if (baseURI == null) {
+                baseURI = new File(System.getProperty("user.dir")).toURI();
+            }
+        } catch (URISyntaxException e) {
+            throw new FOPException(e);
+        }
+    }
+
 }
index 421c9905199b7ee8aafb73eff9f5b47045e0fcce..6935df7e3c7162244dc8a3d55408ede2a589647a 100644 (file)
@@ -21,6 +21,7 @@ package org.apache.fop.fonts;
 
 import java.io.File;
 import java.net.MalformedURLException;
+import java.net.URI;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -43,6 +44,8 @@ public class FontManagerConfigurator {
 
     private final Configuration cfg;
 
+    private URI baseURI = null;
+
     /**
      * Main constructor
      * @param cfg the font manager configuration object
@@ -51,6 +54,16 @@ public class FontManagerConfigurator {
         this.cfg = cfg;
     }
 
+    /**
+     * Main constructor
+     * @param cfg the font manager configuration object
+     * @param baseURI the base URI of the configuration
+     */
+    public FontManagerConfigurator(Configuration cfg, URI baseURI) {
+        this.cfg = cfg;
+        this.baseURI = baseURI;
+    }
+
     /**
      * Initializes font settings from the user configuration
      * @param fontManager a font manager
@@ -74,8 +87,12 @@ public class FontManagerConfigurator {
             }
         }
         if (cfg.getChild("font-base", false) != null) {
+            String path = cfg.getChild("font-base").getValue(null);
+            if (baseURI != null) {
+                path = baseURI.resolve(path).normalize().toString();
+            }
             try {
-                fontManager.setFontBaseURL(cfg.getChild("font-base").getValue(null));
+                fontManager.setFontBaseURL(path);
             } catch (MalformedURLException mfue) {
                 LogUtil.handleException(log, mfue, true);
             }
index 16054217d32eff93a9c441082c5b569e171a2b62..c80ba0668263bf5127d89dfc6820c68b534cf805 100644 (file)
@@ -49,6 +49,7 @@
     <context id="API" title="Changes to the End-User API"/>
     <context id="Extensions" title="Changes to the Bundled Extensions"/>
     <context id="Images" title="Changes to the Image Support"/>
+       <context id="Config" title="Changes to the User Configuration"/>
   </contexts>
 
   <changes>
@@ -58,6 +59,9 @@
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+         <action context="Config" dev="SP" type="fix">
+               Bugfix: relative URIs in the configuration file (base, font-base, hyphenation-base) are evaluated relative to the base URI of the configuration file.
+         </action>
       <action context="Layout" dev="AD" type="fix" fixes-bug="49848">
         Bugfix: correct behavior of keep-together.within-line in case there are nested inlines
       </action>
index beb24c0ef423c64b20d85bce09ac4ac7fe9630cf..6005eac949a3ff7ce311ecf8bcd84adc23e93a66 100644 (file)
@@ -7,7 +7,7 @@
   <base>./</base>
 
   <!-- Font Base URL for resolving relative font URLs -->
-  <font-base>./test/resources/fonts</font-base>
+  <font-base>./resources/fonts</font-base>
   
   <renderers>
     <renderer mime="application/pdf">