package com.googlecode.aviator.script;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.script.Bindings;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import com.googlecode.aviator.Expression;
/**
*
* @author libinsong1204@gmail.com
* @date 2011-1-18 上午11:03:34
* @version
*/
public class CompiledAviatorScript extends CompiledScript {
private final AviatorScriptEngine engine;
private final Expression expression;
CompiledAviatorScript(AviatorScriptEngine engine, Expression expression) {
this.engine = engine;
this.expression = expression;
}
@Override
@SuppressWarnings("unchecked")
public Object eval(ScriptContext context) throws ScriptException {
try {
Map<String, Object> map = new HashMap<String, Object>();
for (Iterator it = context.getScopes().iterator(); it.hasNext();) {
int scope = ((Integer) it.next()).intValue();
Bindings bindings = context.getBindings(scope);
Set keys = bindings.keySet();
for (Object key : keys) {
map.put((String) key, bindings.get(key));
}
}
return this.expression.execute(map);
}
catch (Exception e) {
throw new ScriptException(e);
}
}
@Override
public ScriptEngine getEngine() {
return this.engine;
}
}