001 package org.kuali.student.enrollment.class2.courseoffering.service.impl; 002 003 import org.apache.commons.lang.StringUtils; 004 import org.kuali.rice.core.api.util.RiceKeyConstants; 005 import org.kuali.rice.kim.impl.identity.PersonImpl; 006 import org.kuali.rice.kim.impl.identity.PersonLookupableImpl; 007 import org.kuali.rice.krad.uif.field.InputField; 008 import org.kuali.rice.krad.uif.view.LookupView; 009 import org.kuali.rice.krad.util.GlobalVariables; 010 import org.kuali.rice.krad.web.form.LookupForm; 011 012 import java.util.ArrayList; 013 import java.util.List; 014 import java.util.Map; 015 016 /** 017 * Created with IntelliJ IDEA. 018 * User: swedev 019 * Date: 7/3/12 020 * Time: 3:14 PM 021 * This class was created to prevent Blank KS Person Lookups from bringing down the server. 022 */ 023 public class KSPersonLookupableImpl extends PersonLookupableImpl { 024 025 @Override 026 protected List<?> getSearchResults(LookupForm form, Map<String, String> searchCriteria, boolean unbounded) { 027 028 if(GlobalVariables.getMessageMap().hasErrors()){ 029 return new ArrayList<PersonImpl>(); 030 } else{ 031 return super.getSearchResults(form, searchCriteria, unbounded); 032 } 033 } 034 035 @Override 036 public boolean validateSearchParameters(LookupForm form, Map<String, String> searchCriteria) { 037 038 boolean valid = super.validateSearchParameters(form, searchCriteria); //To change body of overridden methods use File | Settings | File Templates. 039 040 Map<String, InputField> criteriaFields = getCriteriaFieldsForValidation((LookupView) form.getPostedView(), 041 form); 042 043 // validate something exist 044 if(this.areAllCriteriaFieldsBlank(form,searchCriteria)){ 045 for (Map.Entry<String, String> searchKeyValue : searchCriteria.entrySet()) { 046 String searchPropertyName = searchKeyValue.getKey(); 047 String searchPropertyValue = searchKeyValue.getValue(); 048 049 LookupView lookupView = (LookupView) form.getPostedView(); 050 InputField inputField = criteriaFields.get(searchPropertyName); 051 if (inputField != null) { 052 if (StringUtils.isBlank(searchPropertyValue)) { 053 GlobalVariables.getMessageMap().putError(inputField.getPropertyName(), 054 RiceKeyConstants.ERROR_REQUIRED, inputField.getLabel()); 055 } 056 } else { 057 throw new RuntimeException("Invalid search field sent for property name: " + searchPropertyName); 058 } 059 } 060 061 if (GlobalVariables.getMessageMap().hasErrors()) { 062 valid = false; 063 } 064 } 065 066 return valid; 067 } 068 069 private boolean areAllCriteriaFieldsBlank(LookupForm form, Map<String, String> searchCriteria){ 070 Map<String, InputField> criteriaFields = getCriteriaFieldsForValidation((LookupView) form.getPostedView(), 071 form); 072 073 // validate required 074 // TODO: this will be done by the uif validation service at some point 075 int blankCount =0; 076 for (Map.Entry<String, String> searchKeyValue : searchCriteria.entrySet()) { 077 String searchPropertyValue = searchKeyValue.getValue(); 078 079 if(searchPropertyValue == null || "".equals(searchPropertyValue)){ 080 blankCount++; 081 } 082 083 } 084 return (blankCount == searchCriteria.size()); 085 } 086 087 }