View Javadoc

1   package org.kuali.student.enrollment.class2.courseoffering.krms.termresolver;
2   
3   import org.kuali.rice.krms.api.engine.TermResolutionException;
4   import org.kuali.rice.krms.api.engine.TermResolver;
5   import org.kuali.student.enrollment.academicrecord.dto.StudentCourseRecordInfo;
6   import org.kuali.student.enrollment.academicrecord.service.AcademicRecordService;
7   import org.kuali.student.r2.common.dto.ContextInfo;
8   import org.kuali.student.r2.common.krms.util.KSKRMSExecutionUtil;
9   import org.kuali.student.r2.core.atp.dto.AtpInfo;
10  import org.kuali.student.r2.core.atp.service.AtpService;
11  import org.kuali.student.r2.core.constants.KSKRMSServiceConstants;
12  
13  import java.util.Collections;
14  import java.util.HashSet;
15  import java.util.List;
16  import java.util.Map;
17  import java.util.Set;
18  
19  /**
20   * @author Kuali Student Team
21   */
22  public class CompletedCoursePriorToTermTermResolver implements TermResolver<Boolean> {
23  
24      private AcademicRecordService academicRecordService;
25      private AtpService atpService;
26  
27      private TermResolver<List<String>> cluIdsTermResolver;
28      private TermResolver<AtpInfo> atpForCOIdTermResolver;
29  
30      @Override
31      public Set<String> getPrerequisites() {
32          Set<String> prereqs = new HashSet<String>(2);
33          prereqs.add(KSKRMSServiceConstants.TERM_PREREQUISITE_PERSON_ID);
34          prereqs.add(KSKRMSServiceConstants.TERM_PREREQUISITE_CONTEXTINFO);
35          return Collections.unmodifiableSet(prereqs);
36      }
37  
38      @Override
39      public String getOutput() {
40          return KSKRMSServiceConstants.TERM_RESOLVER_COMPLETEDCOURSEPRIORTOTERM;
41      }
42  
43      @Override
44      public Set<String> getParameterNames() {
45          Set<String> parameters = new HashSet<String>(2);
46          parameters.add(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_CLU_KEY);
47          parameters.add(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_TERM_KEY);
48          return Collections.unmodifiableSet(parameters);
49      }
50  
51      @Override
52      public int getCost() {
53          return 0;  //To change body of implemented methods use File | Settings | File Templates.
54      }
55  
56      @Override
57      public Boolean resolve(Map<String, Object> resolvedPrereqs, Map<String, String> parameters) throws TermResolutionException {
58          ContextInfo context = (ContextInfo) resolvedPrereqs.get(KSKRMSServiceConstants.TERM_PREREQUISITE_CONTEXTINFO);
59          String personId = (String) resolvedPrereqs.get(KSKRMSServiceConstants.TERM_PREREQUISITE_PERSON_ID);
60  
61          try {
62              //Retrieve the version independent clu id.
63              String cluId = parameters.get(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_CLU_KEY);
64              String startTermId = parameters.get(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_TERM_KEY);
65              AtpInfo term = this.getAtpService().getAtp(startTermId, context);
66  
67              //Retrieve the version independent clu id.
68              List<String> courseIds = this.getCluIdsTermResolver().resolve(resolvedPrereqs, parameters);
69              for(String courseId : courseIds){
70                  //Retrieve the students academic record for this version.
71                  List<StudentCourseRecordInfo> courseRecords = this.getAcademicRecordService().getCompletedCourseRecordsForCourse(personId, courseId, context);
72                  for (StudentCourseRecordInfo courseRecord : courseRecords){
73                      parameters.put(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_CO_KEY, courseRecord.getCourseOfferingId());
74                      AtpInfo atpInfo = this.getAtpForCOIdTermResolver().resolve(resolvedPrereqs, parameters);
75                      if(atpInfo.getEndDate().before(term.getEndDate())) {
76                          return true;
77                      }
78                  }
79              }
80          } catch (Exception e) {
81              KSKRMSExecutionUtil.convertExceptionsToTermResolutionException(parameters, e, this);
82          }
83  
84          return false;
85      }
86  
87      public AcademicRecordService getAcademicRecordService() {
88          return academicRecordService;
89      }
90  
91      public void setAcademicRecordService(AcademicRecordService academicRecordService) {
92          this.academicRecordService = academicRecordService;
93      }
94  
95      public AtpService getAtpService() {
96          return atpService;
97      }
98  
99      public void setAtpService(AtpService atpService) {
100         this.atpService = atpService;
101     }
102 
103     public TermResolver<List<String>> getCluIdsTermResolver() {
104         return cluIdsTermResolver;
105     }
106 
107     public void setCluIdsTermResolver(TermResolver<List<String>> cluIdsTermResolver) {
108         this.cluIdsTermResolver = cluIdsTermResolver;
109     }
110 
111     public TermResolver<AtpInfo> getAtpForCOIdTermResolver() {
112         return atpForCOIdTermResolver;
113     }
114 
115     public void setAtpForCOIdTermResolver(TermResolver<AtpInfo> atpForCOIdTermResolver) {
116         this.atpForCOIdTermResolver = atpForCOIdTermResolver;
117     }
118 }