You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2008/03/09 17:11:49 UTC
svn commit: r635266 - in /wicket/trunk/jdk-1.4/wicket/src:
main/java/org/apache/wicket/ main/java/org/apache/wicket/model/
test/java/org/apache/wicket/model/
Author: jcompagner
Date: Sun Mar 9 09:11:48 2008
New Revision: 635266
URL: http://svn.apache.org/viewvc?rev=635266&view=rev
Log:
see WICKET-1319
this is a bit of a hack to get it working correctly
in 1.4 we could change the interfaces of Localizer.substitutePropertyExpression() so that we can give a new Interface EscapeStrategy to that method that will escape the values first before applying it.
Modified:
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Localizer.java
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/model/StringResourceModel.java
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.properties
Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Localizer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Localizer.java?rev=635266&r1=635265&r2=635266&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Localizer.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Localizer.java Sun Mar 9 09:11:48 2008
@@ -347,7 +347,7 @@
* The model
* @return The resulting string
*/
- protected String substitutePropertyExpressions(final Component component, final String string,
+ public String substitutePropertyExpressions(final Component component, final String string,
final IModel model)
{
if ((string != null) && (model != null))
Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/model/StringResourceModel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/model/StringResourceModel.java?rev=635266&r1=635265&r2=635266&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/model/StringResourceModel.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/model/StringResourceModel.java Sun Mar 9 09:11:48 2008
@@ -338,19 +338,29 @@
}
}
- // Get the string resource, doing any property substitutions as part
- // of the get operation
- String value = localizer.getString(getResourceKey(), component, model, defaultValue);
- if (value == null)
+ String value = null;
+ // Substitute any parameters if necessary
+ Object[] parameters = getParameters();
+ if (parameters == null)
{
- value = defaultValue;
+ // Get the string resource, doing any property substitutions as part
+ // of the get operation
+ value = localizer.getString(getResourceKey(), component, model, defaultValue);
+ if (value == null)
+ {
+ value = defaultValue;
+ }
}
-
- if (value != null)
+ else
{
- // Substitute any parameters if necessary
- Object[] parameters = getParameters();
- if (parameters != null)
+ // Get the string resource, doing not any property substitutions
+ // that has to be done later after MessageFormat
+ value = localizer.getString(getResourceKey(), component, null, defaultValue);
+ if (value == null)
+ {
+ value = defaultValue;
+ }
+ if (value != null)
{
// Build the real parameters
Object[] realParams = new Object[parameters.length];
@@ -371,12 +381,24 @@
}
}
- // escape single quotes for MessageFormat
- value = Strings.replaceAll(value, "'", "''").toString();
+ if (model != null)
+ {
+ // First escape all substitute properties so that message format doesn't try to
+ // parse that.
+ value = Strings.replaceAll(value, "${", "$'{'").toString();
+ }
// Apply the parameters
final MessageFormat format = new MessageFormat(value, component != null
- ? component.getLocale() : locale);
+ ? component.getLocale() : locale);
value = format.format(realParams);
+
+ if (model != null)
+ {
+ // un escape the substitute properties
+ value = Strings.replaceAll(value, "$'{'", "${").toString();
+ // now substitute the properties
+ value = localizer.substitutePropertyExpressions(component, value, model);
+ }
}
}
Modified: wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.java?rev=635266&r1=635265&r2=635266&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.java Sun Mar 9 09:11:48 2008
@@ -19,6 +19,7 @@
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Calendar;
+import java.util.Locale;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -177,6 +178,16 @@
expected = format.format(new Object[] { cal.getTime(), "raining", new Double(11.568),
"\u00B0C" });
Assert.assertEquals("Text should be as expected", expected, model.getString());
+ }
+
+
+ public void testSubstitutionParametersResourceWithSingleQuote() throws Exception
+ {
+ tester.getWicketSession().setLocale(Locale.ENGLISH);
+ StringResourceModel model = new StringResourceModel("with.quote", page, null, new Object[] {
+ new Integer(10), new Integer(20) });
+ assertEquals("2010.00", model.getString());
+
}
/**
Modified: wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.properties
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.properties?rev=635266&r1=635265&r2=635266&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.properties (original)
+++ wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/model/StringResourceModelTest.properties Sun Mar 9 09:11:48 2008
@@ -21,4 +21,5 @@
weather.raining=It's raining, take an umbrella
weather.message=Weather station "${name}" reports that the temperature is ${currentTemperature} ${units}
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}
\ No newline at end of file
+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}'}