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
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;
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
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
68 List<String> courseIds = this.getCluIdsTermResolver().resolve(resolvedPrereqs, parameters);
69 for(String courseId : courseIds){
70
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 }