package fitnesse.slim; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.io.Closeable; import java.io.IOException; public abstract class Jsr223Bridge { private ScriptEngine engine; public abstract Object getStatementExecutor(); public abstract Object invokeMethod(Object thiz, String name, Object... args) throws Exception; public ScriptEngine getScriptEngine() { if (engine == null) { engine = new ScriptEngineManager().getEngineByName(getEngineName()); } return engine; } public void close() { try { ((Closeable)getScriptEngine()).close(); } catch (IOException e) { e.printStackTrace(); } } public abstract String getEngineName(); }