1 package org.kuali.student.enrollment.class2.acal.util;
2
3 import org.apache.commons.lang.StringUtils;
4 import org.kuali.rice.core.api.criteria.Predicate;
5 import org.kuali.rice.core.api.criteria.QueryByCriteria;
6 import org.kuali.student.enrollment.acal.dto.AcademicCalendarInfo;
7 import org.kuali.student.enrollment.acal.dto.HolidayCalendarInfo;
8 import org.kuali.student.enrollment.acal.dto.TermInfo;
9 import org.kuali.student.enrollment.acal.service.AcademicCalendarService;
10 import org.kuali.student.r2.common.dto.ContextInfo;
11 import org.kuali.student.r2.common.util.constants.AcademicCalendarServiceConstants;
12
13 import java.text.SimpleDateFormat;
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import static org.kuali.rice.core.api.criteria.PredicateFactory.*;
18
19 public class CalendarSearchViewHelperUtil {
20
21 public final static String NAME = "name";
22 public final static String START_DATE = "startDate";
23 public final static String END_DATE = "endDate";
24 public final static String CALENDAR_TYPE = "atpType";
25
26
27 public static List<TermInfo> searchForTerms(String name, String year,ContextInfo context, AcademicCalendarService academicCalendarService)throws Exception {
28
29 List<TermInfo> termInfoList = new ArrayList<TermInfo>();
30
31 QueryByCriteria.Builder query = buildQueryByCriteria(name,year,"Term");
32
33 List<TermInfo> terms = academicCalendarService.searchForTerms(query.build(),context);
34 for (TermInfo term : terms) {
35 termInfoList.add(term);
36 }
37
38 return termInfoList;
39
40 }
41
42 public static List<AcademicCalendarInfo> searchForAcademicCalendars(String name, String year,ContextInfo context, AcademicCalendarService academicCalendarService)throws Exception {
43
44 List<AcademicCalendarInfo> acalInfoList = new ArrayList<AcademicCalendarInfo>();
45
46 QueryByCriteria.Builder query = buildQueryByCriteria(name,year,AcademicCalendarServiceConstants.ACADEMIC_CALENDAR_TYPE_KEY);
47
48 List<AcademicCalendarInfo> acals = academicCalendarService.searchForAcademicCalendars(query.build(), context);
49 for (AcademicCalendarInfo acal : acals) {
50 acalInfoList.add(acal);
51 }
52
53 return acalInfoList;
54
55
56 }
57
58 public static List<HolidayCalendarInfo> searchForHolidayCalendars(String name, String year,ContextInfo context, AcademicCalendarService academicCalendarService)throws Exception {
59
60 List<HolidayCalendarInfo> hCals = new ArrayList<HolidayCalendarInfo>();
61
62 QueryByCriteria.Builder query = buildQueryByCriteria(name,year,AcademicCalendarServiceConstants.HOLIDAY_CALENDAR_TYPE_KEY);
63
64 List<HolidayCalendarInfo> hcs = academicCalendarService.searchForHolidayCalendars(query.build(), context);
65 for (HolidayCalendarInfo hc : hcs) {
66 hCals.add(hc);
67 }
68
69 return hCals;
70
71
72 }
73
74 private static QueryByCriteria.Builder buildQueryByCriteria(String name, String year,String typeKey){
75
76 QueryByCriteria.Builder qBuilder = QueryByCriteria.Builder.create();
77 List<Predicate> pList = new ArrayList<Predicate>();
78 Predicate p;
79
80 qBuilder.setPredicates();
81 if (StringUtils.isNotBlank(name)){
82 p = like(NAME, "%" + name + "%");
83 pList.add(p);
84 }
85
86 if (StringUtils.isNotBlank(year)){
87 try {
88
89 Predicate startDatePredicate = and(greaterThanOrEqual(START_DATE, new SimpleDateFormat("MM/dd/yyyy").parse("01/01/" + year)),
90 lessThanOrEqual(START_DATE, new SimpleDateFormat("MM/dd/yyyy").parse("12/31/" + year)));
91
92
93 Predicate endDatePredicate = and(greaterThanOrEqual(END_DATE, new SimpleDateFormat("MM/dd/yyyy").parse("01/01/" + year)),
94 lessThanOrEqual(END_DATE, new SimpleDateFormat("MM/dd/yyyy").parse("12/31/" + year)));
95
96 pList.add(or(startDatePredicate, endDatePredicate));
97
98 } catch (Exception e) {
99 throw new RuntimeException(e);
100 }
101
102 }
103
104 if (StringUtils.equalsIgnoreCase(typeKey, "Term")){
105 p = notIn(CALENDAR_TYPE,AcademicCalendarServiceConstants.ACADEMIC_CALENDAR_TYPE_KEY, AcademicCalendarServiceConstants.HOLIDAY_CALENDAR_TYPE_KEY);
106 }else{
107 p = equal(CALENDAR_TYPE,typeKey);
108 }
109
110 pList.add(p);
111
112 if (!pList.isEmpty()){
113 Predicate[] preds = new Predicate[pList.size()];
114 pList.toArray(preds);
115 qBuilder.setPredicates(and(preds));
116 }
117 return qBuilder;
118 }
119
120
121
122
123
124 }