Author: adrianc
Date: Tue Mar 23 22:34:54 2010 New Revision: 926819 URL: http://svn.apache.org/viewvc?rev=926819&view=rev Log: Added the ability for screen widgets to invoke Groovy script methods. Groovy script methods do not have parameters; parameters are passed in the context - just like other screen widget actions. To use: <actions> <script location="groovyLocation#methodName"/> </actions> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=926819&r1=926818&r2=926819&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java Tue Mar 23 22:34:54 2010 @@ -378,4 +378,34 @@ public class WidgetWorker { return linkType; } } + + /** Returns the script location based on a script combined name: + * <code>location#methodName</code>. + * + * @param combinedName The combined location/method name + * @return The script location + */ + public static String getScriptLocation(String combinedName) { + int pos = combinedName.lastIndexOf("#"); + if (pos == -1) { + return combinedName; + } + return combinedName.substring(0, pos); + } + + /** Returns the script method name based on a script combined name: + * <code>location#methodName</code>. Returns <code>null</code> if + * no method name is found. + * + * @param combinedName The combined location/method name + * @return The method name or <code>null</code> + */ + public static String getScriptMethodName(String combinedName) { + int pos = combinedName.lastIndexOf("#"); + if (pos == -1) { + return null; + } + return combinedName.substring(pos + 1); + } + } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java?rev=926819&r1=926818&r2=926819&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormAction.java Tue Mar 23 22:34:54 2010 @@ -31,6 +31,9 @@ import java.util.regex.PatternSyntaxExce import javolution.util.FastList; import javolution.util.FastMap; +import groovy.lang.Binding; + +import org.codehaus.groovy.runtime.InvokerHelper; import org.ofbiz.base.util.BshUtil; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; @@ -49,6 +52,7 @@ import org.ofbiz.entity.finder.PrimaryKe import org.ofbiz.entity.util.EntityListIterator; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.ModelService; +import org.ofbiz.widget.WidgetWorker; import org.w3c.dom.Element; @@ -267,11 +271,15 @@ public abstract class ModelFormAction { } public static class Script extends ModelFormAction { + protected static final Object[] EMPTY_ARGS = {}; protected String location; + protected String method; public Script(ModelForm modelForm, Element scriptElement) { super (modelForm, scriptElement); - this.location = scriptElement.getAttribute("location"); + String scriptLocation = scriptElement.getAttribute("location"); + this.location = WidgetWorker.getScriptLocation(scriptLocation); + this.method = WidgetWorker.getScriptMethodName(scriptLocation); } @Override @@ -284,9 +292,14 @@ public abstract class ModelFormAction { Debug.logError(e, errMsg, module); throw new IllegalArgumentException(errMsg); } - } else if (location.endsWith(".groovy")) { + } else if (location.contains(".groovy")) { try { - GroovyUtil.runScriptAtLocation(location, context); + groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), new Binding(context)); + if (UtilValidate.isEmpty(method)) { + script.run(); + } else { + script.invokeMethod(method, EMPTY_ARGS); + } } catch (GeneralException e) { String errMsg = "Error running Groovy script at location [" + location + "]: " + e.toString(); Debug.logError(e, errMsg, module); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java?rev=926819&r1=926818&r2=926819&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuAction.java Tue Mar 23 22:34:54 2010 @@ -25,16 +25,22 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpSession; + import javolution.util.FastList; import javolution.util.FastMap; +import groovy.lang.Binding; +import org.codehaus.groovy.runtime.InvokerHelper; + import org.ofbiz.base.util.BshUtil; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.GroovyUtil; import org.ofbiz.base.util.ObjectType; -import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilFormatOut; +import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; @@ -45,10 +51,8 @@ import org.ofbiz.entity.finder.ByConditi import org.ofbiz.entity.finder.PrimaryKeyFinder; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.ModelService; - +import org.ofbiz.widget.WidgetWorker; import org.w3c.dom.Element; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; /** @@ -324,11 +328,15 @@ public abstract class ModelMenuAction { } public static class Script extends ModelMenuAction { + protected static final Object[] EMPTY_ARGS = {}; protected String location; + protected String method; public Script(ModelMenu modelMenu, Element scriptElement) { super (modelMenu, scriptElement); - this.location = scriptElement.getAttribute("location"); + String scriptLocation = scriptElement.getAttribute("location"); + this.location = WidgetWorker.getScriptLocation(scriptLocation); + this.method = WidgetWorker.getScriptMethodName(scriptLocation); } @Override @@ -343,7 +351,12 @@ public abstract class ModelMenuAction { } } else if (location.endsWith(".groovy")) { try { - GroovyUtil.runScriptAtLocation(location, context); + groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), new Binding(context)); + if (UtilValidate.isEmpty(method)) { + script.run(); + } else { + script.invokeMethod(method, EMPTY_ARGS); + } } catch (GeneralException e) { String errMsg = "Error running Groovy script at location [" + location + "]: " + e.toString(); Debug.logError(e, errMsg, module); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java?rev=926819&r1=926818&r2=926819&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenAction.java Tue Mar 23 22:34:54 2010 @@ -33,6 +33,9 @@ import javax.servlet.http.HttpSession; import javolution.util.FastList; import javolution.util.FastMap; +import groovy.lang.Binding; +import org.codehaus.groovy.runtime.InvokerHelper; + import org.ofbiz.base.util.BshUtil; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; @@ -58,6 +61,7 @@ import org.ofbiz.minilang.method.MethodC import org.ofbiz.service.DispatchContext; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.ModelService; +import org.ofbiz.widget.WidgetWorker; import org.w3c.dom.Element; @@ -392,11 +396,15 @@ public abstract class ModelScreenAction } public static class Script extends ModelScreenAction { + protected static final Object[] EMPTY_ARGS = {}; protected String location; + protected String method; public Script(ModelScreen modelScreen, Element scriptElement) { super (modelScreen, scriptElement); - this.location = scriptElement.getAttribute("location"); + String scriptLocation = scriptElement.getAttribute("location"); + this.location = WidgetWorker.getScriptLocation(scriptLocation); + this.method = WidgetWorker.getScriptMethodName(scriptLocation); } @Override @@ -409,19 +417,22 @@ public abstract class ModelScreenAction } } else if (location.endsWith(".groovy")) { try { - GroovyUtil.runScriptAtLocation(location, context); + groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), new Binding(context)); + if (UtilValidate.isEmpty(method)) { + script.run(); + } else { + script.invokeMethod(method, EMPTY_ARGS); + } } catch (GeneralException e) { throw new GeneralException("Error running Groovy script at location [" + location + "]", e); } - } else if (location.contains(".xml#")) { - String xmlResource = ScreenFactory.getResourceNameFromCombined(location); - String methodName = ScreenFactory.getScreenNameFromCombined(location); + } else if (location.endsWith(".xml")) { Map<String, Object> localContext = FastMap.newInstance(); localContext.putAll(context); DispatchContext ctx = this.modelScreen.getDispatcher(context).getDispatchContext(); MethodContext methodContext = new MethodContext(ctx, localContext, null); try { - SimpleMethod.runSimpleMethod(xmlResource, methodName, methodContext); + SimpleMethod.runSimpleMethod(location, method, methodContext); context.putAll(methodContext.getResults()); } catch (MiniLangException e) { throw new GeneralException("Error running simple method at location [" + location + "]", e); |
Free forum by Nabble | Edit this page |