use of org.hisp.dhis.rules.models.RuleEffect in project dhis2-android-sdk by dhis2.
the class RuleEngineFunctionShould method return_true_if_evaluate_value_specified_has_value.
@Test
public void return_true_if_evaluate_value_specified_has_value() throws Exception {
RuleAction ruleAction = RuleActionDisplayKeyValuePair.createForFeedback("test_action_content", "d2:hasValue('test_variable')");
RuleVariable ruleVariable = RuleVariableCurrentEvent.create("test_variable", "test_data_element", RuleValueType.TEXT);
Rule rule = Rule.create(null, null, "true", Arrays.asList(ruleAction));
RuleEngine ruleEngine = RuleEngineContext.builder(new DuktapeEvaluator(duktape)).rules(Arrays.asList(rule)).ruleVariables(Arrays.asList(ruleVariable)).build().toEngineBuilder().build();
RuleEvent ruleEvent = RuleEvent.create("test_event", "test_program_stage", RuleEvent.Status.ACTIVE, new Date(), new Date(), Arrays.asList(RuleDataValue.create(new Date(), "test_program_stage", "test_data_element", "test_value")));
List<RuleEffect> ruleEffects = ruleEngine.evaluate(ruleEvent).call();
assertThat(ruleEffects.size()).isEqualTo(1);
assertThat(ruleEffects.get(0).data()).isEqualTo("true");
assertThat(ruleEffects.get(0).ruleAction()).isEqualTo(ruleAction);
}
use of org.hisp.dhis.rules.models.RuleEffect in project dhis2-android-sdk by dhis2.
the class RuleEngineFunctionShould method return_false_if_no_evaluate_value_specified_has_value.
@Test
public void return_false_if_no_evaluate_value_specified_has_value() throws Exception {
RuleAction ruleAction = RuleActionDisplayKeyValuePair.createForFeedback("test_action_content", "d2:hasValue('test_variable')");
RuleVariable ruleVariable = RuleVariableCurrentEvent.create("test_variable", "test_data_element", RuleValueType.TEXT);
Rule rule = Rule.create(null, null, "true", Arrays.asList(ruleAction));
RuleEngine ruleEngine = RuleEngineContext.builder(new DuktapeEvaluator(duktape)).rules(Arrays.asList(rule)).ruleVariables(Arrays.asList(ruleVariable)).build().toEngineBuilder().build();
RuleEvent ruleEvent = RuleEvent.create("test_event", "test_program_stage", RuleEvent.Status.ACTIVE, new Date(), new Date(), new ArrayList<RuleDataValue>());
List<RuleEffect> ruleEffects = ruleEngine.evaluate(ruleEvent).call();
assertThat(ruleEffects.size()).isEqualTo(1);
assertThat(ruleEffects.get(0).data()).isEqualTo("false");
assertThat(ruleEffects.get(0).ruleAction()).isEqualTo(ruleAction);
}
use of org.hisp.dhis.rules.models.RuleEffect in project dhis2-android-sdk by dhis2.
the class RuleEngineValueTypesShould method fallback_to_default_boolean_value_when_boolean_variable_without_valueM.
@Test
public void fallback_to_default_boolean_value_when_boolean_variable_without_valueM() throws Exception {
RuleAction ruleAction = RuleActionDisplayKeyValuePair.createForFeedback("test_action_content", "#{test_variable}");
Rule rule = Rule.create(null, null, "true", Arrays.asList(ruleAction));
RuleVariable ruleVariable = RuleVariableCurrentEvent.create("test_variable", "test_data_element", RuleValueType.BOOLEAN);
RuleEngine ruleEngine = RuleEngineContext.builder(new DuktapeEvaluator(duktape)).rules(Arrays.asList(rule)).ruleVariables(Arrays.asList(ruleVariable)).build().toEngineBuilder().build();
RuleEvent ruleEvent = RuleEvent.create("test_event", "test_program_stage", RuleEvent.Status.ACTIVE, new Date(), new Date(), new ArrayList<RuleDataValue>());
List<RuleEffect> ruleEffects = ruleEngine.evaluate(ruleEvent).call();
assertThat(ruleEffects.size()).isEqualTo(1);
assertThat(ruleEffects.get(0).data()).isEqualTo("false");
assertThat(ruleEffects.get(0).ruleAction()).isEqualTo(ruleAction);
}
use of org.hisp.dhis.rules.models.RuleEffect in project dhis2-core by dhis2.
the class DefaultProgramRuleEngineService method evaluateEventAndRunEffects.
private List<RuleEffect> evaluateEventAndRunEffects(ProgramStageInstance psi) {
if (psi == null) {
return Lists.newArrayList();
}
ProgramInstance programInstance = programInstanceService.getProgramInstance(psi.getProgramInstance().getId());
List<RuleEffect> ruleEffects = programRuleEngine.evaluate(programInstance, psi, programInstance.getProgramStageInstances());
for (RuleEffect effect : ruleEffects) {
ruleActionImplementers.stream().filter(i -> i.accept(effect.ruleAction())).forEach(i -> {
log.debug(String.format("Invoking action implementer: %s", i.getClass().getSimpleName()));
i.implement(effect, psi);
});
}
return ruleEffects;
}
use of org.hisp.dhis.rules.models.RuleEffect in project dhis2-core by dhis2.
the class DefaultProgramRuleEngineService method evaluateEnrollmentAndRunEffects.
@Override
@Transactional
public List<RuleEffect> evaluateEnrollmentAndRunEffects(long enrollment) {
if (config.isDisabled(SYSTEM_PROGRAM_RULE_SERVER_EXECUTION)) {
return Lists.newArrayList();
}
ProgramInstance programInstance = programInstanceService.getProgramInstance(enrollment);
if (programInstance == null) {
return Lists.newArrayList();
}
List<RuleEffect> ruleEffects = programRuleEngine.evaluate(programInstance, programInstance.getProgramStageInstances());
for (RuleEffect effect : ruleEffects) {
ruleActionImplementers.stream().filter(i -> i.accept(effect.ruleAction())).forEach(i -> {
log.debug(String.format("Invoking action implementer: %s", i.getClass().getSimpleName()));
i.implement(effect, programInstance);
});
}
return ruleEffects;
}
Aggregations