You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by il...@apache.org on 2012/06/28 17:50:54 UTC

svn commit: r1355053 - /cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java

Author: ilgrosso
Date: Thu Jun 28 15:50:53 2012
New Revision: 1355053

URL: http://svn.apache.org/viewvc?rev=1355053&view=rev
Log:
Adding toString() and a way to escape sitemap-only parameters for caching

Modified:
    cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java

Modified: cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java?rev=1355053&r1=1355052&r2=1355053&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java (original)
+++ cocoon/cocoon3/trunk/cocoon-pipeline/src/main/java/org/apache/cocoon/pipeline/caching/ParameterCacheKey.java Thu Jun 28 15:50:53 2012
@@ -16,10 +16,13 @@
  */
 package org.apache.cocoon.pipeline.caching;
 
+import java.util.Arrays;
 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.util.StringRepresentation;
 import org.apache.cocoon.util.murmurhash.MurmurHashCodeBuilder;
 
 /**
@@ -28,6 +31,18 @@ import org.apache.cocoon.util.murmurhash
 public class ParameterCacheKey extends AbstractCacheKey {
 
     private static final long serialVersionUID = 1L;
+
+    /**
+     * Set of parameter names that must not be considered for caching when in Sitemap context.
+     */
+    private static final Set<String> SITEMAP_PARAM_NON_CACHABLE_NAMES = new HashSet<String>(Arrays.asList(new String[]{
+                "cocoon",
+                "org.apache.cocoon.configuration.Settings",
+                "javax.servlet.ServletContext",
+                "javax.servlet.http.HttpServletRequest",
+                "javax.servlet.http.HttpServletResponse"
+            }));
+
     private final Map<String, String> parameters;
 
     public ParameterCacheKey() {
@@ -60,17 +75,43 @@ public class ParameterCacheKey extends A
         this.parameters.put(name, Integer.toString(value));
     }
 
-    public void addParameter(String name, Map<?, ?> value) {
+    public final void addParameter(String name, Map<?, ?> value) {
         for (Entry<?, ?> object : value.entrySet()) {
             this.parameters.put(name + "_" + object.getKey().toString(), object.getValue().toString());
         }
     }
 
-    public void addParameter(String name, String value) {
+    public final void addParameter(String name, String value) {
         this.parameters.put(name, value);
     }
 
     /**
+     * Add a parameter to this cache key, only when name is safe in Sitemap context.
+     *
+     * @param name parameter name
+     * @param value parameter value
+     */
+    public void addSitemapParameter(String name, Object value) {
+        if (!SITEMAP_PARAM_NON_CACHABLE_NAMES.contains(name)) {
+            this.addParameter(name, value.toString());
+        }
+    }
+
+    /**
+     * Set this cache key parameters, only when names that are safe in Sitemap context.
+     *
+     * @param sitemapParameters
+     * @return this instance, for chained invokation
+     */
+    public ParameterCacheKey setSitemapParameters(Map<String, Object> sitemapParameters) {
+        this.parameters.clear();
+        for (Entry<String, Object> entry : sitemapParameters.entrySet()) {
+            this.addSitemapParameter(entry.getKey(), entry.getValue());
+        }
+        return this;
+    }
+
+    /**
      * {@inheritDoc}
      *
      * @see java.lang.Object#equals(java.lang.Object)
@@ -90,6 +131,7 @@ public class ParameterCacheKey extends A
      *
      * @see org.apache.cocoon.pipeline.caching.CacheKey#getLastModified()
      */
+    @Override
     public long getLastModified() {
         return -1;
     }
@@ -113,7 +155,13 @@ public class ParameterCacheKey extends A
      *
      * @see org.apache.cocoon.pipeline.caching.CacheKey#isValid(org.apache.cocoon.pipeline.caching.CacheKey)
      */
+    @Override
     public boolean isValid(CacheKey cacheKey) {
         return this.equals(cacheKey);
     }
+
+    @Override
+    public String toString() {
+        return StringRepresentation.buildString(this, "parameters=" + this.parameters);
+    }
 }