You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/05/20 22:01:45 UTC
git commit: WICKET-5581 CachingResourceStreamLocator is not
extension-aware
Repository: wicket
Updated Branches:
refs/heads/master f6a22ae3d -> cd24f18a2
WICKET-5581 CachingResourceStreamLocator is not extension-aware
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cd24f18a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cd24f18a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cd24f18a
Branch: refs/heads/master
Commit: cd24f18a2f2667857a5e5b86744bf1e129d7bba8
Parents: f6a22ae
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue May 20 23:01:10 2014 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue May 20 23:01:10 2014 +0300
----------------------------------------------------------------------
.../caching/CachingResourceStreamLocator.java | 47 ++++++++++++++++++--
.../request/resource/ResourceReference.java | 2 +-
.../CachingResourceStreamLocatorTest.java | 38 +++++++++++++---
3 files changed, 76 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/cd24f18a/wicket-core/src/main/java/org/apache/wicket/core/util/resource/locator/caching/CachingResourceStreamLocator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/resource/locator/caching/CachingResourceStreamLocator.java b/wicket-core/src/main/java/org/apache/wicket/core/util/resource/locator/caching/CachingResourceStreamLocator.java
index a3f7c4f..93fb0b3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/resource/locator/caching/CachingResourceStreamLocator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/resource/locator/caching/CachingResourceStreamLocator.java
@@ -43,7 +43,7 @@ import org.apache.wicket.util.resource.IResourceStream;
*/
public class CachingResourceStreamLocator implements IResourceStreamLocator
{
- private final ConcurrentMap<Key, IResourceStreamReference> cache;
+ private final ConcurrentMap<CacheKey, IResourceStreamReference> cache;
private final IResourceStreamLocator delegate;
@@ -73,7 +73,7 @@ public class CachingResourceStreamLocator implements IResourceStreamLocator
@Override
public IResourceStream locate(Class<?> clazz, String path)
{
- Key key = new Key(clazz.getName(), path, null, null, null);
+ CacheKey key = new CacheKey(clazz.getName(), path, null, null, null, null);
IResourceStreamReference resourceStreamReference = cache.get(key);
final IResourceStream result;
@@ -91,7 +91,7 @@ public class CachingResourceStreamLocator implements IResourceStreamLocator
return result;
}
- private void updateCache(Key key, IResourceStream stream)
+ private void updateCache(CacheKey key, IResourceStream stream)
{
if (null == stream)
{
@@ -113,7 +113,7 @@ public class CachingResourceStreamLocator implements IResourceStreamLocator
public IResourceStream locate(Class<?> scope, String path, String style, String variation,
Locale locale, String extension, boolean strict)
{
- Key key = new Key(scope.getName(), path, locale, style, variation);
+ CacheKey key = new CacheKey(scope.getName(), path, extension, locale, style, variation);
IResourceStreamReference resourceStreamReference = cache.get(key);
final IResourceStream result;
@@ -143,4 +143,43 @@ public class CachingResourceStreamLocator implements IResourceStreamLocator
cache.clear();
}
+ /**
+ * A specialization of {@link org.apache.wicket.request.resource.ResourceReference.Key} that
+ * additionally takes the file extension into account
+ */
+ private static class CacheKey extends Key
+ {
+ /**
+ * The file extension
+ */
+ private final String extension;
+
+ private CacheKey(String scope, String name, String extension, Locale locale, String style, String variation)
+ {
+ super(scope, name, locale, style, variation);
+
+ this.extension = extension;
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ if (!super.equals(o)) return false;
+
+ CacheKey cacheKey = (CacheKey) o;
+
+ return !(extension != null ? !extension.equals(cacheKey.extension) : cacheKey.extension != null);
+
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = super.hashCode();
+ result = 31 * result + (extension != null ? extension.hashCode() : 0);
+ return result;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/cd24f18a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
index 04dd8b9..ad64d25 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
@@ -336,7 +336,7 @@ public abstract class ResourceReference implements IClusterable
/**
* A (re-usable) data store for all relevant ResourceReference data
*/
- public final static class Key implements Serializable
+ public static class Key implements Serializable
{
private static final long serialVersionUID = 1L;
http://git-wip-us.apache.org/repos/asf/wicket/blob/cd24f18a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java b/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
index 9f50fe7..65ea0ad 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
@@ -32,9 +32,9 @@ import org.apache.wicket.core.util.resource.locator.caching.CachingResourceStrea
import org.junit.Test;
/**
+ * Tests for CachingResourceStreamLocator
+ *
* <a href="https://issues.apache.org/jira/browse/WICKET-3511">WICKET-3511</a>
- *
- * @author mgrigorov
*/
public class CachingResourceStreamLocatorTest
{
@@ -70,18 +70,44 @@ public class CachingResourceStreamLocatorTest
FileResourceStream frs = new FileResourceStream(new File("."));
when(
- resourceStreamLocator.locate(String.class, "path", "style", "variation", null,
- "extension", true)).thenReturn(frs);
+ resourceStreamLocator.locate(String.class, "path", "style", "variation", null,
+ "extension", true)).thenReturn(frs);
CachingResourceStreamLocator cachingLocator = new CachingResourceStreamLocator(
- resourceStreamLocator);
+ resourceStreamLocator);
cachingLocator.locate(String.class, "path", "style", "variation", null, "extension", true);
cachingLocator.locate(String.class, "path", "style", "variation", null, "extension", true);
// there is a file resource with that Key so expect just one call to the delegate
verify(resourceStreamLocator, times(1)).locate(String.class, "path", "style", "variation",
- null, "extension", true);
+ null, "extension", true);
+ }
+
+ /**
+ * Tests two FileResourceStreamReferences with different extensions
+ */
+ @Test
+ public void fileResourceDifferentExtensions()
+ {
+ IResourceStreamLocator resourceStreamLocator = mock(IResourceStreamLocator.class);
+
+ FileResourceStream frs = new FileResourceStream(new File("."));
+
+ when(resourceStreamLocator.locate(String.class, "path", "style", "variation", null,
+ "extension", true)).thenReturn(frs);
+
+ CachingResourceStreamLocator cachingLocator = new CachingResourceStreamLocator(resourceStreamLocator);
+
+ cachingLocator.locate(String.class, "path", "style", "variation", null, "extension", true);
+ cachingLocator.locate(String.class, "path", "style", "variation", null, "extension", true);
+ cachingLocator.locate(String.class, "path", "style", "variation", null, "extension2", true);
+
+ // there is a file resource with that Key so expect just one call to the delegate
+ verify(resourceStreamLocator, times(1)).locate(String.class, "path", "style", "variation",
+ null, "extension", true);
+ verify(resourceStreamLocator, times(1)).locate(String.class, "path", "style", "variation",
+ null, "extension2", true);
}
/**