Skip to content

声明式规则 DeclarativeRule

DeclarativeRule声明式规则是AbstractRule抽象规则的子类,需要定义parameterExp参数表达式,conditionExp条件表达式和predicateExp断定表达式,规则引擎根据规则的这三个表达式执行判断。

java
public class DeclarativeRule extends AbstractRule implements Evaluator {
    private ExpressionParser expressionParser;

    @Override
    public boolean supports(Object object) {
        String conditionExp = this.getRuleDefinition().getConditionExp();
        Boolean flag = this.getExpressionParser()
                .parseExpression(conditionExp)
                .getValue(ExecutionContextHolder.getContext(), Boolean.class);
        return Boolean.TRUE.equals(flag);
    }

    @Override
    public Object getValue(Object object) {
        String parameterExp = this.getRuleDefinition().getParameterExp();
        return this.getExpressionParser()
                .parseExpression(parameterExp)
                .getValue(ExecutionContextHolder.getContext());
    }

    @Override
    public boolean evaluate(Object object) {
        String predicateExp = this.getRuleDefinition().getPredicateExp();
        Boolean flag = this.getExpressionParser()
                .parseExpression(predicateExp)
                .getValue(ExecutionContextHolder.getContext(), Boolean.class);
        return Boolean.TRUE.equals(flag);
    }

    public ExpressionParser getExpressionParser() {
        return expressionParser;
    }

    public void setExpressionParser(ExpressionParser expressionParser) {
        this.expressionParser = expressionParser;
    }
}