Updated Branches:
  refs/heads/master d30af7d18 -> 91c604d55

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/91c604d5
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/91c604d5
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/91c604d5

Branch: refs/heads/master
Commit: 91c604d55c2a5692f8b6321c1980c4ba4b5574bf
Parents: d30af7d
Author: Peter Ertl <[email protected]>
Authored: Sun May 6 14:40:22 2012 +0200
Committer: Peter Ertl <[email protected]>
Committed: Sun May 6 14:40:22 2012 +0200

----------------------------------------------------------------------
 .../mapper/BasicResourceReferenceMapper.java       |   18 ++--
 .../wicket/core/request/mapper/ResourceMapper.java |   21 +++--
 .../wicket/request/resource/AbstractResource.java  |    9 ++-
 .../request/resource/CssPackageResource.java       |    4 +-
 .../request/resource/CssResourceReference.java     |    2 +-
 .../request/resource/ICssPackageResource.java      |   28 +++++
 .../resource/IJavaScriptPackageResource.java       |   25 +++++
 .../wicket/request/resource/IPackageResource.java  |   59 ++++++++++
 .../resource/JavaScriptPackageResource.java        |    4 +-
 .../resource/JavaScriptResourceReference.java      |    2 +-
 .../wicket/request/resource/PackageResource.java   |   59 +++++-----
 .../request/resource/PackageResourceDecorator.java |   85 +++++++++++++++
 .../request/resource/PackageResourceReference.java |    2 +-
 .../resource/caching/IStaticCacheableResource.java |    5 +-
 .../NonCachingPackageResourceDecorator.java        |   45 ++++++++
 .../version/RequestCycleCachedResourceVersion.java |    2 +-
 16 files changed, 314 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..63b06d0 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
@@ -229,16 +229,20 @@ class BasicResourceReferenceMapper extends 
AbstractResourceReferenceMapper
                                        // apply caching if required
                                        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.getCacheKey() != 
null)
                                                {
-                                                       throw new 
IllegalStateException(
-                                                               "caching 
strategy returned empty name for " + resource);
+                                                       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/91c604d5/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..2e26caa 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,27 @@ 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();
 
+                       // is resource supposed to be cached?
                        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()))
