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
25 return null;
26 }
27
28
29
30
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
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
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
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 }