1 /**
2 * Copyright 2005-2013 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.kew.docsearch;
17
18 import org.kuali.rice.core.api.uif.RemotableAttributeError;
19 import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
20 import org.kuali.rice.kew.api.document.search.DocumentSearchResults;
21 import org.kuali.rice.kew.framework.document.search.DocumentSearchCriteriaConfiguration;
22 import org.kuali.rice.kew.framework.document.search.DocumentSearchResultSetConfiguration;
23 import org.kuali.rice.kew.framework.document.search.DocumentSearchResultValues;
24 import org.kuali.rice.kew.doctype.bo.DocumentType;
25
26 import java.util.List;
27
28 /**
29 * Handles communication between {@link org.kuali.rice.kew.framework.document.search.DocumentSearchCustomizationHandlerService}
30 * endpoints in order to invoke document search customizations which might be hosted from various applications.
31 *
32 * @author Kuali Rice Team (rice.collab@kuali.org)
33 */
34 public interface DocumentSearchCustomizationMediator {
35
36 /**
37 * Retrieves the document search criteria configuration for the given document type. This should include attribute
38 * fields that should be included in the document search user interface when displaying criteria by which a user
39 * can search for documents. If this method returns null then no additional criteria should be presented on the
40 * search screen.
41 *
42 * @param documentType the document type for which to find document search criteria configuration, must not be null
43 *
44 * @return configuration information containing additional criteria (beyond the default set) which should be
45 * displayed to the user when performing a search against documents of the given type, if null is returned this
46 * indicates that the default document search criteria configuration should be used
47 */
48 DocumentSearchCriteriaConfiguration getDocumentSearchCriteriaConfiguration(DocumentType documentType);
49
50 /**
51 * Performs optional validation of document search criteria prior to execution of the search.
52 *
53 * @param documentType the document type against which the lookup is being performed
54 * @param documentSearchCriteria the criteria representing the submission of the document search
55 *
56 * @return a list of error messages generated by the validation, may an empty list in which case the calling code
57 * may safely ignore the response and assume that the given criteria validated successfully
58 */
59 List<RemotableAttributeError> validateLookupFieldParameters(DocumentType documentType,
60 DocumentSearchCriteria documentSearchCriteria);
61
62 /**
63 * Optionally performs customization of the given document search criteria in the cases where the document type
64 * implements criteria customization. If this method returns a non-null value, then the calling code should use
65 * the returned criteria in order to execute the search. If this method returns a null value, it means the criteria
66 * that was given did not require any customization. In this case, the calling code should proceed with search
67 * execution using the originally provided criteria.
68 *
69 * @param documentType the document type against which to perform the criteria customization, should never be null
70 * @param documentSearchCriteria the criteria to use as the starting point for customization
71 *
72 * @return a customized version of the given criteria, or null if the criteria was not customized
73 */
74 DocumentSearchCriteria customizeCriteria(DocumentType documentType, DocumentSearchCriteria documentSearchCriteria);
75
76 /**
77 * Optionally performs a custom clearing of the given document search criteria if the given document type
78 * implements a customized clear algorithm. If this method returns a non-null value, then the value returned
79 * should be instated by the calling code as the "cleared" version of the criteria. If null is returned, then the
80 * default implementation of criteria clearing should be used.
81 *
82 * @param documentType the document type against which to check for a custom implementation of criteria clearing
83 * @param documentSearchCriteria the current criteria of the document search prior to being cleared
84 *
85 * @return the result of clearing the criteria, if this returns null it means the given document type does not
86 * implement custom clearing and the default behavior should be used
87 */
88 DocumentSearchCriteria customizeClearCriteria(DocumentType documentType,
89 DocumentSearchCriteria documentSearchCriteria);
90
91 /**
92 * Optionally performs customization on the given set of document search results. This could include changing
93 * existing document values or synthesizing new ones. The results of this method include a list of
94 * {@link org.kuali.rice.kew.framework.document.search.DocumentSearchResultValue} objects, each of which are mapped to a
95 * specific document id from the results and include additional key-value pairs for customized or synthesized
96 * values for that document. This method can return a null value if no customization was performed.
97 *
98 * @param documentType the document type to use when determining what customization logic (if any) should be invoked
99 * @param documentSearchCriteria the criteria of the document search which produced the supplied results
100 * @param results the results of the document search which are being considered for customization
101 *
102 * @return the customized result values, or null if not result customization was performed
103 */
104 DocumentSearchResultValues customizeResults(DocumentType documentType,
105 DocumentSearchCriteria documentSearchCriteria,
106 DocumentSearchResults results);
107
108 /**
109 * Optionally provides configuration information that allows for document search result set customization to occur.
110 * The resulting {@code DocumentSearchResultSetConfiguration} can be used by the calling code to determine how best
111 * to render the lookup results.
112 *
113 * @param documentType the document type for which to customize result set configuration
114 * @param documentSearchCriteria the criteria that was used to perform the lookup
115 *
116 * @return the customized document search result set configuration, or null if no result set customization was
117 * performed
118 */
119 DocumentSearchResultSetConfiguration customizeResultSetConfiguration(DocumentType documentType,
120 DocumentSearchCriteria documentSearchCriteria);
121
122 }
123
124