fix issue #34 : make method "beforeEvaluate" return a boolean

pull/55/head
Mahmoud Ben Hassine 9 years ago
parent 2bd1a6413e
commit 375956af63

@ -10,9 +10,10 @@ public interface RuleListener {
/**
* Triggered before the evaluation of a rule.
*
* @param rule the current rule
* @param rule being evaluated
* @return true if the rule should be evaluated, false otherwise
*/
Rule beforeEvaluate(Rule rule);
boolean beforeEvaluate(Rule rule);
/**
* Triggered before the execution of a rule.

@ -149,8 +149,7 @@ class DefaultRulesEngine implements RulesEngine {
break;
}
rule = triggerListenersBeforeEvaluate(rule);
if (rule == null) {
if (!triggerListenersBeforeEvaluate(rule)) {
LOGGER.log(Level.INFO, "Rule ''{0}'' has been skipped before being evaluated", name);
continue;
}
@ -200,11 +199,13 @@ class DefaultRulesEngine implements RulesEngine {
}
}
private Rule triggerListenersBeforeEvaluate(Rule rule) {
private boolean triggerListenersBeforeEvaluate(Rule rule) {
for (RuleListener ruleListener : ruleListeners) {
rule = ruleListener.beforeEvaluate(rule);
if (!ruleListener.beforeEvaluate(rule)) {
return false;
}
}
return rule;
return true;
}
private void logEngineParameters() {

@ -57,8 +57,8 @@ public class RuleListenerTest {
when(rule.getName()).thenReturn("r");
when(rule.getPriority()).thenReturn(1);
when(rule.evaluate()).thenReturn(true);
when(ruleListener1.beforeEvaluate(rule)).thenReturn(rule);
when(ruleListener2.beforeEvaluate(rule)).thenReturn(rule);
when(ruleListener1.beforeEvaluate(rule)).thenReturn(true);
when(ruleListener2.beforeEvaluate(rule)).thenReturn(true);
rulesEngine = aNewRulesEngine()
.withRuleListener(ruleListener1)
@ -100,10 +100,10 @@ public class RuleListenerTest {
}
@Test
public void whenListenerReturnsNull_thenTheRuleShouldBeSkippedBeforeBeingEvaluated() throws Exception {
public void whenListenerReturnsFalse_thenTheRuleShouldBeSkippedBeforeBeingEvaluated() throws Exception {
// Given
when(ruleListener1.beforeEvaluate(rule)).thenReturn(null);
when(ruleListener1.beforeEvaluate(rule)).thenReturn(false);
rulesEngine = aNewRulesEngine()
.withRuleListener(ruleListener1)
.build();
@ -113,8 +113,24 @@ public class RuleListenerTest {
rulesEngine.fireRules();
// Then
verify(rule, never()).execute();
verify(rule, never()).evaluate();
}
@Test
public void whenListenerReturnsTrue_thenTheRuleShouldBeEvaluated() throws Exception {
// Given
when(ruleListener1.beforeEvaluate(rule)).thenReturn(true);
rulesEngine = aNewRulesEngine()
.withRuleListener(ruleListener1)
.build();
// When
rulesEngine.registerRule(rule);
rulesEngine.fireRules();
// Then
verify(rule).evaluate();
}
}

Loading…
Cancel
Save