package jsr223.nativeshell; import java.io.Reader; import javax.script.AbstractScriptEngine; import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngineFactory; import javax.script.ScriptException; import javax.script.SimpleBindings; public class NativeShellScriptEngine extends AbstractScriptEngine { private NativeShell nativeShell; public NativeShellScriptEngine(NativeShell nativeShell) { this.nativeShell = nativeShell; } @Override public Object eval(String script, ScriptContext context) throws ScriptException { int exitValue = new NativeShellRunner(nativeShell).run(script, context); if (exitValue != 0) { throw new ScriptException("Script failed with exit code " + exitValue); } return exitValue; } @Override public Object eval(Reader reader, ScriptContext context) throws ScriptException { return eval(IOUtils.toString(reader), context); } @Override public Bindings createBindings() { return new SimpleBindings(); } @Override public ScriptEngineFactory getFactory() { return nativeShell.getScriptEngineFactory(); } }