You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2005/08/16 09:35:50 UTC

svn commit: r232952 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/image/ImageCache.java src/java/org/apache/fop/image/ImageFactory.java test/java/org/apache/fop/URIResolutionTestCase.java

Author: jeremias
Date: Tue Aug 16 00:35:42 2005
New Revision: 232952

URL: http://svn.apache.org/viewcvs?rev=232952&view=rev
Log:
Add a method to clear all image caches for testing purposes. It shouldn't be necessary anymore to call such a method in a production environment or we have a problem with the image cache.
Testing SystemID resolution as well as StreamSource with an InputStream.

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java   (contents, props changed)
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java   (contents, props changed)
    xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java   (contents, props changed)

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java?rev=232952&r1=232951&r2=232952&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java Tue Aug 16 00:35:42 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 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.
@@ -26,6 +26,7 @@
  * This interface is used for caching images.
  */
 public interface ImageCache {
+    
     /**
      * Get an image from the cache.
      *
@@ -60,5 +61,11 @@
      * @param context the user agent context
      */
     void removeContext(FOUserAgent context);
+    
+    /**
+     * Forces the cache to fully cleared.
+     */
+    void clearAll();
+    
 }
 

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageCache.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java?rev=232952&r1=232951&r2=232952&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java Tue Aug 16 00:35:42 2005
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* $Id: ImageFactory.java,v 1.7 2004/05/12 23:19:52 gmazza Exp $ */
+/* $Id$ */
 
 package org.apache.fop.image;
 
@@ -300,6 +300,17 @@
         }
         return imt.getFirstImplementingClass();
     }
+    
+    /**
+     * Forces all the image caches to be cleared. This should normally only be used in
+     * testing environments. If you happen to think that you need to call this yourself 
+     * in a production environment, please notify the development team so we can look 
+     * into the issue. A call like this shouldn't be necessary anymore like it may have 
+     * been with FOP 0.20.5.
+     */
+    public void clearCaches() {
+        cache.clearAll();
+    }
 }
 
 /**
@@ -315,6 +326,7 @@
         if (invalid.contains(url)) {
             return null;
         }
+        //TODO Doesn't seem to be fully implemented. Do we need it at all? Not referenced.
         return null;
     }
 
@@ -333,6 +345,12 @@
     public void removeContext(FOUserAgent context) {
         // do nothing
     }
+
+    /** @see org.apache.fop.image.ImageCache#clearAll() */
+    public void clearAll() {
+        invalid.clear();
+    }
+    
 }
 
 /**
@@ -496,6 +514,16 @@
             return invalid.contains(url);
         }
 
+    }
+
+    /** @see org.apache.fop.image.ImageCache#clearAll() */
+    public void clearAll() {
+        this.weakStore.clear();
+        this.invalid.clear();
+        //The context-sensitive caches are not cleared so there are no negative side-effects
+        //in a multi-threaded environment. Not that it's a good idea to use this method at
+        //all except in testing environments. If such a calls is necessary in normal environments
+        //we need to check on memory leaks!
     }
 
 }

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/ImageFactory.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java?rev=232952&r1=232951&r2=232952&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java Tue Aug 16 00:35:42 2005
@@ -19,6 +19,7 @@
 package org.apache.fop;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.OutputStream;
 
 import javax.xml.transform.Result;
@@ -39,6 +40,7 @@
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
+import org.apache.fop.image.ImageFactory;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.xpath.XPathAPI;
 import org.apache.xpath.objects.XObject;
@@ -63,11 +65,26 @@
      * Test custom URI resolution with a hand-written URIResolver.
      * @throws Exception if anything fails
      */
