package com.easyooo.framework.rule.impl; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.easyooo.framework.common.util.MapUtil; import com.easyooo.framework.rule.Rule; import com.easyooo.framework.rule.RuleContext; import com.easyooo.framework.rule.RuleEngine; import com.easyooo.framework.rule.RuleException; import com.easyooo.framework.rule.RuleExecutor; /** *The Rule for java class code * @author Killer */ public class JavaRuleEngine implements RuleEngine { protected final Logger logger = LoggerFactory.getLogger(getClass()); private RuleContext ruleContext; public JavaRuleEngine(){ } @Override public <T> T eval(Rule rule) throws RuleException { return __eval(rule, MapUtil.gmap()); } @Override public <T> T eval(Rule rule, Object... dataMap) throws RuleException { if(dataMap.length == 1 && dataMap[0] == null){ return eval(rule); } return __eval(rule, MapUtil.gmap(dataMap)); } @SuppressWarnings("unchecked") public <T> T __eval(Rule rule, Map<String, Object> local)throws RuleException{ RuleExecutor re = RuleClassManager.getInstance().get(rule); Object o = re.eval(ruleContext, new RuleContext(local)); if(o == null){ return null; } return (T) o; } @Override public void setContext(RuleContext context) { this.ruleContext = context; } @Override public boolean verifySyntax(Rule rule) throws RuleException { return RuleClassManager.getInstance().verifyRuleSyntax(rule); } }