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 }