+                               // is caching enabled?
+                               if (cacheable.getCacheKey() != null)
                                {
-                                       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/91c604d5/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..6d39189 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
@@ -480,7 +480,14 @@ public abstract class AbstractResource implements IResource
                // let caching strategy decorate response if resource is 
intended to be cached
                if (this instanceof IStaticCacheableResource)
                {
-                       getCachingStrategy().decorateResponse(data, 
(IStaticCacheableResource)this);
+                       final IStaticCacheableResource cacheable = 
(IStaticCacheableResource)this;
+
+                       // is caching enabled?
+                       if (cacheable.getCacheKey() != null)
+                       {
+                               // decorate web response
+                               getCachingStrategy().decorateResponse(data, 
cacheable);
+                       }
                }
                // set response header
                setResponseHeaders(data, attributes);

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
index f6cf010..f7a77d9 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
@@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Package resource for css files. It strips comments and whitespace from css.
  */
-public class CssPackageResource extends PackageResource
+public class CssPackageResource extends PackageResource implements 
ICssPackageResource
 {
        private static final long serialVersionUID = 1L;
 
@@ -57,7 +57,7 @@ public class CssPackageResource extends PackageResource
 
                ICssCompressor compressor = getCompressor();
 
-               if (compressor != null && getCompress())
+               if (compressor != null && isCompress())
                {
                        try
                        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
index c43ee3e..a3cf582 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
@@ -64,7 +64,7 @@ public class CssResourceReference extends 
PackageResourceReference
        }
 
        @Override
-       public CssPackageResource getResource()
+       public ICssPackageResource getResource()
        {
                return new CssPackageResource(getScope(), getName(), 
getLocale(), getStyle(),
                        getVariation());

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
new file mode 100644
index 0000000..cbb98a7
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * Represents a css stylesheet package resource
+ */
+public interface ICssPackageResource extends IPackageResource
+{
+       // to be extended in the future
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
new file mode 100644
index 0000000..75f2316
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+/**
+ * Represents a javascript package resource
+ */
+public interface IJavaScriptPackageResource extends IPackageResource
+{
+       // to be extended in the future
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
new file mode 100644
index 0000000..8f6ad99
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * Represents a localizable static resource.
+ */
+public interface IPackageResource extends IStaticCacheableResource
+{
+       /**
+        * Gets the scoping class, used for class loading and to determine the 
package.
+        *
+        * @return the scoping class
+        */
+       Class<?> getScope();
+
+       /**
+        * Gets the style.
+        *
+        * @return the style
+        */
+       String getStyle();
+
+       /**
+        * locate resource stream for current resource
+        *
+        * @return resource stream or <code>null</code> if not found
+        */
+       IResourceStream getResourceStream();
+
+       /**
+        * @return whether {@link 
org.apache.wicket.resource.ITextResourceCompressor} 
+        *         can be used to compress the resource.
+        */
+       boolean isCompress();
+
+       /**
+        * @param compress
+        *            A flag indicating whether the resource should be 
compressed.
+        */
+       void setCompress(boolean compress);
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
index 210fee1..b317b8a 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
@@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Package resource for javascript files. It strips comments and whitespace 
from javascript.
  */
-public class JavaScriptPackageResource extends PackageResource
+public class JavaScriptPackageResource extends PackageResource implements 
IJavaScriptPackageResource
 {
        private static final long serialVersionUID = 1L;
 
@@ -57,7 +57,7 @@ public class JavaScriptPackageResource extends PackageResource
 
                IJavaScriptCompressor compressor = getCompressor();
 
-               if (compressor != null && getCompress())
+               if (compressor != null && isCompress())
                {
                        try
                        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
index eb2887d..e1a7250 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
@@ -65,7 +65,7 @@ public class JavaScriptResourceReference extends 
PackageResourceReference
        }
 
        @Override
-       public JavaScriptPackageResource getResource()
+       public IJavaScriptPackageResource getResource()
        {
                return new JavaScriptPackageResource(getScope(), getName(), 
getLocale(), getStyle(),
                        getVariation());

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..9975f2e 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
@@ -61,7 +61,7 @@ import org.slf4j.LoggerFactory;
  * @author Juergen Donnerstag
  * @author Matej Knopp
  */
-public class PackageResource extends AbstractResource implements 
IStaticCacheableResource
+public class PackageResource extends AbstractResource implements 
IPackageResource
 {
        private static final Logger log = 
LoggerFactory.getLogger(PackageResource.class);
 
@@ -171,9 +171,10 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
                return style != null ? style : Session.get().getStyle();
        }
 
+       @Override
        public Serializable getCacheKey()
        {
-               IResourceStream stream = getCacheableResourceStream();
+               final IResourceStream stream = 
locateResourceStream(getCurrentStyle(), getCurrentLocale());
 
                // if resource stream can not be found do not cache
                if (stream == null)
@@ -185,21 +186,13 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
                        stream.getVariation());
        }
 
-       /**
-        * Gets the scoping class, used for class loading and to determine the 
package.
-        * 
-        * @return the scoping class
-        */
+       @Override
        public final Class<?> getScope()
        {
                return WicketObjects.resolveClass(scopeName);
        }
 
-       /**
-        * Gets the style.
-        * 
-        * @return the style
-        */
+       @Override
        public final String getStyle()
        {
                return style;
@@ -339,34 +332,25 @@ 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());
        }
        
-       /**
-        * locate resource stream for current resource
-        * 
-        * @return resource stream or <code>null</code> if not found
-        */
+       @Override
        public IResourceStream getResourceStream()
        {
                return internalGetResourceStream(style, locale);
        }
 
-       /**
-        * @return whether {@link 
org.apache.wicket.resource.ITextResourceCompressor} can be used to compress the
-        *         resource.
-        */
-       public boolean getCompress()
+       @Override
+       public boolean isCompress()
        {
                return compress;
        }
 
-       /**
-        * @param compress
-        *            A flag indicating whether the resource should be 
compressed.
-        */
+       @Override
        public void setCompress(boolean compress)
        {
                this.compress = compress;
@@ -374,10 +358,7 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
 
        private IResourceStream internalGetResourceStream(final String style, 
final Locale locale)
        {
-               IResourceStreamLocator resourceStreamLocator = Application.get()
-                               .getResourceSettings()
-                               .getResourceStreamLocator();
-               IResourceStream resourceStream = 
resourceStreamLocator.locate(getScope(), absolutePath, style, variation, 
locale, null, false);
+               IResourceStream resourceStream = locateResourceStream(style, 
locale);
 
                Class<?> realScope = getScope();
                String realPath = absolutePath;
@@ -415,6 +396,24 @@ public class PackageResource extends AbstractResource 
implements IStaticCacheabl
        }
 
        /**
+        * locate resource stream taking style and locale into account
+        * 
+        * @param style
+        *          client style
+        * @param locale
+        *           client locale
+        * @return client-specific resource stream
+        */
+       private IResourceStream locateResourceStream(final String style, final 
Locale locale)
+       {
+               IResourceStreamLocator resourceStreamLocator = Application.get()
+                               .getResourceSettings()
+                               .getResourceStreamLocator();
+               
+               return resourceStreamLocator.locate(getScope(), absolutePath, 
style, variation, locale, null, false);
+       }
+
+       /**
         * @param scope
         *            resource scope
         * @param path

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
new file mode 100644
index 0000000..372dc8e
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import java.io.Serializable;
+
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * wraps an existing {@link 
org.apache.wicket.request.resource.IPackageResource} and 
+ * enables overriding of its public methods.
+ * 
+ * @autor Peter Ertl
+ */
+public class PackageResourceDecorator implements IPackageResource
+{
+       private final IPackageResource resource;
+
+       public PackageResourceDecorator(final IPackageResource resource)
+       {
+               this.resource = resource;
+       }
+
+       @Override
+       public Class<?> getScope()
+       {
+               return resource.getScope();
+       }
+
+       @Override
+       public String getStyle()
+       {
+               return resource.getStyle();
+       }
+
+       @Override
+       public IResourceStream getResourceStream()
+       {
+               return resource.getResourceStream();
+       }
+
+       @Override
+       public boolean isCompress()
+       {
+               return resource.isCompress();
+       }
+
+       @Override
+       public void setCompress(final boolean compress)
+       {
+               resource.setCompress(compress);
+       }
+
+       @Override
+       public Serializable getCacheKey()
+       {
+               return resource.getCacheKey();
+       }
+
+       @Override
+       public IResourceStream getCacheableResourceStream()
+       {
+               return resource.getCacheableResourceStream();
+       }
+
+       @Override
+       public void respond(final Attributes attributes)
+       {
+               resource.respond(attributes);
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
index 6becc8e..924555b 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
@@ -107,7 +107,7 @@ public class PackageResourceReference extends 
ResourceReference
         * @see 
org.apache.wicket.request.resource.ResourceReference#getResource()
         */
        @Override
-       public PackageResource getResource()
+       public IPackageResource getResource()
        {
                final String extension = getExtension();
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..09f74eb 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
@@ -34,8 +34,9 @@ public interface IStaticCacheableResource extends IResource
         * get unique caching key for the resource stream produced by
         * {@link #getCacheableResourceStream()}
         * 
-        * @return serializable key with properly supports {@link 
#equals(Object)} and
-        *         {@link #hashCode()}
+        * @return serializable key with properly implements {@link 
#equals(Object)} and
+        *         {@link #hashCode()} or {@code null} which indicates the 
resource
+        *         must not be processed by {@link IResourceCachingStrategy}
         */
        Serializable getCacheKey();
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
new file mode 100644
index 0000000..ac4a8d7
--- /dev/null
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource.caching.resource;
+
+import java.io.Serializable;
+
+import org.apache.wicket.request.resource.IPackageResource;
+import org.apache.wicket.request.resource.PackageResourceDecorator;
+
+/**
+ * wraps an existing {@link IPackageResource} and disables caching via 
+ * {@link org.apache.wicket.request.resource.caching.IResourceCachingStrategy}
+ * by returning {@code null} for the cache key in method 
+ * {@link 
org.apache.wicket.request.resource.caching.IStaticCacheableResource#getCacheKey()}
+ *
+ * @autor Peter Ertl
+ */
+public class NonCachingPackageResourceDecorator extends 
PackageResourceDecorator
+{
+       public NonCachingPackageResourceDecorator(final IPackageResource 
resource)
+       {
+               super(resource);
+       }
+
+       @Override
+       public Serializable getCacheKey()
+       {
+               // disable caching by returning null
+               return null;
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
index dbcec9d..03bd350 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
@@ -81,7 +81,7 @@ public class RequestCycleCachedResourceVersion implements 
IResourceVersion
                        key = resource.getCacheKey();
 
                        // does cache exist within current request cycle?
-                       if (cache == null)
+                       if (cache == null && key != null)
                        {
                                // no, so create it
                                requestCycle.setMetaData(CACHE_KEY, cache = 
Generics.newHashMap());

Reply via email to