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",