@sonic halo has a question:
package com.hubpedro.nfsenacional.domain.engine;
import java.util.ArrayList;
import java.util.List;
public final class DpsRuleEngine {
private final PredicateEvaluator evaluator = new PredicateEvaluator();
public List<RuleResult> run(List<Rule> rules, DpsContext ctx) {
List<RuleResult> results = new ArrayList<>(rules.size());
for (Rule rule : rules) {
results.add(runOne(rule, ctx));
}
return results;
}
public RuleResult runOne(Rule rule, DpsContext ctx) {
if (rule.status() != RuleStatus.ATIVA) {
return new RuleResult.Ok(rule.id());
}
for (String externFn : rule.requerExternos() == null ? List.<String>of() : rule.requerExternos()) {
if (!ctx.hasFunction(externFn)) {
return new RuleResult.Skipped(rule.id(),
"Função externa requerida não disponível no contexto: " + externFn);
}
}
boolean activated = evaluator.eval(rule.predicadoP(), ctx);
if (!activated) return new RuleResult.Ok(rule.id());
boolean satisfied = evaluator.eval(rule.predicadoQ(), ctx);
if (satisfied) return new RuleResult.Ok(rule.id());
return new RuleResult.Reject(rule.id(), rule.onViolation().reject(), rule.onViolation().message());
}
}
anyone to help me make this better