use of org.jeasy.rules.api.Rule in project openremote by openremote.
the class RulesBuilder method build.
public Rule[] build() {
List<Rule> rules = new ArrayList<>();
for (Builder builder : builders) {
Rule rule = new RuleBuilder().name(builder.name).description(builder.description).priority(builder.priority).when(facts -> {
Object result;
try {
result = builder.condition.evaluate((RulesFacts) facts);
} catch (Exception ex) {
throw new RuntimeException("Error evaluating condition of rule '" + builder.name + "': " + ex.getMessage(), ex);
}
if (result instanceof Boolean) {
return (boolean) result;
} else {
throw new IllegalArgumentException("Error evaluating condition of rule '" + builder.name + "': result is not boolean but " + result);
}
}).then(facts -> builder.action.execute((RulesFacts) facts)).build();
rules.add(rule);
}
return rules.toArray(new Rule[rules.size()]);
}
use of org.jeasy.rules.api.Rule in project openremote by openremote.
the class RulesetDeployment method registerRulesGroovy.
public boolean registerRulesGroovy(Ruleset ruleset, Assets assetsFacade, Users usersFacade) {
try {
// TODO Implement sandbox
// new DenyAll().register();
Script script = groovyShell.parse(ruleset.getRules());
Binding binding = new Binding();
RulesBuilder rulesBuilder = new RulesBuilder();
binding.setVariable("LOG", RulesEngine.RULES_LOG);
binding.setVariable("rules", rulesBuilder);
binding.setVariable("assets", assetsFacade);
binding.setVariable("users", usersFacade);
script.setBinding(binding);
script.run();
for (Rule rule : rulesBuilder.build()) {
RulesEngine.LOG.info("Registering rule: " + rule.getName());
rules.register(rule);
}
RulesEngine.LOG.info("Evaluated ruleset deployment: " + ruleset);
return true;
} catch (Exception e) {
RulesEngine.LOG.log(Level.SEVERE, "Error evaluating ruleset: " + ruleset, e);
setError(e);
return false;
}
}