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, "MM/dd/yyyy");}"/> + <display description="${groovy:org.ofbiz.base.util.UtilDateTime.toDateString(exampleDateField, "MM/dd/yyyy");}"/> </field> <!-- ***************** --> <!-- *** field8 *** --> |
Free forum by Nabble | Edit this page |