You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by eh...@apache.org on 2008/10/13 03:14:14 UTC
svn commit: r703903 - in /wicket/trunk/wicket/src:
main/java/org/apache/wicket/util/resource/locator/
test/java/org/apache/wicket/markup/html/
Author: ehillenius
Date: Sun Oct 12 18:14:14 2008
New Revision: 703903
URL: http://svn.apache.org/viewvc?rev=703903&view=rev
Log:
WICKET-1868
Added:
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_en.txt
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_foo_bar.txt
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceTest.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java?rev=703903&r1=703902&r2=703903&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/resource/locator/ResourceNameIterator.java Sun Oct 12 18:14:14 2008
@@ -16,8 +16,12 @@
*/
package org.apache.wicket.util.resource.locator;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.util.string.Strings;
@@ -50,6 +54,8 @@
*/
public class ResourceNameIterator implements Iterator<String>
{
+ private static final Pattern LOCALE_PATTERN = Pattern.compile("_[a-zA-Z]{2}($|(?=_))");
+
// The locale to search for the resource file
private final Locale locale;
@@ -64,6 +70,12 @@
// The latest exact Locale used
private Locale currentLocale;
+ private final HashSet<String> isoCountries = new HashSet<String>(
+ Arrays.asList(Locale.getISOCountries()));
+
+ private final HashSet<String> isoLanguages = new HashSet<String>(
+ Arrays.asList(Locale.getISOLanguages()));
+
/**
* Construct.
*
@@ -74,13 +86,13 @@
* @param locale
* The Locale to apply
* @param extensions
- * the filname's extensions (comma separated). Null permitted
+ * the filname's extensions (comma separated)
*/
public ResourceNameIterator(String path, final String style, final Locale locale,
final String extensions)
{
this.locale = locale;
- if ((extensions == null) && (path.indexOf('.') != -1))
+ if (extensions == null)
{
this.extensions = Strings.afterLast(path, '.');
path = Strings.beforeLast(path, '.');
@@ -90,6 +102,62 @@
this.extensions = extensions;
}
+ Matcher matcher = LOCALE_PATTERN.matcher(path);
+ if (matcher.find())
+ {
+ String language = null;
+ String country = null;
+ String variant = null;
+ int firstValidLocalePatternFragment = -1;
+ do
+ {
+ String s = matcher.group().substring(1, 3);
+ if (Character.isLowerCase(s.charAt(0)))
+ {
+ if (isoLanguages.contains(s))
+ {
+ language = s;
+ firstValidLocalePatternFragment = matcher.start();
+ break;
+ }
+ }
+ }
+ while (matcher.find());
+
+ // did we find a language?
+ if (language != null)
+ {
+ // check for country
+ if (matcher.find())
+ {
+ do
+ {
+ String s = matcher.group().substring(1, 3);
+ if (Character.isUpperCase(s.charAt(0)))
+ {
+ if (isoCountries.contains(s))
+ {
+ country = s;
+ break;
+ }
+ }
+ }
+ while (matcher.find());
+ }
+ if (country != null)
+ {
+ // country found... just get the rest of the string for any variant
+ if (matcher.find())
+ {
+ variant = path.substring(matcher.start());
+ }
+ }
+ path = path.substring(0, firstValidLocalePatternFragment);
+ localeIterator = new LocaleResourceNameIterator(path, new Locale(language,
+ country != null ? country : "", variant != null ? variant : ""));
+ } // else skip the whole thing... probably user specific underscores used
+ }
+
styleIterator = new StyleAndVariationResourceNameIterator(path, style, null);
}
Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceTest.java?rev=703903&r1=703902&r2=703903&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/PackageResourceTest.java Sun Oct 12 18:14:14 2008
@@ -65,9 +65,9 @@
final SharedResources sharedResources = Application.get().getSharedResources();
PackageResource.bind(application, PackageResourceTest.class, "packaged1.txt");
assertNotNull("resource packaged1.txt should be available as a packaged resource",
- sharedResources.get(PackageResourceTest.class, "packaged1.txt", null, null, true));
+ sharedResources.get(PackageResourceTest.class, "packaged1.txt", null, null, true));
assertNull("resource packaged2.txt should NOT be available as a packaged resource",
- sharedResources.get(PackageResourceTest.class, "packaged2.txt", null, null, true));
+ sharedResources.get(PackageResourceTest.class, "packaged2.txt", null, null, true));
}
/**
@@ -91,14 +91,43 @@
assertFalse(guard.accept(PackageResourceTest.class, "Bar.java"));
}
- public void testInvalidPackageResource() throws Exception
+ /**
+ * Test lenient matching
+ *
+ * @throws Exception
+ */
+ public void testLenientPackageResourceMatching() throws Exception
{
final SharedResources sharedResources = Application.get().getSharedResources();
Resource invalidResource = new PackageResource(PackageResourceTest.class, "packaged3.txt",
- Locale.ENGLISH, null);
+ Locale.ENGLISH, null);
assertNotNull(
- "resource packaged3.txt SHOULD be available as a packaged resource even if it doesn't exist",
- invalidResource);
+ "resource packaged3.txt SHOULD be available as a packaged resource even if it doesn't exist",
+ invalidResource);
+
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1.txt", null, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1.txt", Locale.CHINA,
+ null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1.txt", Locale.CHINA,
+ "foo"));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1.txt", null, "foo"));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en.txt", null, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en_US.txt", null,
+ null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en_US.txt", null,
+ "foo"));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en_US.txt",
+ Locale.US, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en_US.txt",
+ Locale.CANADA, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_en_US.txt",
+ Locale.CHINA, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_foo_bar_en.txt",
+ null, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class, "packaged1_foo_bar_en_US.txt",
+ null, null));
+ assertTrue(PackageResource.exists(PackageResourceTest.class,
+ "packaged1_foo_bar_en_US_MAC.txt", null, null));
try
{
@@ -113,6 +142,7 @@
/**
* @see junit.framework.TestCase#setUp()
*/
+ @Override
protected void setUp() throws Exception
{
application = new WicketTester().getApplication();
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_en.txt
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_en.txt?rev=703903&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_en.txt (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_en.txt Sun Oct 12 18:14:14 2008
@@ -0,0 +1 @@
+TEST
\ No newline at end of file
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_foo_bar.txt
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_foo_bar.txt?rev=703903&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_foo_bar.txt (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/packaged1_foo_bar.txt Sun Oct 12 18:14:14 2008
@@ -0,0 +1 @@
+TEST
\ No newline at end of file