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

Reply via email to