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)
+               {
+               }
+       }
 }

Reply via email to