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Ãfªme chose mais utilise la notation $ {bsh:...} pour appeler un mÃf©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Ãf 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Ãfªme chose mais utilise la notation $ {groovy:...} pour appeler un mÃf©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Ãf 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 *** -->