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);
 	}
 
 	/**