Updated Branches:
  refs/heads/master 40bdfd41d -> 8ee7eaea5

WICKET-4532 Disable caching for particular resources


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8ee7eaea
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8ee7eaea
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8ee7eaea

Branch: refs/heads/master
Commit: 8ee7eaea544b49a37daa4a4fbdf41df855a7fa6e
Parents: 6ccdbb7
Author: Peter Ertl <p...@apache.org>
Authored: Mon May 7 11:23:53 2012 +0200
Committer: Peter Ertl <p...@apache.org>
Committed: Mon May 7 11:23:53 2012 +0200

----------------------------------------------------------------------
 .../mapper/BasicResourceReferenceMapper.java       |   23 +++++++++------
 .../wicket/core/request/mapper/ResourceMapper.java |   21 ++++++++------
 .../wicket/request/resource/AbstractResource.java  |   11 ++++++-
 .../request/resource/ContextRelativeResource.java  |   17 +++++++++-
 .../wicket/request/resource/PackageResource.java   |   23 ++++++++++++++-
 .../resource/caching/IStaticCacheableResource.java |    7 ++++
 .../resource/bundles/ConcatBundleResource.java     |   13 ++++++++
 .../mapper/BasicResourceReferenceMapperTest.java   |    6 ++++
 8 files changed, 98 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
