package com.deepnighttwo.scopebinding;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScopeBindingTest {
/**
* @param args
* @throws ScriptException
*/
public static void main(String[] args) throws ScriptException {
ScriptEngineManager seManager = new ScriptEngineManager();
ScriptEngine jsEngine = seManager.getEngineByName("javascript");
if (jsEngine == null) {
System.out.println("No engine found for javascript");
System.exit(1);
}
jsEngine.eval("println('Coooool! Let\\'s Rock \\'n Roll with JS in java now!');");
Bindings b = jsEngine.createBindings();
jsEngine.eval(
"function globalFunc(intVal,strVal){println('intvar='+intVal+', strVal=strVal')}; ",
b);
jsEngine.eval(
"function globalFuncArr(arr){arr[2]=arr[0]+arr[1];println(arr[2]);}; ",
b);
jsEngine.setBindings(b, ScriptContext.GLOBAL_SCOPE);
Bindings b2 = jsEngine.createBindings();
jsEngine.eval(
"var aaa = new Array(3); aaa[0]=0.2;aaa[1]=1.9;aaa[2]=9.9;", b2);
// jsEngine.eval("globalFunc(i,s);", b2);
jsEngine.eval("globalFuncArr(aaa);", b2);
jsEngine.eval("println('localbinding aaa[2]='+aaa[2]);", b2);
}
public static void evalScriptFromEvn(String env, ScriptEngine engine,
Bindings binding) {
String envVal = System.getenv(env);
if (envVal == null) {
return;
}
if (envVal.charAt(0) == File.separatorChar) {
try {
engine.eval(new FileReader(envVal), binding);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ScriptException e) {
e.printStackTrace();
}
} else {
try {
engine.eval(envVal, binding);
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
}