You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by mc...@apache.org on 2013/11/18 21:15:53 UTC
svn commit: r1543136 - in /tiles/framework/trunk: ./
tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
Author: mck
Date: Mon Nov 18 20:15:53 2013
New Revision: 1543136
URL: http://svn.apache.org/r1543136
Log:
forward port r1543135 with
svn merge -c1543135 ^/tiles/framework/branches/TILES_3_0_X .
> TILES-574 Tiles expressions do not work after wildcard
Modified:
tiles/framework/trunk/ (props changed)
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
Propchange: tiles/framework/trunk/
------------------------------------------------------------------------------
Merged /tiles/framework/branches/TILES_3_0_X:r1543135
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java?rev=1543136&r1=1543135&r2=1543136&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternUtil.java Mon Nov 18 20:15:53 2013
@@ -22,6 +22,7 @@
package org.apache.tiles.definition.pattern;
import java.text.MessageFormat;
+import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
@@ -209,16 +210,21 @@ public final class PatternUtil {
*/
private static String replace(String st, Object... vars) {
if (st != null && st.indexOf('{') >= 0) {
- // 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");
+ List<String> originals = new ArrayList<String>();
+ for(Matcher m = INVALID_FORMAT_ELEMENT.matcher(st); m.find() ; m = INVALID_FORMAT_ELEMENT.matcher(st)) {
+ originals.add(m.group());
+ st = m.replaceFirst("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.replace("INVALID_FORMAT_ELEMENT", m.group());
+ for (String original : originals) {
+ st = st.replaceFirst("INVALID_FORMAT_ELEMENT", original);
}
}
return st;
Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java?rev=1543136&r1=1543135&r2=1543136&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PatternUtilTest.java Mon Nov 18 20:15:53 2013
@@ -185,15 +185,69 @@ public class PatternUtilTest {
* See TILES-502
*/
@Test
- public void testReplacePlaceholdersEL() {
+ public void testReplacePlaceholdersEL_0() {
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");
+ Attribute attribute = new Attribute("some-{1}-${requestScope.someVariable}.jsp");
+ attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+ attributes.put("something", attribute);
+ 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());
+
+ assertEquals(
+ "some-value1-${requestScope.someVariable}.jsp",
+ nudef.getAttribute("something").getValue());
+
+ assertEquals(
+ "some-value1-${requestScope.someVariable}.jsp",
+ nudef.getAttribute("something").getExpressionObject().getExpression());
+ }
+
+ /**
+ * Test method for
+ * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+ * See TILES-574
+ */
+ @Test
+ public void testReplacePlaceholdersEL_1() {
+ Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+ Attribute attribute = new Attribute("some-{1}-${requestScope.someVariable}-other-{2}.jsp");
+ attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+ attributes.put("something", attribute);
+ Definition definition = new Definition("definitionName", new Attribute("template"), attributes);
+ Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", "value0", "value1", "value2", "value3");
+ assertEquals("nudef", nudef.getName());
+
+ assertEquals(
+ "some-value1-${requestScope.someVariable}-other-value2.jsp",
+ nudef.getAttribute("something").getValue());
+
+ assertEquals(
+ "some-value1-${requestScope.someVariable}-other-value2.jsp",
+ nudef.getAttribute("something").getExpressionObject().getExpression());
+ }
+
+ /**
+ * Test method for
+ * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}.
+ * See TILES-574
+ */
+ @Test
+ public void testReplacePlaceholdersEL_2() {
+ Map<String, Attribute> attributes = new HashMap<String, Attribute>();
+ Attribute attribute = new Attribute("some-${requestScope.someVariable}-other-{1}-${requestScope.someOtherVariable}.jsp");
+ attribute.setExpressionObject(new Expression((String)attribute.getValue()));
+ attributes.put("something", attribute);
+ Definition definition = new Definition("definitionName", new Attribute("template"), attributes);
+ Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", "value0", "value1", "value2", "value3");
+ assertEquals("nudef", nudef.getName());
+
+ assertEquals(
+ "some-${requestScope.someVariable}-other-value1-${requestScope.someOtherVariable}.jsp",
+ nudef.getAttribute("something").getValue());
+
+ assertEquals(
+ "some-${requestScope.someVariable}-other-value1-${requestScope.someOtherVariable}.jsp",
+ nudef.getAttribute("something").getExpressionObject().getExpression());
}
}