View Javadoc

1   /**
2    * Copyright 2011 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.common.util.krms.proposition;
17  
18  import java.util.Collection;
19  
20  import org.apache.commons.collections.CollectionUtils;
21  import org.kuali.rice.krms.api.engine.ExecutionEnvironment;
22  import org.kuali.rice.krms.api.engine.ResultEvent;
23  import org.kuali.rice.krms.api.engine.TermResolutionException;
24  import org.kuali.rice.krms.framework.engine.Proposition;
25  import org.kuali.rice.krms.framework.engine.PropositionResult;
26  import org.kuali.rice.krms.framework.engine.result.BasicResult;
27  import org.kuali.student.common.util.krms.RulesExecutionConstants;
28  
29  /**
30   * Parent class for all course completion propositions
31   *
32   * @author alubbers
33   */
34  public abstract class CourseCompletionProposition extends AbstractLeafProposition implements Proposition {
35      
36      protected final boolean checkForAllCompleted;
37      
38      protected Integer minToComplete;
39              
40      public CourseCompletionProposition(Integer minToComplete) {    	
41          this.checkForAllCompleted = false;
42          this.minToComplete = minToComplete;
43      }
44      
45      public CourseCompletionProposition() {
46          checkForAllCompleted = true;
47      }
48  
49      
50      @Override
51      public PropositionResult evaluate(ExecutionEnvironment environment) {
52              	
53          Collection<String> completedCourses = environment.resolveTerm(RulesExecutionConstants.completedCourseIdsTerm, this);
54  
55          Collection<String> termCourses = getTermCourseIds(environment);
56  
57          PropositionResult result = null;
58  
59          if(checkForAllCompleted) {
60              result = new PropositionResult(completedCourses.containsAll(termCourses));
61          }
62         
63          else {
64              result = new PropositionResult(CollectionUtils.intersection(completedCourses, termCourses).size() >= minToComplete);
65          }
66  
67          environment.getEngineResults().addResult(new BasicResult(ResultEvent.PROPOSITION_EVALUATED, this, environment, result.getResult()));
68  
69          return result;
70      
71      }
72     
73      protected abstract Collection<String> getTermCourseIds(ExecutionEnvironment environment);
74      
75  }