You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2008/12/29 01:43:06 UTC

svn commit: r729819 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/util: collections/FlexibleMapAccessor.java string/UelUtil.java

Author: adrianc
Date: Sun Dec 28 16:43:05 2008
New Revision: 729819

URL: http://svn.apache.org/viewvc?rev=729819&view=rev
Log:
Fixed problem with OFBiz script syntax versus UEL syntax. UEL identifiers cannot start with a digit, so identifiers created from IDs would generate syntax errors. This commit fixes that by converting ID identifiers internally by prefixing them with an underscore.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java?rev=729819&r1=729818&r2=729819&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/collections/FlexibleMapAccessor.java Sun Dec 28 16:43:05 2008
@@ -59,7 +59,7 @@
                 name = name.substring(1);
             }
             if (name.contains(FlexibleStringExpander.openBracket)) {
-                fse = FlexibleStringExpander.getInstance(UelUtil.prepareExpression(name));
+                fse = FlexibleStringExpander.getInstance(name);
             } else {
                 bracketedOriginal = FlexibleStringExpander.openBracket.concat(UelUtil.prepareExpression(name).concat(FlexibleStringExpander.closeBracket));
             }
@@ -189,7 +189,7 @@
     protected String getExpression(Map<String, ? extends Object> base) {
         String expression = null;
         if (this.fse != null) {
-            expression = FlexibleStringExpander.openBracket.concat(this.fse.expandString(base).concat(FlexibleStringExpander.closeBracket));
+            expression = FlexibleStringExpander.openBracket.concat(UelUtil.prepareExpression(this.fse.expandString(base)).concat(FlexibleStringExpander.closeBracket));
         } else {
             expression = this.bracketedOriginal;
         }

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java?rev=729819&r1=729818&r2=729819&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java Sun Dec 28 16:43:05 2008
@@ -322,15 +322,24 @@
      * @return Converted expression
      */
     public static String prepareExpression(String expression) {
+        String result = expression;
         int openBrace = expression.indexOf("[+");
         int closeBrace = (openBrace == -1 ? -1 : expression.indexOf(']', openBrace));
         if (closeBrace != -1) {
             String base = expression.substring(0, openBrace);
             String property = expression.substring(openBrace+2, closeBrace).trim();
             String end = expression.substring(closeBrace + 1);
-            expression = base + "['insert@" + property + "']" + end;
+            result = base + "['insert@" + property + "']" + end;
         }
-        expression = expression.replace("[]", "['add']");
-        return expression;
+        result = result.replace("[]", "['add']");
+        int pos = result.indexOf(".");
+        while (pos != -1) {
+            char c = result.charAt(pos + 1);
+            if (c >= '0' && c <= '9') {
+                result = result.substring(0, pos) + "._" + result.substring(pos + 1);
+            }
+            pos = result.indexOf(".", pos + 1);
+        }
+        return result;
     }
 }