index 6f4d417..3ec6cea 100755
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
@@ -226,19 +226,24 @@ class BasicResourceReferenceMapper extends 
AbstractResourceReferenceMapper
                                {
                                        final IResource resource = 
reference.getResource();
 
-                                       // apply caching if required
+                                       // is resource supposed to be cached?
                                        if (resource instanceof 
IStaticCacheableResource)
                                        {
-                                               // add caching related 
information to filename + query parameters
                                                final IStaticCacheableResource 
cacheable = (IStaticCacheableResource)resource;
-                                               final ResourceUrl resourceUrl = 
new ResourceUrl(token, parameters);
-                                               
getCachingStrategy().decorateUrl(resourceUrl, cacheable);
-                                               token = 
resourceUrl.getFileName();
-
-                                               if (Strings.isEmpty(token))
+                                               
+                                               // is caching enabled?
+                                               if(cacheable.isCacheEnabled())
                                                {
-                                                       throw new 
IllegalStateException(
-                                                               "caching 
strategy returned empty name for " + resource);
+                                                       // apply caching scheme 
to resource url
+                                                       final ResourceUrl 
resourceUrl = new ResourceUrl(token, parameters);
+                                                       
getCachingStrategy().decorateUrl(resourceUrl, cacheable);
+                                                       token = 
resourceUrl.getFileName();
+       
+                                                       if 
(Strings.isEmpty(token))
+                                                       {
+                                                               throw new 
IllegalStateException(
+                                                                       
"caching strategy returned empty name for " + resource);
+                                                       }
                                                }
                                        }
                                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
index 984f0ad..912bf09 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
@@ -215,22 +215,25 @@ public class ResourceMapper extends AbstractMapper 
implements IRequestMapper
 
                if (Strings.isEmpty(filename) == false)
                {
-                       // TODO is calling getResource() a potential 
performance bottleneck?
                        final IResource resource = 
resourceReference.getResource();
 
                        if (resource instanceof IStaticCacheableResource)
                        {
                                final IStaticCacheableResource cacheable = 
(IStaticCacheableResource)resource;
-                               final ResourceUrl cacheUrl = new 
ResourceUrl(filename, parameters);
-
-                               getCachingStrategy().decorateUrl(cacheUrl, 
cacheable);
-
-                               if (Strings.isEmpty(cacheUrl.getFileName()))
+                               
+                               if(cacheable.isCacheEnabled())
                                {
-                                       throw new 
IllegalStateException("caching strategy returned empty name for " +
-                                               resource);
+                                       final ResourceUrl cacheUrl = new 
ResourceUrl(filename, parameters);
+       
+                                       
getCachingStrategy().decorateUrl(cacheUrl, cacheable);
+       
+                                       if 
(Strings.isEmpty(cacheUrl.getFileName()))
+                                       {
+                                               throw new 
IllegalStateException("caching strategy returned empty name for " +
+                                                       resource);
+                                       }
+                                       segments.set(lastSegmentAt, 
cacheUrl.getFileName());
                                }
-                               segments.set(lastSegmentAt, 
cacheUrl.getFileName());
                        }
                }
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
index 2033a72..0bbd4e6 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
@@ -477,10 +477,17 @@ public abstract class AbstractResource implements 
IResource
                // Get a "new" ResourceResponse to write a response
                ResourceResponse data = newResourceResponse(attributes);
 
-               // let caching strategy decorate response if resource is 
intended to be cached
+               // is resource supposed to be cached?
                if (this instanceof IStaticCacheableResource)
                {
-                       getCachingStrategy().decorateResponse(data, 
(IStaticCacheableResource)this);
+                       final IStaticCacheableResource cacheable = 
(IStaticCacheableResource)this;
+
+                       // is caching enabled?
+                       if (cacheable.isCacheEnabled())
+                       {
+                               // apply caching strategy to response
+                               getCachingStrategy().decorateResponse(data, 
cacheable);
+                       }
                }
                // set response header
                setResponseHeaders(data, attributes);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
index 8b3e87b..3b99377 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
@@ -44,6 +44,7 @@ public class ContextRelativeResource extends AbstractResource 
implements IStatic
        private static final Logger log = 
LoggerFactory.getLogger(ContextRelativeResource.class);
 
        private final String path;
+       private boolean cacheEnabled;
 
        /**
         * Construct.
@@ -62,9 +63,21 @@ public class ContextRelativeResource extends 
AbstractResource implements IStatic
                {
                        pathRelativeToContextRoot = "/" + 
pathRelativeToContextRoot;
                }
-               path = pathRelativeToContextRoot;
+               this.path = pathRelativeToContextRoot;
+               this.cacheEnabled = true;
        }
-       
+
+       @Override
+       public boolean isCacheEnabled()
+       {
+               return cacheEnabled;
+       }
+
+       public void setCacheEnabled(final boolean cacheEnabled)
+       {
+               this.cacheEnabled = cacheEnabled;
+       }
+
        @Override
        public Serializable getCacheKey()
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
index 640639b..93e65b5 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
@@ -124,6 +124,13 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
        private boolean compress = false;
 
        /**
+        * controls whether {@link 
org.apache.wicket.request.resource.caching.IResourceCachingStrategy}
+        * should be applied to resource
+        */
+       
+       private boolean cacheEnabled;
+       
+       /**
         * Hidden constructor.
         * 
         * @param scope
@@ -155,10 +162,11 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
                        path = name;
                }
 
-               scopeName = scope.getName();
+               this.scopeName = scope.getName();
                this.locale = locale;
                this.style = style;
                this.variation = variation;
+               this.cacheEnabled = true;
        }
 
        private Locale getCurrentLocale()
@@ -171,6 +179,18 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
                return style != null ? style : Session.get().getStyle();
        }
 
+       @Override
+       public boolean isCacheEnabled()
+       {
+               return cacheEnabled;
+       }
+
+       public void setCacheEnabled(final boolean cacheEnabled)
+       {
+               this.cacheEnabled = cacheEnabled;
+       }
+
+       @Override
        public Serializable getCacheKey()
        {
                IResourceStream stream = getCacheableResourceStream();
@@ -339,6 +359,7 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
         * @see 
org.apache.wicket.request.resource.caching.IStaticCacheableResource#getCacheableResourceStream()
         * @see #getResourceStream()
         */
+       @Override
        public IResourceStream getCacheableResourceStream()
        {
                return internalGetResourceStream(getCurrentStyle(), 
getCurrentLocale());

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
index a861e27..b182056 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
@@ -31,6 +31,13 @@ import org.apache.wicket.util.resource.IResourceStream;
 public interface IStaticCacheableResource extends IResource
 {
        /**
+        * controls whether caching of the resource is enabled or disabled
+        * 
+        * @return @{code true} if caching is enabled
+        */
+       boolean isCacheEnabled();
+       
+       /**
         * get unique caching key for the resource stream produced by
         * {@link #getCacheableResourceStream()}
         * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
index 2307f23..4eb04c5 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
@@ -54,6 +54,7 @@ public class ConcatBundleResource extends AbstractResource 
implements IStaticCac
 
        private static final long serialVersionUID = 1L;
        private List<? extends IReferenceHeaderItem> providedResources;
+       private boolean cacheEnabled;
 
        /**
         * Construct.
@@ -63,6 +64,7 @@ public class ConcatBundleResource extends AbstractResource 
implements IStaticCac
        public ConcatBundleResource(List<? extends IReferenceHeaderItem> 
providedResources)
        {
                this.providedResources = Args.notNull(providedResources, 
"providedResources");
+               this.cacheEnabled = true;
        }
 
        @Override
@@ -173,6 +175,17 @@ public class ConcatBundleResource extends AbstractResource 
implements IStaticCac
        }
 
        @Override
+       public boolean isCacheEnabled()
+       {
+               return cacheEnabled;
+       }
+
+       public void setCacheEnabled(final boolean cacheEnabled)
+       {
+               this.cacheEnabled = cacheEnabled;
+       }
+
+       @Override
        public Serializable getCacheKey()
        {
                ArrayList<Serializable> key = new 
ArrayList<Serializable>(providedResources.size());

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
index 21e30a0..ff76ed0 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
@@ -477,6 +477,12 @@ public class BasicResourceReferenceMapperTest extends 
AbstractResourceReferenceM
                        public void respond(Attributes attributes)
                        {
                        }
+
+                       @Override
+                       public boolean isCacheEnabled()
+                       {
+                               return true;
+                       }
                };
 
                final ResourceReference reference = new 
ResourceReference(getClass(), "versioned",

Reply via email to