View Javadoc

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 }