001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kns.lookup;
017
018import org.kuali.rice.kns.document.authorization.BusinessObjectRestrictions;
019import org.kuali.rice.kns.web.struts.form.LookupForm;
020import org.kuali.rice.kns.web.ui.Column;
021import org.kuali.rice.kns.web.ui.Field;
022import org.kuali.rice.kns.web.ui.ResultRow;
023import org.kuali.rice.kns.web.ui.Row;
024import org.kuali.rice.krad.bo.BusinessObject;
025
026import java.io.Serializable;
027import java.util.Collection;
028import java.util.List;
029import java.util.Map;
030
031/**
032 * This class defines an interface for lookupables.
033 *
034 * They should act as facades for LookupableHelperServices and also expose bean handlers
035 * (getCreateNewUrl, getHtmlMenuBar, getTitle, getRows, getExtraButton{Source,Params})
036 *
037 */
038@Deprecated
039public interface Lookupable extends Serializable {
040
041    /**
042     * Initializes the lookup with a businss object class.  This value originates
043     * from the UI via LookupForm population.
044     *
045     * It is required that implementations of this method will initialize the
046     * search area used by the UI to provide the search form.  In particular,
047     * it will ensure that getRows() will return valid results
048     *
049     * @param boClass
050     */
051    public void setBusinessObjectClass(Class<? extends BusinessObject> businessObjectClass);
052
053    /**
054     *
055     * @return Returns the dataObjectClass this lookupable is representing
056     *
057     */
058    public Class<? extends BusinessObject> getBusinessObjectClass();
059
060    /**
061     * Initializes the lookup with the given Map of parameters.
062     *
063     * @param parameters
064     */
065    public void setParameters(Map<String, String[]> parameters);
066
067    /**
068     * @return Returns the parameters passed to this lookup
069     */
070    public Map<String, String[]> getParameters();
071
072    /**
073     * @return the html to be displayed as a menu bar
074     */
075    public String getHtmlMenuBar();
076
077    /**
078     * @return the html to be displayed as a supplemental menu bar
079     */
080    public String getSupplementalMenuBar();
081
082    /**
083     * @return List of Row objects used to render the search area
084     */
085    public List<Row> getRows();
086
087    /**
088     * @return String displayed as title for the lookup
089     */
090    public String getTitle();
091
092    /**
093     * @return String url for the location to return to after the lookup
094     */
095    public String getReturnLocation();
096
097    /**
098     * @return List of Column objects used to render the result table
099     */
100    public List<Column> getColumns();
101
102    /**
103     * Validates the values filled in as search criteria, also checks for required field values.
104     *
105     * @param fieldValues - Map of property/value pairs
106     */
107    public void validateSearchParameters(Map<String, String> fieldValues);
108
109    /**
110     *
111     * This method performs the lookup and returns a collection of lookup items
112     * @param lookupForm
113     * @param resultTable
114     * @param bounded
115     * @return results of lookup
116     */
117    public Collection<? extends BusinessObject> performLookup(LookupForm lookupForm, List<ResultRow> resultTable, boolean bounded);
118
119    /**
120     * Performs a search and returns result list.
121     *
122     * @param fieldValues - Map of property/value pairs
123     * @return List of business objects found by the search
124     * @throws Exception
125     */
126    public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues);
127
128    /**
129     * Similar to getSearchResults, but the number of returned rows is not bounded
130     *
131     * @param fieldValues
132     * @return
133     */
134    public List<? extends BusinessObject> getSearchResultsUnbounded(Map<String, String> fieldValues);
135
136    /**
137     * @return String providing source for optional extra button
138     */
139    public String getExtraButtonSource();
140
141    /**
142     * @return String providing return parameters for optional extra button
143     */
144    public String getExtraButtonParams();
145
146    /**
147     * Determines if there should be more search fields rendered based on already entered search criteria.
148     *
149     * @param fieldValues - Map of property/value pairs
150     * @return boolean
151     */
152    public boolean checkForAdditionalFields(Map<String, String> fieldValues);
153
154    /**
155     * Builds the return value url.
156     *
157     * @param businessObject - Instance of a business object containing the return values
158     * @param fieldConversions - Map of conversions mapping bo names to caller field names.
159     * @param lookupImpl - Current lookup impl name
160     * @return String url called when selecting a row from the result set
161     */
162    public HtmlData getReturnUrl(BusinessObject businessObject, Map<String, String> fieldConversions, String lookupImpl, BusinessObjectRestrictions businessObjectRestrictions);
163
164    /**
165     * Builds the Url for a maintenance new document for the lookup business object class
166     * @param businessObject
167     * @return String rendered on Lookup screen for maintenance new document
168     */
169    public String getCreateNewUrl();
170
171    /**
172     * Sets the requested fields conversions in the lookupable
173     *
174     * @param fieldConversions
175     */
176    public void setFieldConversions(Map<String, String> fieldConversions);
177
178    /**
179     * Sets the requested read only fields list in the lookupable
180     *
181     * @param readOnlyFieldsList
182     */
183    public void setReadOnlyFieldsList(List<String> readOnlyFieldsList);
184
185    /**
186     * Sets the helper service for instance
187     * @param helper the helper service
188     */
189    public void setLookupableHelperService(LookupableHelperService helper);
190
191    /**
192     * Returns the LookupableHelperService designated to help this lookup
193     * @return
194     */
195    public LookupableHelperService getLookupableHelperService();
196
197    /**
198     * Returns whether this search was performed using the values of the primary keys only
199     *
200     * @return
201     */
202    public boolean isSearchUsingOnlyPrimaryKeyValues();
203
204    /**
205     * Returns a comma delimited list of primary key field labels, as defined in the DD
206     *
207     * @return
208     */
209    public String getPrimaryKeyFieldLabels();
210
211    /**
212     * This method returns a list of the default columns used to sort the result set.  For multiple value lookups,
213     * this method does not change when different columns are sorted.
214     *
215     * @return
216     */
217    public List<String> getDefaultSortColumns();
218
219    /**
220     *
221     * This method allows for customization of the lookup clear
222     *
223     */
224    public void performClear(LookupForm lookupForm);
225
226    /**
227     *
228     * This method checks whether the header non maint actions should be shown
229     *
230     */
231    public boolean shouldDisplayHeaderNonMaintActions();
232
233    /**
234     *
235     * This method checks whether the criteria should be shown
236     *
237     */
238    public boolean shouldDisplayLookupCriteria();
239
240    /**
241     *
242     * This method is called from a custom action button or script
243     *
244     */
245    public boolean performCustomAction(boolean ignoreErrors);
246
247    /**
248     *
249     * get extra field
250     *
251     * @return
252     */
253    public Field getExtraField();
254
255    /**
256     * method returns the extraOnLoad variable. The 
257         * varible is currently accessed in page.tag and is called in the onLoad.
258         * it allows us to inject javascript onload.
259         */
260    public String getExtraOnLoad();
261    
262    public void setExtraOnLoad(String extraOnLoad);
263    public void applyFieldAuthorizationsFromNestedLookups(Field field);
264    
265    /**
266     * Performs conditional logic (based on current search values or other parameters) to
267     * override field hidden, read-only, and required attributes previously set.
268     */
269    public void applyConditionalLogicForFieldDisplay();
270}