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 }