View Javadoc

1   package org.kuali.student.lum.course.service.utils;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.List;
6   import java.util.Stack;
7   
8   import org.kuali.student.common.dictionary.dto.FieldDefinition;
9   import org.kuali.student.common.dictionary.dto.ObjectStructureDefinition;
10  import org.kuali.student.common.util.MessageUtils;
11  import org.kuali.student.common.validation.dto.ValidationResultInfo;
12  import org.kuali.student.common.validator.BeanConstraintDataProvider;
13  import org.kuali.student.common.validator.ConstraintDataProvider;
14  import org.kuali.student.common.validator.DefaultValidatorImpl;
15  import org.kuali.student.lum.course.dto.CourseRevenueInfo;
16  import org.kuali.student.lum.lu.dto.AffiliatedOrgInfo;
17  
18  public class RevenuePercentValidator extends DefaultValidatorImpl {
19  
20      private static final String COURSE_REVENUE_FIELD = "revenues";
21  
22      @Override
23      public List<ValidationResultInfo> validateObject(Object data, ObjectStructureDefinition objStructure) {
24          // Custom validators are required to only override the other validateObject method
25          return null;
26      }
27  
28      /***
29       * @see org.kuali.student.common.validator.Validator#validateObject(org.kuali.student.common.dictionary.dto.FieldDefinition,
30       *      java.lang.Object, org.kuali.student.common.dictionary.dto.ObjectStructureDefinition, java.util.Stack)
31       */
32      @Override
33      public List<ValidationResultInfo> validateObject(FieldDefinition field, Object data, ObjectStructureDefinition objStructure, Stack<String> elementStack) {
34  
35          List<ValidationResultInfo> results = new ArrayList<ValidationResultInfo>();
36  
37          // Check to see if the validation is called on the right field
38          if (!COURSE_REVENUE_FIELD.equalsIgnoreCase(field.getName())) {
39              throw new RuntimeException("Custom Validator " + this.getClass().getName() + " was not called on the right field: revenues");
40          }
41  
42          ConstraintDataProvider dataProvider = new BeanConstraintDataProvider();
43          dataProvider.initialize(data);
44  
45          // Get revenues data
46          Object revenuesObj = dataProvider.getValue(field.getName());
47  
48          if (!(revenuesObj instanceof Collection)) {
49              throw new RuntimeException("Custom Validator " + this.getClass().getName() + " was not called with right data: CourseRevenueInfo Collection");
50          }
51  
52          long totalOrgPercent = 0l;
53          // Sum all org percents and make sure they add up to 100
54          for (Object o : (Collection<?>) revenuesObj) {
55  
56              if (!(o instanceof CourseRevenueInfo)) {
57                  throw new RuntimeException("Custom Validator " + this.getClass().getName() + " was not called with right data: CourseRevenueInfo");
58              }
59  
60              CourseRevenueInfo courseRevenue = (CourseRevenueInfo) o;
61  
62              if (courseRevenue.getAffiliatedOrgs().size() > 0) {
63                  for (AffiliatedOrgInfo org : courseRevenue.getAffiliatedOrgs()) {
64                      totalOrgPercent += org.getPercentage();
65                  }
66              }
67          }
68  
69          if (((Collection<?>) revenuesObj).size() > 0 && totalOrgPercent != 100l) {
70              ValidationResultInfo valRes = new ValidationResultInfo(getElementXpath(elementStack));
71              valRes.setElement("/revenues");
72              valRes.setError(MessageUtils.interpolate(getMessage("validation.revenueTotal"), toMap(field)));
73              results.add(valRes);
74          }
75  
76          return results;
77      }
78  }