You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/07/19 21:06:24 UTC

git commit: WICKET-3753 merged changed from master

Updated Branches:
  refs/heads/wicket-1.5.x e1d1b3f28 -> be9300fe2


WICKET-3753 merged changed from master


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/be9300fe
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/be9300fe
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/be9300fe

Branch: refs/heads/wicket-1.5.x
Commit: be9300fe2b1215044721e95eb2318356b2f21311
Parents: e1d1b3f
Author: svenmeier <sv...@apache.org>
Authored: Thu Jul 19 21:05:44 2012 +0200
Committer: svenmeier <sv...@apache.org>
Committed: Thu Jul 19 21:05:44 2012 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/Localizer.java |   34 +++++++++-
 .../apache/wicket/model/StringResourceModel.java   |    8 +-
 .../interpolator/PropertyVariableInterpolator.java |   54 ++++++---------
 .../test/java/org/apache/wicket/LocalizerTest.java |   16 +++--
 .../StringResourceModelTest$TestPage.properties    |    4 +-
 .../wicket/model/StringResourceModelTest.java      |   14 ++++
 .../wicket/resource/DummyApplication.properties    |    2 +-
 .../PropertyVariableInterpolatorTest.java          |    6 +-
 .../string/interpolator/VariableInterpolator.java  |    6 ++
 9 files changed, 95 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/main/java/org/apache/wicket/Localizer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Localizer.java b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
index d70216e..a4b4df9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Localizer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
@@ -29,6 +29,7 @@ import org.apache.wicket.markup.repeater.AbstractRepeater;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
 import org.apache.wicket.settings.IResourceSettings;
+import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.interpolator.PropertyVariableInterpolator;
@@ -533,7 +534,38 @@ public class Localizer
 	{
 		if ((string != null) && (model != null))
 		{
-			return PropertyVariableInterpolator.interpolate(string, model.getObject());
+			return new PropertyVariableInterpolator(string, model.getObject())
+			{
+				@SuppressWarnings({ "rawtypes", "unchecked" })
+				@Override
+				protected String toString(Object value)
+				{
+					IConverter converter;
+					Locale locale;
+					if (component == null)
+					{
+						converter = Application.get()
+							.getConverterLocator()
+							.getConverter(value.getClass());
+
+						if (Session.exists())
+						{
+							locale = Session.get().getLocale();
+						}
+						else
+						{
+							locale = Locale.getDefault();
+						}
+					}
+					else
+					{
+						converter = component.getConverter(value.getClass());
+						locale = component.getLocale();
+					}
+
+					return converter.convertToString(value, locale);
+				}
+			}.toString();
 		}
 		return string;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java b/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
index 51577cd..12851b1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
@@ -400,7 +400,7 @@ public class StringResourceModel extends LoadableDetachableModel<String>
 		return getString(component);
 	}
 
