diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-07-28 12:30:16 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-07-28 12:30:16 +0200 |
| commit | 1028dee4dfcd89e914d66d4fe92aaa8fcfbfd494 (patch) | |
| tree | f3c7fec136ab12f74639b0d95426e743cdb2dfcd /src/main/java/com | |
| parent | f37883c23f9032ace7e0e780fa0e641859863c0c (diff) | |
Support pre-compilation of scripts if supported by the engine. Also does
this during testing to catch script syntax errors during build. Client
shell detects these error and declares them pre-execution.
Conflicts:
src/main/java/com/c2kernel/scripting/Script.java
src/test/java/MainTest.java
Diffstat (limited to 'src/main/java/com')
| -rw-r--r-- | src/main/java/com/c2kernel/process/ClientShell.java | 5 | ||||
| -rw-r--r-- | src/main/java/com/c2kernel/scripting/Script.java | 25 |
2 files changed, 24 insertions, 6 deletions
diff --git a/src/main/java/com/c2kernel/process/ClientShell.java b/src/main/java/com/c2kernel/process/ClientShell.java index 9f1d3ab..eeeb07f 100644 --- a/src/main/java/com/c2kernel/process/ClientShell.java +++ b/src/main/java/com/c2kernel/process/ClientShell.java @@ -5,6 +5,7 @@ import java.util.Scanner; import com.c2kernel.entity.proxy.AgentProxy;
import com.c2kernel.process.auth.ProxyLogin;
import com.c2kernel.scripting.Script;
+import com.c2kernel.scripting.ScriptParsingException;
public class ClientShell extends StandardClient {
@@ -21,13 +22,15 @@ public class ClientShell extends StandardClient { System.out.print("> ");
while (scan.hasNextLine()) {
String command = scan.nextLine();
- console.setScript(command);
try {
+ console.setScript(command);
Object response = console.execute();
if (response == null)
System.out.println("Ok");
else
System.out.println(response);
+ } catch (ScriptParsingException e) {
+ System.err.println("Syntax error: "+e.getMessage());
} catch (Throwable ex) {
ex.printStackTrace();
}
diff --git a/src/main/java/com/c2kernel/scripting/Script.java b/src/main/java/com/c2kernel/scripting/Script.java index 83849d9..d3b24ee 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;
@@ -41,6 +43,7 @@ import com.c2kernel.utils.Logger; public class Script
{
String mScript = "";
+ CompiledScript mCompScript = null;
String mName;
Integer mVersion;
HashMap<String, Parameter> mInputParams = new HashMap<String, Parameter>();
@@ -55,7 +58,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);
}
/**
@@ -93,7 +97,7 @@ public class Script setScriptEngine(lang);
mVersion = null;
addOutput(null, returnType);
- mScript = expr;
+ setScript(expr);
}
/**
@@ -292,7 +296,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);
@@ -475,7 +479,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)
@@ -516,8 +523,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.msg(1, "Compiling script "+mName);
+ mCompScript = ((Compilable)engine).compile(mScript);
+ } catch (ScriptException e) {
+ throw new ScriptParsingException(e.getMessage());
+ }
+ }
}
static public void main(String[] args) {
|
