001    /**
002     * Copyright 2005-2013 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     */
016    package org.kuali.rice.kew.framework.document.search;
017    
018    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
019    import org.kuali.rice.core.api.uif.RemotableAttributeError;
020    import org.kuali.rice.kew.api.KewApiConstants;
021    import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
022    import org.kuali.rice.kew.api.document.search.DocumentSearchResult;
023    import org.kuali.rice.kew.framework.KewFrameworkServiceLocator;
024    
025    import javax.jws.WebMethod;
026    import javax.jws.WebParam;
027    import javax.jws.WebResult;
028    import javax.jws.WebService;
029    import javax.jws.soap.SOAPBinding;
030    import javax.xml.bind.annotation.XmlElement;
031    import javax.xml.bind.annotation.XmlElementWrapper;
032    import java.util.List;
033    import java.util.Set;
034    
035    /**
036     * A remotable service which handles processing of a client application's document search customizations.
037     *
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     */
040    @WebService(name = KewFrameworkServiceLocator.DOCUMENT_SEARCH_CUSTOMIZATION_HANDLER_SERVICE, targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0)
041    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
042    public interface DocumentSearchCustomizationHandlerService {
043    
044        /**
045         * Retrieves the custom {@code DocumentSearchCriteriaConfiguration} to use for the document type with the given name
046         * and for the given list of searchable attributes.  This method is invoked by the document search implementation in
047         * order to help assemble the final criteria attribute fields (which includes configuration for all searchable
048         * attributes on the document type).
049         *
050         * <p>The given list of searchable attribute names may not necessary include all searchable attribute on the
051         * document type, only those which need to be handled by the client application hosting this service.  This
052         * determination is made based on the applicationId which is associated with the searchable attribute.
053         * Implementations of this method will assemble this information by invoking the
054         * {@link org.kuali.rice.kew.framework.document.attribute.SearchableAttribute#getSearchFields(org.kuali.rice.kew.api.extension.ExtensionDefinition, String)}
055         * methods on each of the requested searchable attributes.</p>
056         *
057         * @param documentTypeName the document type name for which to retrieve the configuration
058         * @param searchableAttributeNames the names of the searchable attributes from which to assemble criteria
059         * configuration which are owned by the application hosting this service
060         *
061         * @return the custom document search criteria configuration for the given searchable attribute, or null if no
062         * custom configuration is needed
063         * 
064         * @throws RiceIllegalArgumentException if documentTypeName is a null or blank value
065         */
066        @WebMethod(operationName = "getDocumentSearchConfiguration")
067            @WebResult(name = "documentSearchConfiguration")
068            @XmlElement(name = "documentSearchConfiguration", required = false)
069        DocumentSearchCriteriaConfiguration getDocumentSearchConfiguration(
070                @WebParam(name = "documentTypeName") String documentTypeName,
071                @WebParam(name = "searchableAttributeNames") List<String> searchableAttributeNames) throws RiceIllegalArgumentException;
072    
073        /**
074         * Executes validation of the given {@code DocumentSearchCriteria} against the searchable attributes with the given
075         * names..  This method is invoked by the document search implementation in order to allow for validation to be
076         * customized via custom searchable attribute implementations.
077         *
078         * <p>The given list of searchable attribute names may not necessary include all searchable attribute on the
079         * document type, only those which need to be handled by the client application hosting this service.  This
080         * determination is made based on the applicationId which is associated with the searchable attribute.
081         * Implementations of this method execute this validationby invoking the
082         * {@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)}
083         * methods on each of the requested searchable attributes.</p>
084         *
085         * @param documentSearchCriteria the criteria against which to perform the validation
086         * @param searchableAttributeNames the names of the searchable attributes against which to execute validation which
087         * are owned by the application hosting this service
088         *
089         * @return a list or remotable attribute errors in the case that any validation errors were raised by the
090         * requested searchable attributes
091         *
092         * @throws RiceIllegalArgumentException if documentTypeName is a null or blank value
093         */
094        @WebMethod(operationName = "validateCriteria")
095        @WebResult(name = "errors")
096        @XmlElementWrapper(name = "errors", required = true)
097        @XmlElement(name = "errors", required = false)
098        List<RemotableAttributeError> validateCriteria(@WebParam(name = "documentSearchCriteria") DocumentSearchCriteria documentSearchCriteria,
099                @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    }