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.enrollment.class2.courseoffering.krms.termresolver;
17  
18  import org.kuali.rice.krms.api.engine.TermResolutionException;
19  import org.kuali.rice.krms.api.engine.TermResolver;
20  import org.kuali.student.enrollment.courseoffering.dto.CourseOfferingInfo;
21  import org.kuali.student.enrollment.courseoffering.dto.RegistrationGroupInfo;
22  import org.kuali.student.enrollment.courseoffering.infc.CourseOffering;
23  import org.kuali.student.enrollment.courseoffering.service.CourseOfferingService;
24  import org.kuali.student.enrollment.courseregistration.dto.CourseRegistrationInfo;
25  import org.kuali.student.enrollment.courseregistration.dto.RegistrationRequestInfo;
26  import org.kuali.student.enrollment.courseregistration.dto.RegistrationRequestItemInfo;
27  import org.kuali.student.enrollment.courseregistration.service.CourseRegistrationService;
28  import org.kuali.student.r2.common.dto.ContextInfo;
29  import org.kuali.student.r2.common.krms.util.KSKRMSExecutionUtil;
30  import org.kuali.student.r2.core.constants.KSKRMSServiceConstants;
31  
32  import java.util.ArrayList;
33  import java.util.Collections;
34  import java.util.HashSet;
35  import java.util.List;
36  import java.util.Map;
37  import java.util.Set;
38  
39  /**
40   * Return true if student has an unsubmitted registration request that includes
41   * the given course or if the student is currently enrolled for the given course.
42   *
43   * Example rule statement:
44   * 1) Must be concurrently enrolled in all courses from <courses>
45   *
46   * @author Kuali Student Team
47   */
48  public class EnrolledCourseTermResolver implements TermResolver<Boolean> {
49  
50      private CourseRegistrationService courseRegistrationService;
51      private CourseOfferingService courseOfferingService;
52  
53      private TermResolver<List<String>> cluIdsTermResolver;
54  
55      @Override
56      public Set<String> getPrerequisites() {
57          Set<String> prereqs = new HashSet<String>(2);
58          prereqs.add(KSKRMSServiceConstants.TERM_PREREQUISITE_PERSON_ID);
59          prereqs.add(KSKRMSServiceConstants.TERM_PREREQUISITE_CONTEXTINFO);
60          return Collections.unmodifiableSet(prereqs);
61      }
62  
63      @Override
64      public String getOutput() {
65          return KSKRMSServiceConstants.TERM_RESOLVER_ENROLLEDCOURSE;
66      }
67  
68      @Override
69      public Set<String> getParameterNames() {
70          return Collections.singleton(KSKRMSServiceConstants.TERM_PARAMETER_TYPE_CLU_KEY);
71      }
72  
73      @Override
74      public int getCost() {
75          return 5;
76      }
77  
78      @Override
79      public Boolean resolve(Map<String, Object> resolvedPrereqs, Map<String, String> parameters) throws TermResolutionException {
80          ContextInfo context = (ContextInfo) resolvedPrereqs.get(KSKRMSServiceConstants.TERM_PREREQUISITE_CONTEXTINFO);
81          String personId = (String) resolvedPrereqs.get(KSKRMSServiceConstants.TERM_PREREQUISITE_PERSON_ID);
82          String termId = (String) resolvedPrereqs.get(KSKRMSServiceConstants.TERM_PREREQUISITE_TERM_ID);
83  
84          try {
85              //Retrieve the version independent clu id.
86              List<String> courseIds = this.getCluIdsTermResolver().resolve(resolvedPrereqs, parameters);
87  
88              //First check in the students current registration requests
89              List<String> regGroupIds = new ArrayList<String>();
90              List<RegistrationRequestInfo> regRequests = this.getCourseRegistrationService().getUnsubmittedRegistrationRequestsByRequestorAndTerm(personId, termId, context) ;
91              for(RegistrationRequestInfo request : regRequests){
92                  for(RegistrationRequestItemInfo regItem : request.getRegistrationRequestItems()){
93                      if(regItem.getExistingRegistrationGroupId()!=null){
94                          regGroupIds.remove(regItem.getExistingRegistrationGroupId());
95                      }
96                      regGroupIds.add(regItem.getNewRegistrationGroupId());
97                  }
98              }
99  
100             //Check to see if one of the course version is in the registration request.
101             for(String regGroupId : regGroupIds){
102                 RegistrationGroupInfo regGroup = this.getCourseOfferingService().getRegistrationGroup(regGroupId, context);
103                 CourseOfferingInfo courseOffering = this.getCourseOfferingService().getCourseOffering(regGroup.getCourseOfferingId(), context);
104                 if(courseIds.contains(courseOffering.getCourseId())){
105                     return true;
106                 }
107             }
108 
109             //Also check for already enrolled but not yet completed courses.
110             List<CourseRegistrationInfo> recordInfoList = this.getCourseRegistrationService().getCourseRegistrationsByStudent(personId, context);
111             for(CourseRegistrationInfo studentRecord : recordInfoList){
112                 CourseOffering courseOffering = this.getCourseOfferingService().getCourseOffering(studentRecord.getCourseOfferingId(), context);
113                 if(courseIds.contains(courseOffering.getCourseId())){
114                     return true;
115                 }
116             }
117 
118         } catch (Exception e) {
119             KSKRMSExecutionUtil.convertExceptionsToTermResolutionException(parameters, e, this);
120         }
121 
122         return false;
123     }
124 
125     public CourseRegistrationService getCourseRegistrationService() {
126         return courseRegistrationService;
127     }
128 
129     public void setCourseRegistrationService(CourseRegistrationService courseRegistrationService) {
130         this.courseRegistrationService = courseRegistrationService;
131     }
132 
133     public CourseOfferingService getCourseOfferingService() {
134         return courseOfferingService;
135     }
136 
137     public void setCourseOfferingService(CourseOfferingService courseOfferingService) {
138         this.courseOfferingService = courseOfferingService;
139     }
140 
141     public TermResolver<List<String>> getCluIdsTermResolver() {
142         return cluIdsTermResolver;
143     }
144 
145     public void setCluIdsTermResolver(TermResolver<List<String>> cluIdsTermResolver) {
146         this.cluIdsTermResolver = cluIdsTermResolver;
147     }
148 
149 }