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