Author: apetrelli
Date: Sun Mar 14 14:54:04 2010
New Revision: 922874
URL: http://svn.apache.org/viewvc?rev=922874&view=rev
Log:
TILES-502
Merge from trunk to tiles3 in sandbox.
Applied patch by Mck SembWever.
Modified:
tiles/sandbox/trunk/tiles3/ (props changed)
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/ (props changed)
tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/tools.xml
(props changed)
Propchange: tiles/sandbox/trunk/tiles3/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Mar 14 14:54:04 2010
@@ -1 +1 @@
-/tiles/framework/trunk:829356,836356,880940,880948,887758,900938-902966,904552
+/tiles/framework/trunk:829356,836356,880940,880948,887758,900938-902966,904552,921998
Modified:
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java?rev=922874&r1=922873&r2=922874&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
Sun Mar 14 14:54:04 2010
@@ -27,6 +27,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
@@ -47,6 +49,10 @@ public final class PatternUtil {
*/
private static final Locale ROOT_LOCALE = new Locale("", "");
+ /** Pattern to find {.*} occurrences that do not match {[0-9]+} so to
prevent MessageFormat from crashing.
+ */
+ private static final Pattern INVALID_FORMAT_ELEMENT =
Pattern.compile("\\Q{\\E[\\D^}]+\\Q}\\E");
+
/**
* Private constructor to avoid instantiation.
*/
@@ -157,7 +163,9 @@ public final class PatternUtil {
nuattr.setRenderer(attr.getRenderer());
Expression expressionObject = attr.getExpressionObject();
if (expressionObject != null) {
- nuattr.setExpressionObject(new Expression(expressionObject));
+ Expression newExpressionObject = Expression
+
.createExpression(replace(expressionObject.getExpression(), vars),
expressionObject.getLanguage());
+ nuattr.setExpressionObject(newExpressionObject);
}
Object value = attr.getValue();
@@ -201,8 +209,17 @@ public final class PatternUtil {
*/
private static String replace(String st, Object... vars) {
if (st != null && st.indexOf('{') >= 0) {
- MessageFormat format = new MessageFormat(st, ROOT_LOCALE);
- return format.format(vars, new StringBuffer(), null).toString();
+ // remember the invalid "{...}" occurrences
+ Matcher m = INVALID_FORMAT_ELEMENT.matcher(st);
+ // replace them with markers
+ st =
INVALID_FORMAT_ELEMENT.matcher(st).replaceAll("INVALID_FORMAT_ELEMENT");
+ // do the MessageFormat replacement (escaping quote characters)
+ st = new MessageFormat(st.replaceAll("'", "'''"), ROOT_LOCALE)
+ .format(vars, new StringBuffer(), null).toString();
+ // return the markers to their original invalid occurrences
+ while (m.find()) {
+ st = st.replaceFirst("INVALID_FORMAT_ELEMENT", m.group());
+ }
}
return st;
}
Modified:
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
URL:
http://svn.apache.org/viewvc/tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java?rev=922874&r1=922873&r2=922874&view=diff
==============================================================================
---
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
(original)
+++
tiles/sandbox/trunk/tiles3/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
Sun Mar 14 14:54:04 2010
@@ -173,4 +173,22 @@ public class PatternUtilTest {
assertEquals("value1", extractedMap.get(1));
assertEquals("value2", extractedMap.get(2));
}
+
+ /**
+ * Test method for
+ * {...@link PatternUtil#replacePlaceholders(Definition, String,
Object[])}.
+ * See TILES-502
+ */
+ @Test
+ public void testReplacePlaceholdersEL() {
+ Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+ attributes.put("something", new
Attribute("some-{1}-${requestScope.someVariable}.jsp"));
+ Definition definition = new Definition("definitionName", new Attribute(
+ "template"), attributes);
+ Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef",
+ "value0", "value1", "value2", "value3");
+ assertEquals("nudef", nudef.getName());
+ Attribute attribute = nudef.getAttribute("something");
+ assertEquals("some-value1-${requestScope.someVariable}.jsp",
attribute.getValue());
+ }
}
Propchange: tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Mar 14 14:54:04 2010
@@ -1,3 +1,3 @@
-/tiles/framework/trunk/tiles-test-pom/tiles-test:829356,836356,880940,880948,887758,900938-902966,904552
+/tiles/framework/trunk/tiles-test-pom/tiles-test:829356,836356,880940,880948,887758,900938-902966,904552,921998
/tiles/sandbox/trunk/tiles-test:740289
/tiles/sandbox/trunk/tiles-test-sandbox:740290-745038,747727-751891
Propchange:
tiles/sandbox/trunk/tiles3/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/tools.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Mar 14 14:54:04 2010
@@ -1 +1 @@
-/tiles/framework/trunk/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/tools.xml:829356,836356,880940,880948,887758,900938-902966,904552
+/tiles/framework/trunk/tiles-test-pom/tiles-test/src/main/webapp/WEB-INF/tools.xml:829356,836356,880940,880948,887758,900938-902966,904552,921998