package com.norteksoft.wf.engine.core;
import org.apache.commons.lang.StringUtils;
import com.norteksoft.wf.base.enumeration.LogicOperator;
import com.norteksoft.wf.base.utils.BeanShellUtil;
/**
* 解析用户条件设置
* @author wurong
*/
public class ConditionParseUtil {
private static final String AND = "&&";
private static final String OR = "||";
public static boolean parseCondition(String condition,Computable computable){
if(StringUtils.isEmpty(condition)) return false;
if(condition.equalsIgnoreCase("true")) return true;
if(condition.equalsIgnoreCase("false")) return false;
String[] strs = BeanShellUtil.splitExpression(condition);
String temp = condition;
Boolean result = false;
for(int i=0;i<strs.length;i++){
result = computable.execute(strs[i]);
temp = StringUtils.replace(temp, strs[i].trim(), result.toString());
}
temp = temp.replaceAll(LogicOperator.AND.getCode(), AND);
temp = temp.replaceAll(LogicOperator.OR.getCode(), OR);
boolean expressResult = BeanShellUtil.evel(temp);
return expressResult;
}
}