Author: jeremias
Date: Mon Dec  8 03:30:11 2008
New Revision: 724310

URL: http://svn.apache.org/viewvc?rev=724310&view=rev
Log:
Batik's DOMUtilities.deepCloneDocument() doesn't propagate the document URI 
which makes relative image URIs fail. Fixes one of our unit tests.

Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/BatikUtil.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DSVGHandler.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFSVGHandler.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSSVGHandler.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/BatikUtil.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/BatikUtil.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/BatikUtil.java 
(original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/BatikUtil.java 
Mon Dec  8 03:30:11 2008
@@ -19,6 +19,11 @@
 
 package org.apache.fop.image.loader.batik;
 
+import org.w3c.dom.Document;
+
+import org.apache.batik.dom.AbstractDocument;
+import org.apache.batik.dom.util.DOMUtilities;
+
 /**
  * Helper utilities for Apache Batik.
  */
@@ -38,4 +43,18 @@
         return false;
     }
 
+    /**
+     * Clones an SVG DOM document. This is used for making SVG production 
thread-safe when the
+     * SVG document is cached and re-used.
+     * @param doc the SVG DOM to be cloned
+     * @return the cloned SVG DOM
+     */
+    public static Document cloneSVGDocument(Document doc) {
+        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        if (clonedDoc instanceof AbstractDocument) {
+            
((AbstractDocument)clonedDoc).setDocumentURI(((AbstractDocument)doc).getDocumentURI());
+        }
+        return clonedDoc;
+    }
+
 }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
 Mon Dec  8 03:30:11 2008
@@ -29,7 +29,6 @@
 import org.apache.batik.bridge.GVTBuilder;
 import org.apache.batik.bridge.UserAgent;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -83,7 +82,7 @@
         Document doc = svg.getDocument();
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         //Build the GVT tree
         final GraphicsNode root;

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
 Mon Dec  8 03:30:11 2008
@@ -30,7 +30,6 @@
 import org.apache.batik.bridge.GVTBuilder;
 import org.apache.batik.dom.AbstractDocument;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 
 import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
@@ -39,6 +38,7 @@
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.events.EventBroadcaster;
 import org.apache.fop.fo.extensions.ExtensionElementMapping;
+import org.apache.fop.image.loader.batik.BatikUtil;
 import org.apache.fop.image.loader.batik.Graphics2DImagePainterImpl;
 import org.apache.fop.render.RendererContext.RendererContextWrapper;
 import org.apache.fop.svg.SVGEventProducer;
@@ -138,7 +138,7 @@
 
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         //Build the GVT tree
         final GraphicsNode root = buildGraphicsNode(userAgent, bridgeContext, 
clonedDoc);

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPSVGHandler.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPSVGHandler.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPSVGHandler.java 
Mon Dec  8 03:30:11 2008
@@ -28,7 +28,6 @@
 
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 
 import org.apache.xmlgraphics.image.loader.ImageManager;
@@ -46,6 +45,7 @@
 import org.apache.fop.afp.svg.AFPBridgeContext;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.image.loader.batik.BatikUtil;
 import org.apache.fop.image.loader.batik.Graphics2DImagePainterImpl;
 import org.apache.fop.render.AbstractGenericSVGHandler;
 import org.apache.fop.render.Renderer;
@@ -113,7 +113,7 @@
 
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         // Build the SVG DOM and provide the painter with it
         GraphicsNode root = buildGraphicsNode(userAgent, bridgeContext, 
clonedDoc);

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DSVGHandler.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DSVGHandler.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/java2d/Java2DSVGHandler.java
 Mon Dec  8 03:30:11 2008
@@ -27,11 +27,11 @@
 
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.bridge.GVTBuilder;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.fop.image.loader.batik.BatikUtil;
 import org.apache.fop.render.AbstractGenericSVGHandler;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.RendererContext;
@@ -135,7 +135,7 @@
 
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         GraphicsNode root;
         try {

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFSVGHandler.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFSVGHandler.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFSVGHandler.java 
Mon Dec  8 03:30:11 2008
@@ -31,7 +31,6 @@
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.bridge.GVTBuilder;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 import org.apache.batik.util.SVGConstants;
 import org.apache.commons.logging.Log;
@@ -39,6 +38,7 @@
 
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.image.loader.batik.BatikUtil;
 import org.apache.fop.pdf.PDFDocument;
 import org.apache.fop.pdf.PDFPage;
 import org.apache.fop.pdf.PDFPaintingState;
@@ -182,7 +182,7 @@
 
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         GraphicsNode root;
         try {

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSSVGHandler.java?rev=724310&r1=724309&r2=724310&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSSVGHandler.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSSVGHandler.java 
Mon Dec  8 03:30:11 2008
@@ -29,7 +29,6 @@
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.bridge.GVTBuilder;
-import org.apache.batik.dom.util.DOMUtilities;
 import org.apache.batik.gvt.GraphicsNode;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -38,6 +37,7 @@
 import org.apache.xmlgraphics.ps.PSGenerator;
 
 import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.image.loader.batik.BatikUtil;
 import org.apache.fop.render.AbstractGenericSVGHandler;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.RendererContext;
@@ -273,7 +273,7 @@
 
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like 
the CSS engine)
         //to it.
-        Document clonedDoc = DOMUtilities.deepCloneDocument(doc, 
doc.getImplementation());
+        Document clonedDoc = BatikUtil.cloneSVGDocument(doc);
 
         GraphicsNode root;
         try {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to