Search in sources :

Example 1 with Rule

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()]);
}
Also used : List(java.util.List) Rule(org.jeasy.rules.api.Rule) RuleBuilder(org.jeasy.rules.core.RuleBuilder) ArrayList(java.util.ArrayList) RuleBuilder(org.jeasy.rules.core.RuleBuilder) ArrayList(java.util.ArrayList) Rule(org.jeasy.rules.api.Rule) RuleBuilder(org.jeasy.rules.core.RuleBuilder)

Example 2 with Rule

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;
    }
}
Also used : Binding(groovy.lang.Binding) Script(groovy.lang.Script) Rule(org.jeasy.rules.api.Rule)

Aggregations

Rule (org.jeasy.rules.api.Rule)2 Binding (groovy.lang.Binding)1 Script (groovy.lang.Script)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 RuleBuilder (org.jeasy.rules.core.RuleBuilder)1