You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/06/13 19:35:37 UTC

wicket git commit: WICKET-6393 NestedStringResourceLoader ignores hard-coded default values and throws MissingResourceException

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 <mg...@apache.org>
Authored: Tue Jun 13 21:34:26 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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)
+		{
+		}
+	}
 }