1 /**
2 * Copyright 2005-2012 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.framework.document.search;
17
18 import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
19 import org.kuali.rice.core.api.uif.RemotableAttributeError;
20 import org.kuali.rice.kew.api.KewApiConstants;
21 import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
22 import org.kuali.rice.kew.api.document.search.DocumentSearchResult;
23 import org.kuali.rice.kew.framework.KewFrameworkServiceLocator;
24
25 import javax.jws.WebMethod;
26 import javax.jws.WebParam;
27 import javax.jws.WebResult;
28 import javax.jws.WebService;
29 import javax.jws.soap.SOAPBinding;
30 import javax.xml.bind.annotation.XmlElement;
31 import javax.xml.bind.annotation.XmlElementWrapper;
32 import java.util.List;
33 import java.util.Set;
34
35 /**
36 * A remotable service which handles processing of a client application's document search customizations.
37 *
38 * @author Kuali Rice Team (rice.collab@kuali.org)
39 */
40 @WebService(name = KewFrameworkServiceLocator.DOCUMENT_SEARCH_CUSTOMIZATION_HANDLER_SERVICE, targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0)
41 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
42 public interface DocumentSearchCustomizationHandlerService {
43
44 /**
45 * Retrieves the custom {@code DocumentSearchCriteriaConfiguration} to use for the document type with the given name
46 * and for the given list of searchable attributes. This method is invoked by the document search implementation in
47 * order to help assemble the final criteria attribute fields (which includes configuration for all searchable
48 * attributes on the document type).
49 *
50 * <p>The given list of searchable attribute names may not necessary include all searchable attribute on the
51 * document type, only those which need to be handled by the client application hosting this service. This
52 * determination is made based on the applicationId which is associated with the searchable attribute.
53 * Implementations of this method will assemble this information by invoking the
54 * {@link org.kuali.rice.kew.framework.document.attribute.SearchableAttribute#getSearchFields(org.kuali.rice.kew.api.extension.ExtensionDefinition, String)}
55 * methods on each of the requested searchable attributes.</p>
56 *
57 * @param documentTypeName the document type name for which to retrieve the configuration
58 * @param searchableAttributeNames the names of the searchable attributes from which to assemble criteria
59 * configuration which are owned by the application hosting this service
60 *
61 * @return the custom document search criteria configuration for the given searchable attribute, or null if no
62 * custom configuration is needed
63 *
64 * @throws RiceIllegalArgumentException if documentTypeName is a null or blank value
65 */
66 @WebMethod(operationName = "getDocumentSearchConfiguration")
67 @WebResult(name = "documentSearchConfiguration")
68 @XmlElement(name = "documentSearchConfiguration", required = false)
69 DocumentSearchCriteriaConfiguration getDocumentSearchConfiguration(
70 @WebParam(name = "documentTypeName") String documentTypeName,
71 @WebParam(name = "searchableAttributeNames") List<String> searchableAttributeNames) throws RiceIllegalArgumentException;
72
73 /**
74 * Executes validation of the given {@code DocumentSearchCriteria} against the searchable attributes with the given
75 * names.. This method is invoked by the document search implementation in order to allow for validation to be
76 * customized via custom searchable attribute implementations.
77 *
78 * <p>The given list of searchable attribute names may not necessary include all searchable attribute on the
79 * document type, only those which need to be handled by the client application hosting this service. This
80 * determination is made based on the applicationId which is associated with the searchable attribute.
81 * Implementations of this method execute this validationby invoking the
82 * {@link org.kuali.rice.kew.framework.document.attribute.SearchableAttribute#validateDocumentAttributeCriteria(org.kuali.rice.kew.api.extension.ExtensionDefinition, org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)}
83 * methods on each of the requested searchable attributes.</p>
84 *
85 * @param documentSearchCriteria the criteria against which to perform the validation
86 * @param searchableAttributeNames the names of the searchable attributes against which to execute validation which
87 * are owned by the application hosting this service
88 *
89 * @return a list or remotable attribute errors in the case that any validation errors were raised by the
90 * requested searchable attributes
91 *
92 * @throws RiceIllegalArgumentException if documentTypeName is a null or blank value
93 */
94 @WebMethod(operationName = "validateCriteria")
95 @WebResult(name = "errors")
96 @XmlElementWrapper(name = "errors", required = true)
97 @XmlElement(name = "errors", required = false)
98 List<RemotableAttributeError> validateCriteria(@WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
99 @WebParam(name = "searchableAttributeNames") List<String> searchableAttributeNames
100 ) throws RiceIllegalArgumentException;
101
102 /**
103 * Executes criteria customization against the given criteria using the {@link DocumentSearchCustomizer} with the
104 * given customizer name. This name is the name of the {@code ExtensionDefinition} that defines the customizer
105 * where the customizer extension's applicationId is the same as the application hosting this service.
106 *
107 * <p>This method effectively invokes the {@link DocumentSearchCustomizer#customizeCriteria(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)}
108 * on the requested customizer which is owned by this application.
109 *
110 * @param documentSearchCriteria the criteria to customize
111 * @param customizerName the name of the extension definition for the {@code DocumentSearchCustomizer} which should
112 * be used in order to execute the customization
113 *
114 * @return the customized criteria, or null if no customization was performed
115 *
116 * @throws RiceIllegalArgumentException if documentSearchCriteria is null
117 * @throws RiceIllegalArgumentException if customizerName is a null or blank value
118 */
119 @WebMethod(operationName = "customizeCriteria")
120 @WebResult(name = "documentSearchCriteria")
121 @XmlElement(name = "documentSearchCriteria", required = false)
122 DocumentSearchCriteria customizeCriteria(
123 @WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
124 @WebParam(name = "customizerName") String customizerName
125 ) throws RiceIllegalArgumentException;
126
127 /**
128 * Executes custom criteria clearing against the given criteria using the {@link DocumentSearchCustomizer} with the
129 * given customizer name. This name is the name of the {@code ExtensionDefinition} that defines the customizer
130 * where the customizer extension's applicationId is the same as the application hosting this service.
131 *
132 * <p>This method effectively invokes the {@link DocumentSearchCustomizer#customizeClearCriteria(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)}
133 * on the requested customizer which is owned by this application.
134 *
135 * @param documentSearchCriteria the criteria on which to perform custom clearing
136 * @param customizerName the name of the extension definition for the {@code DocumentSearchCustomizer} which should
137 * be used in order to execute the customization
138 *
139 * @return the cleared criteria, or null if no custom clear was performed
140 *
141 * @throws RiceIllegalArgumentException if documentSearchCriteria is null
142 * @throws RiceIllegalArgumentException if customizerName is a null or blank value
143 */
144 @WebMethod(operationName = "customizeClearCriteria")
145 @WebResult(name = "documentSearchCriteria")
146 @XmlElement(name = "documentSearchCriteria", required = false)
147 DocumentSearchCriteria customizeClearCriteria(
148 @WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
149 @WebParam(name = "customizerName") String customizerName
150 ) throws RiceIllegalArgumentException;
151
152 /**
153 * Executes customization of document search results using the {@link DocumentSearchCustomizer} with the
154 * given customizer name. This name is the name of the {@code ExtensionDefinition} that defines the customizer
155 * where the customizer extension's applicationId is the same as the application hosting this service.
156 *
157 * <p>This method effectively invokes the {@link DocumentSearchCustomizer#customizeResults(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria, java.util.List)}
158 * on the requested customizer which is owned by this application.
159 *
160 * @param documentSearchCriteria the criteria that was used to perform the lookup
161 * @param results the results that were returned from the lookup
162 * @param customizerName the name of the extension definition for the {@code DocumentSearchCustomizer} which should
163 * be used in order to execute the customization
164 *
165 * @return the customized document search results values, or null if no customization was performed
166 *
167 * @throws RiceIllegalArgumentException if documentSearchCriteria is null
168 * @throws RiceIllegalArgumentException if results is null
169 * @throws RiceIllegalArgumentException if customizerName is a null or blank value
170 */
171 @WebMethod(operationName = "customizeResults")
172 @WebResult(name = "resultValues")
173 @XmlElement(name = "resultValues", required = false)
174 DocumentSearchResultValues customizeResults(
175 @WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
176 @WebParam(name = "results") List<DocumentSearchResult> results,
177 @WebParam(name = "customizerName") String customizerName
178 ) throws RiceIllegalArgumentException;
179
180 /**
181 * Executes customization of document search result set configuration using the {@link DocumentSearchCustomizer}
182 * with the given customizer name. This name is the name of the {@code ExtensionDefinition} that defines the
183 * customizer where the customizer extension's applicationId is the same as the application hosting this service.
184 *
185 * <p>This method effectively invokes the {@link DocumentSearchCustomizer#customizeResultSetConfiguration(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)}
186 * on the requested customizer which is owned by this application.
187 *
188 * @param documentSearchCriteria the criteria that was used to perform the lookup
189 * @param customizerName the name of the extension definition for the {@code DocumentSearchCustomizer} which should
190 * be used in order to execute the customization
191 *
192 * @return the customized document search result configuration, or null if no customization was performed
193 *
194 * @throws RiceIllegalArgumentException if documentSearchCriteria is null
195 * @throws RiceIllegalArgumentException if customizerName is a null or blank value
196 */
197 @WebMethod(operationName = "customizeResultSetConfiguration")
198 @WebResult(name = "resultSetConfiguration")
199 @XmlElement(name = "resultSetConfiguration", required = false)
200 DocumentSearchResultSetConfiguration customizeResultSetConfiguration(
201 @WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
202 @WebParam(name = "customizerName") String customizerName) throws RiceIllegalArgumentException;
203
204 /**
205 * Returns the set of customizations that are enabled and should be executed for the {@link DocumentSearchCustomizer}
206 * with the given customizer name. This name is the name of the {@code ExtensionDefinition} that defines the
207 * customizer where the customizer extension's applicationId is the same as the application hosting this service.
208 *
209 * <p>This method essentially invokes the various boolean methods on the {@code DocumentSearchCustomizer} which
210 * indicate which customizations the implementation provides. This primarily serves as a means of optimization to
211 * reduce the number of remote callbacks that the document search implementation needs to make to the various
212 * customizations provided by this service and the customizers it delegates too.</p>
213 *
214 * @param documentTypeName the name of the document type against which to check for enabled customizations on the
215 * specified customizer
216 * @param customizerName the name of the extension definition for the {@code DocumentSearchCustomizer} which should
217 * be used in order to check for enabled customizations
218 *
219 * @return the set of customizations that are enabled
220 *
221 * @throws RiceIllegalArgumentException if documentTypeName is a null or blank value
222 * @throws RiceIllegalArgumentException if customizerName is a null or blank value
223 */
224 @WebMethod(operationName = "getEnabledCustomizations")
225 @WebResult(name = "enabledCustomizations")
226 @XmlElementWrapper(name = "enabledCustomizations", required = true)
227 @XmlElement(name = "enabledCustomization", required = false)
228 Set<DocumentSearchCustomization> getEnabledCustomizations(
229 @WebParam(name = "documentTypeName") String documentTypeName,
230 @WebParam(name = "customizerName") String customizerName
231 ) throws RiceIllegalArgumentException;
232
233 }