1 package org.kuali.student.enrollment.class2.courseoffering.service.impl;
2
3 import org.apache.commons.lang.StringUtils;
4 import org.kuali.rice.core.api.util.RiceKeyConstants;
5 import org.kuali.rice.krad.lookup.LookupableImpl;
6 import org.kuali.rice.krad.util.GlobalVariables;
7 import org.kuali.rice.krad.util.KRADConstants;
8 import org.kuali.rice.krad.web.form.LookupForm;
9 import org.kuali.student.enrollment.class2.courseoffering.util.CourseOfferingManagementUtil;
10 import org.kuali.student.r2.common.dto.RichTextInfo;
11 import org.kuali.student.r2.common.util.ContextUtils;
12 import org.kuali.student.r2.core.search.dto.SearchParamInfo;
13 import org.kuali.student.r2.core.search.dto.SearchRequestInfo;
14 import org.kuali.student.r2.core.search.dto.SearchResultCellInfo;
15 import org.kuali.student.r2.core.search.dto.SearchResultInfo;
16 import org.kuali.student.r2.core.search.dto.SearchResultRowInfo;
17 import org.kuali.student.r2.lum.course.dto.CourseInfo;
18
19 import javax.xml.namespace.QName;
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.Map;
23
24 import static org.apache.commons.lang.StringUtils.isEmpty;
25
26 public class CourseInfoLookupableImpl extends LookupableImpl {
27 private static final long serialVersionUID = 1L;
28
29 public enum QueryParamEnum {
30 ID("lu.queryParam.luOptionalId","id"),
31 SUBJECT("lu.queryParam.luOptionalStudySubjectArea", "subjectArea"),
32 CODE("lu.queryParam.luOptionalCode", "code"),
33 TITLE("lu.queryParam.luOptionalLongName", "courseTitle");
34
35 private final String fieldValue;
36 private final String queryKey;
37
38 QueryParamEnum(String qKey, String fValue) {
39 this.queryKey = qKey;
40 this.fieldValue = fValue;
41 }
42
43 public String getFieldValue() {
44 return fieldValue;
45 }
46
47 public String getQueryKey() {
48 return queryKey;
49 }
50 }
51
52 @Override
53 public boolean validateSearchParameters(LookupForm form, Map<String, String> searchCriteria) {
54 boolean valid = super.validateSearchParameters(form,searchCriteria);
55
56 if (valid){
57 String courseCodeParam = searchCriteria.get(QueryParamEnum.CODE.getFieldValue());
58 String courseTitleParam = searchCriteria.get(QueryParamEnum.TITLE.getFieldValue());
59
60 if (StringUtils.isBlank(courseCodeParam) && StringUtils.isBlank(courseTitleParam)){
61 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, RiceKeyConstants.ERROR_CUSTOM,"Please enter atleast one field.");
62 valid = false;
63 } else if ((StringUtils.isBlank(courseCodeParam) && StringUtils.length(courseTitleParam) < 2) ||
64 (StringUtils.length(courseCodeParam) < 2 && StringUtils.isBlank(courseTitleParam))) {
65 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, RiceKeyConstants.ERROR_CUSTOM,"Please enter atleast 2 characters for the search.");
66 valid = false;
67 }
68 }
69
70 return valid;
71 }
72
73 @Override
74 protected List<?> getSearchResults(LookupForm lookupForm, Map<String, String> fieldValues, boolean unbounded) {
75 List <CourseInfo> courseInfoList = new ArrayList<CourseInfo>();
76
77 List<SearchParamInfo> searchParams = new ArrayList<SearchParamInfo>();
78 SearchParamInfo qpv1 = new SearchParamInfo();
79 qpv1.setKey("lu.queryParam.luOptionalType");
80 qpv1.getValues().add("kuali.lu.type.CreditCourse");
81 searchParams.add(qpv1);
82
83 qpv1 = new SearchParamInfo();
84 qpv1.setKey("lu.queryParam.luOptionalState");
85 qpv1.getValues().add("Active");
86 searchParams.add(qpv1);
87
88 for (QueryParamEnum qpEnum : QueryParamEnum.values()) {
89 String fieldValue = fieldValues.get(qpEnum.getFieldValue());
90 if ( ! isEmpty(fieldValue) ) {
91 SearchParamInfo qpv = new SearchParamInfo();
92 qpv.setKey(qpEnum.getQueryKey());
93 qpv.getValues().add(fieldValue);
94 searchParams.add(qpv);
95 }
96 }
97
98 SearchRequestInfo searchRequest = new SearchRequestInfo();
99 searchRequest.setParams(searchParams);
100 searchRequest.setSearchKey("lu.search.mostCurrent.union");
101
102 try {
103 SearchResultInfo searchResult = CourseOfferingManagementUtil.getCluService().search(searchRequest, ContextUtils.getContextInfo());
104
105 if (searchResult.getRows().size() > 0) {
106 for(SearchResultRowInfo srrow : searchResult.getRows()){
107 List<SearchResultCellInfo> srCells = srrow.getCells();
108 if(srCells != null && srCells.size() > 0){
109 CourseInfo course = new CourseInfo();
110 for(SearchResultCellInfo srcell : srCells){
111 if (srcell.getKey().equals("lu.resultColumn.luOptionalCode")) {
112 course.setCode(srcell.getValue());
113 } else if (srcell.getKey().equals("lu.resultColumn.luOptionalLongName")) {
114 course.setCourseTitle(srcell.getValue());
115 }else if (srcell.getKey().equals("lu.resultColumn.luOptionalDescr")) {
116 RichTextInfo desc = new RichTextInfo();
117 desc.setFormatted(srcell.getValue());
118 course.setDescr(desc);
119 }
120 }
121 courseInfoList.add(course);
122 }
123 }
124 }
125
126 return courseInfoList;
127 } catch (Exception e) {
128 throw new RuntimeException(e);
129 }
130 }
131 }