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