package fitnesse.slim; import java.io.PrintWriter; import java.io.StringWriter; public abstract class Jsr223StatementExecutor implements StatementExecutorInterface{ protected Jsr223Bridge bridge; private Object statementExecutorProxy; public Jsr223StatementExecutor(Jsr223Bridge bridge) { this.bridge = bridge; statementExecutorProxy = bridge.getStatementExecutor(); } protected Object getStatementExecutorProxy() { return statementExecutorProxy; } @Override public void addPath(String path) { callMethod("addPath", new Object[] {path}); } @Override public Object call(String instanceName, String methodName, Object... args) { return callMethod("call", new Object[] {instanceName, methodName, args}); } @Override public void create(String instanceName, String className, Object... args) { callMethod("create", new Object[] {instanceName, className, args}); } @Override public Object getInstance(String instanceName) { return callMethod("getInstance", new Object[] {instanceName}); } @Override public void assign(String name, Object value) { callMethod("setVariable", new Object[] {name, value}); } @Override public boolean stopHasBeenRequested() { return (Boolean) callMethod("stopHasBeenRequested"); } @Override public void reset() { callMethod("reset"); } protected Object callMethod(String method, Object... args) { try { return bridge.invokeMethod(getStatementExecutorProxy(), method, args); } catch (Throwable e) { // NOSONAR return exceptionToString(e); } } private String exceptionToString(Throwable exception) { StringWriter stringWriter = new StringWriter(); PrintWriter pw = new PrintWriter(stringWriter); exception.printStackTrace(pw); return SlimServer.EXCEPTION_TAG + stringWriter.toString(); } }