diff options
Diffstat (limited to 'src/main/java/com/c2kernel/scripting/Script.java')
| -rw-r--r-- | src/main/java/com/c2kernel/scripting/Script.java | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/main/java/com/c2kernel/scripting/Script.java b/src/main/java/com/c2kernel/scripting/Script.java index 349a1a4..dfdd477 100644 --- a/src/main/java/com/c2kernel/scripting/Script.java +++ b/src/main/java/com/c2kernel/scripting/Script.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.HashMap;
import javax.script.Bindings;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
@@ -42,8 +44,9 @@ import com.c2kernel.utils.Resource; public class Script
{
String mScript = "";
+ CompiledScript mCompScript = null;
String mName;
- String mVersion;
+ int mVersion;
HashMap<String, Parameter> mInputParams = new HashMap<String, Parameter>();
HashMap<String, Parameter> mAllInputParams = new HashMap<String, Parameter>();
HashMap<String, Parameter> mOutputParams = new HashMap<String, Parameter>();
@@ -56,7 +59,8 @@ public class Script * @throws ScriptParsingException
* @throws ParameterException
*/
- public Script(String xml) throws ScriptParsingException, ParameterException {
+ public Script(String name, int version, String xml) throws ScriptParsingException, ParameterException {
+ mName = name; mVersion = version;
parseScriptXML(xml);
}
/**
@@ -79,7 +83,7 @@ public class Script public Script(String scriptName, int scriptVersion) throws ScriptingEngineException
{
mName = scriptName;
- mVersion = String.valueOf(scriptVersion);
+ mVersion = scriptVersion;
if (!scriptName.equals(""))
loadScript(mName, mVersion);
}
@@ -92,9 +96,9 @@ public class Script {
mName = "<expr>";
setScriptEngine(lang);
- mVersion = "";
+ mVersion = 0;
addOutput(null, returnType);
- mScript = expr;
+ setScript(expr);
}
/**
@@ -183,13 +187,13 @@ public class Script engine.setContext(context);
}
- private void loadScript(String scriptName, String scriptVersion) throws ScriptingEngineException
+ private void loadScript(String scriptName, int scriptVersion) throws ScriptingEngineException
{
try
{
mName = scriptName;
mVersion = scriptVersion;
- parseScriptXML(LocalObjectLoader.getScript(scriptName, scriptVersion));
+ parseScriptXML(LocalObjectLoader.getScript(scriptName, String.valueOf(scriptVersion)));
}
catch (ObjectNotFoundException e)
{
@@ -293,7 +297,7 @@ public class Script if (scriptChildNodes.getLength() != 1)
throw new ScriptParsingException("More than one child element found under script tag. Script characters may need escaping - suggest convert to CDATA section");
if (scriptChildNodes.item(0) instanceof Text)
- mScript = ((Text) scriptChildNodes.item(0)).getData();
+ setScript(((Text) scriptChildNodes.item(0)).getData());
else
throw new ScriptParsingException("Child element of script tag was not text");
Logger.msg(6, "Script.parseScriptXML() - script:" + mScript);
@@ -476,7 +480,10 @@ public class Script if (engine == null)
throw new ScriptingEngineException("Script engine not set. Cannot execute scripts.");
engine.put(ScriptEngine.FILENAME, mName);
- returnValue = engine.eval(mScript);
+ if (mCompScript != null)
+ returnValue = mCompScript.eval();
+ else
+ returnValue = engine.eval(mScript);
Logger.msg(7, "Script.execute() - script returned \"" + returnValue + "\"");
}
catch (Throwable ex)
@@ -517,8 +524,16 @@ public class Script return outputs;
}
- public void setScript(String script) {
+ public void setScript(String script) throws ScriptParsingException {
mScript = script;
+ if (engine instanceof Compilable) {
+ try {
+ Logger.debug("Compiling script "+mName);
+ mCompScript = ((Compilable)engine).compile(mScript);
+ } catch (ScriptException e) {
+ throw new ScriptParsingException(e.getMessage());
+ }
+ }
}
static public void main(String[] args) {
|