-	private String getString(Component component)
+	private String getString(final Component component)
 	{
 
 		final Localizer localizer = getLocalizer();
@@ -449,8 +449,8 @@ public class StringResourceModel extends LoadableDetachableModel<String>
 					}
 					else if (model != null && parameters[i] instanceof String)
 					{
-						realParams[i] = PropertyVariableInterpolator.interpolate(
-							(String)parameters[i], model.getObject());
+						realParams[i] = localizer.substitutePropertyExpressions(component,
+							(String)parameters[i], model);
 					}
 					else
 					{
@@ -566,7 +566,7 @@ public class StringResourceModel extends LoadableDetachableModel<String>
 	{
 		if (model != null)
 		{
-			return PropertyVariableInterpolator.interpolate(resourceKey, model.getObject());
+			return new PropertyVariableInterpolator(resourceKey, model.getObject()).toString();
 		}
 		else
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/main/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolator.java b/wicket-core/src/main/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolator.java
index 63bbc35..911af71 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolator.java
@@ -16,11 +16,8 @@
  */
 package org.apache.wicket.util.string.interpolator;
 
-import org.apache.wicket.Application;
-import org.apache.wicket.IConverterLocator;
-import org.apache.wicket.Session;
-import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.lang.PropertyResolver;
+import org.apache.wicket.util.string.Strings;
 
 /**
  * Interpolates values into <code>String</code>s that are produced by interpreting property
@@ -41,9 +38,7 @@ import org.apache.wicket.util.lang.PropertyResolver;
  * @author Jonathan Locke
  * @since 1.2.6
  */
-public final class PropertyVariableInterpolator extends VariableInterpolator
-	implements
-		IConverterLocator
+public class PropertyVariableInterpolator extends VariableInterpolator
 {
 	private static final long serialVersionUID = 1L;
 
@@ -51,14 +46,14 @@ public final class PropertyVariableInterpolator extends VariableInterpolator
 	private final Object model;
 
 	/**
-	 * Private constructor to force use of static interpolate method.
+	 * Constructor.
 	 * 
 	 * @param string
 	 *            a <code>String</code> to interpolate into
 	 * @param model
 	 *            the model to apply property expressions to
 	 */
-	private PropertyVariableInterpolator(final String string, final Object model)
+	public PropertyVariableInterpolator(final String string, final Object model)
 	{
 		super(string);
 		this.model = model;
@@ -72,18 +67,14 @@ public final class PropertyVariableInterpolator extends VariableInterpolator
 	 * @param object
 	 *            the <code>Object</code> to reflect on
 	 * @return the interpolated <code>String</code>
+	 * 
+	 * @deprecated
 	 */
+	@Deprecated
 	public static String interpolate(final String string, final Object object)
 	{
-		// If there's any reason to go to the expense of property expressions
-		if (string.contains("${"))
-		{
-			// Do property expression interpolation
-			return new PropertyVariableInterpolator(string, object).toString();
-		}
-
-		// Return simple string
-		return string;
+		// Do property expression interpolation
+		return new PropertyVariableInterpolator(string, object).toString();
 	}
 
 	/**
@@ -100,28 +91,23 @@ public final class PropertyVariableInterpolator extends VariableInterpolator
 
 		if (value != null)
 		{
-			final IConverter converter = getConverter(value.getClass());
-			if (converter != null)
-			{
-				return converter.convertToString(value, Session.get().getLocale());
-			}
-			else
-			{
-				return value.toString();
-			}
+			return toString(value);
 		}
 		return null;
 	}
 
 	/**
-	 * {@inheritDoc}
+	 * Convert the given value to a string for interpolation.
+	 * <p>
+	 * This default implementation delegates to {@link Strings#toString(Object)}.
+	 * 
+	 * @param value
+	 *            the value, never {@code null}
+	 * 
+	 * @return string representation
 	 */
-	public <C> IConverter<C> getConverter(Class<C> type)
+	protected String toString(Object value)
 	{
-		if (Application.exists())
-		{
-			return Application.get().getConverterLocator().getConverter(type);
-		}
-		return null;
+		return Strings.toString(value);
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/test/java/org/apache/wicket/LocalizerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/LocalizerTest.java b/wicket-core/src/test/java/org/apache/wicket/LocalizerTest.java
index de8edce..16eec28 100644
--- a/wicket-core/src/test/java/org/apache/wicket/LocalizerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/LocalizerTest.java
@@ -167,10 +167,13 @@ public class LocalizerTest extends Assert
 	@Test
 	public void testGetStringPropertySubstitution()
 	{
+		Session.get().setLocale(Locale.GERMAN);
+
 		ValueMap vm = new ValueMap();
 		vm.put("user", "John Doe");
+		vm.put("rating", 4.5);
 		IModel<ValueMap> model = new Model<ValueMap>(vm);
-		Assert.assertEquals("Property substitution should occur", "Welcome, John Doe",
+		Assert.assertEquals("Property substitution should occur", "John Doe gives 4,5 stars",
 			localizer.getString("test.substitute", null, model, null));
 	}
 
@@ -212,16 +215,19 @@ public class LocalizerTest extends Assert
 	@Test
 	public void testGetStringUseModel()
 	{
-		HashMap<String, String> model = new HashMap<String, String>();
+		Session.get().setLocale(Locale.GERMAN);
+
+		HashMap<String, Object> model = new HashMap<String, Object>();
 		model.put("user", "juergen");
+		model.put("rating", 4.5);
 
-		Assert.assertEquals("Expected string should be returned", "Welcome, juergen",
+		Assert.assertEquals("Expected string should be returned", "juergen gives 4,5 stars",
 			localizer.getString("test.substitute", null, new PropertyModel<String>(model, null),
 				"DEFAULT {user}"));
 
 		Assert.assertEquals("Expected string should be returned", "DEFAULT juergen",
-			localizer.getString("test.substituteDoesNotExist", null, new PropertyModel<String>(
-				model, null), "DEFAULT ${user}"));
+			localizer.getString("test.substituteDoesNotExist", null,
+				new PropertyModel<HashMap<String, Object>>(model, null), "DEFAULT ${user}"));
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest$TestPage.properties
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest$TestPage.properties b/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest$TestPage.properties
index 2f38e11..51d45ed 100644
--- a/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest$TestPage.properties
+++ b/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest$TestPage.properties
@@ -26,4 +26,6 @@ weather.mixed=Weather station "${name}" reports that the temperature is {0} {1}
 weather.detail=The report for {0,date,medium}, shows the temperature as {2,number,###.##} {3} and the weather to be {1}
 with.quote={0,choice,-1#n/a|-1<'{1}{0,number,#,##0.00}'}
 with.quote.substitution=Let's play in the {0}
-with.quote.and.no.substitution=Let's play in the rain!
\ No newline at end of file
+with.quote.and.no.substitution=Let's play in the rain!
+
+weather.25.7=Twenty-five dot seven
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
index 15e9dd7..b69fee2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
@@ -24,6 +24,7 @@ import java.util.Locale;
 import junit.framework.Assert;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.Session;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
@@ -103,6 +104,19 @@ public class StringResourceModelTest extends WicketTestCase
 
 	/** */
 	@Test
+	public void getSimpleResourceWithKeySubstitutionForNonString()
+	{
+		// German uses comma (,) as decimal separator
+		Session.get().setLocale(Locale.GERMAN);
+
+		StringResourceModel model = new StringResourceModel("weather.${currentTemperature}", page,
+			wsModel);
+		Assert.assertEquals("Text should be as expected", "Twenty-five dot seven",
+			model.getString());
+	}
+
+	/** */
+	@Test
 	public void getPropertySubstitutedResource()
 	{
 		tester.getSession().setLocale(Locale.ENGLISH);

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/test/java/org/apache/wicket/resource/DummyApplication.properties
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/DummyApplication.properties b/wicket-core/src/test/java/org/apache/wicket/resource/DummyApplication.properties
index 132ca48..30dbe86 100644
--- a/wicket-core/src/test/java/org/apache/wicket/resource/DummyApplication.properties
+++ b/wicket-core/src/test/java/org/apache/wicket/resource/DummyApplication.properties
@@ -17,4 +17,4 @@
 # limitations under the License.
 #
 test.string=This is a test
-test.substitute=Welcome, ${user}
+test.substitute=${user} gives ${rating} stars

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java b/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
index 8807e58..288a5b2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
@@ -33,7 +33,7 @@ public class PropertyVariableInterpolatorTest extends Assert
 	public void withValue()
 	{
 		TestClass object = new TestClass("value");
-		String result = PropertyVariableInterpolator.interpolate("${key}", object);
+		String result = new PropertyVariableInterpolator("${key}", object).toString();
 		assertEquals("value", result.toString());
 	}
 
@@ -45,7 +45,7 @@ public class PropertyVariableInterpolatorTest extends Assert
 	public void withValueAndEscape()
 	{
 		TestClass object = new TestClass("3.24");
-		String result = PropertyVariableInterpolator.interpolate("$$${key}", object);
+		String result = new PropertyVariableInterpolator("$$${key}", object).toString();
 		assertEquals("$3.24", result.toString());
 	}
 
@@ -55,7 +55,7 @@ public class PropertyVariableInterpolatorTest extends Assert
 	@Test
 	public void withoutValue()
 	{
-		String result = PropertyVariableInterpolator.interpolate("${key}", null);
+		String result = new PropertyVariableInterpolator("${key}", null).toString();
 		assertEquals("${key}", result.toString());
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/be9300fe/wicket-util/src/main/java/org/apache/wicket/util/string/interpolator/VariableInterpolator.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/string/interpolator/VariableInterpolator.java b/wicket-util/src/main/java/org/apache/wicket/util/string/interpolator/VariableInterpolator.java
index f01c175..b2a5757 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/interpolator/VariableInterpolator.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/interpolator/VariableInterpolator.java
@@ -103,6 +103,12 @@ public abstract class VariableInterpolator
 	@Override
 	public String toString()
 	{
+		// If there's any reason to go to the expense of property expressions
+		if (!string.contains("${"))
+		{
+			return string;
+		}
+
 		// Result buffer
 		final StringBuilder buffer = new StringBuilder();