svn commit: r762610 - in /ofbiz/trunk/framework: base/src/org/ofbiz/base/util/GroovyUtil.java base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java example/config/ExampleUiLabels.xml example/widget/example/FormWidgetExampleForms.xml

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r762610 - in /ofbiz/trunk/framework: base/src/org/ofbiz/base/util/GroovyUtil.java base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java example/config/ExampleUiLabels.xml example/widget/example/FormWidgetExampleForms.xml

jaz-3
Author: jaz
Date: Tue Apr  7 03:17:31 2009
New Revision: 762610

URL: http://svn.apache.org/viewvc?rev=762610&view=rev
Log:
Added Groovy support to the FlexibleStringExpander; updated example component to show usage

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/GroovyUtil.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
    ofbiz/trunk/framework/example/config/ExampleUiLabels.xml
    ofbiz/trunk/framework/example/widget/example/FormWidgetExampleForms.xml

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/GroovyUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/GroovyUtil.java?rev=762610&r1=762609&r2=762610&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/GroovyUtil.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/GroovyUtil.java Tue Apr  7 03:17:31 2009
@@ -33,6 +33,7 @@
 import groovy.lang.Script;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.runtime.InvokerHelper;
+import bsh.EvalError;
 
 /**
  * GroovyUtil - Groovy Utilities
@@ -61,6 +62,44 @@
         return binding;
     }
 
+    /**
+     * Evaluate a Groovy condition or expression
+     * @param expression The expression to evaluate
+     * @param context The context to use in evaluation (re-written)
+     * @return Object The result of the evaluation
+     * @throws CompilationFailedException
+     */
+    public static Object eval(String expression, Map<String, Object> context) throws CompilationFailedException {
+        Object o;
+        if (expression == null || expression.equals("")) {
+            Debug.logError("Groovy Evaluation error. Empty expression", module);
+            return null;
+        }
+
+        if (Debug.verboseOn())
+            Debug.logVerbose("Evaluating -- " + expression, module);
+        if (Debug.verboseOn())
+            Debug.logVerbose("Using Context -- " + context, module);
+
+        try {
+            GroovyShell shell = new GroovyShell(getBinding(context));            
+            o = shell.evaluate(expression);
+
+            if (Debug.verboseOn())
+                Debug.logVerbose("Evaluated to -- " + o, module);
+
+            // read back the context info
+            Binding binding = shell.getContext();
+            context.putAll(binding.getVariables());
+            
+        } catch (CompilationFailedException e) {
+            Debug.logError(e, "Groovy Evaluation error.", module);
+            throw e;
+        }
+        
+        return o;
+    }
+
     public static Object runScriptAtLocation(String location, Map<String, Object> context) throws GeneralException {
         try {
             Class scriptClass = parsedScripts.get(location);

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=762610&r1=762609&r2=762610&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java Tue Apr  7 03:17:31 2009
@@ -26,13 +26,9 @@
 import java.util.Map;
 import java.util.TimeZone;
 
-import org.ofbiz.base.util.BshUtil;
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.base.util.ObjectType;
 import org.ofbiz.base.util.cache.UtilCache;
-import org.ofbiz.base.util.UtilDateTime;
-import org.ofbiz.base.util.UtilFormatOut;
-import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.*;
+import org.codehaus.groovy.control.CompilationFailedException;
 
 import bsh.EvalError;
 
@@ -230,9 +226,13 @@
                 // append everything from the current index to the start of the var
                 strElems.add(new ConstElem(original.substring(currentInd, start)));
             }
-            // check to see if this starts with a "bsh:", if so treat the rest of the string as a bsh scriptlet
+
             if (original.indexOf("bsh:", start + 2) == start + 2) {
+                // checks to see if this starts with a "bsh:", if so treat the rest of the string as a bsh scriptlet
                 strElems.add(new BshElem(original.substring(start + 6, end)));
+            } else if (original.indexOf("groovy:", start + 2) == start + 2) {
+                // checks to see if this starts with a "groovy:", if so treat the rest of the string as a groovy scriptlet                
+                strElems.add(new GroovyElem(original.substring(start + 9, end)));
             } else {
                 int ptr = original.indexOf(openBracket, start + 2);
                 while (ptr != -1 && end != -1 && ptr < end) {
@@ -306,6 +306,31 @@
         }
     }
 
+    protected static class GroovyElem implements StrElem {
+        protected final String str;
+        protected GroovyElem(String script) {
+            this.str = script;
+        }
+        public void append(StringBuilder buffer, Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) {
+            try {
+                Object obj = GroovyUtil.eval(this.str, UtilMisc.makeMapWritable(context));
+                if (obj != null) {
+                    try {
+                        buffer.append(ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale, true));
+                    } catch (Exception e) {
+                        buffer.append(obj);
+                    }
+                } else {
+                    if (Debug.verboseOn()) {
+                        Debug.logVerbose("Groovy scriptlet evaluated to null [" + this.str + "], got no return so inserting nothing.", module);
+                    }
+                }
+            } catch (CompilationFailedException e) {
+                Debug.logWarning(e, "Error evaluating Groovy scriptlet [" + this.str + "], inserting nothing; error was: " + e, module);
+            }
+        }
+    }
+
     protected static class CurrElem implements StrElem {
         protected final String valueStr;
         protected final FlexibleStringExpander codeExpr;

Modified: ofbiz/trunk/framework/example/config/ExampleUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/config/ExampleUiLabels.xml?rev=762610&r1=762609&r2=762610&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/config/ExampleUiLabels.xml (original)
+++ ofbiz/trunk/framework/example/config/ExampleUiLabels.xml Tue Apr  7 03:17:31 2009
@@ -148,9 +148,9 @@
         <value xml:lang="it">Campo9: campo di selezione con valore di default per data e ora</value>
     </property>
     <property key="ExampleDateField9Tooltip">
-        <value xml:lang="en">Same as above, uses the $ {bsh:...} notation to call an util method to get the now timestamp</value>
-        <value xml:lang="fr">La même chose mais utilise la notation $ {bsh:...} pour appeler un méthode utilitaire pour obtenir l'heure du moment</value>
-        <value xml:lang="it">Lo stesso di sopra, usare la notazione $ {bsh:...} per eseguire un metodo di utilità per ottenere un nuovo timestamp</value>
+        <value xml:lang="en">Same as above, uses the $ {groovy:...} notation to call an util method to get the now timestamp</value>
+        <value xml:lang="fr">La même chose mais utilise la notation $ {groovy:...} pour appeler un méthode utilitaire pour obtenir l'heure du moment</value>
+        <value xml:lang="it">Lo stesso di sopra, usare la notazione $ {groovy:...} per eseguire un metodo di utilità per ottenere un nuovo timestamp</value>
     </property>
     <property key="ExampleDateTimeFields">
         <value xml:lang="en">Date/Time fields</value>

Modified: ofbiz/trunk/framework/example/widget/example/FormWidgetExampleForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/widget/example/FormWidgetExampleForms.xml?rev=762610&r1=762609&r2=762610&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/widget/example/FormWidgetExampleForms.xml (original)
+++ ofbiz/trunk/framework/example/widget/example/FormWidgetExampleForms.xml Tue Apr  7 03:17:31 2009
@@ -41,7 +41,7 @@
                tooltip="${uiLabelMap.ExampleDateField9Tooltip}">
             <!-- tooltip="Same as above, uses the ${'${'bsh:...} notation to call an util method to get the now timestamp}"-->
             <!-- tooltip="Same as above, uses the \${bsh:...} notation to call an util method to get the now timestamp}"-->
-            <date-time default-value="${bsh:org.ofbiz.base.util.UtilDateTime.nowTimestamp()}"/>
+            <date-time default-value="${groovy:org.ofbiz.base.util.UtilDateTime.nowTimestamp()}"/>
         </field>
         <!-- ***************** -->
         <!-- ***   field10  *** -->
@@ -99,7 +99,7 @@
                entry-name="exampleDateField"
                title="${uiLabelMap.ExampleDateField7Title}"
                tooltip="${uiLabelMap.ExampleDateField7Tooltip}">
-            <display description="${bsh:org.ofbiz.base.util.UtilDateTime.toDateString(exampleDateField, &quot;MM/dd/yyyy&quot;);}"/>
+            <display description="${groovy:org.ofbiz.base.util.UtilDateTime.toDateString(exampleDateField, &quot;MM/dd/yyyy&quot;);}"/>
         </field>
         <!-- ***************** -->
         <!-- ***   field8  *** -->