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