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