1 package org.kuali.student.enrollment.class2.scheduleofclasses.util;
2
3 import org.apache.commons.lang.StringUtils;
4 import org.kuali.student.enrollment.class2.courseoffering.dto.ActivityOfferingWrapper;
5 import org.kuali.student.enrollment.class2.courseoffering.dto.RegistrationGroupWrapper;
6
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.TreeMap;
11
12
13
14
15
16
17 public class SOCRequisiteHelper {
18
19 private SOCRequisiteWrapper reqWrapper;
20
21 public SOCRequisiteHelper() {
22 reqWrapper = new SOCRequisiteWrapper();
23 }
24
25 public SOCRequisiteWrapper getReqWrapper() {
26 return reqWrapper;
27 }
28
29 public void setReqWrapper(SOCRequisiteWrapper reqWrapper) {
30 this.reqWrapper = reqWrapper;
31 }
32
33
34
35
36
37
38 public void loadRequisites(List<ActivityOfferingWrapper> activityOfferingWrapperList) {
39 Map<String, String> overriddenRules = new TreeMap<String, String>();
40
41
42 for (String ruleType : reqWrapper.getRuleTypes()) {
43 if (!reqWrapper.getAoRequisiteTypeMap().isEmpty()) {
44 for (Map.Entry<String, Map<String, String>> aoEntry : reqWrapper.getAoRequisiteTypeMap().entrySet()) {
45 if (reqWrapper.getCoRequisiteTypeMap().containsKey(ruleType) && aoEntry.getValue().containsKey(ruleType)) {
46 overriddenRules.put(ruleType, reqWrapper.getCoRequisiteTypeMap().get(ruleType));
47 reqWrapper.getCoRequisiteTypeMap().remove(ruleType);
48 }
49 }
50 }
51 }
52
53 loadAORequisites(overriddenRules);
54
55 if (!overriddenRules.isEmpty()) {
56 loadcoOverridenRules(overriddenRules, activityOfferingWrapperList);
57 }
58
59 if (!reqWrapper.getCoRequisiteTypeMap().isEmpty()) {
60 loadCORequisites();
61 }
62 }
63
64
65
66
67
68
69 private void loadAORequisites(Map<String, String> overriddenRules) {
70 String aoRequisite;
71 for (String ruleType : reqWrapper.getRuleTypes()) {
72 if (!reqWrapper.getAoRequisiteTypeMap().isEmpty()) {
73 for (Map.Entry<String, Map<String, String>> aoEntry : reqWrapper.getAoRequisiteTypeMap().entrySet()) {
74 aoRequisite = new String();
75 if (aoEntry.getValue().containsKey(ruleType)) {
76 String aoValue = StringUtils.substringAfter(aoEntry.getValue().get(ruleType), ":");
77 if(aoValue.length() > 1) {
78 aoRequisite = aoEntry.getValue().get(ruleType);
79 } else {
80 reqWrapper.getSuppressNullMap().put(aoEntry.getKey(), ruleType);
81 }
82 } else if (!overriddenRules.isEmpty()) {
83 if (overriddenRules.containsKey(ruleType)) {
84 aoRequisite = overriddenRules.get(ruleType);
85 }
86 }
87
88 if (!aoRequisite.isEmpty()) {
89 if (reqWrapper.getAoRequisiteMap().containsKey(aoEntry.getKey())) {
90 reqWrapper.getAoRequisiteMap().get(aoEntry.getKey()).put(ruleType, aoRequisite);
91 continue;
92 }
93 Map<String, String> temp = new TreeMap<String, String>();
94 temp.put(ruleType, aoRequisite);
95 reqWrapper.getAoRequisiteMap().put(aoEntry.getKey(), temp);
96 }
97 }
98 }
99 }
100 }
101
102
103
104
105
106
107
108 private void loadcoOverridenRules(Map<String, String> overriddenRules, List<ActivityOfferingWrapper> activityOfferingWrapperList) {
109 for (ActivityOfferingWrapper activityOfferingWrapper : activityOfferingWrapperList) {
110 if(activityOfferingWrapper.getRequisite() == null) {
111 if(!reqWrapper.getAoRequisiteMap().containsKey(activityOfferingWrapper.getActivityCode())) {
112 if (reqWrapper.getSuppressNullMap().containsKey(activityOfferingWrapper.getActivityCode())) {
113 Map<String, String> temp = new HashMap<String, String>(overriddenRules);
114 temp.remove(reqWrapper.getSuppressNullMap().get(activityOfferingWrapper.getActivityCode()));
115 reqWrapper.getAoRequisiteMap().put(activityOfferingWrapper.getActivityCode(), temp);
116 continue;
117 }
118 reqWrapper.getAoRequisiteMap().put(activityOfferingWrapper.getActivityCode(), overriddenRules);
119 }
120 }
121 }
122 }
123
124
125
126
127 private void loadCORequisites() {
128 for(Map.Entry<String, String> coReq : reqWrapper.getCoRequisiteTypeMap().entrySet()) {
129 reqWrapper.getCoRequisite().append(coReq.getValue());
130 }
131 }
132
133
134
135
136
137
138 public void loadRegRequisites(List<RegistrationGroupWrapper> registrationGroupWrapperList) {
139 StringBuilder firstReq;
140 StringBuilder secondReq;
141 StringBuilder commonReq;
142
143
144 for(int i = 0; i < registrationGroupWrapperList.size(); i = i + 2) {
145 RegistrationGroupWrapper registrationGroupWrapper = registrationGroupWrapperList.get(i);
146
147 firstReq = new StringBuilder();
148 secondReq = new StringBuilder();
149 commonReq = new StringBuilder();
150
151
152 RegistrationGroupWrapper partnerRegGroup = getRegistrationGroupWrapper(registrationGroupWrapperList, registrationGroupWrapper.getRgInfo().getName(), registrationGroupWrapper.getAoActivityCodeText());
153
154
155 if(reqWrapper.getAoRequisiteMap().containsKey(registrationGroupWrapper.getAoActivityCodeText()) ||
156 reqWrapper.getAoRequisiteMap().containsKey(partnerRegGroup.getAoActivityCodeText())) {
157
158 for(String rule : reqWrapper.getRuleTypes()) {
159 Map<String, String> firstReqMap = reqWrapper.getAoRequisiteMap().get(registrationGroupWrapper.getAoActivityCodeText());
160 Map<String, String> secondReqMap = reqWrapper.getAoRequisiteMap().get(partnerRegGroup.getAoActivityCodeText());
161
162 if (firstReqMap != null && secondReqMap != null) {
163 if (firstReqMap.containsKey(rule) && secondReqMap.containsKey(rule)) {
164 if (firstReqMap.get(rule).equals(secondReqMap.get(rule))) {
165 commonReq.append(firstReqMap.get(rule));
166 continue;
167 }
168 }
169 }
170 if (firstReqMap != null) {
171 if (firstReqMap.containsKey(rule)) {
172 firstReq.append(firstReqMap.get(rule));
173 }
174 }
175 if (secondReqMap != null) {
176 if (secondReqMap.containsKey(rule)) {
177 secondReq.append(secondReqMap.get(rule));
178 }
179 }
180 }
181
182 if (!commonReq.toString().isEmpty()) {
183 registrationGroupWrapper.setCommonRequisite(commonReq.toString());
184 }
185 if (!firstReq.toString().isEmpty()) {
186 registrationGroupWrapper.setRequisite(firstReq.toString());
187 }
188 if (!secondReq.toString().isEmpty()) {
189 partnerRegGroup.setRequisite(secondReq.toString());
190 }
191 }
192 }
193 }
194
195 private RegistrationGroupWrapper getRegistrationGroupWrapper(List<RegistrationGroupWrapper> registrationGroupWrapperList, String name, String aoCode) {
196 for (RegistrationGroupWrapper registrationGroupWrapper : registrationGroupWrapperList) {
197 if(registrationGroupWrapper.getRgInfo().getName().equals(name) && !registrationGroupWrapper.getAoActivityCodeText().equals(aoCode)) {
198 return registrationGroupWrapper;
199 }
200 }
201 RegistrationGroupWrapper emptyRegistrationGroupWrapper = new RegistrationGroupWrapper();
202 emptyRegistrationGroupWrapper.setAoActivityCodeText("null");
203 return emptyRegistrationGroupWrapper;
204 }
205
206
207
208
209
210
211
212 public String prepareAORequisites(String aoCode) {
213 StringBuilder requisites = new StringBuilder();
214 Map<String, String> requisiteMap = reqWrapper.getAoRequisiteMap().get(aoCode);
215
216 for (String req : requisiteMap.values()) {
217 requisites.append(req);
218 }
219
220 return requisites.toString();
221 }
222 }