001package scpc.model.support; 002 003import javax.script.Bindings; 004import javax.script.ScriptEngine; 005import javax.script.ScriptEngineManager; 006import javax.script.ScriptException; 007import javax.script.SimpleBindings; 008 009/** 010 * A JavaScript formula evaluator using JDK build in JS Engin. 011 * <br>使用JDK內建的JS引擎做為公式解譯工具 012 * 013 * @author Kent Yeh 014 * @param <T> type of real cart item. 015 */ 016public abstract class JsEvalHelper<T> extends EvalHelper<T> { 017 018 private static final ScriptEngineManager SMGR = new ScriptEngineManager(); 019 private Bindings bindings = null; 020 021 protected ScriptEngine getScriptEngine() { 022 return SMGR.getEngineByName("JavaScript"); 023 } 024 025 /** 026 * @see EvalHelper#bindVarValue(java.lang.String, java.lang.Object) 027 * @param variable 028 * @param value 029 * @return 030 */ 031 @Override 032 public EvalHelper<T> bindVarValue(String variable, Object value) { 033 bindings.put(variable, value); 034 return this; 035 } 036 037 /** 038 * @see EvalHelper#purgeBind() 039 */ 040 @Override 041 protected void purgeBind() { 042 bindings = new SimpleBindings(); 043 } 044 045 /** 046 * @see EvalHelper#eval(java.lang.String) 047 * @param formula 048 * @return 049 * @throws ScriptException 050 */ 051 @Override 052 public Object eval(String formula) throws ScriptException { 053 validateJSVariable(); 054 return getScriptEngine().eval(formula, bindings); 055 } 056 057}