3131
3232import java .io .IOException ;
3333import java .io .Reader ;
34+ import java .util .Collection ;
3435import java .util .HashMap ;
3536import java .util .Map ;
37+ import java .util .Set ;
3638
39+ import javax .script .Bindings ;
3740import javax .script .ScriptException ;
3841import org .scijava .script .AbstractScriptEngine ;
3942import org .scijava .Context ;
43+ import org .scijava .log .LogService ;
4044import org .scijava .object .ObjectService ;
4145import org .scijava .plugin .Parameter ;
4246import 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}
0 commit comments