View Javadoc

1   package org.kuali.student.enrollment.class2.courseoffering.rule;
2   
3   import org.apache.commons.lang.StringUtils;
4   import org.kuali.rice.core.api.criteria.PredicateFactory;
5   import org.kuali.rice.core.api.criteria.QueryByCriteria;
6   import org.kuali.rice.krad.maintenance.MaintenanceDocument;
7   import org.kuali.rice.krad.util.GlobalVariables;
8   import org.kuali.student.common.uif.rule.KsMaintenanceDocumentRuleBase;
9   import org.kuali.student.enrollment.class2.courseoffering.dto.CourseOfferingCreateWrapper;
10  import org.kuali.student.enrollment.class2.courseoffering.util.CourseOfferingConstants;
11  import org.kuali.student.enrollment.class2.courseoffering.util.CourseOfferingResourceLoader;
12  import org.kuali.student.enrollment.courseoffering.dto.CourseOfferingInfo;
13  import org.kuali.student.enrollment.courseoffering.service.CourseOfferingService;
14  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
15  import org.kuali.student.r2.common.exceptions.MissingParameterException;
16  import org.kuali.student.r2.common.exceptions.OperationFailedException;
17  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
18  import org.kuali.student.r2.common.util.ContextUtils;
19  
20  import java.util.ArrayList;
21  import java.util.List;
22  
23  public class CourseOfferingCreateRule extends KsMaintenanceDocumentRuleBase {
24  
25      private CourseOfferingService courseOfferingService;
26  
27      @Override
28      protected boolean isDocumentValidForSave(MaintenanceDocument document) {
29          if ( ! super.isDocumentValidForSave(document)) {
30              return false;
31          }
32  
33          if (document.getNewMaintainableObject().getDataObject() instanceof CourseOfferingCreateWrapper){
34              CourseOfferingCreateWrapper coWrapper = (CourseOfferingCreateWrapper)document.getNewMaintainableObject().getDataObject();
35  
36              if ( ! validateRequiredFields(coWrapper)) {
37                  return false;
38              }
39              if ( ! validateDuplicateSuffix(coWrapper)) {
40                  return false;
41              }
42              }
43  
44          return true;
45      }
46  
47  
48      protected boolean validateRequiredFields(CourseOfferingCreateWrapper coWrapper){
49          if (coWrapper.getFormatOfferingWrappers().isEmpty()){
50              GlobalVariables.getMessageMap().putError(CourseOfferingConstants.DELIVERY_FORMAT_SECTION_ID,CourseOfferingConstants.DELIVERY_FORMAT_REQUIRED_ERROR);
51              return false;
52          }
53          return true;
54      }
55  
56      protected boolean validateDuplicateSuffix(CourseOfferingCreateWrapper coWrapper){
57          String courseCode = coWrapper.getCatalogCourseCode().toUpperCase();
58          String newCoCode = courseCode + coWrapper.getCourseOfferingSuffix().toUpperCase();
59          try {
60              List<CourseOfferingInfo> wrapperList =
61                      _findCourseOfferingsByTermAndCourseCode(coWrapper.getTerm().getId(), newCoCode);
62              for (CourseOfferingInfo courseOfferingInfo : wrapperList) {
63                  if (StringUtils.equals(newCoCode, courseOfferingInfo.getCourseOfferingCode())) {
64                      GlobalVariables.getMessageMap().putError(
65                              "document.newMaintainableObject.dataObject.courseOfferingSuffix",
66                              CourseOfferingConstants.COURSEOFFERING_ERROR_CREATE_DUPLICATECODE, newCoCode, courseCode);
67                      coWrapper.setEnableCreateButton(true);
68                      return false;
69                  }
70              }
71          } catch (Exception e) {
72              throw new RuntimeException(e);
73          }
74  
75          return true;
76      }
77  
78      protected CourseOfferingService getCourseOfferingService() {
79          if (courseOfferingService == null) {
80              courseOfferingService = CourseOfferingResourceLoader.loadCourseOfferingService();
81          }
82          return courseOfferingService;
83      }
84  
85      private List<CourseOfferingInfo> _findCourseOfferingsByTermAndCourseCode(String termId, String courseCode)
86              throws InvalidParameterException, MissingParameterException, PermissionDeniedException, OperationFailedException {
87          List<CourseOfferingInfo> courseOfferings = new ArrayList<CourseOfferingInfo>();
88          if (StringUtils.isNotBlank(courseCode) && StringUtils.isNotBlank(termId)) {
89              QueryByCriteria.Builder qbcBuilder = QueryByCriteria.Builder.create();
90              qbcBuilder.setPredicates(PredicateFactory.and(
91                      PredicateFactory.equal("courseOfferingCode", courseCode),
92                      PredicateFactory.equalIgnoreCase("atpId", termId)));
93              QueryByCriteria criteria = qbcBuilder.build();
94  
95              courseOfferings = getCourseOfferingService().searchForCourseOfferings(criteria, ContextUtils.createDefaultContextInfo());
96          }
97          return courseOfferings;
98      }
99  }