You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2012/02/25 18:02:30 UTC
git commit: WICKET-4430: By using int as the scope,
it is possible to read arbitrary resources from the classpath of a
wicket application:
Updated Branches:
refs/heads/master 569e1cdf5 -> 04bb9046f
WICKET-4430: By using int as the scope, it is possible to read arbitrary resources from the classpath of a wicket application:
- make resource (= extension) iteration more safe by using Iterable<String> instead of a comma-delimited list of extension
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/04bb9046
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/04bb9046
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/04bb9046
Branch: refs/heads/master
Commit: 04bb9046fe21e91f2968998c1d0efd5a94602655
Parents: 569e1cd
Author: Peter Ertl <pe...@apache.org>
Authored: Sat Feb 25 18:02:12 2012 +0100
Committer: Peter Ertl <pe...@apache.org>
Committed: Sat Feb 25 18:02:12 2012 +0100
----------------------------------------------------------------------
.../locator/ExtensionResourceNameIterator.java | 58 +++++++--------
.../resource/locator/ResourceNameIterator.java | 22 +++---
.../resource/locator/ResourceStreamLocator.java | 8 ++-
.../resource/locator/ResourceNameIteratorTest.java | 12 ++--
4 files changed, 51 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/04bb9046/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ExtensionResourceNameIterator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ExtensionResourceNameIterator.java b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ExtensionResourceNameIterator.java
index 6a83510..9de883d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ExtensionResourceNameIterator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ExtensionResourceNameIterator.java
@@ -16,52 +16,46 @@
*/
package org.apache.wicket.util.resource.locator;
+import java.util.Arrays;
import java.util.Iterator;
-import org.apache.wicket.util.string.Strings;
-
-
/**
- * Iterate over a list of 'comma' separated strings. If an empty string is provided, hasNext() will
+ * Iterate over a set of extensions. If null is provided, hasNext() will
* successfully return once with next() returning {@code null}.
*
* @author Juergen Donnerstag
*/
public class ExtensionResourceNameIterator implements Iterator<String>
{
- private final String[] extensions;
+ private static final Iterable<String> NULL_ITERABLE = Arrays.asList((String)null);
- private int index;
+ private final Iterator<String> iterator;
+
+ private String current;
/**
* Construct.
*
- * @param extension
- * {@code null} or comma separated extensions
- * @param separatorChar
+ * @param extensions
+ * {@code null} or iterable with extensions
*/
- public ExtensionResourceNameIterator(final String extension, final char separatorChar)
+ public ExtensionResourceNameIterator(final Iterable<String> extensions)
{
- // Extension can be a comma separated list
- String[] extensions = Strings.split(extension, separatorChar);
- if (extensions.length == 0)
+ // Fail safe: hasNext() needs to return at least once with true
+ if (extensions == null || !extensions.iterator().hasNext())
{
- // Fail safe: hasNext() needs to return at least once with true.
- extensions = new String[] { null };
+ this.iterator = NULL_ITERABLE.iterator();
+ }
+ else
+ {
+ this.iterator = extensions.iterator();
}
- this.extensions = extensions;
-
- index = 0;
}
- /**
- *
- * @see java.util.Iterator#hasNext()
- */
@Override
public boolean hasNext()
{
- return (index < extensions.length);
+ return iterator.hasNext();
}
/**
@@ -70,8 +64,7 @@ public class ExtensionResourceNameIterator implements Iterator<String>
@Override
public String next()
{
- index++;
-
+ current = iterator.next();
return getExtension();
}
@@ -80,25 +73,26 @@ public class ExtensionResourceNameIterator implements Iterator<String>
*/
public final String getExtension()
{
- String extension = extensions[index - 1];
- if (extension != null)
+ String ext = current;
+
+ if (ext != null)
{
- extension = extension.trim();
- if (extension.startsWith("."))
+ ext = ext.trim();
+ if (ext.startsWith("."))
{
- extension = extension.substring(1);
+ ext = ext.substring(1);
}
}
- return extension;
+ return ext;
}
/**
* Noop.
*
- * @see java.util.Iterator#remove()
*/
@Override
public void remove()
{
+ iterator.remove();
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/04bb9046/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
index 161aabb..6b09f5b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.util.resource.locator;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.Locale;
@@ -43,8 +44,6 @@ import org.apache.wicket.util.string.Strings;
* <li><language>_<country></li>
* <li><language></li>
* </ol>
- * <p>
- * Extensions may be a comma separated list of extensions, e.g. "properties,xml"
*
* @author Juergen Donnerstag
*/
@@ -53,8 +52,8 @@ public class ResourceNameIterator implements Iterator<String>
// The base path without extension, style, locale etc.
private final String path;
- // The extensions (comma separated) to search for the resource file
- private final String extensions;
+ // The extensions to search for the resource file
+ private final Iterable<String> extensions;
// The locale to search for the resource file
private final Locale locale;
@@ -81,17 +80,20 @@ public class ResourceNameIterator implements Iterator<String>
* @param locale
* The Locale to apply
* @param extensions
- * the filname's extensions (comma separated)
+ * the filename's extensions
* @param strict
* If false, weaker combinations of style, locale, etc. are tested as well
*/
public ResourceNameIterator(final String path, final String style, final String variation,
- final Locale locale, final String extensions, boolean strict)
+ final Locale locale, final Iterable<String> extensions, final boolean strict)
{
this.locale = locale;
- if ((extensions == null) && (path != null) && (path.indexOf('.') != -1))
+
+ boolean noext = extensions == null || !extensions.iterator().hasNext();
+
+ if (noext && (path != null) && (path.indexOf('.') != -1))
{
- this.extensions = Strings.afterLast(path, '.');
+ this.extensions = Arrays.asList(Strings.afterLast(path, '.').split(","));
this.path = Strings.beforeLast(path, '.');
}
else
@@ -271,9 +273,9 @@ public class ResourceNameIterator implements Iterator<String>
* @param extensions
* @return New iterator
*/
- protected ExtensionResourceNameIterator newExtensionResourceNameIterator(final String extensions)
+ protected ExtensionResourceNameIterator newExtensionResourceNameIterator(final Iterable<String> extensions)
{
- return new ExtensionResourceNameIterator(extensions, ',');
+ return new ExtensionResourceNameIterator(extensions);
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/04bb9046/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
index a817f65..985da5a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
@@ -17,6 +17,8 @@
package org.apache.wicket.util.resource.locator;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Locale;
import org.apache.wicket.Application;
@@ -60,6 +62,8 @@ public class ResourceStreamLocator implements IResourceStreamLocator
/** Logging */
private static final Logger log = LoggerFactory.getLogger(ResourceStreamLocator.class);
+ private static final Iterable<String> NO_EXTENSIONS = new ArrayList<String>(0);
+
/** If null, the application registered finder will be used */
private IResourceFinder finder;
@@ -250,6 +254,8 @@ public class ResourceStreamLocator implements IResourceStreamLocator
public ResourceNameIterator newResourceNameIterator(final String path, final Locale locale,
final String style, final String variation, final String extension, final boolean strict)
{
- return new ResourceNameIterator(path, style, variation, locale, extension, strict);
+ final Iterable<String> extensions = extension == null ? NO_EXTENSIONS : Arrays.asList(extension);
+
+ return new ResourceNameIterator(path, style, variation, locale, extensions, strict);
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/04bb9046/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java b/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
index 965be43..ceed507 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.util.resource.locator;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
@@ -117,18 +118,17 @@ public class ResourceNameIteratorTest extends WicketTestCase
@Test
public void extensionResourceNameIterator()
{
- ExtensionResourceNameIterator iterator = new ExtensionResourceNameIterator(null, ',');
+ ExtensionResourceNameIterator iterator = new ExtensionResourceNameIterator(null);
assertTrue(iterator.hasNext());
assertEquals(null, iterator.next());
assertFalse(iterator.hasNext());
- iterator = new ExtensionResourceNameIterator("txt", ',');
+ iterator = new ExtensionResourceNameIterator(Arrays.asList("txt"));
assertTrue(iterator.hasNext());
assertEquals("txt", iterator.next());
assertFalse(iterator.hasNext());
- iterator = new ExtensionResourceNameIterator("properties,utf8.properties,properties.xml",
- ',');
+ iterator = new ExtensionResourceNameIterator(Arrays.asList("properties", "utf8.properties", "properties.xml"));
assertTrue(iterator.hasNext());
assertEquals("properties", iterator.next());
assertTrue(iterator.hasNext());
@@ -148,9 +148,9 @@ public class ResourceNameIteratorTest extends WicketTestCase
String style = null;
String var = "var";
Locale locale = Locale.getDefault();
- String ext = null;
+ Iterable<String> extensions = null;
boolean strict = false;
- Iterator<String> iterator = new ResourceNameIterator(path, style, var, locale, ext, strict);
+ Iterator<String> iterator = new ResourceNameIterator(path, style, var, locale, extensions, strict);
HashSet<String> variations = new HashSet<String>();
while (iterator.hasNext())
{