summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/scripting/Script.java
diff options
context:
space:
mode:
Diffstat (limited to 'source/com/c2kernel/scripting/Script.java')
-rw-r--r--source/com/c2kernel/scripting/Script.java70
1 files changed, 32 insertions, 38 deletions
diff --git a/source/com/c2kernel/scripting/Script.java b/source/com/c2kernel/scripting/Script.java
index c056e95..ad98eb4 100644
--- a/source/com/c2kernel/scripting/Script.java
+++ b/source/com/c2kernel/scripting/Script.java
@@ -4,6 +4,9 @@ import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -19,8 +22,6 @@ import com.c2kernel.entity.proxy.AgentProxy;
import com.c2kernel.entity.proxy.ItemProxy;
import com.c2kernel.utils.LocalObjectLoader;
import com.c2kernel.utils.Logger;
-import com.ibm.bsf.BSFException;
-import com.ibm.bsf.BSFManager;
/**************************************************************************
*
@@ -37,11 +38,11 @@ public class Script
String mScript = "";
String mName;
String mVersion;
- String mLang;
HashMap<String, Parameter> mInputParams = new HashMap<String, Parameter>();
HashMap<String, Parameter> mAllInputParams = new HashMap<String, Parameter>();
ArrayList<Script> mIncludes = new ArrayList<Script>();
- BSFManager scriptManager;
+ ScriptEngine engine;
+ Bindings beans;
/**
* Loads script xml and parses it for script source, parameters and output specifications.
@@ -54,29 +55,29 @@ public class Script
* @param scriptVersion - named version of the script (must be numbered viewpoint)
* @throws ScriptParsingException - when script not found (ScriptLoadingException) or xml is invalid (ScriptParsingException)
*/
- public Script(String scriptName, int scriptVersion) throws ScriptingEngineException
+ public Script(String scriptName, int scriptVersion, Bindings context) throws ScriptingEngineException
{
- this(scriptName, scriptVersion, new BSFManager());
- }
+ this(scriptName, scriptVersion);
+ beans = context;
- public Script(String scriptName, int scriptVersion, BSFManager scriptManager) throws ScriptingEngineException
+ }
+
+ public Script(String scriptName, int scriptVersion) throws ScriptingEngineException
{
mName = scriptName;
mVersion = String.valueOf(scriptVersion);
- if (scriptName.equals("")) return;
- setScriptEnv(scriptManager);
- setScript(mName, mVersion);
+ if (!scriptName.equals(""))
+ setScript(mName, mVersion);
}
/**
* Creates a script executor for the supplied expression, bypassing the xml parsing bit
* Output class is forced to an object.
*/
- public Script(String lang, String expr, BSFManager scriptManager, Class<?> returnType) throws ScriptingEngineException
+ public Script(String lang, String expr, Class<?> returnType) throws ScriptingEngineException
{
- setScriptEnv(scriptManager);
mName = "<expr>";
- mLang = lang;
+ setScriptEngine(lang);
mVersion = "";
mOutputClass = returnType;
mScript = expr;
@@ -84,12 +85,7 @@ public class Script
public Script(String lang, String expr) throws ScriptingEngineException
{
- this(lang, expr, new BSFManager(), Object.class);
- }
-
- public Script(String lang, String expr, Class<?> returnType) throws ScriptingEngineException
- {
- this(lang, expr, new BSFManager(), returnType);
+ this(lang, expr, Object.class);
}
public Script(ItemProxy object, AgentProxy subject, Job job) throws ScriptingEngineException
@@ -108,6 +104,11 @@ public class Script
setOutput("errors", "com.c2kernel.scripting.ErrorInfo");
}
+ public void setScriptEngine(String lang) {
+ engine = new ScriptEngineManager().getEngineByName(lang);
+ beans = engine.createBindings();
+ }
+
public void setScript(String scriptName, String scriptVersion) throws ScriptingEngineException
{
try
@@ -122,10 +123,6 @@ public class Script
}
}
- public void setScriptEnv(BSFManager manager) {
- this.scriptManager = manager;
- }
-
/**
* Extracts script data from script xml.
*
@@ -193,7 +190,7 @@ public class Script
String includeName = currentParam.getAttribute("name");
String includeVersion = currentParam.getAttribute("version");
try {
- Script includedScript = new Script(includeName, Integer.parseInt(includeVersion), scriptManager);
+ Script includedScript = new Script(includeName, Integer.parseInt(includeVersion), beans);
mIncludes.add(includedScript);
for (Parameter includeParam : includedScript.getInputParams().values()) {
addIncludedInputParam(includeParam.getName(), includeParam.getType());
@@ -212,7 +209,7 @@ public class Script
if (!currentParam.hasAttribute("language"))
throw new ScriptParsingException("Script data incomplete, must have language");
Logger.msg(6, "Script.parseScriptXML() - Script Language: " + currentParam.getAttribute("language"));
- mLang = currentParam.getAttribute("language");
+ setScriptEngine(currentParam.getAttribute("language"));
// get script source
NodeList scriptChildNodes = currentParam.getChildNodes();
@@ -294,7 +291,7 @@ public class Script
{
Logger.msg(8, "Script.setOutput() - Initialising output bean '" + mOutputName + "'");
Object emptyObject = mOutputClass.newInstance();
- scriptManager.declareBean(mOutputName, emptyObject, mOutputClass);
+ beans.put(mOutputName, emptyObject);
}
catch (Exception ex)
{
@@ -342,13 +339,9 @@ public class Script
if (value.getClass() != param.getType())
throw new ParameterException(
"Parameter " + name + " is wrong type \n" + "Required: " + param.getType().toString() + "\n" + "Supplied: " + value.getClass().toString());
- try {
- scriptManager.declareBean(name, value, param.getType());
- Logger.msg(7, "Script.setInputParamValue() - " + name + ": " + value.toString());
- param.setInitialised(true);
- } catch (BSFException ex) {
- throw new ParameterException("Error initialising parameter '"+name+"' - "+ex.getMessage());
- }
+ beans.put(name, value);
+ Logger.msg(7, "Script.setInputParamValue() - " + name + ": " + value.toString());
+ param.setInitialised(true);
}
// pass param down to child scripts
@@ -394,13 +387,14 @@ public class Script
try
{
Logger.msg(7, "Script.execute() - Executing script");
- scriptManager.setDebug(Logger.doLog(8));
- returnValue = scriptManager.eval(mLang, mName, 0, 0, mScript);
+ if (engine == null)
+ throw new ScriptingEngineException("Script engine not set. Cannot execute scripts.");
+ returnValue = engine.eval(mScript, beans);
Logger.msg(8, "Script.execute() - script returned \"" + returnValue + "\"");
if (mOutputName != null)
{
// retrieve the value from the registered output bean
- outputValue = scriptManager.lookupBean(mOutputName);
+ outputValue = engine.get(mOutputName);
Logger.msg(8, "Script.execute() - output bean value: \"" + outputValue + "\"");
}
}
@@ -432,6 +426,6 @@ public class Script
{
for (Parameter parameter : mInputParams.values())
parameter.setInitialised(false);
- scriptManager = new BSFManager();
+ beans = engine.createBindings();
}
}