Author: musachy
Date: Mon Dec 15 07:39:15 2008
New Revision: 726715
URL: http://svn.apache.org/viewvc?rev=726715&view=rev
Log:
WW-2824 refactored altSyntax expression code
thanks to Gabriel Belingueres for patch.
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Component.java
Mon Dec 15 07:39:15 2008
@@ -243,15 +243,48 @@
return null;
}
- if (altSyntax()) {
+ expr = stripExpressionIfAltSyntax(expr);
+
+ return getStack().findValue(expr);
+ }
+
+ /**
+ * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off.
+ * @param expr the expression (must be not null)
+ * @return the stripped expression if altSyntax is enabled. Otherwise
+ * the parameter expression is returned as is.
+ */
+ protected String stripExpressionIfAltSyntax(String expr) {
+ return stripExpressionIfAltSyntax(stack, expr);
+ }
+
+ /**
+ * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off.
+ * @param stack the ValueStack where the context value is searched for.
+ * @param expr the expression (must be not null)
+ * @return the stripped expression if altSyntax is enabled. Otherwise
+ * the parameter expression is returned as is.
+ */
+ public static String stripExpressionIfAltSyntax(ValueStack stack,
String expr) {
+ if (altSyntax(stack)) {
// does the expression start with %{ and end with }? if so, just
cut it off!
if (expr.startsWith("%{") && expr.endsWith("}")) {
- expr = expr.substring(2, expr.length() - 1);
+ return expr.substring(2, expr.length() - 1);
}
}
+ return expr;
+ }
- return getStack().findValue(expr);
- }
+ /**
+ * Is the altSyntax enabled? [TRUE]
+ * <p/>
+ * @param stack the ValueStack where the context value is searched for.
+ * @return true if altSyntax is activated. False otherwise.
+ * See <code>struts.properties</code> where the altSyntax flag is defined.
+ */
+ public static boolean altSyntax(ValueStack stack) {
+ return ContextUtil.isUseAltSyntax(stack.getContext());
+ }
/**
* Is the altSyntax enabled? [TRUE]
@@ -259,10 +292,36 @@
* See <code>struts.properties</code> where the altSyntax flag is defined.
*/
public boolean altSyntax() {
- return ContextUtil.isUseAltSyntax(stack.getContext());
+ return altSyntax(stack);
}
/**
+ * Adds the sorrounding %{ } to the expression for proper processing.
+ * @param expr the expression.
+ * @return the modified expression if altSyntax is enabled, or the
parameter
+ * expression otherwise.
+ */
+ protected String completeExpressionIfAltSyntax(String expr) {
+ if (altSyntax()) {
+ return "%{" + expr + "}";
+ }
+ return expr;
+ }
+
+ /**
+ * This check is needed for backwards compatibility with 2.1.x
+ * @param expr the expression.
+ * @return the found string if altSyntax is enabled. The parameter
+ * expression otherwise.
+ */
+ protected String findStringIfAltSyntax(String expr) {
+ if (altSyntax()) {
+ return findString(expr);
+ }
+ return expr;
+ }
+
+ /**
* Evaluates the OGNL stack to find an Object value.
* <p/>
* Function just like <code>findValue(String)</code> except that if the
@@ -309,14 +368,9 @@
*/
protected Object findValue(String expr, Class toType) {
if (altSyntax() && toType == String.class) {
- return TextParseUtil.translateVariables('%', expr, stack);
+ return TextParseUtil.translateVariables('%', expr, stack);
} else {
- if (altSyntax()) {
- // does the expression start with %{ and end with }? if so,
just cut it off!
- if (expr.startsWith("%{") && expr.endsWith("}")) {
- expr = expr.substring(2, expr.length() - 1);
- }
- }
+ expr = stripExpressionIfAltSyntax(expr);
return getStack().findValue(expr, toType);
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
Mon Dec 15 07:39:15 2008
@@ -143,13 +143,7 @@
}
if (doubleListValue != null) {
- if (altSyntax()) {
- // the same logic as with findValue(String)
- // if value start with %{ and end with }, just cut it off!
- if (doubleListValue.startsWith("%{") &&
doubleListValue.endsWith("}")) {
- doubleListValue = doubleListValue.substring(2,
doubleListValue.length() - 1);
- }
- }
+ doubleListValue = stripExpressionIfAltSyntax(doubleListValue);
addParameter("doubleListValue", doubleListValue);
}else if (tmpDoubleList instanceof Map) {
@@ -186,11 +180,7 @@
Form form = (Form) findAncestor(Form.class);
if (doubleId != null) {
// this check is needed for backwards compatibility with 2.1.x
- if (altSyntax()) {
- addParameter("doubleId", findString(doubleId));
- } else {
- addParameter("doubleId", doubleId);
- }
+ addParameter("doubleId", findStringIfAltSyntax(doubleId));
} else if (form != null) {
addParameter("doubleId", form.getParameters().get("id") + "_"
+escape(this.doubleName));
} else {
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/FormButton.java
Mon Dec 15 07:39:15 2008
@@ -111,11 +111,7 @@
String _tmp_id = "";
if (id != null) {
// this check is needed for backwards compatibility with 2.1.x
- if (altSyntax()) {
- _tmp_id = findString(id);
- } else {
- _tmp_id = id;
- }
+ _tmp_id = findStringIfAltSyntax(id);
}
else {
if (form != null && form.getParameters().get("id") != null) {
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Label.java
Mon Dec 15 07:39:15 2008
@@ -88,10 +88,7 @@
String providedLabel = TextProviderHelper.getText(key, key, stack);
addParameter("nameValue", providedLabel);
} else if (name != null) {
- String expr = name;
- if (altSyntax()) {
- expr = "%{" + expr + "}";
- }
+ String expr = completeExpressionIfAltSyntax(name);
addParameter("nameValue", findString(expr));
}
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ListUIBean.java
Mon Dec 15 07:39:15 2008
@@ -103,19 +103,14 @@
}
if (listKey != null) {
+ listKey = stripExpressionIfAltSyntax(listKey);
addParameter("listKey", listKey);
} else if (value instanceof Map) {
addParameter("listKey", "key");
}
if (listValue != null) {
- if (altSyntax()) {
- // the same logic as with findValue(String)
- // if value start with %{ and end with }, just cut it off!
- if (listValue.startsWith("%{") && listValue.endsWith("}")) {
- listValue = listValue.substring(2, listValue.length() - 1);
- }
- }
+ listValue = stripExpressionIfAltSyntax(listValue);
addParameter("listValue", listValue);
} else if (value instanceof Map) {
addParameter("listValue", "value");
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/Property.java
Mon Dec 15 07:39:15 2008
@@ -129,12 +129,8 @@
if (value == null) {
value = "top";
}
- else if (altSyntax()) {
- // the same logic as with findValue(String)
- // if value start with %{ and end with }, just cut it off!
- if (value.startsWith("%{") && value.endsWith("}")) {
- value = value.substring(2, value.length() - 1);
- }
+ else {
+ value = stripExpressionIfAltSyntax(value);
}
// exception: don't call findString(), since we don't want the
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/UIBean.java
Mon Dec 15 07:39:15 2008
@@ -764,10 +764,7 @@
if (value != null) {
addParameter("nameValue", findValue(value,
valueClazz));
} else if (name != null) {
- String expr = name;
- if (altSyntax()) {
- expr = "%{" + expr + "}";
- }
+ String expr = completeExpressionIfAltSyntax(name);
addParameter("nameValue", findValue(expr, valueClazz));
}
@@ -859,7 +856,7 @@
evaluateExtraParams();
}
- protected String escape(String name) {
+ protected String escape(String name) {
// escape any possible values that can make the ID painful to work
with in JavaScript
if (name != null) {
return name.replaceAll("[^a-zA-Z0-9_]", "_");
@@ -966,11 +963,7 @@
String tryId;
if (id != null) {
// this check is needed for backwards compatibility with 2.1.x
- if (altSyntax()) {
- tryId = findString(id);
- } else {
- tryId = id;
- }
+ tryId = findStringIfAltSyntax(id);
} else if (form != null) {
tryId = form.getParameters().get("id") + "_"
+ escape(name != null ? findString(name) : null);
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java?rev=726715&r1=726714&r2=726715&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
Mon Dec 15 07:39:15 2008
@@ -25,9 +25,10 @@
import javax.servlet.jsp.tagext.BodyTagSupport;
+import org.apache.struts2.components.Component;
import org.apache.struts2.util.FastByteArrayOutputStream;
-import org.apache.struts2.views.util.ContextUtil;
+import com.opensymphony.xwork2.util.TextParseUtil;
import com.opensymphony.xwork2.util.ValueStack;
@@ -39,10 +40,6 @@
private static final long serialVersionUID = -1201668454354226175L;
- protected boolean altSyntax() {
- return ContextUtil.isUseAltSyntax(getStack().getContext());
- }
-
protected ValueStack getStack() {
return TagUtils.getStack(pageContext);
}
@@ -52,26 +49,17 @@
}
protected Object findValue(String expr) {
- if (altSyntax()) {
- // does the expression start with %{ and end with }? if so, just
cut it off!
- if (expr.startsWith("%{") && expr.endsWith("}")) {
- expr = expr.substring(2, expr.length() - 1);
- }
- }
+ expr = Component.stripExpressionIfAltSyntax(getStack(), expr);
return getStack().findValue(expr);
}
protected Object findValue(String expr, Class toType) {
- if (altSyntax() && toType == String.class) {
- return translateVariables(expr, getStack());
+ if (Component.altSyntax(getStack()) && toType == String.class) {
+ return TextParseUtil.translateVariables('%', expr, getStack());
+ //return translateVariables(expr, getStack());
} else {
- if (altSyntax()) {
- // does the expression start with %{ and end with }? if so,
just cut it off!
- if (expr.startsWith("%{") && expr.endsWith("}")) {
- expr = expr.substring(2, expr.length() - 1);
- }
- }
+ expr = Component.stripExpressionIfAltSyntax(getStack(), expr);
return getStack().findValue(expr, toType);
}
@@ -93,28 +81,4 @@
return bodyContent.getString().trim();
}
}
-
- public static String translateVariables(String expression, ValueStack
stack) {
- while (true) {
- int x = expression.indexOf("%{");
- int y = expression.indexOf("}", x);
-
- if ((x != -1) && (y != -1)) {
- String var = expression.substring(x + 2, y);
-
- Object o = stack.findValue(var, String.class);
-
- if (o != null) {
- expression = expression.substring(0, x) + o +
expression.substring(y + 1);
- } else {
- // the variable doesn't exist, so don't display anything
- expression = expression.substring(0, x) +
expression.substring(y + 1);
- }
- } else {
- break;
- }
- }
-
- return expression;
- }
}