View Javadoc

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                  //FIXME: Find some better way to check the year
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 }