20 package net.sf.gridarta.plugin;
22 import bsh.ConsoleInterface;
24 import bsh.Interpreter;
25 import bsh.TargetError;
26 import java.io.CharArrayWriter;
27 import java.io.InputStreamReader;
28 import java.io.PrintStream;
29 import java.io.PrintWriter;
30 import java.io.Reader;
31 import java.util.HashMap;
33 import java.util.Map.Entry;
40 import org.jetbrains.annotations.NotNull;
41 import org.jetbrains.annotations.Nullable;
47 @SuppressWarnings(
"UseOfSystemOutOrSystemErr")
68 this.pluginModel = pluginModel;
69 this.pluginParameters = pluginParameters;
78 public int executePlugin(@NotNull
final String plugin, @NotNull
final Iterable<String> parameters) {
80 if (modelTemplate ==
null) {
81 System.err.println(
"plugin " + plugin +
" does not exist");
86 final Map<String, Object> runValues =
new HashMap<>();
87 for (
final String parameter : parameters) {
89 if (tmp.length != 2) {
90 System.err.println(
"syntax error: " + parameter);
96 final StringBuilder sb =
new StringBuilder();
97 boolean firstParameter =
true;
99 sb.append(firstParameter ?
" " :
", ");
100 sb.append(clonedParameter.getName());
101 firstParameter =
false;
103 System.err.println(
"plugin " + plugin +
" has no parameter " + tmp[0] +
"; available parameters:" + sb);
111 throw new AssertionError(ex);
114 System.out.println(
"invalid value " + tmp[1] +
" for parameter " + tmp[0]);
118 runValues.put(clonedParameter.
getName(), tmp[1]);
121 final String parameterName = parameter.getName();
122 if (!runValues.containsKey(parameterName)) {
123 final Object parameterValue = parameter.getValueOrNull();
124 if (parameterValue ==
null) {
125 System.err.println(
"no value for parameter " + parameterName);
128 runValues.put(parameterName, parameterValue);
132 final ConsoleInterface console =
new ConsoleInterface() {
135 public Reader getIn() {
136 return new InputStreamReader(System.in);
140 public PrintStream getOut() {
145 public PrintStream getErr() {
150 public void println(
final Object o) {
151 System.out.println(o);
155 public void print(
final Object o) {
160 public void error(
final Object o) {
161 System.err.println(o);
166 if (pluginRunnable ==
null) {
169 final Thread pluginThread =
new Thread(pluginRunnable, clonedPlugin.
getName());
170 pluginThread.start();
173 }
catch (
final InterruptedException ignored) {
174 pluginThread.interrupt();
175 Thread.currentThread().interrupt();
176 System.out.println(
"interrupted");
181 System.err.println(
"plugin failed");
197 final Interpreter runner =
new Interpreter();
198 runner.setConsole(console);
201 for (
final Entry<String, Object> parameter : parameters.entrySet()) {
202 runner.set(parameter.getKey(), parameter.getValue());
204 }
catch (
final TargetError ex) {
205 final CharArrayWriter charArrayWriter =
new CharArrayWriter();
207 try (PrintWriter printWriter =
new PrintWriter(charArrayWriter)) {
208 ex.getTarget().printStackTrace(printWriter);
211 charArrayWriter.close();
213 console.print(
"target error: " + charArrayWriter);
215 }
catch (
final EvalError ex) {
216 console.print(
"evaluation error: " + ex.getMessage());