svn commit: r1347679 - /cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java

[email protected]
Newsgroups gmane.text.xml.cocoon.cvs
Message-ID <[email protected]>
Author: ilgrosso
Date: Thu Jun  7 15:26:20 2012
New Revision: 1347679

URL: http://svn.apache.org/viewvc?rev=1347679&view=rev
Log:
[COCOON3-102] Using CompoundCacheKey with all URLs to be xincluded

Modified:
    cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java

Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java?rev=1347679&r1=1347678&r2=1347679&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XIncludeTransformer.java Thu Jun  7 15:26:20 2012
@@ -26,11 +26,18 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 import org.apache.cocoon.pipeline.ProcessingException;
+import org.apache.cocoon.pipeline.caching.CacheKey;
+import org.apache.cocoon.pipeline.caching.CompoundCacheKey;
+import org.apache.cocoon.pipeline.caching.TimestampCacheKey;
+import org.apache.cocoon.pipeline.component.CachingPipelineComponent;
 import org.apache.cocoon.sax.AbstractSAXTransformer;
 import org.apache.cocoon.sax.SAXConsumer;
+import org.apache.cocoon.sax.util.URLManipulationUtils;
 import org.apache.cocoon.sax.util.XMLUtils;
 import org.apache.cocoon.sax.xpointer.ParseException;
 import org.apache.cocoon.sax.xpointer.XPointer;
@@ -45,7 +52,7 @@ import org.xml.sax.SAXException;
 /**
  * $Id$
  */
-public final class XIncludeTransformer extends AbstractSAXTransformer implements SAXConsumer {
+public final class XIncludeTransformer extends AbstractSAXTransformer implements CachingPipelineComponent {
 
     private static final String XINCLUDE_NAMESPACE_URI = "http://www.w3.org/2001/XInclude";
 
@@ -125,6 +132,11 @@ public final class XIncludeTransformer e
      */
     private final Map<String, String> namespaces = new HashMap<String, String>();
 
+    /**
+     * Keep the set of URLs for <xi:include>.
+     */
+    private final Set<URL> xincludeURLs = new HashSet<URL>();
+
     public XIncludeTransformer() {
         // default empty constructor - used in the sitemap
     }
@@ -140,6 +152,7 @@ public final class XIncludeTransformer e
     @Override
     public void setConfiguration(final Map<String, ? extends Object> configuration) {
         this.setBaseUrl((URL) configuration.get(BASE_URL));
+        this.xincludeURLs.clear();
     }
 
     /**
@@ -300,6 +313,7 @@ public final class XIncludeTransformer e
                     "XIncludeTransformer: encountered empty href (= href pointing to the current document).");
         }
         URL source = this.createSource(href);
+        this.xincludeURLs.add(source);
         URLConnection urlConnection = null;
 
         try {
@@ -630,4 +644,20 @@ public final class XIncludeTransformer e
             }
         }
     }
+
+    @Override
+    public CacheKey constructCacheKey() {
+        CompoundCacheKey cacheKey = new CompoundCacheKey();
+
+        if (this.baseUrl != null) {
+            cacheKey.addCacheKey(new TimestampCacheKey(this.baseUrl,
+                    URLManipulationUtils.getLastModified(this.baseUrl)));
+        }
+        for (URL xincludeURL : this.xincludeURLs) {
+            cacheKey.addCacheKey(new TimestampCacheKey(xincludeURL,
+                    URLManipulationUtils.getLastModified(xincludeURL)));
+        }
+
+        return cacheKey;
+    }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.