Author: jacopoc
Date: Sun Mar 4 07:24:47 2012 New Revision: 1296762 URL: http://svn.apache.org/viewvc?rev=1296762&view=rev Log: First pass in the direction of the implementation of a more flexible mechanism to plugin different scripting technologies and in the same time being able to get rid of a lot of framework related custom code to support them. In particular these chenges should make it easier to implement JSR-223 (even if I think that we should still treat Groovy in a special way). Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/CallScript.java ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.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 Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java?rev=1296762&view=auto ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java (added) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java Sun Mar 4 07:24:47 2012 @@ -0,0 +1,99 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.base.util; + +import org.codehaus.groovy.runtime.InvokerHelper; + +import java.util.Map; + +public class ScriptUtil { + public static final String module = ScriptUtil.class.getName(); + protected static final Object[] EMPTY_ARGS = {}; + + public static Class<?> parseScript(String language, String script) { + Class<?> scriptClass = null; + if ("groovy".equals(language)) { + scriptClass = GroovyUtil.parseClass(script); + } + return scriptClass; + } + /* TODO: the "evaluate" and "executeScript" method method could be enhanced to implement JSR-223 using code like: + import javax.script.ScriptEngineManager; + import javax.script.ScriptEngine; + ... + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine scriptEngine = manager.getEngineByExtension(location.substring(location.indexOf(".") + 1)); + ... + Object result = scriptEngine.eval(scriptFileReader, scriptContext); + + However it may make more sense to keep a custom way to load and execute Groovy scripts and implement JSR-223 + for the other scripting languages: in this way the OFBiz framework will support any script language with JSR-223 + but will still have specialized support for Groovy (where we could/should inject OFBiz specific utility methods + and create a security sandbox for Groovy dynamic code). + */ + public static Object evaluate(String language, String script, Class<?> scriptClass, Map inputMap) throws Exception { + /* + TODO: for JSR-223 we could use: + ScriptEngine scriptEngine = manager.getEngineByName(location); + */ + Object result = null; + if ("groovy".equals(language)) { + if (scriptClass == null) { + scriptClass = ScriptUtil.parseScript(language, script); + } + if (scriptClass != null) { + result = InvokerHelper.createScript(scriptClass, GroovyUtil.getBinding(inputMap)).run(); + } + } else if ("bsh".equals(language)) { + result = BshUtil.eval(script, UtilMisc.makeMapWritable(inputMap)); + } + return result; + } + + public static void executeScript(String location, String method, Map<String, Object> context) { + /* + TODO: for JSR-223 we could use: + ScriptEngine scriptEngine = manager.getEngineByExtension(location.substring(location.indexOf(".") + 1)); + */ + if (location.endsWith(".bsh")) { + try { + BshUtil.runBshAtLocation(location, context); + } catch (GeneralException e) { + String errMsg = "Error running BSH script at location [" + location + "]: " + e.toString(); + Debug.logError(e, errMsg, module); + throw new IllegalArgumentException(errMsg); + } + } else if (location.endsWith(".groovy")) { + try { + groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(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); + throw new IllegalArgumentException(errMsg); + } + } else { + throw new IllegalArgumentException("The script type is not yet support for location:" + 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=1296762&r1=1296761&r2=1296762&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 Sun Mar 4 07:24:47 2012 @@ -29,19 +29,8 @@ import javax.el.PropertyNotFoundExceptio import org.ofbiz.base.lang.IsEmpty; import org.ofbiz.base.lang.SourceMonitored; -import org.ofbiz.base.util.BshUtil; -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.GroovyUtil; -import org.ofbiz.base.util.ObjectType; -import org.ofbiz.base.util.UtilDateTime; -import org.ofbiz.base.util.UtilFormatOut; -import org.ofbiz.base.util.UtilGenerics; -import org.ofbiz.base.util.UtilMisc; -import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.*; import org.ofbiz.base.util.cache.UtilCache; -import org.codehaus.groovy.runtime.InvokerHelper; - -import bsh.EvalError; /** Expands String values that contain Unified Expression Language (JSR 245) * syntax. This class also supports the execution of bsh scripts by using the @@ -268,10 +257,10 @@ public abstract class FlexibleStringExpa } if (expression.indexOf("bsh:", start + 2) == start + 2 && !escapedExpression) { // checks to see if this starts with a "bsh:", if so treat the rest of the expression as a bsh scriptlet - strElems.add(new BshElem(chars, start, Math.min(end + 1, start + length) - start, start + 6, end - start - 6)); + strElems.add(new ScriptElem(chars, start, Math.min(end + 1, start + length) - start, start + 6, end - start - 6)); } else if (expression.indexOf("groovy:", start + 2) == start + 2 && !escapedExpression) { // checks to see if this starts with a "groovy:", if so treat the rest of the expression as a groovy scriptlet - strElems.add(new GroovyElem(chars, start, Math.min(end + 1, start + length) - start, start + 9, end - start - 9)); + strElems.add(new ScriptElem(chars, start, Math.min(end + 1, start + length) - start, start + 9, end - start - 9)); } else { // Scan for matching closing bracket int ptr = expression.indexOf(openBracket, start + 2); @@ -488,35 +477,6 @@ public abstract class FlexibleStringExpa } } - /** An object that represents a <code>${bsh:}</code> expression. */ - protected static class BshElem extends ArrayOffsetString { - private final int parseStart; - private final int parseLength; - - protected BshElem(char[] chars, int offset, int length, int parseStart, int parseLength) { - super(chars, offset, length); - this.parseStart = parseStart; - this.parseLength = parseLength; - } - - @Override - protected Object get(Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) { - try { - Object obj = BshUtil.eval(new String(this.chars, this.parseStart, this.parseLength), UtilMisc.makeMapWritable(context)); - if (obj != null) { - return obj; - } else { - if (Debug.verboseOn()) { - Debug.logVerbose("BSH scriptlet evaluated to null [" + this + "], got no return so inserting nothing.", module); - } - } - } catch (EvalError e) { - Debug.logWarning(e, "Error evaluating BSH scriptlet [" + this + "], inserting nothing; error was: " + e, module); - } - return null; - } - } - /** An object that represents a <code>String</code> constant portion of an expression. */ protected static class ConstSimpleElem extends FlexibleStringExpander { protected ConstSimpleElem(char[] chars) { @@ -613,29 +573,36 @@ public abstract class FlexibleStringExpa } } - /** An object that represents a <code>${groovy:}</code> expression. */ - protected static class GroovyElem extends ArrayOffsetString { + /** An object that represents a <code>${[groovy|bsh]:}</code> expression. */ + protected static class ScriptElem extends ArrayOffsetString { + private final String language; + private final int parseStart; + private final int parseLength; + private final String script; protected final Class<?> parsedScript; - protected GroovyElem(char[] chars, int offset, int length, int parseStart, int parseLength) { + protected ScriptElem(char[] chars, int offset, int length, int parseStart, int parseLength) { super(chars, offset, length); - this.parsedScript = GroovyUtil.parseClass(new String(chars, parseStart, parseLength)); + this.language = new String(this.chars, offset + 2, parseStart - offset - 3); + this.parseStart = parseStart; + this.parseLength = parseLength; + this.script = new String(this.chars, this.parseStart, this.parseLength); + this.parsedScript = ScriptUtil.parseScript(this.language, this.script); } @Override protected Object get(Map<String, ? extends Object> context, TimeZone timeZone, Locale locale) { try { - Object obj = InvokerHelper.createScript(this.parsedScript, GroovyUtil.getBinding(context)).run(); + Object obj = ScriptUtil.evaluate(this.language, this.script, this.parsedScript, context); if (obj != null) { return obj; } else { if (Debug.verboseOn()) { - Debug.logVerbose("Groovy scriptlet evaluated to null [" + this + "], got no return so inserting nothing.", module); + Debug.logVerbose("Scriptlet evaluated to null [" + this + "].", module); } } } catch (Exception e) { - // handle other things, like the groovy.lang.MissingPropertyException - Debug.logWarning(e, "Error evaluating Groovy scriptlet [" + this + "], inserting nothing; error was: " + e, module); + Debug.logWarning(e, "Error evaluating scriptlet [" + this + "]; error was: " + e, module); } return null; } Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/CallScript.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/CallScript.java?rev=1296762&r1=1296761&r2=1296762&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/CallScript.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/callops/CallScript.java Sun Mar 4 07:24:47 2012 @@ -23,11 +23,7 @@ import java.util.Map; import javolution.util.FastList; -import org.codehaus.groovy.runtime.InvokerHelper; -import org.ofbiz.base.util.BshUtil; -import org.ofbiz.base.util.GeneralException; -import org.ofbiz.base.util.GroovyUtil; -import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.*; import org.ofbiz.minilang.MiniLangException; import org.ofbiz.minilang.SimpleMethod; import org.ofbiz.minilang.method.ContextAccessor; @@ -47,8 +43,7 @@ public class CallScript extends MethodOp } public static final String module = CallScript.class.getName(); - protected static final Object[] EMPTY_ARGS = {}; - + private ContextAccessor<List<Object>> errorListAcsr; private String location; private String method; @@ -73,31 +68,14 @@ public class CallScript extends MethodOp } Map<String, Object> context = methodContext.getEnvMap(); - if (location.endsWith(".bsh")) { - try { - BshUtil.runBshAtLocation(location, context); - } catch (GeneralException e) { - messages.add("Error running BSH script at location [" + location + "]: " + e.getMessage()); - } - } else if (location.endsWith(".groovy")) { - try { - groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(context)); - if (UtilValidate.isEmpty(method)) { - script.run(); - } else { - script.invokeMethod(method, EMPTY_ARGS); - } - } catch (GeneralException e) { - messages.add("Error running Groovy script at location [" + location + "]: " + e.getMessage()); - } - } else if (location.endsWith(".xml")) { + if (location.endsWith(".xml")) { try { SimpleMethod.runSimpleMethod(location, method, methodContext); } catch (MiniLangException e) { messages.add("Error running simple method at location [" + location + "]: " + e.getMessage()); } } else { - messages.add("Unsupported script type [" + location + "]"); + ScriptUtil.executeScript(this.location, this.method, context); } // update the method environment Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java?rev=1296762&r1=1296761&r2=1296762&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/SetOperation.java Sun Mar 4 07:24:47 2012 @@ -21,12 +21,7 @@ package org.ofbiz.minilang.method.envops import javolution.util.FastList; import javolution.util.FastMap; -import org.codehaus.groovy.runtime.InvokerHelper; -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.UtilValidate; +import org.ofbiz.base.util.*; import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.minilang.SimpleMethod; import org.ofbiz.minilang.method.ContextAccessor; @@ -56,14 +51,14 @@ public class SetOperation extends Method protected String type; protected boolean setIfNull; // default to false protected boolean setIfEmpty; // default to true - protected Class<?> parsedGroovyScript = null; + protected Class<?> parsedScript = null; public SetOperation(Element element, SimpleMethod simpleMethod) { super(element, simpleMethod); this.field = new ContextAccessor<Object>(element.getAttribute("field")); String fromFieldStr = element.getAttribute("from-field"); if (fromFieldStr != null && fromFieldStr.startsWith("groovy:")) { - this.parsedGroovyScript = GroovyUtil.parseClass(fromFieldStr.replace("groovy:", "")); + this.parsedScript = ScriptUtil.parseScript("groovy", fromFieldStr.replace("groovy:", "")); } this.fromField = new ContextAccessor<Object>(fromFieldStr); this.valueExdr = FlexibleStringExpander.getInstance(element.getAttribute("value")); @@ -82,8 +77,12 @@ public class SetOperation extends Method @Override public boolean exec(MethodContext methodContext) { Object newValue = null; - if (this.parsedGroovyScript != null) { - newValue = InvokerHelper.createScript(this.parsedGroovyScript, GroovyUtil.getBinding(methodContext.getEnvMap())).run(); + if (this.parsedScript != null) { + try { + newValue = ScriptUtil.evaluate("groovy", null, this.parsedScript, methodContext.getEnvMap()); + } catch (Exception exc) { + Debug.logWarning(exc, "Error evaluating scriptlet [" + this + "]; error was: " + exc, module); + } } else if (!this.fromField.isEmpty()) { newValue = this.fromField.get(methodContext); if (Debug.verboseOn()) Debug.logVerbose("In screen getting value for field from [" + this.fromField.toString() + "]: " + newValue, module); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java?rev=1296762&r1=1296761&r2=1296762&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/ModelWidgetAction.java Sun Mar 4 07:24:47 2012 @@ -34,12 +34,10 @@ import javolution.util.FastList; import javolution.util.FastMap; import org.w3c.dom.Element; -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.ScriptUtil; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; @@ -390,7 +388,6 @@ public abstract class ModelWidgetAction } public static class Script extends ModelWidgetAction { - protected static final Object[] EMPTY_ARGS = {}; protected String location; protected String method; @@ -403,24 +400,7 @@ public abstract class ModelWidgetAction @Override public void runAction(Map<String, Object> context) throws GeneralException { - if (location.endsWith(".bsh")) { - try { - BshUtil.runBshAtLocation(location, context); - } catch (GeneralException e) { - throw new GeneralException("Error running BSH script at location [" + location + "]", e); - } - } else if (location.endsWith(".groovy")) { - try { - groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(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.endsWith(".xml")) { + if (location.endsWith(".xml")) { Map<String, Object> localContext = FastMap.newInstance(); localContext.putAll(context); DispatchContext ctx = WidgetWorker.getDispatcher(context).getDispatchContext(); @@ -432,7 +412,7 @@ public abstract class ModelWidgetAction throw new GeneralException("Error running simple method at location [" + location + "]", e); } } else { - throw new GeneralException("For widget script actions the script type is not yet supported for location: [" + location + "]"); + ScriptUtil.executeScript(this.location, this.method, context); } } } 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=1296762&r1=1296761&r2=1296762&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 Sun Mar 4 07:24:47 2012 @@ -31,12 +31,10 @@ import java.util.regex.PatternSyntaxExce import javolution.util.FastList; import javolution.util.FastMap; -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.ScriptUtil; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; import org.ofbiz.base.util.UtilValidate; @@ -274,7 +272,6 @@ public abstract class ModelFormAction { } public static class Script extends ModelFormAction { - protected static final Object[] EMPTY_ARGS = {}; protected String location; protected String method; @@ -287,28 +284,7 @@ public abstract class ModelFormAction { @Override public void runAction(Map<String, Object> context) { - if (location.endsWith(".bsh")) { - try { - BshUtil.runBshAtLocation(location, context); - } catch (GeneralException e) { - String errMsg = "Error running BSH script at location [" + location + "]: " + e.toString(); - Debug.logError(e, errMsg, module); - throw new IllegalArgumentException(errMsg); - } - } else if (location.endsWith(".groovy")) { - try { - groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(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); - throw new IllegalArgumentException(errMsg); - } - } else if (location.endsWith(".xml")) { + if (location.endsWith(".xml")) { Map<String, Object> localContext = FastMap.newInstance(); localContext.putAll(context); DispatchContext ctx = this.modelForm.dispatchContext; @@ -320,7 +296,7 @@ public abstract class ModelFormAction { throw new IllegalArgumentException("Error running simple method at location [" + location + "]", e); } } else { - throw new IllegalArgumentException("For screen script actions the script type is not yet support for location:" + location); + ScriptUtil.executeScript(this.location, this.method, context); } } } 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=1296762&r1=1296761&r2=1296762&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 Sun Mar 4 07:24:47 2012 @@ -31,13 +31,10 @@ import javax.servlet.http.HttpSession; import javolution.util.FastList; import javolution.util.FastMap; -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.ScriptUtil; import org.ofbiz.base.util.UtilFormatOut; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; @@ -351,7 +348,6 @@ public abstract class ModelMenuAction { } public static class Script extends ModelMenuAction { - protected static final Object[] EMPTY_ARGS = {}; protected String location; protected String method; @@ -364,30 +360,7 @@ public abstract class ModelMenuAction { @Override public void runAction(Map<String, Object> context) { - if (location.endsWith(".bsh")) { - try { - BshUtil.runBshAtLocation(location, context); - } catch (GeneralException e) { - String errMsg = "Error running BSH script at location [" + location + "]: " + e.toString(); - Debug.logError(e, errMsg, module); - throw new IllegalArgumentException(errMsg); - } - } else if (location.endsWith(".groovy")) { - try { - groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(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); - throw new IllegalArgumentException(errMsg); - } - } else { - throw new IllegalArgumentException("For screen script actions the script type is not yet support for location:" + location); - } + ScriptUtil.executeScript(this.location, this.method, context); } } 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=1296762&r1=1296761&r2=1296762&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 Sun Mar 4 07:24:47 2012 @@ -33,13 +33,10 @@ import javax.servlet.http.HttpSession; import javolution.util.FastList; import javolution.util.FastMap; -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.ScriptUtil; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilProperties; @@ -403,7 +400,6 @@ public abstract class ModelScreenAction @Deprecated public static class Script extends ModelScreenAction { - protected static final Object[] EMPTY_ARGS = {}; protected String location; protected String method; @@ -416,24 +412,7 @@ public abstract class ModelScreenAction @Override public void runAction(Map<String, Object> context) throws GeneralException { - if (location.endsWith(".bsh")) { - try { - BshUtil.runBshAtLocation(location, context); - } catch (GeneralException e) { - throw new GeneralException("Error running BSH script at location [" + location + "]", e); - } - } else if (location.endsWith(".groovy")) { - try { - groovy.lang.Script script = InvokerHelper.createScript(GroovyUtil.getScriptClassFromLocation(location), GroovyUtil.getBinding(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.endsWith(".xml")) { + if (location.endsWith(".xml")) { Map<String, Object> localContext = FastMap.newInstance(); localContext.putAll(context); DispatchContext ctx = this.modelScreen.getDispatcher(context).getDispatchContext(); @@ -445,7 +424,7 @@ public abstract class ModelScreenAction throw new GeneralException("Error running simple method at location [" + location + "]", e); } } else { - throw new GeneralException("For screen script actions the script type is not yet supported for location: [" + location + "]"); + ScriptUtil.executeScript(this.location, this.method, context); } } } |
Free forum by Nabble | Edit this page |