/
RhinoEngine.java
58 lines (48 loc) · 1.55 KB
/
RhinoEngine.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package mods.quiddity.redux.JavaScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class RhinoEngine implements JavascriptEngine {
private ScriptEngine rhinoEngine;
@Override
public void init() {
if (rhinoEngine != null)
killEngine();
rhinoEngine = ReduxJavascriptEngine.engineManager.getEngineByName("rhino");
if (rhinoEngine == null)
throw new AssertionError("Error making the Rhino Engine!");
}
@Override
public void loadScript(final String script) throws ScriptException {
rhinoEngine.eval(script);
}
@Override
public void killEngine() {
rhinoEngine = null;
}
@Override
public void restartEngine() {
init();
}
@Override
public void addJavaObject(String name, Object object) {
rhinoEngine.put(name, object);
}
@Override
public boolean hasObject(String name) {
return rhinoEngine.get(name) != null;
}
@Override
public void callMethod(String name, Object... args) throws ScriptException, NoSuchMethodException {
if (rhinoEngine instanceof Invocable) {
Invocable invokableEngine = (Invocable) rhinoEngine;
invokableEngine.invokeFunction(name, args);
} else {
throw new AssertionError("Your Rhino engine cannot invoke javascript functions! Redux will not function.");
}
}
@Override
public Object getObject(String name) {
return rhinoEngine.get(name);
}
}