| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| DocumentSearchCustomizer |
|
| 1.0;1 |
| 1 | /** | |
| 2 | * Copyright 2005-2011 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.kew.api.document.search.DocumentSearchCriteria; | |
| 19 | import org.kuali.rice.kew.api.document.search.DocumentSearchResult; | |
| 20 | ||
| 21 | import java.util.List; | |
| 22 | ||
| 23 | /** | |
| 24 | * Provides various mechanisms for an application to customize the behavior of the Document Search functionality for | |
| 25 | * their document types. Client applications should provide implementations of this interface if they need to | |
| 26 | * enact some of these customizations on document searches. These customizers then get mapped to the appropriate | |
| 27 | * document types via the KEW extension framework (see | |
| 28 | * {@link org.kuali.rice.kew.api.extension.ExtensionRepositoryService}). | |
| 29 | * | |
| 30 | * <p>The customization functionality provided by this interface includes:</p> | |
| 31 | * | |
| 32 | * <ul> | |
| 33 | * <li>The ability to customize document search criteria before it gets submitted.</li> | |
| 34 | * <li>The ability to customize how document search criteria is cleared.</li> | |
| 35 | * <li>The ability to customize how result data is processed and presented.</li> | |
| 36 | * </ul> | |
| 37 | * | |
| 38 | * <p>Only one {@code DocumentSearchCustomizer} is supported for a given document type. It is important to note however | |
| 39 | * that it is permitted that an implementation of this interface could be tied to more than one document type via the | |
| 40 | * extension framework. This is why information about the specific document type for which the customizations is being | |
| 41 | * applied is passed to all methods on this interface (note that the document type information is available from the | |
| 42 | * {@code DocumentSearchCriteria} as well.</p> | |
| 43 | * | |
| 44 | * <p>Furthermore, the customization hooks afforded by this interface will only be executed when a valid document type | |
| 45 | * has been specified as input to the document search. This is because the customizer is tied to the document type and | |
| 46 | * the document search must therefore be able to resolve a valid document type from the user-supplied criteria in order | |
| 47 | * to perform these customizations.</p> | |
| 48 | * | |
| 49 | * <p>Since some of the operations on this component could potentially add expense to the overall search process in the | |
| 50 | * cases where customization is only done on certain document types or only certain customization features are being | |
| 51 | * utilized, this interface provides for a set of boolean operations which indicate which customization | |
| 52 | * features should be activated by the document search framework for a given document type. It's expected that KEW | |
| 53 | * will check each of these flags prior to invoking the corresponding method that it "gaurds" and, if the customization | |
| 54 | * flag is disabled, it should refrain from executing that method.</p> | |
| 55 | * | |
| 56 | * <p></p>Implementations of this interface are expected to return "true" for any of these operations for which they | |
| 57 | * provide a custom implementation. <strong>It is important to note that callers are permitted to cache the results | |
| 58 | * returned from these boolean methods for an unspecified length of time.</strong> So if there is any possibility that, | |
| 59 | * for a given document type, the implementation might perform a particular customization, then "true" should be | |
| 60 | * returned from the appropriate boolean method.</p> | |
| 61 | * | |
| 62 | * @author Kuali Rice Team (rice.collab@kuali.org) | |
| 63 | */ | |
| 64 | public interface DocumentSearchCustomizer { | |
| 65 | ||
| 66 | /** | |
| 67 | * Performs customization on the given document search criteria. This method should return the customized version | |
| 68 | * of the criteria, or null if no customizations were performed. This customization is invoked prior the actual | |
| 69 | * search being executed, and the resulting customized criteria is what gets passed to the search implementation. | |
| 70 | * It is also invoked in situtations where the document search is performed via the api or via the user interface. | |
| 71 | * | |
| 72 | * <p>It is guaranteed that the document type name on the given criteria will never be null and will always | |
| 73 | * represent a valid document type.</p> | |
| 74 | * | |
| 75 | * @param documentSearchCriteria the original criteria against which to perform customization, will never be null | |
| 76 | * | |
| 77 | * @return the customized criteria, or null if no customization was performed | |
| 78 | */ | |
| 79 | DocumentSearchCriteria customizeCriteria(DocumentSearchCriteria documentSearchCriteria); | |
| 80 | ||
| 81 | /** | |
| 82 | * Performs a customized "clear" of the given document search criteria. Clearing of the criteria is typically | |
| 83 | * invoked whenever the user of the document search user interface clicks the "clear" button. By default all of | |
| 84 | * the search criteria is cleared, but this method allows for certain criteria data to be preserved on a clear if | |
| 85 | * desired. | |
| 86 | * | |
| 87 | * <p>A common use of this feature is to preserve the document type that has been selected when clearing criteria | |
| 88 | * for a customized document search. | |
| 89 | * | |
| 90 | * <p>It is guaranteed that the document type name on the given criteria will never be null and will always | |
| 91 | * represent a valid document type.</p> | |
| 92 | * | |
| 93 | * @param documentSearchCriteria the criteria to clear | |
| 94 | * | |
| 95 | * @return the cleared criteria, or null if no custom criteria clearing was performed | |
| 96 | */ | |
| 97 | DocumentSearchCriteria customizeClearCriteria(DocumentSearchCriteria documentSearchCriteria); | |
| 98 | ||
| 99 | /** | |
| 100 | * Performs customization of the given list of document search results. This method is invoked after the search is | |
| 101 | * executed but before results are returned to the caller. It is executed when a document search is executed via | |
| 102 | * the api or from the document search user interface. | |
| 103 | * | |
| 104 | * <p>This method returns a {@code DocumentSearchResultValues} object which contains a list of | |
| 105 | * {@link DocumentSearchResultValue} objects. Each of these result values maps to a specific document id and | |
| 106 | * contains a list of {@link org.kuali.rice.kew.api.document.attribute.DocumentAttribute} values which can be used | |
| 107 | * to modify existing document attributes or create new ones that are included as part of the search results. It | |
| 108 | * is important to note that in order for these custom attribute values to be displayed in the result set in the | |
| 109 | * document search user interface, there must be a corresponding entry in the | |
| 110 | * {@link DocumentSearchResultSetConfiguration} returned by the | |
| 111 | * {@link #customizeResultSetConfiguration(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)} method | |
| 112 | * on this customizer implementation.</p> | |
| 113 | * | |
| 114 | * <p>It is permissible that implementations of this method may not return result values for all of the document | |
| 115 | * provided in the given list of document search results. It is important to note however that ommision from the | |
| 116 | * returned result values does not filter or remove the result from the search results. Generally speaking, this | |
| 117 | * method cannot be used to remove results from the result set.</p> | |
| 118 | * | |
| 119 | * <p>It is guaranteed that the document type name on the given criteria will never be null and will always | |
| 120 | * represent a valid document type.</p> | |
| 121 | * | |
| 122 | * @param documentSearchCriteria the criteria against which the document search was executed | |
| 123 | * @param defaultResults the results that were returned by the execution of the document search | |
| 124 | * | |
| 125 | * @return customized search result values for any of the document results requiring custom values, or null if no | |
| 126 | * customization was performed | |
| 127 | */ | |
| 128 | DocumentSearchResultValues customizeResults(DocumentSearchCriteria documentSearchCriteria, List<DocumentSearchResult> defaultResults); | |
| 129 | ||
| 130 | /** | |
| 131 | * Performs customization of what result fields should be displayed in the result set. Allows for hiding of | |
| 132 | * standard fields, addition of custom fields, and the ability to override the default behavior of searchable | |
| 133 | * attributes that are defined for the document type. Generally speaking, this controls which "columns" of data are | |
| 134 | * displayed in the document search results. | |
| 135 | * | |
| 136 | * <p>This method is only invoked by the document search user interface whenever it is rendering document search | |
| 137 | * results. It is not invoked when invoking document search using only the api.</p> | |
| 138 | * | |
| 139 | * <p>It is guaranteed that the document type name on the given criteria will never be null and will always | |
| 140 | * represent a valid document type.</p> | |
| 141 | * | |
| 142 | * @param documentSearchCriteria the criteria against which the document search was executed | |
| 143 | * @return the customized result set configuration, or null if no customization was performed | |
| 144 | */ | |
| 145 | DocumentSearchResultSetConfiguration customizeResultSetConfiguration(DocumentSearchCriteria documentSearchCriteria); | |
| 146 | ||
| 147 | /** | |
| 148 | * Indicates if the {@link #customizeCriteria(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)} on | |
| 149 | * this customizer should be invoked for the document type with the given name. The caller of this method is | |
| 150 | * permitted to cache the return value for a length of time of their choosing. | |
| 151 | * | |
| 152 | * @param documentTypeName the name of the document type against which this customizer is being applied | |
| 153 | * @return true if the customization method should be executed, false otherwise | |
| 154 | */ | |
| 155 | boolean isCustomizeCriteriaEnabled(String documentTypeName); | |
| 156 | ||
| 157 | /** | |
| 158 | * Indicates if the {@link #customizeClearCriteria(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)} | |
| 159 | * on this customizer should be invoked for the document type with the given name. The caller of this method is | |
| 160 | * permitted to cache the return value for a length of time of their choosing. | |
| 161 | * | |
| 162 | * @param documentTypeName the name of the document type against which this customizer is being applied | |
| 163 | * @return true if the customization method should be executed, false otherwise | |
| 164 | */ | |
| 165 | boolean isCustomizeClearCriteriaEnabled(String documentTypeName); | |
| 166 | ||
| 167 | /** | |
| 168 | * Indicates if the {@link #customizeResults(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria, java.util.List)} | |
| 169 | * on this customizer should be invoked for the document type with the given name. The caller of this method is | |
| 170 | * permitted to cache the return value for a length of time of their choosing. | |
| 171 | * | |
| 172 | * @param documentTypeName the name of the document type against which this customizer is being applied | |
| 173 | * @return true if the customization method should be executed, false otherwise | |
| 174 | */ | |
| 175 | boolean isCustomizeResultsEnabled(String documentTypeName); | |
| 176 | ||
| 177 | /** | |
| 178 | * Indicates if the {@link #customizeResultSetConfiguration(org.kuali.rice.kew.api.document.search.DocumentSearchCriteria)} | |
| 179 | * on this customizer should be invoked for the document type with the given name. The caller of this method is | |
| 180 | * permitted to cache the return value for a length of time of their choosing. | |
| 181 | * | |
| 182 | * @param documentTypeName the name of the document type against which this customizer is being applied | |
| 183 | * @return true if the customization method should be executed, false otherwise | |
| 184 | */ | |
| 185 | boolean isCustomizeResultSetFieldsEnabled(String documentTypeName); | |
| 186 | ||
| 187 | } |