@Override
protected RuleResult executeEnrolmentVerificationWithRules(final ICurricularRule curricularRule,
final IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, final EnrolmentContext enrolmentContext) {
final Exclusiveness rule = (Exclusiveness) curricularRule;
if (!canApplyRule(enrolmentContext, rule)) {
return RuleResult.createNA(sourceDegreeModuleToEvaluate.getDegreeModule());
}
final DegreeModule degreeModule = rule.getExclusiveDegreeModule();
if (degreeModule.isLeaf()) {
final CurricularCourse curricularCourse = (CurricularCourse) degreeModule;
final ExecutionSemester previousExecutionPeriod = enrolmentContext.getExecutionPeriod().getPreviousExecutionPeriod();
if (isApproved(enrolmentContext, curricularCourse)
|| hasEnrolmentWithEnroledState(enrolmentContext, curricularCourse, previousExecutionPeriod)) {
if (isEnroled(enrolmentContext, (CurricularCourse) rule.getDegreeModuleToApplyRule(),
enrolmentContext.getExecutionPeriod())) {
return createImpossibleRuleResult(rule, sourceDegreeModuleToEvaluate);
}
return createFalseRuleResult(rule, sourceDegreeModuleToEvaluate);
}