Repository: wicket Updated Branches: refs/heads/wicket-7.x ab461d5d2 -> 28d4a4bbb
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. Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/28d4a4bb Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/28d4a4bb Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/28d4a4bb Branch: refs/heads/wicket-7.x Commit: 28d4a4bbbca60d2b3011cb61475af863613d62ba Parents: ab461d5 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:34:26 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/28d4a4bb/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/28d4a4bb/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/28d4a4bb/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/28d4a4bb/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) + { + } + } }
