From 6defe06fc7bc46bf8ab9d5d6336991e842a05b0b Mon Sep 17 00:00:00 2001 From: Glen Mazza Date: Tue, 16 Mar 2004 05:25:16 +0000 Subject: [PATCH] Code changed to set the Base URL in FOUserAgent, which allows image.ImageFactory to use this value in order to determine locations of images given relative to the input source file. e.g. c:\xml-fop>fop examples\fo\basic\images.fo images.pdf will now run correctly. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197450 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/fop/apps/Driver.java | 2 +- .../org/apache/fop/apps/FOFileHandler.java | 7 ++++++- .../org/apache/fop/apps/InputHandler.java | 10 ++++++++++ .../org/apache/fop/apps/XSLTInputHandler.java | 19 +++++++++++++++---- .../org/apache/fop/image/ImageFactory.java | 1 + 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/fop/apps/Driver.java b/src/java/org/apache/fop/apps/Driver.java index ec4b11aa4..55059cff1 100644 --- a/src/java/org/apache/fop/apps/Driver.java +++ b/src/java/org/apache/fop/apps/Driver.java @@ -248,7 +248,6 @@ public class Driver implements LogEnabled { if (userAgent == null) { userAgent = new FOUserAgent(); userAgent.enableLogging(getLogger()); - userAgent.setBaseURL(""); } return userAgent; } @@ -572,6 +571,7 @@ public class Driver implements LogEnabled { public synchronized void render(InputHandler inputHandler) throws FOPException { XMLReader parser = inputHandler.getParser(); + userAgent.setBaseURL(inputHandler.getBaseURL()); render(parser, inputHandler.getInputSource()); } diff --git a/src/java/org/apache/fop/apps/FOFileHandler.java b/src/java/org/apache/fop/apps/FOFileHandler.java index 28226e677..acefd0cda 100644 --- a/src/java/org/apache/fop/apps/FOFileHandler.java +++ b/src/java/org/apache/fop/apps/FOFileHandler.java @@ -45,6 +45,12 @@ public class FOFileHandler extends InputHandler { */ public FOFileHandler(File fofile) { this.fofile = fofile; + try { + baseURL = + new File(fofile.getAbsolutePath()).getParentFile().toURL().toExternalForm(); + } catch (Exception e) { + baseURL = ""; + } } /** @@ -55,7 +61,6 @@ public class FOFileHandler extends InputHandler { this.foURL = url; } - /** * @see org.apache.fop.apps.InputHandler#getInputSource() */ diff --git a/src/java/org/apache/fop/apps/InputHandler.java b/src/java/org/apache/fop/apps/InputHandler.java index 9597ee324..acb6c50e9 100644 --- a/src/java/org/apache/fop/apps/InputHandler.java +++ b/src/java/org/apache/fop/apps/InputHandler.java @@ -39,6 +39,16 @@ public abstract class InputHandler { */ public abstract InputSource getInputSource(); + protected String baseURL = null; + + /** + * Get the base URL associated with this input source + * @return the input source + */ + public String getBaseURL() { + return baseURL; + } + /** * Get the SAX parser associated with this input handler. * @return the SAX parser diff --git a/src/java/org/apache/fop/apps/XSLTInputHandler.java b/src/java/org/apache/fop/apps/XSLTInputHandler.java index 9634f073f..88771f6b3 100644 --- a/src/java/org/apache/fop/apps/XSLTInputHandler.java +++ b/src/java/org/apache/fop/apps/XSLTInputHandler.java @@ -57,6 +57,12 @@ public class XSLTInputHandler extends InputHandler { public XSLTInputHandler(File xmlfile, File xsltfile, Vector params) throws FOPException { this.xmlSource = new StreamSource(xmlfile); this.xsltSource = new StreamSource(xsltfile); + try { + baseURL = + new File(xmlfile.getAbsolutePath()).getParentFile().toURL().toExternalForm(); + } catch (Exception e) { + baseURL = ""; + } xsltParams = params; } @@ -70,6 +76,12 @@ public class XSLTInputHandler extends InputHandler { public XSLTInputHandler(File xmlfile, File xsltfile) throws FOPException { this.xmlSource = new StreamSource(xmlfile); this.xsltSource = new StreamSource(xsltfile); + try { + baseURL = + new File(xmlfile.getAbsolutePath()).getParentFile().toURL().toExternalForm(); + } catch (Exception e) { + baseURL = ""; + } } /** @@ -144,11 +156,10 @@ public class XSLTInputHandler extends InputHandler { saxTFactory.newXMLFilter(xsltSource); /* if (inParams != null) { - Transformer transformer = ??? how to obtain from an XMLFilter? - int nParams = inParams.size(); - + // parameters currently not settable with an XMLFilter for (int i = 0; i < nParams; i += 2) { - transformer.setParameter((String) inParams.elementAt(i), + // setParameter() method doesn't exist + xmlfilter.setParameter((String) inParams.elementAt(i), (String) inParams.elementAt(i + 1)); } } diff --git a/src/java/org/apache/fop/image/ImageFactory.java b/src/java/org/apache/fop/image/ImageFactory.java index bf19d3f10..45aef78c5 100644 --- a/src/java/org/apache/fop/image/ImageFactory.java +++ b/src/java/org/apache/fop/image/ImageFactory.java @@ -219,6 +219,7 @@ public class ImageFactory { // Get the absolute URL URL absoluteURL = null; InputStream in = null; + try { in = ua.getStream(href); } catch (IOException ioe) { -- 2.39.5