1 /** 2 * Copyright 2005-2011 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.rice.kns.lookup; 17 18 import org.kuali.rice.kns.document.authorization.BusinessObjectRestrictions; 19 import org.kuali.rice.kns.web.struts.form.LookupForm; 20 import org.kuali.rice.kns.web.ui.Field; 21 import org.kuali.rice.kns.web.ui.Row; 22 import org.kuali.rice.krad.bo.BusinessObject; 23 import org.kuali.rice.krad.service.BusinessObjectDictionaryService; 24 import org.kuali.rice.krad.service.DataDictionaryService; 25 26 import java.io.Serializable; 27 import java.util.Collection; 28 import java.util.List; 29 import java.util.Map; 30 31 public interface LookupableHelperService extends Serializable{ 32 33 /** 34 * Initializes the lookup with a businss object class 35 * 36 * @param businessObjectClass 37 */ 38 public void setBusinessObjectClass(Class businessObjectClass); 39 40 /** 41 * 42 * @return Returns the dataObjectClass this lookupable is representing 43 * 44 */ 45 public Class getBusinessObjectClass(); 46 47 /** 48 * Initializes the lookup with the given Map of parameters. 49 * 50 * @param parameters 51 */ 52 public void setParameters(Map<String, String[]> parameters); 53 54 /** 55 * @return Returns the parameters passed to this lookup 56 */ 57 public Map<String, String[]> getParameters(); 58 59 /** 60 * @return String url for the location to return to after the lookup 61 */ 62 public String getReturnLocation(); 63 64 /** 65 * @return List of Column objects used to render the result table 66 */ 67 public List getColumns(); 68 69 /** 70 * Validates the values filled in as search criteria, also checks for required field values. 71 * 72 * @param fieldValues - Map of property/value pairs 73 */ 74 public void validateSearchParameters(Map fieldValues); 75 76 /** 77 * Performs a search and returns result list. 78 * 79 * @param fieldValues - Map of property/value pairs 80 * @return List of business objects found by the search 81 * @throws Exception 82 */ 83 public List getSearchResults(Map<String, String> fieldValues); 84 85 /** 86 * Similar to getSearchResults, but the number of returned rows is not bounded 87 * 88 * @param fieldValues 89 * @return 90 */ 91 public List getSearchResultsUnbounded(Map<String, String> fieldValues); 92 93 /** 94 * Determines if there should be more search fields rendered based on already entered search criteria. 95 * 96 * @param fieldValues - Map of property/value pairs 97 * @return boolean 98 */ 99 public boolean checkForAdditionalFields(Map fieldValues); 100 101 /** 102 * Builds the return value url. 103 * 104 * @param businessObject - Instance of a business object containing the return values 105 * @param fieldConversions - Map of conversions mapping bo names to caller field names. 106 * @param lookupImpl - Current lookup impl name 107 * @param returnKeys - Keys to return 108 * @return String url called when selecting a row from the result set 109 */ 110 public HtmlData getReturnUrl(BusinessObject businessObject, Map fieldConversions, String lookupImpl, List returnKeys, BusinessObjectRestrictions businessObjectRestrictions); 111 112 /** 113 * This method builds the return url 114 * 115 * @param businessObject 116 * @param lookupForm 117 * @param returnKeys 118 * @return 119 */ 120 public HtmlData getReturnUrl(BusinessObject businessObject, LookupForm lookupForm, List returnKeys, BusinessObjectRestrictions businessObjectRestrictions); 121 122 /** 123 * Builds string of action urls that can take place for a result row 124 * 125 * @param businessObject - Instance of a business object containing the return values 126 * @param pkNames - List of primary key names 127 * @return String rendered in actions column of result set 128 */ 129 public String getActionUrls(BusinessObject businessObject, List pkNames, BusinessObjectRestrictions businessObjectRestrictions); 130 131 /** 132 * 133 * This method is a template method that allows child classes to return their own custom action html data. 134 * 135 * @param businessObject 136 * @param pkNames 137 * @return 138 */ 139 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames); 140 141 /** 142 * Builds string an inquiry url for drill down on a result field 143 * 144 * @param businessObject - Instance of a business object containing the return values 145 * @param propertyName - Name of the property in the business object 146 * @return String url called on selection of the result field 147 */ 148 public HtmlData getInquiryUrl(BusinessObject businessObject, String propertyName); 149 150 /** 151 * Sets the requested fields conversions in the lookupable 152 * 153 * @param fieldConversions 154 */ 155 public void setFieldConversions(Map fieldConversions); 156 157 /** 158 * Gets the readOnlyFieldsList attribute. 159 * @return Returns the readOnlyFieldsList. 160 */ 161 public List<String> getReadOnlyFieldsList(); 162 163 /** 164 * Sets the requested read only fields list in the lookupable 165 * 166 * @param readOnlyFieldsList 167 */ 168 public void setReadOnlyFieldsList(List<String> readOnlyFieldsList); 169 170 /** 171 * This method is public because some unit tests depend on it. 172 * 173 * @return a List of the names of fields which are marked in data dictionary as return fields. 174 */ 175 public List getReturnKeys(); 176 177 public String getDocFormKey(); 178 179 public void setDocFormKey(String docFormKey); 180 181 public String getDocNum(); 182 183 public void setDocNum(String docNum); 184 185 /** 186 * 187 * This method builds a maintenance url. 188 * 189 * @param businessObject 190 * @param htmlData 191 * @param pkNames 192 * @return 193 */ 194 public String getMaintenanceUrl(BusinessObject businessObject, HtmlData htmlData, List pkNames, BusinessObjectRestrictions businessObjectRestrictions); 195 196 /** 197 * Determines if underlying lookup bo has associated maintenance document that allows new or copy maintenance actions. 198 * 199 * @return true if bo has maint doc that allows new or copy actions 200 */ 201 public boolean allowsMaintenanceNewOrCopyAction(); 202 203 /** 204 * Determines if underlying lookup bo has associated document that allows new or copy maintenance actions. 205 * 206 * @return true if bo has doc that allows new or copy actions 207 */ 208 public boolean allowsNewOrCopyAction(String documentTypeName); 209 210 /** 211 * Returns a list of Row objects to be used to generate the search query screen 212 * 213 * Generally, setDataObjectClass needs to be called with a non-null value for proper operation 214 * @return 215 */ 216 public List<Row> getRows(); 217 218 /** 219 * This method returns the DataDictionaryService used to initialize this helper service and is used by Lookupable implementations to 220 * retrieve the proper service. 221 * 222 * @return 223 */ 224 public DataDictionaryService getDataDictionaryService(); 225 226 /** 227 * This method returns the BusinessObjectDictionaryService used to initialize this helper service and is used by Lookupable implementations to 228 * retrieve the proper service. 229 * 230 * @return 231 */ 232 public BusinessObjectDictionaryService getBusinessObjectDictionaryService(); 233 234 public void setBackLocation(String backLocation); 235 236 public String getBackLocation(); 237 238 /** 239 * 240 * This method performs the lookup and returns a collection of BO items 241 * @param lookupForm 242 * @param resultTable 243 * @param bounded 244 * @return the list of result BOs, possibly bounded 245 */ 246 public Collection performLookup(LookupForm lookupForm, Collection resultTable, boolean bounded); 247 248 /** 249 * This method returns a list of the default columns used to sort the result set. For multiple value lookups, 250 * this method does not change when different columns are sorted. 251 * 252 * @return 253 */ 254 public List getDefaultSortColumns(); 255 256 /** 257 * This method returns whether the previously executed getSearchResults used the primary key values to search, ignoring all non key values 258 * 259 * @return 260 * @see LookupableHelperService#getPrimaryKeyFieldLabels() 261 */ 262 public boolean isSearchUsingOnlyPrimaryKeyValues(); 263 264 /** 265 * Returns a comma delimited list of primary key field labels, to be used on the UI to tell the user which fields were used to search 266 * 267 * @return 268 * @see LookupableHelperService#isSearchUsingOnlyPrimaryKeyValues() 269 */ 270 public String getPrimaryKeyFieldLabels(); 271 272 /** 273 * Determines whether a given BusinessObject that's returned as one of the lookup's results is considered returnable, which means that for 274 * single-value lookups, a "return value" link may be rendered, and for multiple value lookups, a checkbox is rendered. 275 * 276 * Note that this can be part of an authorization mechanism, but not the complete authorization mechanism. The component that invoked the lookup/ 277 * lookup caller (e.g. document, nesting lookup, etc.) needs to check that the object that was passed to it was returnable as well because there 278 * are ways around this method (e.g. crafting a custom return URL). 279 * 280 * @param object an object from the search result set 281 * @return 282 */ 283 public boolean isResultReturnable(BusinessObject object); 284 285 /** 286 * 287 * This method allows for overriding the clear behavior 288 * 289 */ 290 public void performClear(LookupForm lookupForm); 291 292 public boolean shouldDisplayHeaderNonMaintActions(); 293 294 public boolean shouldDisplayLookupCriteria(); 295 296 /** 297 * This method gets the supplemental lookup menu if any 298 * 299 * @return supplemental menu bar 300 */ 301 public String getSupplementalMenuBar(); 302 303 /** 304 * @return String displayed as title for the lookup 305 */ 306 public String getTitle(); 307 308 /** 309 * 310 * performs custom actions. return true to reperform search 311 * 312 * @param ignoreErrors 313 * @return boolean to reperform search 314 */ 315 public boolean performCustomAction(boolean ignoreErrors); 316 317 /** 318 * get an extra field 319 * @return 320 */ 321 public Field getExtraField(); 322 323 public void applyFieldAuthorizationsFromNestedLookups(Field field); 324 325 /** 326 * Performs conditional logic (based on current search values or other parameters) to 327 * override field hidden, read-only, and required attributes previously set. 328 */ 329 public void applyConditionalLogicForFieldDisplay(); 330 }