| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| DocumentSearchCriteriaContract |
|
| 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.api.document.search; | |
| 17 | ||
| 18 | import org.joda.time.DateTime; | |
| 19 | import org.kuali.rice.kew.api.document.DocumentStatus; | |
| 20 | import org.kuali.rice.kew.api.document.DocumentStatusCategory; | |
| 21 | ||
| 22 | import java.util.List; | |
| 23 | import java.util.Map; | |
| 24 | ||
| 25 | /** | |
| 26 | * Defines the contract for criteria used to perform lookups of workflow document data. None of the elements that can | |
| 27 | * be defined on the criteria are required. Therefore, any method on this class may return a null value, though in the | |
| 28 | * case of collections, an empty collection will be returned instead. | |
| 29 | * | |
| 30 | * <p>In general, the different values on the criteria allow the standard lookup "operators" as defined by | |
| 31 | * {@link org.kuali.rice.core.api.search.SearchOperator} unless otherwise noted. The primary place where this differs | |
| 32 | * is on principal name-based criteria (see below).</p> | |
| 33 | * | |
| 34 | * <p><On criteria which contains a principal name, the rules are as follows:</p> | |
| 35 | * | |
| 36 | * <ul> | |
| 37 | * <li>only literal principal names that resolve to a valid principal are allowed</li> | |
| 38 | * <li>however, if the principal names don't resolve to valid prinicpals, this simply means the lookup will return no results</li> | |
| 39 | * <li>"!" is allowed before a principal name</li> | |
| 40 | * <li>when wanting to search for more than one principal, "|" and "&&" is allowed though they cannot be used together</li> | |
| 41 | * </ul> | |
| 42 | * | |
| 43 | * <p>Wildcards, ranges, and other "inequality" operators (such as ">", "<", etc.) are not permitted on principal names.</p> | |
| 44 | * | |
| 45 | * <p>In cases where a criteria element takes a list of values, this should be treated as an implicit "OR" by the lookup | |
| 46 | * implementation. This is true of document attribute values as well, which are passed as a map keyed off the | |
| 47 | * document attribute name with a list of values representing the document attribute values to be searched for.</p> | |
| 48 | * | |
| 49 | * <p>The optional "save name" on the search defines a name under which the criteria can be stored so that it can be | |
| 50 | * recalled and reused later.</p> | |
| 51 | * | |
| 52 | * @author Kuali Rice Team (rice.collab@kuali.org) | |
| 53 | */ | |
| 54 | public interface DocumentSearchCriteriaContract { | |
| 55 | ||
| 56 | /** | |
| 57 | * Returns the document id criteria to search against when executing the document search. | |
| 58 | * | |
| 59 | * @return the document id criteria | |
| 60 | */ | |
| 61 | String getDocumentId(); | |
| 62 | ||
| 63 | /** | |
| 64 | * Returns an unmodifiable list of document statuses to search against when executing the document search. If there | |
| 65 | * is more than one of these, then the search should treat this as an "OR" case (i.e. search for documents with one | |
| 66 | * or more of these statuses). | |
| 67 | * | |
| 68 | * @return the document status criteria | |
| 69 | */ | |
| 70 | List<DocumentStatus> getDocumentStatuses(); | |
| 71 | ||
| 72 | /** | |
| 73 | * Returns an unmodifiable list of document status categories to search against when executing the document search. | |
| 74 | * If there is more than one of these, then the search should treat this as an "OR" case (i.e. search for documents | |
| 75 | * that have a status contained in one or more of these categories). | |
| 76 | * | |
| 77 | * @return the document status category criteria | |
| 78 | */ | |
| 79 | List<DocumentStatusCategory> getDocumentStatusCategories(); | |
| 80 | ||
| 81 | /** | |
| 82 | * Returns the document title criteria to search against when executing the document search. | |
| 83 | * | |
| 84 | * @return the title criteria | |
| 85 | */ | |
| 86 | String getTitle(); | |
| 87 | ||
| 88 | /** | |
| 89 | * Returns the application document id criteria to search against when executing the document search. | |
| 90 | * | |
| 91 | * @return the application document id criteria | |
| 92 | */ | |
| 93 | String getApplicationDocumentId(); | |
| 94 | ||
| 95 | /** | |
| 96 | * Returns the application document status criteria to search against when executing the document search. | |
| 97 | * | |
| 98 | * @return the application document status criteria | |
| 99 | */ | |
| 100 | String getApplicationDocumentStatus(); | |
| 101 | ||
| 102 | /** | |
| 103 | * Returns the criteria for the principal name of the document initiator to search against when executing the | |
| 104 | * document search. Follows the rules for principal name criteria (see class-level documentation). | |
| 105 | * | |
| 106 | * @return the initiator principal name criteria | |
| 107 | */ | |
| 108 | String getInitiatorPrincipalName(); | |
| 109 | ||
| 110 | /** | |
| 111 | * Returns the criteria for the principal name of a "viewer" of a document (someone who received an action request | |
| 112 | * related to the document) to search against when executing the document search. Follows the rules for principal | |
| 113 | * name criteria (see class-level documentation). | |
| 114 | * | |
| 115 | * @return the viewer principal name criteria | |
| 116 | */ | |
| 117 | String getViewerPrincipalName(); | |
| 118 | ||
| 119 | /** | |
| 120 | * Returns the criteria for the id of a group who is a "viewer" of a document (a group who received an action request | |
| 121 | * related to the document) to search against when executing the document search. Group id criteria follows rules | |
| 122 | * similar to principal name criteria: | |
| 123 | * | |
| 124 | * <ul> | |
| 125 | * <li>only literal group ids that resolve to a valid group are allowed</li> | |
| 126 | * <li>however, if the group ids don't resolve to valid groups, this simply means the search will return no results</li> | |
| 127 | * <li>"!" is allowed before a group id</li> | |
| 128 | * <li>when wanting to search on more than one viewer group id, use of "|" and "&&" is allowed, though they cannot be used together</li> | |
| 129 | * </ul> | |
| 130 | * | |
| 131 | * @return the viewer principal name criteria | |
| 132 | */ | |
| 133 | String getViewerGroupId(); | |
| 134 | ||
| 135 | /** | |
| 136 | * Returns the criteria for the principal name of an "approver" of a document (someone who took action against | |
| 137 | * the document) to search against when executing the document search. Follows the rules for principal name | |
| 138 | * criteria (see class-level documentation). | |
| 139 | * | |
| 140 | * @return the viewer principal name criteria | |
| 141 | */ | |
| 142 | String getApproverPrincipalName(); | |
| 143 | ||
| 144 | /** | |
| 145 | * Returns the route node name criteria to search against when executing the document search. By default this will | |
| 146 | * match only documents which are at the node with the given name, unless {@link #getRouteNodeLookupLogic()} returns | |
| 147 | * a non-null value that specifies different criteria for how the route node-based lookup should be performed. | |
| 148 | * | |
| 149 | * @return the route node name criteria | |
| 150 | */ | |
| 151 | String getRouteNodeName(); | |
| 152 | ||
| 153 | /** | |
| 154 | * Returns the logic that should be used when performing a document search against the route name. This essentially | |
| 155 | * allows for the criteria to specify whether or not it should look at documents which are currently before, exactly | |
| 156 | * at, or after the specified route node. This value only has an effect if the route node name is also defined | |
| 157 | * on this criteria. | |
| 158 | * | |
| 159 | * @return the route node lookup logic to use in conjunction with the route node name criteria | |
| 160 | */ | |
| 161 | RouteNodeLookupLogic getRouteNodeLookupLogic(); | |
| 162 | ||
| 163 | /** | |
| 164 | * Returns the document type name criteria to search against when executing the document search. If the document | |
| 165 | * type name matches a single document type exactly, this might trigger document search customizations which are | |
| 166 | * tied to that document type (assuming the document type has such customizations configured). | |
| 167 | * | |
| 168 | * <p>In order for the map of document attribute values to be properly searchable, this document type name should | |
| 169 | * result to a valid document type. This is because the document type itself defines information about custom | |
| 170 | * document attributes and the parameters around how searches against those attributes can be executed.</p> | |
| 171 | * | |
| 172 | * <p>Note that searches against a document type name should be document type hierarchy-aware. Meaning that the | |
| 173 | * search should also return results for any documents that have document types that are children of the specified | |
| 174 | * document type name (assuming that the specified document type name is valid and not wildcarded at all).</p> | |
| 175 | * | |
| 176 | * @return the document type name criteria | |
| 177 | */ | |
| 178 | String getDocumentTypeName(); | |
| 179 | ||
| 180 | /** | |
| 181 | * Returns an optional list of additional document type name criteria against which to search. The search should | |
| 182 | * effectively return all documents that have a document type name within the set of the main document type name on | |
| 183 | * the criteria as well as any additional document type names. | |
| 184 | * | |
| 185 | * <p>As with {@link #getDocumentTypeName()}, the additional document type name criteria is document type hierarchy | |
| 186 | * aware.</p> | |
| 187 | * | |
| 188 | * @return the list of additional document type names to use on the search criteria | |
| 189 | */ | |
| 190 | List<String> getAdditionalDocumentTypeNames(); | |
| 191 | ||
| 192 | /** | |
| 193 | * Returns the inclusive lower end of the date created criteria to search against when executing the document search. | |
| 194 | * | |
| 195 | * @return the date created "from" criteria | |
| 196 | */ | |
| 197 | DateTime getDateCreatedFrom(); | |
| 198 | ||
| 199 | /** | |
| 200 | * Returns the inclusive upper end of the date created criteria to search against when executing the document search. | |
| 201 | * | |
| 202 | * @return the date created "to" criteria | |
| 203 | */ | |
| 204 | DateTime getDateCreatedTo(); | |
| 205 | ||
| 206 | /** | |
| 207 | * Returns the inclusive lower end of the date last modified criteria to search against when executing the document search. | |
| 208 | * | |
| 209 | * @return the date last modified "from" criteria | |
| 210 | */ | |
| 211 | DateTime getDateLastModifiedFrom(); | |
| 212 | ||
| 213 | /** | |
| 214 | * Returns the inclusive upper end of the date last modified criteria to search against when executing the document search. | |
| 215 | * | |
| 216 | * @return the date last modified "to" criteria | |
| 217 | */ | |
| 218 | DateTime getDateLastModifiedTo(); | |
| 219 | ||
| 220 | /** | |
| 221 | * Returns the inclusive lower end of the date approved criteria to search against when executing the document search. | |
| 222 | * | |
| 223 | * @return the date approved "from" criteria | |
| 224 | */ | |
| 225 | DateTime getDateApprovedFrom(); | |
| 226 | ||
| 227 | /** | |
| 228 | * Returns the inclusive upper end of the date approved criteria to search against when executing the document search. | |
| 229 | * | |
| 230 | * @return the date approved "tp" criteria | |
| 231 | */ | |
| 232 | DateTime getDateApprovedTo(); | |
| 233 | ||
| 234 | /** | |
| 235 | * Returns the inclusive lower end of the date finalized criteria to search against when executing the document search. | |
| 236 | * | |
| 237 | * @return the date finalized "from" criteria | |
| 238 | */ | |
| 239 | DateTime getDateFinalizedFrom(); | |
| 240 | ||
| 241 | /** | |
| 242 | * Returns the inclusive upper end of the date finalized criteria to search against when executing the document search. | |
| 243 | * | |
| 244 | * @return the date finalized "to" criteria | |
| 245 | */ | |
| 246 | DateTime getDateFinalizedTo(); | |
| 247 | ||
| 248 | /** | |
| 249 | * Returns the inclusive lower end of the date of application document status change criteria to search against when executing the document search. | |
| 250 | * | |
| 251 | * @return the date application document status changed "from" criteria | |
| 252 | */ | |
| 253 | DateTime getDateApplicationDocumentStatusChangedFrom(); | |
| 254 | ||
| 255 | /** | |
| 256 | * Returns the inclusive upper end of the date of application document status change criteria to search against when executing the document search. | |
| 257 | * | |
| 258 | * @return the date application document status changed "to" criteria | |
| 259 | */ | |
| 260 | DateTime getDateApplicationDocumentStatusChangedTo(); | |
| 261 | ||
| 262 | /** | |
| 263 | * Returns a map of document attribute values to search against when executing the document search. The key of the | |
| 264 | * map is the name of the document attribute, while the list of values contains values of those attributes to search | |
| 265 | * against. These individual attribute values support the different search operations where appropriate. The | |
| 266 | * resulting List of criteria values however should ultimately be "or"-ed together when executing the document | |
| 267 | * search. | |
| 268 | * | |
| 269 | * <p>In order for the document attribute values to be processed as part of the criteria during the search, the | |
| 270 | * {@link #getDocumentTypeName()} must return a valid name of a document type which is configured to understand the | |
| 271 | * attributes passed as part of the document attribute values map.</p> | |
| 272 | * @return | |
| 273 | */ | |
| 274 | Map<String, List<String>> getDocumentAttributeValues(); | |
| 275 | ||
| 276 | /** | |
| 277 | * Return the name under which to save this criteria so that it can be recalled and used again in the future. If no | |
| 278 | * save name is specified, then this criteria will not be saved for future use. | |
| 279 | * @return | |
| 280 | */ | |
| 281 | String getSaveName(); | |
| 282 | ||
| 283 | /** | |
| 284 | * Returns the 0-based index in the result set at which to start returning results from a document search which is | |
| 285 | * performed using this criteria. If not specified, results from the search should be returned starting at the | |
| 286 | * beginning of the result set. If this index is larger then the total number of results returned by the actual | |
| 287 | * search, then no values should be returned. | |
| 288 | * | |
| 289 | * @return the index in the result set at which to begin returning results | |
| 290 | */ | |
| 291 | Integer getStartAtIndex(); | |
| 292 | ||
| 293 | /** | |
| 294 | * Returns the requested maximum number of documents that should be returned from a document search performed using this | |
| 295 | * criteria. If not specified, it is up to the document search implementation to decide how many results to return. | |
| 296 | * It is likely in such cases that the implementation will use a default result cap in order to prevent too many | |
| 297 | * documents from being returned. | |
| 298 | * | |
| 299 | * <p>It is important to note that this value is meant simply as a request to the document search for the number of | |
| 300 | * results to return. The implementation may return fewer results then requested if it decides to impose it's own | |
| 301 | * internal cap on results.</p> | |
| 302 | * | |
| 303 | * @return the requested number of maximum document results that should be returned from the search | |
| 304 | */ | |
| 305 | Integer getMaxResults(); | |
| 306 | ||
| 307 | } |