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 <[email protected]> Authored: Thu Jul 19 21:05:44 2012 +0200 Committer: svenmeier <[email protected]> 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();
