Repository: wicket Updated Branches: refs/heads/master 9862d2910 -> 820431ecd
WICKET-6393 NestedStringResourceLoader ignores hard-coded default values and throws MissingResourceException Return null is any of the placeholders cannot resolve its value. This way the provided defaultValue will be used. (cherry picked from commit 28d4a4bbbca60d2b3011cb61475af863613d62ba) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/820431ec Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/820431ec Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/820431ec Branch: refs/heads/master Commit: 820431ecd7ac6a21dcfef32ffb1f322bfb42902b Parents: 9862d29 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue Jun 13 21:34:26 2017 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue Jun 13 21:35:45 2017 +0200 ---------------------------------------------------------------------- .../loader/NestedStringResourceLoader.java | 66 +++----------------- .../loader/ClassStringResourceLoaderTest.java | 3 - ...est$NestedWithMissingKeyValidator.properties | 2 + .../loader/NestedStringResourceLoaderTest.java | 28 +++++++++ 4 files changed, 40 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/820431ec/wicket-core/src/main/java/org/apache/wicket/resource/loader/NestedStringResourceLoader.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/loader/NestedStringResourceLoader.java b/wicket-core/src/main/java/org/apache/wicket/resource/loader/NestedStringResourceLoader.java index e84d783..a2ec9c6 100644 --- a/wicket-core/src/main/java/org/apache/wicket/resource/loader/NestedStringResourceLoader.java +++ b/wicket-core/src/main/java/org/apache/wicket/resource/loader/NestedStringResourceLoader.java @@ -16,20 +16,18 @@ */ package org.apache.wicket.resource.loader; +import org.apache.wicket.Application; +import org.apache.wicket.Component; +import org.apache.wicket.settings.ResourceSettings; +import org.apache.wicket.util.lang.Args; + import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; -import java.util.MissingResourceException; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.wicket.Application; -import org.apache.wicket.Component; -import org.apache.wicket.settings.ResourceSettings; -import org.apache.wicket.util.lang.Args; -import org.apache.wicket.util.string.AppendingStringBuffer; - /** * Creates a nested string resource loader which resolves nested keys.<br> * <br> @@ -128,7 +126,7 @@ public class NestedStringResourceLoader implements IStringResourceLoader if (value == null) { - return handleMissingKey(key, locale, style, component, value); + return null; } StringBuffer output = new StringBuffer(); @@ -141,57 +139,13 @@ public class NestedStringResourceLoader implements IStringResourceLoader ? loadNestedStringResource(component, nestedKey, locale, style, variation) : loadNestedStringResource(clazz, nestedKey, locale, style, variation); - replacedPlaceHolder = handleMissingKey(nestedKey, locale, style, component, - replacedPlaceHolder); + if (replacedPlaceHolder == null) + { + return null; + } matcher.appendReplacement(output, replacedPlaceHolder); } matcher.appendTail(output); return output.toString(); } - - /** - * Handles a missing key - * - * @param nestedKey - * the key which is going to be handled - * @param locale - * the actual locale - * @param style - * the style - * @param component - * the component - * - * @param replacedPlaceHolder - * @return the replacedPlaceholder - */ - private String handleMissingKey(String nestedKey, Locale locale, String style, - Component component, String replacedPlaceHolder) - { - if (replacedPlaceHolder == null) - { - if (resourceSettings.getThrowExceptionOnMissingResource()) - { - AppendingStringBuffer message = new AppendingStringBuffer( - "Unable to find property: '"); - message.append(nestedKey); - message.append('\''); - - if (component != null) - { - message.append(" for component: "); - message.append(component.getPageRelativePath()); - message.append(" [class=").append(component.getClass().getName()).append(']'); - } - message.append(". Locale: ").append(locale).append(", style: ").append(style); - - throw new MissingResourceException(message.toString(), - (component != null ? component.getClass().getName() : ""), nestedKey); - } - else - { - replacedPlaceHolder = "[Warning: Property for '" + nestedKey + "' not found]"; - } - } - return replacedPlaceHolder; - } } http://git-wip-us.apache.org/repos/asf/wicket/blob/820431ec/wicket-core/src/test/java/org/apache/wicket/resource/loader/ClassStringResourceLoaderTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/loader/ClassStringResourceLoaderTest.java b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ClassStringResourceLoaderTest.java index f2d4ee4..73b275c 100644 --- a/wicket-core/src/test/java/org/apache/wicket/resource/loader/ClassStringResourceLoaderTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ClassStringResourceLoaderTest.java @@ -41,9 +41,6 @@ public class ClassStringResourceLoaderTest extends WicketTestCase loader.loadStringResource((Component)null, "error", null, null, null)); } - /** - * - */ public static class MyValidator implements IValidator<String> { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/wicket/blob/820431ec/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest$NestedWithMissingKeyValidator.properties ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest$NestedWithMissingKeyValidator.properties b/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest$NestedWithMissingKeyValidator.properties new file mode 100644 index 0000000..754783a --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest$NestedWithMissingKeyValidator.properties @@ -0,0 +1,2 @@ +key1=This is a +nested=#(key1) #(key2) http://git-wip-us.apache.org/repos/asf/wicket/blob/820431ec/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest.java b/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest.java index 4753331..19f357e 100644 --- a/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/resource/loader/NestedStringResourceLoaderTest.java @@ -20,8 +20,11 @@ import java.util.List; import java.util.regex.Pattern; import org.apache.wicket.Component; +import org.apache.wicket.Localizer; import org.apache.wicket.resource.loader.ClassStringResourceLoaderTest.MyValidator; import org.apache.wicket.util.tester.WicketTestCase; +import org.apache.wicket.validation.IValidatable; +import org.apache.wicket.validation.IValidator; import org.junit.Test; /** @@ -46,4 +49,29 @@ public class NestedStringResourceLoaderTest extends WicketTestCase nestedStringResourceLoader.loadStringResource((Component)null, "nested", null, null, null)); } + /** + * https://issues.apache.org/jira/browse/WICKET-6393 + */ + @Test + public void whenAnyKeyIsMissing_thenUseTheDefaultValue(){ + List<IStringResourceLoader> loaders = tester.getApplication().getResourceSettings().getStringResourceLoaders(); + ClassStringResourceLoader classStringResourceLoader = new ClassStringResourceLoader(NestedWithMissingKeyValidator.class); + loaders.add(classStringResourceLoader); + NestedStringResourceLoader nestedStringResourceLoader = new NestedStringResourceLoader(loaders,Pattern.compile("#\\(([^ ]*?)\\)")); + loaders.clear(); + loaders.add(nestedStringResourceLoader); + + final String defaultValue = "default value"; + assertEquals(defaultValue, Localizer.get().getString("nested", null, defaultValue)); + } + + public static class NestedWithMissingKeyValidator implements IValidator<String> + { + private static final long serialVersionUID = 1L; + + @Override + public void validate(IValidatable<String> v) + { + } + } }
