On Thu, Jul 19, 2012 at 2:09 AM, <[email protected]> wrote: > Updated Branches: > refs/heads/master af1cf1b29 -> a99ab59b3 > > > WICKET-3753 moved converter handling from PropertyVariableInterpolator into > Localizer, thus allowing Component relative converted lookup and > interpolation without converters (needed by StringResourceModel for resources > keys) > > > Project: http://git-wip-us.apache.org/repos/asf/wicket/repo > Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a99ab59b > Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a99ab59b > Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a99ab59b > > Branch: refs/heads/master > Commit: a99ab59b3169e2d0b1f8410f23e2e4bfb4239334 > Parents: af1cf1b > Author: svenmeier <[email protected]> > Authored: Thu Jul 19 01:08:58 2012 +0200 > Committer: svenmeier <[email protected]> > Committed: Thu Jul 19 01:08:58 2012 +0200 > > ---------------------------------------------------------------------- > .../src/main/java/org/apache/wicket/Localizer.java | 24 +++++- > .../interpolator/PropertyVariableInterpolator.java | 74 ++++----------- > .../apache/wicket/model/StringResourceModel.java | 10 +- > .../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, 82 insertions(+), 74 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/a99ab59b/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 b6d9bf2..0e33c36 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/Localizer.java > +++ b/wicket-core/src/main/java/org/apache/wicket/Localizer.java > @@ -25,13 +25,14 @@ import java.util.concurrent.ConcurrentHashMap; > import java.util.concurrent.ConcurrentMap; > import java.util.concurrent.atomic.AtomicLong; > > +import > org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator; > 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.core.util.string.interpolator.PropertyVariableInterpolator; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > > @@ -533,7 +534,26 @@ public class Localizer > { > if ((string != null) && (model != null)) > { > - return > PropertyVariableInterpolator.interpolate(string, model.getObject()); > + return new PropertyVariableInterpolator(string, > model.getObject()) > + { > + @Override > + protected String toString(Object value) > + { > + IConverter converter; > + if (component == null) > + { > + converter = Application.get() > + .getConverterLocator() > + > .getConverter(value.getClass()); > + } > + else > + { > + converter = > component.getConverter(value.getClass()); > + } > + > + return > converter.convertToString(value, Session.get().getLocale());
Is it better if we use component.getLocale() if 'component' is not null ? ^^^^ > + } > + }.toString(); > } > return string; > } > > http://git-wip-us.apache.org/repos/asf/wicket/blob/a99ab59b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java > ---------------------------------------------------------------------- > diff --git > a/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java > > b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java > index 0b74d77..40d8461 100644 > --- > a/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java > +++ > b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java > @@ -16,11 +16,8 @@ > */ > package org.apache.wicket.core.util.string.interpolator; > > -import org.apache.wicket.Application; > -import org.apache.wicket.IConverterLocator; > -import org.apache.wicket.Session; > import org.apache.wicket.core.util.lang.PropertyResolver; > -import org.apache.wicket.util.convert.IConverter; > +import org.apache.wicket.util.string.Strings; > import org.apache.wicket.util.string.interpolator.VariableInterpolator; > > /** > @@ -38,13 +35,11 @@ import > org.apache.wicket.util.string.interpolator.VariableInterpolator; > * "$" is the escape char. Thus "$${text}" can be used to escape it (ignore > interpretation). If > * '$3.24' is needed then '$$${amount}' should be used. The first $ sign > escapes the second, and the > * third is used to interpolate the variable. > - * > + * > * @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; > > @@ -52,48 +47,19 @@ 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; > } > > - /** > - * Interpolates the given <code>String</code>, substituting values > for property expressions. > - * > - * @param string > - * a <code>String</code> containing property expressions > like <code>${xyz}</code> > - * @param object > - * the <code>Object</code> to reflect on > - * @return the interpolated <code>String</code> > - */ > - 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; > - } > - > - /** > - * Retrieves a value for a variable name during interpolation. > - * > - * @param variableName > - * the variable name > - * @return the value > - */ > @Override > protected String getValue(final String variableName) > { > @@ -101,29 +67,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 > */ > - @Override > - 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/a99ab59b/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 5a36032..aa11126 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 > @@ -24,9 +24,9 @@ import org.apache.wicket.Application; > import org.apache.wicket.Component; > import org.apache.wicket.Localizer; > import org.apache.wicket.Session; > +import > org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator; > import org.apache.wicket.resource.loader.ComponentStringResourceLoader; > import org.apache.wicket.util.string.Strings; > -import > org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator; > > > /** > @@ -402,7 +402,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(); > @@ -451,8 +451,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 > { > @@ -568,7 +568,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/a99ab59b/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/a99ab59b/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/a99ab59b/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/a99ab59b/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/a99ab59b/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 eeffe71..8438f81 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 > @@ -34,7 +34,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()); > } > > @@ -46,7 +46,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()); > } > > @@ -56,7 +56,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/a99ab59b/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 0223837..86add15 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 > @@ -105,6 +105,12 @@ public abstract class VariableInterpolator implements > IClusterable > @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(); > > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com
