Author: norman.richards(a)jboss.com
Date: 2008-02-01 19:33:16 -0500 (Fri, 01 Feb 2008)
New Revision: 7336
Modified:
branches/Seam_2_0/src/main/org/jboss/seam/core/Interpolator.java
branches/Seam_2_0/src/test/unit/org/jboss/seam/test/unit/InterpolatorTest.java
Log:
JBSEAM-2566
Modified: branches/Seam_2_0/src/main/org/jboss/seam/core/Interpolator.java
===================================================================
--- branches/Seam_2_0/src/main/org/jboss/seam/core/Interpolator.java 2008-02-02 00:31:44
UTC (rev 7335)
+++ branches/Seam_2_0/src/main/org/jboss/seam/core/Interpolator.java 2008-02-02 00:33:16
UTC (rev 7336)
@@ -32,12 +32,9 @@
public static Interpolator instance()
{
- if ( Contexts.isApplicationContextActive() )
- {
+ if (Contexts.isApplicationContextActive()) {
return (Interpolator) Component.getInstance(Interpolator.class,
ScopeType.APPLICATION);
- }
- else
- {
+ } else {
return new Interpolator(); //for unit testing
}
}
@@ -51,18 +48,15 @@
*/
public String interpolate(String string, Object... params)
{
- if (params == null)
- {
+ if (params == null) {
params = new Object[0];
}
- if ( params.length>10 )
- {
+ if (params.length>10) {
throw new IllegalArgumentException("more than 10 parameters");
}
- if (string.indexOf('#')>=0 || string.indexOf('{')>=0)
- {
+ if (string.indexOf('#')>=0 || string.indexOf('{')>=0) {
string = interpolateExpressions(string, params);
}
@@ -74,75 +68,63 @@
StringTokenizer tokens = new StringTokenizer(string, "#{}", true);
StringBuilder builder = new StringBuilder(string.length());
try {
- while ( tokens.hasMoreTokens() )
- {
+ while (tokens.hasMoreTokens()) {
String tok = tokens.nextToken();
- if ( "#".equals(tok) && tokens.hasMoreTokens() )
- {
+
+ if ("#".equals(tok) && tokens.hasMoreTokens()) {
String nextTok = tokens.nextToken();
- if ( "{".equals(nextTok) )
- {
+
+ while (nextTok.equals("#") &&
tokens.hasMoreTokens()) {
+ builder.append(tok);
+ nextTok = tokens.nextToken();
+ }
+
+ if ("{".equals(nextTok)) {
String expression = "#{" + tokens.nextToken() +
"}";
- try
- {
+ try {
Object value =
Expressions.instance().createValueExpression(expression).getValue();
if (value!=null) builder.append(value);
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
log.warn("exception interpolating string: " +
string, e);
}
- tokens.nextToken(); //the }
- }
- else
- {
+ tokens.nextToken(); // the trailing "}"
+
+ } else if (nextTok.equals("#")) {
+ // could be trailing #
+ builder.append("#");
+
+ } else {
int index;
- try
- {
- index = Integer.parseInt( nextTok.substring(0, 1) );
- if (index>=params.length)
- {
+ try {
+ index = Integer.parseInt(nextTok.substring(0, 1));
+ if (index>=params.length) {
//log.warn("parameter index out of bounds: " +
index + " in: " + string);
builder.append("#").append(nextTok);
+ } else {
+
builder.append(params[index]).append(nextTok.substring(1));
}
- else
- {
- builder.append( params[index] ).append(
nextTok.substring(1) );
- }
- }
- catch (NumberFormatException nfe)
- {
+ } catch (NumberFormatException nfe) {
builder.append("#").append(nextTok);
}
}
- }
- else if ("{".equals(tok))
- {
+ } else if ("{".equals(tok)) {
StringBuilder expr = new StringBuilder();
expr.append(tok);
int level = 1;
- while (tokens.hasMoreTokens())
- {
+ while (tokens.hasMoreTokens()) {
String nextTok = tokens.nextToken();
expr.append(nextTok);
- if (nextTok.equals("{"))
- {
+ if (nextTok.equals("{")) {
++level;
- }
- else if (nextTok.equals("}"))
- {
- if (--level == 0)
- {
- try
- {
+ } else if (nextTok.equals("}")) {
+ if (--level == 0) {
+ try {
String value = new MessageFormat(expr.toString(),
Locale.instance()).format(params);
builder.append(value);
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
// if it is a bad message, use the expression itself
builder.append(expr);
}
@@ -152,19 +134,17 @@
}
}
- if (expr != null)
- {
+ if (expr != null) {
builder.append(expr);
}
- }
- else
- {
+ } else {
builder.append(tok);
}
}
} catch (Exception e) {
log.warn("exception interpolating string: " + string, e);
}
+
return builder.toString();
}
Modified: branches/Seam_2_0/src/test/unit/org/jboss/seam/test/unit/InterpolatorTest.java
===================================================================
---
branches/Seam_2_0/src/test/unit/org/jboss/seam/test/unit/InterpolatorTest.java 2008-02-02
00:31:44 UTC (rev 7335)
+++
branches/Seam_2_0/src/test/unit/org/jboss/seam/test/unit/InterpolatorTest.java 2008-02-02
00:33:16 UTC (rev 7336)
@@ -27,6 +27,11 @@
Assert.assertEquals("There are no files.",
interpolator.interpolate(CHOICE_EXPR, 0));
Assert.assertEquals("There is one file.",
interpolator.interpolate(CHOICE_EXPR, 1));
Assert.assertEquals("There are 2 files.",
interpolator.interpolate(CHOICE_EXPR, 2));
+
+ // test sequences of multiple #
+ Assert.assertEquals("2", interpolator.interpolate("#0",2));
+ Assert.assertEquals("#2",
interpolator.interpolate("##0",2));
+ Assert.assertEquals("##2",
interpolator.interpolate("###0",2));
Date date = new Date(0);
Show replies by date