-    public void testFO1() throws Exception {
+    public void testFO1a() throws Exception {
+        innerTestFO1(false);
+    }
+    
+    /**
+     * Test custom URI resolution with a hand-written URIResolver.
+     * @throws Exception if anything fails
+     */
+    public void testFO1b() throws Exception {
+        innerTestFO1(true);
+    }
+    
+    private void innerTestFO1(boolean withStream) throws Exception {
+        //Reset the image caches to force URI resolution!
+        ImageFactory.getInstance().clearCaches();
+        
         File foFile = new File(getBaseDir(), "test/xml/uri-resolution1.fo");
         
         FOUserAgent ua = new FOUserAgent();
-        MyURIResolver resolver = new MyURIResolver(); 
+        MyURIResolver resolver = new MyURIResolver(withStream); 
         ua.setURIResolver(resolver);
         ua.setBaseURL(foFile.getParentFile().toURL().toString());
 
@@ -89,12 +106,12 @@
      * Test custom URI resolution with a hand-written URIResolver.
      * @throws Exception if anything fails
      */
-    public void testFO2() throws Exception {
+    public void DISABLEDtestFO2() throws Exception {
         //TODO This will only work when we can do URI resolution inside Batik!
         File foFile = new File(getBaseDir(), "test/xml/uri-resolution2.fo");
         
         FOUserAgent ua = new FOUserAgent();
-        MyURIResolver resolver = new MyURIResolver(); 
+        MyURIResolver resolver = new MyURIResolver(false); 
         ua.setURIResolver(resolver);
         ua.setBaseURL(foFile.getParentFile().toURL().toString());
 
@@ -177,9 +194,14 @@
 
         private static final String PREFIX = "funky:";
         
+        private boolean withStream; 
         private int successCount = 0;
         private int failureCount = 0;
         
+        public MyURIResolver(boolean withStream) {
+            this.withStream = withStream;
+        }
+        
         /**
          * @see javax.xml.transform.URIResolver#resolve(java.lang.String, java.lang.String)
          */
@@ -188,7 +210,16 @@
                 String name = href.substring(PREFIX.length());
                 if ("myimage123".equals(name)) {
                     File image = new File(getBaseDir(), "test/resources/images/bgimg300dpi.jpg");
-                    StreamSource src = new StreamSource(image);
+                    Source src;
+                    if (withStream) {
+                        try {
+                            src = new StreamSource(new java.io.FileInputStream(image));
+                        } catch (FileNotFoundException e) {
+                            throw new TransformerException(e.getMessage(), e);
+                        }
+                    } else {
+                        src = new StreamSource(image);
+                    }
                     successCount++;
                     return src;
                 } else {

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/URIResolutionTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org


Re: svn commit: r232952 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/image/ImageCache.java src/java/org/apache/fop/image/ImageFactory.java test/java/org/apache/fop/URIResolutionTestCase.java

Posted by Jeremias Maerki <de...@greenmail.ch>.
That already happens!

On 16.08.2005 23:16:44 J.Pietschmann wrote:
> jeremias@apache.org wrote:
> > Add a method to clear all image caches for testing purposes. It
> > shouldn't be necessary anymore to call such a method in a production
> > environment or we have a problem with the image cache.
> 
> It depends how fine grained cache control should be.
> If I format a lot of reports with company and division
> logos in the headers, I'd probably like to keep them
> in the cache across different rendering runs.
> But this can be left for later fine tuning.
> 
> J.Pietschmann



Jeremias Maerki


Re: svn commit: r232952 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/image/ImageCache.java src/java/org/apache/fop/image/ImageFactory.java test/java/org/apache/fop/URIResolutionTestCase.java

Posted by "J.Pietschmann" <j3...@yahoo.de>.
jeremias@apache.org wrote:
> Add a method to clear all image caches for testing purposes. It
> shouldn't be necessary anymore to call such a method in a production
> environment or we have a problem with the image cache.

It depends how fine grained cache control should be.
If I format a lot of reports with company and division
logos in the headers, I'd probably like to keep them
in the cache across different rendering runs.
But this can be left for later fine tuning.

J.Pietschmann