Author: pete
Date: Thu Jun 30 02:59:56 2011
New Revision: 1141369

URL: http://svn.apache.org/viewvc?rev=1141369&view=rev
Log:
WICKET-3846 fixed : caching of package resources was not aware of the current 
locale, style and variation of the resource. same for the message digest 
functionality.

Added:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CacheResourceVersionKey.java
Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IResourceCachingStrategy.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/NoOpResourceCachingStrategy.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CachingResourceVersion.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/IResourceVersion.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/StaticResourceVersion.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapperTest.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
 Thu Jun 30 02:59:56 2011
@@ -26,6 +26,7 @@ import org.apache.wicket.request.handler
 import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.MetaInfStaticResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.ResourceUrl;
@@ -191,20 +192,25 @@ class BasicResourceReferenceMapper exten
                        {
                                String token = tokens.nextToken();
 
-                               // on the last component of the resource path 
add the timestamp
+                               // on the last component of the resource path 
add a version string ...
                                if (tokens.hasMoreTokens() == false)
                                {
-                                       ResourceUrl resourceUrl = new 
ResourceUrl(token, parameters);
-                                       
getCachingStrategy().decorateUrl(resourceUrl, reference);
-                                       token = resourceUrl.getFileName();
-
-                                       if (Strings.isEmpty(token))
-                                               throw new NullPointerException(
-                                                       "caching strategy must 
not return an empty filename");
-
-                                       if (parameters.getIndexedCount() > 0)
-                                               throw new IllegalStateException(
-                                                       "caching strategy must 
not add indexed parameters");
+                                       // ... but only for package resources
+                                       if(reference instanceof 
PackageResourceReference)
+                                       {
+                                               final PackageResourceReference 
pkgref = (PackageResourceReference)reference;
+                                               final ResourceUrl resourceUrl = 
new ResourceUrl(token, parameters);
+                                               
getCachingStrategy().decorateUrl(resourceUrl, pkgref);
+                                               token = 
resourceUrl.getFileName();
+
+                                               if (Strings.isEmpty(token))
+                                                       throw new 
NullPointerException(
+                                                               "caching 
strategy must not return an empty filename");
+
+                                               if 
(parameters.getIndexedCount() > 0)
+                                                       throw new 
IllegalStateException(
+                                                               "caching 
strategy must not add indexed parameters");
+                                       }
                                }
                                segments.add(token);
                        }

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
 Thu Jun 30 02:59:56 2011
@@ -304,7 +304,7 @@ public class PackageResource extends Abs
         * 
         * @return resource stream or <code>null</code> if not found
         */
-       public IResourceStream getResourceStream()
+       protected IResourceStream getResourceStream()
        {
                // Locate resource
                return ThreadContext.getApplication()

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
 Thu Jun 30 02:59:56 2011
@@ -158,6 +158,11 @@ public class PackageResourceReference ex
                return info.stream.lastModifiedTime();
        }
 
+       public StreamInfo getCurrentStreamInfo()
+       {
+               return lookupStream(getCurrentLocale(), getCurrentStyle(), 
getVariation());
+       }
+
        @Override
        public UrlAttributes getUrlAttributes()
        {
@@ -181,7 +186,7 @@ public class PackageResourceReference ex
                return value;
        }
 
-       private static class StreamInfo
+       public static class StreamInfo
        {
                public final IResourceStream stream;
                public final Locale locale;

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategy.java
 Thu Jun 30 02:59:56 2011
@@ -18,7 +18,7 @@ package org.apache.wicket.request.resour
 
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.resource.AbstractResource;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.util.lang.Args;
 
@@ -91,7 +91,7 @@ public class FilenameWithVersionResource
                return versionPrefix;
        }
 
-       public void decorateUrl(ResourceUrl url, ResourceReference reference)
+       public void decorateUrl(ResourceUrl url, PackageResourceReference 
reference)
        {
                // get version string for requested resource
                final String version = 
this.resourceVersion.getVersion(reference);

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IResourceCachingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IResourceCachingStrategy.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IResourceCachingStrategy.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IResourceCachingStrategy.java
 Thu Jun 30 02:59:56 2011
@@ -17,6 +17,7 @@
 package org.apache.wicket.request.resource.caching;
 
 import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 
 /**
@@ -42,11 +43,11 @@ public interface IResourceCachingStrateg
         * @param reference
         *            resource reference
         */
-       void decorateUrl(ResourceUrl url, ResourceReference reference);
+       void decorateUrl(ResourceUrl url, PackageResourceReference reference);
 
        /**
         * Removes caching related information from filename + parameters. In 
essenese this method
-        * undoes what {@link #decorateUrl(ResourceUrl, ResourceReference)} did.
+        * undoes what {@link #decorateUrl(ResourceUrl, 
PackageResourceReference)} did.
         * 
         * @param url
         *            parameters that were used to construct the url to the 
resource and from which

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/NoOpResourceCachingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/NoOpResourceCachingStrategy.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/NoOpResourceCachingStrategy.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/NoOpResourceCachingStrategy.java
 Thu Jun 30 02:59:56 2011
@@ -17,7 +17,7 @@
 package org.apache.wicket.request.resource.caching;
 
 import org.apache.wicket.request.resource.AbstractResource;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 
 /**
  * resource caching strategy that does nothing
@@ -35,7 +35,7 @@ public class NoOpResourceCachingStrategy
         */
        public static final IResourceCachingStrategy INSTANCE = new 
NoOpResourceCachingStrategy();
 
-       public void decorateUrl(ResourceUrl url, ResourceReference reference)
+       public void decorateUrl(ResourceUrl url, PackageResourceReference 
reference)
        {
        }
 

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategy.java
 Thu Jun 30 02:59:56 2011
@@ -19,7 +19,7 @@ package org.apache.wicket.request.resour
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.INamedParameters;
 import org.apache.wicket.request.resource.AbstractResource;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.util.lang.Args;
 
@@ -80,7 +80,7 @@ public class QueryStringWithVersionResou
                return versionParameter;
        }
 
-       public void decorateUrl(ResourceUrl url, final ResourceReference 
reference)
+       public void decorateUrl(ResourceUrl url, final PackageResourceReference 
reference)
        {
                String version = resourceVersion.getVersion(reference);
 

Added: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CacheResourceVersionKey.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CacheResourceVersionKey.java?rev=1141369&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CacheResourceVersionKey.java
 (added)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CacheResourceVersionKey.java
 Thu Jun 30 02:59:56 2011
@@ -0,0 +1,94 @@
+/*
+ * 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.version;
+
+import java.io.Serializable;
+import java.util.Locale;
+
+import org.apache.wicket.request.resource.PackageResourceReference;
+import org.apache.wicket.util.lang.Args;
+
+public class CacheResourceVersionKey implements Serializable
+{
+       private final Class<?> scope;
+       private final String name;
+       private final Locale locale;
+       private final String style;
+       private final String variation;
+
+       public CacheResourceVersionKey(PackageResourceReference 
resourceReference,
+                                      PackageResourceReference.StreamInfo 
streamInfo)
+       {
+               Args.notNull(resourceReference, "resourceReference");
+               Args.notNull(streamInfo, "streamInfo");
+               this.scope = resourceReference.getScope();
+               this.name = resourceReference.getName();
+               this.locale = streamInfo.locale;
+               this.style = streamInfo.style;
+               this.variation = streamInfo.variation;
+       }
+
+       @Override
+       public boolean equals(Object o)
+       {
+               if (this == o)
+                       return true;
+
+               if (!(o instanceof CacheResourceVersionKey))
+                       return false;
+
+               CacheResourceVersionKey that = (CacheResourceVersionKey)o;
+
+               if (locale != null? !locale.equals(that.locale) : that.locale 
!= null)
+                       return false;
+               if (!name.equals(that.name))
+                       return false;
+               if (!scope.equals(that.scope))
+                       return false;
+               if (style != null? !style.equals(that.style) : that.style != 
null)
+                       return false;
+               if (variation != null? !variation.equals(that.variation) : 
that.variation != null)
+                       return false;
+
+               return true;
+       }
+
+       @Override
+       public int hashCode()
+       {
+               int result = scope.hashCode();
+               result = 31 * result + name.hashCode();
+               result = 31 * result + (locale != null? locale.hashCode() : 0);
+               result = 31 * result + (style != null? style.hashCode() : 0);
+               result = 31 * result + (variation != null? variation.hashCode() 
: 0);
+               return result;
+       }
+
+       @Override
+       public String toString()
+       {
+               final StringBuilder sb = new StringBuilder();
+               sb.append("CacheResourceVersionKey");
+               sb.append("{scope=").append(scope);
+               sb.append(", name='").append(name).append('\'');
+               sb.append(", locale=").append(locale);
+               sb.append(", style='").append(style).append('\'');
+               sb.append(", variation='").append(variation).append('\'');
+               sb.append('}');
+               return sb.toString();
+       }
+}

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CachingResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CachingResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CachingResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/CachingResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -16,10 +16,14 @@
  */
 package org.apache.wicket.request.resource.caching.version;
 
+import java.util.Collections;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.collections.MostRecentlyUsedMap;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -31,20 +35,44 @@ import org.apache.wicket.util.lang.Args;
  */
 public class CachingResourceVersion implements IResourceVersion
 {
+       private static final int DEFAULT_MAX_CACHE_ENTRIES = 5000;
        private static final String NULL_VALUE = "null";
 
        private final IResourceVersion delegate;
-       private final ConcurrentMap<ResourceReference, String> cache;
+       private final Map<CacheResourceVersionKey, String> cache;
 
        public CachingResourceVersion(IResourceVersion delegate)
        {
+               this(delegate, DEFAULT_MAX_CACHE_ENTRIES);
+       }
+
+       /**
+        * constructor
+        * 
+        * @param delegate
+        *          resource version provider
+        * @param maxEntries
+        *          maximum number of cache entries
+        */        
+       public CachingResourceVersion(IResourceVersion delegate, int maxEntries)
+       {
                this.delegate = Args.notNull(delegate, "delegate");
-               this.cache = new ConcurrentHashMap<ResourceReference, String>();
+               this.cache = Collections.synchronizedMap(
+                       new MostRecentlyUsedMap<CacheResourceVersionKey, 
String>(maxEntries));
        }
 
-       public String getVersion(ResourceReference resourceReference)
+       public String getVersion(PackageResourceReference resourceReference)
        {
-               String version = cache.get(resourceReference);
+               PackageResourceReference.StreamInfo streamInfo = 
resourceReference.getCurrentStreamInfo();
+               
+               if(streamInfo == null)
+               {
+                       return null;
+               }
+
+               final CacheResourceVersionKey key = new 
CacheResourceVersionKey(resourceReference, streamInfo);
+
+               String version = cache.get(key);
 
                if (version == null)
                {
@@ -54,7 +82,7 @@ public class CachingResourceVersion impl
                        {
                                version = NULL_VALUE;
                        }
-                       cache.put(resourceReference, version);
+                       cache.put(key, version);
                }
 
                //noinspection StringEquality

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/IResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/IResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/IResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/IResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.request.resource.caching.version;
 
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 
 /**
@@ -36,8 +37,8 @@ public interface IResourceVersion
         * get unique string identifying the version of the resource
         * 
         * @param resourceReference
-        *             reference to resource
+        *             reference to package resource
         * @return unique version string
         */
-       String getVersion(ResourceReference resourceReference);
+       String getVersion(PackageResourceReference resourceReference);
 }

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/LastModifiedResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.request.resource.caching.version;
 
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.time.Time;
 
@@ -29,7 +30,7 @@ import org.apache.wicket.util.time.Time;
  */
 public class LastModifiedResourceVersion implements IResourceVersion
 {
-       public String getVersion(ResourceReference resourceReference)
+       public String getVersion(PackageResourceReference resourceReference)
        {
                final Time lastModified = resourceReference.getLastModified();
 

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -18,14 +18,12 @@ package org.apache.wicket.request.resour
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.PackageResource;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.resource.IResourceStream;
@@ -94,44 +92,32 @@ public class MessageDigestResourceVersio
                this.bufferSize = bufferSize;
        }
 
-       public String getVersion(ResourceReference resourceReference)
+       public String getVersion(PackageResourceReference resourceReference)
        {
-               final IResource resource = resourceReference.getResource();
+               final PackageResourceReference.StreamInfo streamInfo = 
resourceReference.getCurrentStreamInfo();
 
-               if (PackageResource.class.isInstance(resource) == false)
+               if (streamInfo == null)
                {
-                       log.warn("message digests are only available with 
package " +
-                                "resource, not with " + resourceReference);
-
-                       return null;
-               }
-
-               // get resource data
-               final PackageResource packageResource = 
(PackageResource)resource;
-               final IResourceStream resourceStream = 
packageResource.getResourceStream();
-
-               if (resourceStream == null)
-               {
-                       log.debug("could not get resource stream for " + 
resource);
+                       log.debug("could not get stream info for " + 
resourceReference);
                        return null;
                }
 
                try
                {
                        // get binary hash
-                       final byte[] hash = computeDigest(resourceStream);
+                       final byte[] hash = computeDigest(streamInfo.stream);
 
                        // convert to hexadecimal
                        return Strings.toHexString(hash);
                }
                catch (ResourceStreamNotFoundException e)
                {
-                       log.warn("resource stream not found for " + resource);
+                       log.warn("resource stream not found for " + 
resourceReference);
                        return null;
                }
                catch (IOException e)
                {
-                       log.warn("resource stream not be read for " + resource, 
e);
+                       log.warn("resource stream not be read for " + 
resourceReference, e);
                        return null;
                }
        }

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.wicket.MetaDataKey;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Generics;
 
@@ -36,8 +36,8 @@ import org.apache.wicket.util.lang.Gener
  */
 public class RequestCycleCachedResourceVersion implements IResourceVersion
 {
-       private static final MetaDataKey<Map<ResourceReference, String>> 
CACHE_KEY =
-               new MetaDataKey<Map<ResourceReference, String>>()
+       private static final MetaDataKey<Map<CacheResourceVersionKey, String>> 
CACHE_KEY =
+               new MetaDataKey<Map<CacheResourceVersionKey, String>>()
                {
                        private static final long serialVersionUID = 1L;
                };
@@ -59,12 +59,21 @@ public class RequestCycleCachedResourceV
                this.delegate = Args.notNull(delegate, "delegate");
        }
 
-       public String getVersion(ResourceReference resourceReference)
+       public String getVersion(PackageResourceReference resourceReference)
        {
                // get current request cycle
                final RequestCycle requestCycle = 
ThreadContext.getRequestCycle();
 
-               Map<ResourceReference, String> cache = null;
+               Map<CacheResourceVersionKey, String> cache = null;
+
+               PackageResourceReference.StreamInfo streamInfo = 
resourceReference.getCurrentStreamInfo();
+               
+               if(streamInfo == null)
+               {
+                       return null;
+               }
+               
+               final CacheResourceVersionKey key = new 
CacheResourceVersionKey(resourceReference, streamInfo);
 
                // is request cycle available?
                if (requestCycle != null)
@@ -78,10 +87,10 @@ public class RequestCycleCachedResourceV
                                // no, so create it
                                requestCycle.setMetaData(CACHE_KEY, cache = 
Generics.newHashMap());
                        }
-                       else if (cache.containsKey(resourceReference))
+                       else if (cache.containsKey(key))
                        {
                                // lookup timestamp from cache (may contain 
NULL values which are valid)
-                               return cache.get(resourceReference);
+                               return cache.get(key);
                        }
                }
                
@@ -91,7 +100,7 @@ public class RequestCycleCachedResourceV
                // store value in cache (if it is available)
                if (cache != null)
                {
-                       cache.put(resourceReference, version);
+                       cache.put(key, version);
                }
                
                return version;

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/StaticResourceVersion.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/StaticResourceVersion.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/StaticResourceVersion.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/StaticResourceVersion.java
 Thu Jun 30 02:59:56 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.request.resource.caching.version;
 
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.lang.Args;
 
@@ -41,7 +42,7 @@ public class StaticResourceVersion imple
                this.version = Args.notNull(version, "version");
        }
 
-       public String getVersion(ResourceReference resourceReference)
+       public String getVersion(PackageResourceReference resourceReference)
        {
                return version;
        }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapperTest.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapperTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/AbstractResourceReferenceMapperTest.java
 Thu Jun 30 02:59:56 2011
@@ -20,7 +20,6 @@ import java.util.Locale;
 
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.util.time.Time;
 
 /**
  * @author Matej Knopp
@@ -216,34 +215,4 @@ public abstract class AbstractResourceRe
                
context.getResourceReferenceRegistry().registerResourceReference(reference5);
                
context.getResourceReferenceRegistry().registerResourceReference(reference6);
        }
-
-       /**
-        * resource reference that monitors and supports the last modified 
timestamp
-        */
-       protected class ResourceReferenceWithTimestamp extends ResourceReference
-       {
-               private static final long serialVersionUID = 1L;
-               protected int lastModifiedInvocationCount = 0;
-               private final Time lastModified;
-
-               public ResourceReferenceWithTimestamp(Time lastModified)
-               {
-                       super(AbstractResourceReferenceMapperTest.class, 
"timestamped", Locale.ENGLISH,
-                               "style", null);
-                       this.lastModified = lastModified;
-               }
-
-               @Override
-               public IResource getResource()
-               {
-                       return resource4;
-               }
-
-               @Override
-               public Time getLastModified()
-               {
-                       lastModifiedInvocationCount++;
-                       return lastModified;
-               }
-       }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java?rev=1141369&r1=1141368&r2=1141369&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
 Thu Jun 30 02:59:56 2011
@@ -25,16 +25,14 @@ import org.apache.wicket.request.mapper.
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
 import org.apache.wicket.request.resource.IResource;
-import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import 
org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.NoOpResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.ResourceUrl;
-import 
org.apache.wicket.request.resource.caching.version.LastModifiedResourceVersion;
 import 
org.apache.wicket.request.resource.caching.version.StaticResourceVersion;
 import org.apache.wicket.util.IProvider;
 import org.apache.wicket.util.ValueProvider;
-import org.apache.wicket.util.time.Time;
 
 /**
  * @author Matej Knopp
@@ -44,10 +42,6 @@ public class BasicResourceReferenceMappe
        private static final IProvider<IResourceCachingStrategy> NO_CACHING = 
new ValueProvider<IResourceCachingStrategy>(
                NoOpResourceCachingStrategy.INSTANCE);
 
-       private static final 
IProvider<FilenameWithVersionResourceCachingStrategy> 
CACHE_FILENAME_WITH_TIMESTAMP =
-               new ValueProvider<FilenameWithVersionResourceCachingStrategy>(
-                       new FilenameWithVersionResourceCachingStrategy(new 
LastModifiedResourceVersion()));
-
        /**
         * Construct.
         */
@@ -65,16 +59,6 @@ public class BasicResourceReferenceMappe
                }
        };
 
-       private final BasicResourceReferenceMapper encoderWithTimestamps = new 
BasicResourceReferenceMapper(
-               new PageParametersEncoder(), CACHE_FILENAME_WITH_TIMESTAMP)
-       {
-               @Override
-               protected IMapperContext getContext()
-               {
-                       return context;
-               }
-       };
-
        /**
         * 
         */
@@ -445,25 +429,6 @@ public class BasicResourceReferenceMappe
                assertEquals("wicket/resource/" + CLASS_NAME + 
"/reference5?en--variation", url.toString());
        }
 
-       /**
-        * 
-        */
-       public void testLastModifiedTimestampIsPartOfUrl()
-       {
-               long millis = 12345678L;
-               final ResourceReferenceWithTimestamp reference = new 
ResourceReferenceWithTimestamp(
-                       Time.millis(millis));
-               final IRequestHandler handler = new 
ResourceReferenceRequestHandler(reference, null);
-
-               // request url with timestamp
-               Url url = encoderWithTimestamps.mapHandler(handler);
-
-               // check that url contains timestamp
-               String timestampPart = 
CACHE_FILENAME_WITH_TIMESTAMP.get().getVersionPrefix() +
-                       Long.toString(millis) + "?";
-               assertTrue(url.toString().contains(timestampPart));
-       }
-
        public void testVersionStringInResourceFilename()
        {
                final IResource resource = new IResource()
@@ -473,8 +438,8 @@ public class BasicResourceReferenceMappe
                        }
                };
 
-               final ResourceReference reference =
-                       new ResourceReference(getClass(), "versioned", 
Locale.ENGLISH, "style", null)
+               final PackageResourceReference reference =
+                       new PackageResourceReference(getClass(), "versioned", 
Locale.ENGLISH, "style", null)
                        {
                                @Override
                                public IResource getResource()


Reply via email to