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


Reply via email to