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; - } }