Skip to content

Commit f047754

Browse files
implement AbstractScriptEngine methods, add py extension
1 parent 160b974 commit f047754

File tree

2 files changed

+94
-6
lines changed

2 files changed

+94
-6
lines changed

src/main/java/org/scijava/plugins/scripting/python/PythonScriptEngine.java

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@
3131

3232
import java.io.IOException;
3333
import java.io.Reader;
34+
import java.util.Collection;
3435
import java.util.HashMap;
3536
import java.util.Map;
37+
import java.util.Set;
3638

39+
import javax.script.Bindings;
3740
import javax.script.ScriptException;
3841
import org.scijava.script.AbstractScriptEngine;
3942
import org.scijava.Context;
43+
import org.scijava.log.LogService;
4044
import org.scijava.object.ObjectService;
4145
import org.scijava.plugin.Parameter;
4246
import org.scijava.plugins.scripting.python.PythonScriptRunner;
@@ -52,17 +56,19 @@ public class PythonScriptEngine extends AbstractScriptEngine {
5256

5357
@Parameter
5458
ObjectService objectService;
59+
60+
@Parameter
61+
LogService logService;
5562

5663
public PythonScriptEngine(Context context) {
5764
context.inject(this);
65+
setLogService(logService);
66+
engineScopeBindings = new ScriptBindings();
5867
}
5968

6069
@Override
6170
public Object eval(String script) throws ScriptException {
62-
Map<String, Object> vars = new HashMap<String, Object>();
63-
//parse script parameters and build input map Map<String, Object> vars
64-
65-
return objectService.getObjects(PythonScriptRunner.class).stream().findAny().get().run(script, vars);
71+
return objectService.getObjects(PythonScriptRunner.class).stream().findAny().get().run(script, engineScopeBindings);
6672
}
6773

6874
@Override
@@ -81,4 +87,78 @@ public Object eval(Reader reader) throws ScriptException {
8187
return eval(buf.toString());
8288
}
8389

90+
@Override
91+
public Bindings createBindings() {
92+
return new ScriptBindings();
93+
}
94+
95+
//Somehow just type casting did not work...
96+
class ScriptBindings implements Bindings {
97+
98+
private Map<String, Object> bindingsMap;
99+
100+
ScriptBindings() {
101+
bindingsMap = new HashMap<String, Object>();
102+
}
103+
104+
@Override
105+
public int size() {
106+
return bindingsMap.size();
107+
}
108+
109+
@Override
110+
public boolean isEmpty() {
111+
return bindingsMap.isEmpty();
112+
}
113+
114+
@Override
115+
public boolean containsValue(Object value) {
116+
return bindingsMap.containsValue(value);
117+
}
118+
119+
@Override
120+
public void clear() {
121+
bindingsMap.clear();
122+
}
123+
124+
@Override
125+
public Set<String> keySet() {
126+
return bindingsMap.keySet();
127+
}
128+
129+
@Override
130+
public Collection<Object> values() {
131+
return bindingsMap.values();
132+
}
133+
134+
@Override
135+
public Set<Entry<String, Object>> entrySet() {
136+
return bindingsMap.entrySet();
137+
}
138+
139+
@Override
140+
public Object put(String name, Object value) {
141+
return bindingsMap.put(name, value);
142+
}
143+
144+
@Override
145+
public void putAll(Map<? extends String, ? extends Object> toMerge) {
146+
bindingsMap.putAll(toMerge);
147+
}
148+
149+
@Override
150+
public boolean containsKey(Object key) {
151+
return bindingsMap.containsKey(key);
152+
}
153+
154+
@Override
155+
public Object get(Object key) {
156+
return bindingsMap.get(key);
157+
}
158+
159+
@Override
160+
public Object remove(Object key) {
161+
return bindingsMap.remove(key);
162+
}
163+
}
84164
}

src/main/java/org/scijava/plugins/scripting/python/PythonScriptLanguage.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@
2929

3030
package org.scijava.plugins.scripting.python;
3131

32+
import java.util.Arrays;
33+
import java.util.List;
34+
3235
import javax.script.ScriptEngine;
3336

34-
import org.scijava.Priority;
3537
import org.scijava.plugin.Plugin;
3638
import org.scijava.script.AbstractScriptLanguage;
3739
import org.scijava.script.ScriptLanguage;
@@ -43,11 +45,17 @@
4345
* @author Karl Duderstadt
4446
* @see ScriptEngine
4547
*/
46-
@Plugin(type = ScriptLanguage.class, name = "Python 3", priority = Priority.HIGH)
48+
@Plugin(type = ScriptLanguage.class, name = "Python 3")
4749
public class PythonScriptLanguage extends AbstractScriptLanguage {
4850

4951
@Override
5052
public ScriptEngine getScriptEngine() {
5153
return new PythonScriptEngine(getContext());
5254
}
55+
56+
@Override
57+
public List<String> getExtensions() {
58+
return Arrays.asList("py");
59+
}
60+
5361
}

0 commit comments

Comments
 (0)