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.api; 17 18 import java.util.List; 19 import java.util.Set; 20 21 import org.kuali.rice.core.api.uif.RemotableAttributeErrorContract; 22 import org.kuali.rice.kew.api.action.ActionRequest; 23 import org.kuali.rice.kew.api.action.ActionRequestType; 24 import org.kuali.rice.kew.api.action.ActionTaken; 25 import org.kuali.rice.kew.api.action.ActionType; 26 import org.kuali.rice.kew.api.action.AdHocRevoke; 27 import org.kuali.rice.kew.api.action.AdHocToGroup; 28 import org.kuali.rice.kew.api.action.AdHocToPrincipal; 29 import org.kuali.rice.kew.api.action.MovePoint; 30 import org.kuali.rice.kew.api.action.RequestedActions; 31 import org.kuali.rice.kew.api.action.ReturnPoint; 32 import org.kuali.rice.kew.api.action.ValidActions; 33 import org.kuali.rice.kew.api.document.Document; 34 import org.kuali.rice.kew.api.document.DocumentContent; 35 import org.kuali.rice.kew.api.document.DocumentContentUpdate; 36 import org.kuali.rice.kew.api.document.DocumentContract; 37 import org.kuali.rice.kew.api.document.DocumentDetail; 38 import org.kuali.rice.kew.api.document.DocumentStatus; 39 import org.kuali.rice.kew.api.document.attribute.WorkflowAttributeDefinition; 40 import org.kuali.rice.kew.api.document.node.RouteNodeInstance; 41 42 /** 43 * WorkflowDocument is the core client API for interaction with the Kuali Enterprise Workflow system. 44 * WorkflowDocument is an object-oriented facade/bridge to stateless KEW APIs, which maintains document 45 * state, and flushes updates as actions are taken. 46 * 47 * WorkflowDocuments cannot be constructed directly, create them via the {@link WorkflowDocumentFactory} 48 * 49 * <p><b>This class is *not* thread safe.</b> If you are operating on the same document, be sure to synchronize 50 * access to the {@link WorkflowDocument} instance. If you are operating on different documents, obtain a distinct 51 * instance from the {@link WorkflowDocumentFactory}.</p> 52 */ 53 public interface WorkflowDocument extends DocumentContract { 54 /** 55 * Returns the principalId with which this WorkflowDocument was constructed 56 * @return the principalId with which this WorkflowDocument was constructed 57 */ 58 String getPrincipalId(); 59 /** 60 * Switches the principalId under which WorkflowDocument API are performed. 61 * This method necessitates clearing of any state associated with the principalId 62 * such as requested and valid actions. 63 * @param principalId the new principalId 64 */ 65 void switchPrincipal(String principalId); 66 67 /** 68 * Returns a read-only view of the underlying document meta-data 69 * @return a read-only view of the underlying document meta-data 70 */ 71 Document getDocument(); 72 73 /** 74 * Returns a read-only view of the underlying mutable document content 75 * @return a read-only view of the underlying mutable document content 76 */ 77 DocumentContent getDocumentContent(); 78 79 /** 80 * Returns the currently set application content. 81 * @return the currently set application content. 82 * @see #getDocumentContent() 83 */ 84 String getApplicationContent(); 85 86 /** 87 * Sets the document title. The update will be committed with the next document operation. 88 * @param title the document title to set 89 */ 90 void setTitle(String title); 91 92 /** 93 * Sets the application document id. The update will be committed with the next document operation. 94 * @param applicationDocumentId the application document id to set. 95 */ 96 void setApplicationDocumentId(String applicationDocumentId); 97 98 /** 99 * Sets the application document status. The update will be committed with the next document operation. 100 * @param applicationDocumentStatus the application document status to set 101 */ 102 void setApplicationDocumentStatus(String applicationDocumentStatus); 103 104 /** 105 * Sets the document's application content. The update will be committed with the next document operation. 106 * @param applicationContent the document application content to set 107 */ 108 void setApplicationContent(String applicationContent); 109 110 /** 111 * Sets the document's attribute content. The update will be committed with the next document operation. 112 * @param attributeContent the document attribute content to set 113 */ 114 void setAttributeContent(String attributeContent); 115 /** 116 * Clears the document's attribute content. The update will be committed with the next document operation. 117 */ 118 void clearAttributeContent(); 119 /** 120 * Returns the currently set document attribute content. 121 */ 122 String getAttributeContent(); 123 124 /** 125 * Adds a workflow attribute definition. The update will be committed with the next document operation. 126 * @param attributeDefinition the WorkflowAttributeDefinition to add 127 */ 128 void addAttributeDefinition(WorkflowAttributeDefinition attributeDefinition); 129 /** 130 * Removes a workflow attribute definition. The update will be committed with the next document operation. 131 * Equality is determined on the basis of WorkflowAttributeDefinition fields. 132 * @see org.kuali.rice.core.api.mo.AbstractDataTransferObject#equals(Object) 133 * @param attributeDefinition the WorkflowAttributeDefinition to remove 134 */ 135 void removeAttributeDefinition(WorkflowAttributeDefinition attributeDefinition); 136 /** 137 * Clears workflow attribute definitions. The update will be committed with the next document operation. 138 */ 139 void clearAttributeDefinitions(); 140 /** 141 * Returns the currently set workflow attribute definitions 142 * @return the currently set workflow attribute definitions 143 */ 144 List<WorkflowAttributeDefinition> getAttributeDefinitions(); 145 146 /** 147 * Sets the document's searchable content. The update will be committed with the next document operation. 148 * @param searchableContent the searchable content to set 149 */ 150 public void setSearchableContent(String searchableContent); 151 /** 152 * Adds a searchable workflow attribute definition. The update will be committed with the next document operation. 153 * @param searchableDefinition the WorkflowAttributeDefinition to add 154 */ 155 void addSearchableDefinition(WorkflowAttributeDefinition searchableDefinition); 156 /** 157 * Removes a searchable workflow attribute definition. The update will be committed with the next document operation. 158 * Equality is determined on the basis of WorkflowAttributeDefinition fields. 159 * @see org.kuali.rice.core.api.mo.AbstractDataTransferObject#equals(Object) 160 * @param searchableDefinition the WorkflowAttributeDefinition to remove 161 */ 162 void removeSearchableDefinition(WorkflowAttributeDefinition searchableDefinition); 163 /** 164 * Clears searchable workflow attribute definitions. The update will be committed with the next document operation. 165 */ 166 void clearSearchableDefinitions(); 167 /** 168 * Clears the searchable content. The update will be committed with the next document operation. 169 */ 170 void clearSearchableContent(); 171 /** 172 * Returns the currently set searchable workflow attribute definitions 173 * @return the currently set searchable workflow attribute definitions 174 */ 175 List<WorkflowAttributeDefinition> getSearchableDefinitions(); 176 177 /** 178 * Sets a workflow variable. The update will be committed with the next document operation. 179 * @see #getVariables() 180 * @param name variable name 181 * @param value variable value 182 */ 183 void setVariable(String name, String value); 184 /** 185 * Gets a workflow variable value. 186 * @see #getVariables() 187 * @param name variable name 188 */ 189 String getVariableValue(String name); 190 /** 191 * Sets the workflow variable that specifies that this principal should receive future requests 192 * @see KewApiConstants#RECEIVE_FUTURE_REQUESTS_BRANCH_STATE_KEY 193 * @see KewApiConstants#RECEIVE_FUTURE_REQUESTS_BRANCH_STATE_VALUE 194 */ 195 void setReceiveFutureRequests(); 196 /** 197 * Sets the workflow variable that specifies that this principal should NOT receive future requests 198 * @see KewApiConstants#RECEIVE_FUTURE_REQUESTS_BRANCH_STATE_KEY 199 * @see KewApiConstants#DONT_RECEIVE_FUTURE_REQUESTS_BRANCH_STATE_VALUE 200 */ 201 void setDoNotReceiveFutureRequests(); 202 /** 203 * Sets the workflow variable that specifies that ... 204 * TODO: what does this do? (org.kuali.rice.kew.util.FutureRequestDocumentStateManager#clearStateFromDocument) 205 * @see KewApiConstants#RECEIVE_FUTURE_REQUESTS_BRANCH_STATE_KEY 206 * @see KewApiConstants#CLEAR_FUTURE_REQUESTS_BRANCH_STATE_VALUE 207 */ 208 void setClearFutureRequests(); 209 /** 210 * Returns whether the workflow variable that specifies that this principal should receive future requests has been set 211 * @see #setReceiveFutureRequests() 212 * @return whether the workflow variable that specifies that this principal should receive future requests has been set 213 */ 214 String getReceiveFutureRequestsValue(); 215 /** 216 * Returns whether the workflow variable that specifies that this principal should NOT receive future requests has been set 217 * @see #setDoNotReceiveFutureRequests() 218 * @return whether the workflow variable that specifies that this principal should NOT receive future requests has been set 219 */ 220 String getDoNotReceiveFutureRequestsValue(); 221 /** 222 * Returns whether the workflow variable that specifies that ... has been set 223 * @return whether the workflow variable that specifies that ... has been set 224 */ 225 String getClearFutureRequestsValue(); 226 227 /** 228 * Validates a workflow attribute definition and returns a list of validation errors. 229 * This action is stateless and does not cause a commit of document updates. 230 * 231 * Implementation note: this is currently only used by EDL. 232 * 233 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#validateWorkflowAttributeDefinition(org.kuali.rice.kew.api.document.attribute.WorkflowAttributeDefinition) 234 * @param attributeDefinition the workflow attribute definition to validate 235 * @return list of attribute validation errors 236 */ 237 List<? extends RemotableAttributeErrorContract> validateAttributeDefinition(WorkflowAttributeDefinition attributeDefinition); 238 239 /** 240 * Return the list of root action requests on the document. 241 * @return the list of root action requests on the document. 242 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getRootActionRequests(String) 243 */ 244 List<ActionRequest> getRootActionRequests(); 245 246 /** 247 * Return the list of past actions taken on the document 248 * @return the list of past actions taken on the document 249 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getActionsTaken(String) 250 */ 251 List<ActionTaken> getActionsTaken(); 252 253 /** 254 * Returns the list of valid actions on this document for the current user 255 * @return the list of valid actions on this document for the current user 256 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#determineValidActions(String, String) 257 */ 258 ValidActions getValidActions(); 259 260 /** 261 * Returns the list of requested actions on this document for the current user 262 * @return the list of requested actions on this document for the current user 263 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#determineRequestedActions(String, String) 264 */ 265 RequestedActions getRequestedActions(); 266 267 /** 268 * Saves the document, commits updates. 269 * @param annotation the document action annotation 270 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#save(org.kuali.rice.kew.api.action.DocumentActionParameters) 271 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 272 */ 273 void saveDocument(String annotation); 274 /** 275 * Routes the document, commits updates. 276 * @param annotation the document action annotation 277 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#route(org.kuali.rice.kew.api.action.DocumentActionParameters) 278 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 279 */ 280 void route(String annotation); 281 /** 282 * Completes the document, commits updates. 283 * @param annotation the document action annotation 284 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#complete(org.kuali.rice.kew.api.action.DocumentActionParameters) 285 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 286 */ 287 void complete(String annotation); 288 /** 289 * Disapproves the document, commits updates. 290 * @param annotation the document action annotation 291 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#route(org.kuali.rice.kew.api.action.DocumentActionParameters) 292 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 293 */ 294 void disapprove(String annotation); 295 /** 296 * Approves the document, commits updates. 297 * @param annotation the document action annotation 298 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#approve(org.kuali.rice.kew.api.action.DocumentActionParameters) 299 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 300 */ 301 void approve(String annotation); 302 /** 303 * Approves the document, commits updates. 304 * @param annotation the document action annotation 305 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#approve(org.kuali.rice.kew.api.action.DocumentActionParameters) 306 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 307 */ 308 void cancel(String annotation); 309 /** 310 * Recalls the document, commits updates. 311 * @since 2.1 312 * @param annotation the document action annotation 313 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#approve(org.kuali.rice.kew.api.action.DocumentActionParameters) 314 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 315 */ 316 void recall(String annotation, boolean cancel); 317 /** 318 * Cancels the document, commits updates. 319 * @param annotation the document action annotation 320 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#cancel(org.kuali.rice.kew.api.action.DocumentActionParameters) 321 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 322 */ 323 void blanketApprove(String annotation); 324 /** 325 * Blanket-approves the document, commits updates. 326 * @param annotation the document action annotation 327 * @param nodeNames a set of node names to which to blanket approve the given document 328 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#blanketApproveToNodes(org.kuali.rice.kew.api.action.DocumentActionParameters, java.util.Set) 329 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 330 */ 331 void blanketApprove(String annotation, String... nodeNames); 332 /** 333 * Save the document data without affecting routing, commits updates. 334 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#saveDocumentData(org.kuali.rice.kew.api.action.DocumentActionParameters) 335 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 336 */ 337 void saveDocumentData(); 338 /** 339 * Acknowledges the document, commits updates. 340 * @param annotation the document action annotation 341 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#acknowledge(org.kuali.rice.kew.api.action.DocumentActionParameters) 342 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 343 */ 344 void acknowledge(String annotation); 345 /** 346 * Clears an outstanding FYI on the document, commits updates. 347 * @param annotation the document action annotation 348 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#clearFyi(org.kuali.rice.kew.api.action.DocumentActionParameters) 349 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 350 */ 351 void fyi(String annotation); 352 /** 353 * Clears an outstanding FYI on the document without an annotation, commits updates. 354 * @see #fyi(String) 355 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 356 */ 357 void fyi(); 358 /** 359 * Deletes the document. Any pending updates are <b>NOT</b> committed, they are discarded. 360 * After deletion this WorkflowDocument object will no longer be valid, and any operations 361 * that interact with the workflow system will throws an {@link IllegalStateException} 362 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#delete(String, String) 363 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidActionTakenException 364 */ 365 void delete(); 366 /** 367 * Reloads the document state, any pending changes will be <i><b>discarded</b></i> 368 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException 369 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getDocument(String) 370 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException 371 */ 372 void refresh(); 373 /** 374 * Sends an "ad-hoc" action request to the specified principal; commits updates. 375 * @param actionRequested the request action type 376 * @param annotation the route annotation 377 * @param targetPrincipalId the target principal id 378 * @param responsibilityDescription description of the responsibility 379 * @param forceAction whether the adhoc requests forces action by the recipient 380 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 381 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 382 */ 383 void adHocToPrincipal(ActionRequestType actionRequested, String annotation, 384 String targetPrincipalId, String responsibilityDescription, 385 boolean forceAction); 386 /** 387 * Sends an "ad-hoc" action request to the specified principal; commits updates. 388 * @param actionRequested the request action type 389 * @param nodeName the node on which to generate the adhoc request 390 * @param annotation the route annotation 391 * @param targetPrincipalId the target principal id 392 * @param responsibilityDescription description of the responsibility 393 * @param forceAction whether the adhoc requests forces action by the recipient 394 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 395 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 396 */ 397 void adHocToPrincipal(ActionRequestType actionRequested, String nodeName, 398 String annotation, String targetPrincipalId, 399 String responsibilityDescription, boolean forceAction); 400 /** 401 * Sends an "ad-hoc" action request to the specified principal; commits updates. 402 * @param actionRequested the request action type 403 * @param nodeName the node on which to generate the adhoc request 404 * @param annotation the route annotation 405 * @param targetPrincipalId the target principal id 406 * @param responsibilityDescription description of the responsibility 407 * @param forceAction whether the adhoc requests forces action by the recipient 408 * @param requestLabel the request label 409 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 410 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 411 */ 412 void adHocToPrincipal(ActionRequestType actionRequested, String nodeName, 413 String annotation, String targetPrincipalId, 414 String responsibilityDescription, boolean forceAction, 415 String requestLabel); 416 /** 417 * Sends an "ad-hoc" action request to the specified principal; commits updates. 418 * @param adHocToPrincipal a pre-constructed AdHocToPrincipal object 419 * @param annotation the route annotation 420 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 421 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 422 */ 423 void adHocToPrincipal(AdHocToPrincipal adHocToPrincipal, String annotation); 424 /** 425 * Sends an "ad-hoc" action request to the specified group; commits updates. 426 * @param actionRequested the request action type 427 * @param annotation the route annotation 428 * @param targetGroupId the target group id 429 * @param responsibilityDescription description of the responsibility 430 * @param forceAction whether the adhoc requests forces action by the recipient 431 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 432 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 433 */ 434 void adHocToGroup(ActionRequestType actionRequested, String annotation, 435 String targetGroupId, String responsibilityDescription, 436 boolean forceAction); 437 /** 438 * Sends an "ad-hoc" action request to the specified group; commits updates. 439 * @param actionRequested the request action type 440 * @param nodeName the node on which to generate the adhoc request 441 * @param annotation the route annotation 442 * @param targetGroupId the target group id 443 * @param responsibilityDescription description of the responsibility 444 * @param forceAction whether the adhoc requests forces action by the recipient 445 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 446 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 447 */ 448 void adHocToGroup(ActionRequestType actionRequested, String nodeName, 449 String annotation, String targetGroupId, 450 String responsibilityDescription, boolean forceAction); 451 /** 452 * Sends an "ad-hoc" action request to the specified principal; commits updates. 453 * @param actionRequested the request action type 454 * @param nodeName the node on which to generate the adhoc request 455 * @param annotation the route annotation 456 * @param targetGroupId the target group id 457 * @param responsibilityDescription description of the responsibility 458 * @param forceAction whether the adhoc requests forces action by the recipient 459 * @param requestLabel the request label 460 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 461 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 462 */ 463 void adHocToGroup(ActionRequestType actionRequested, String nodeName, 464 String annotation, String targetGroupId, 465 String responsibilityDescription, boolean forceAction, 466 String requestLabel); 467 /** 468 * Sends an "ad-hoc" action request to the specified principal; commits updates. 469 * @param adHocToGroup a pre-constructed AdHocToGroup object 470 * @param annotation the route annotation 471 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 472 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 473 */ 474 void adHocToGroup(AdHocToGroup adHocToGroup, String annotation); 475 /** 476 * Revokes an Ad-Hoc request by id; commits updates. 477 * @param actionRequestId the action request id to revoke 478 * @param annotation the routing annotation 479 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAdHocRequestById(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 480 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 481 */ 482 void revokeAdHocRequestById(String actionRequestId, String annotation); 483 /** 484 * Revokes an Ad-Hoc request by the specified criteria; commits updates. 485 * @param revoke the criteria for matching ad hoc action requests on the specified document that 486 * should be revoked 487 * @param annotation the routing annotation 488 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAdHocRequests(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocRevoke) 489 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 490 */ 491 void revokeAdHocRequests(AdHocRevoke revoke, String annotation); 492 /** 493 * Revokes all Ad-Hoc requests; commits updates; commits updates. 494 * @param annotation the routing annotation 495 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAllAdHocRequests(org.kuali.rice.kew.api.action.DocumentActionParameters) 496 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 497 */ 498 void revokeAllAdHocRequests(String annotation); 499 /** 500 * Returns the document to a previous node; commits updates. 501 * @param annotation the routing annotation 502 * @param nodeName the node to return to 503 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#returnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.ReturnPoint) 504 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 505 */ 506 void returnToPreviousNode(String annotation, String nodeName); 507 /** 508 * Returns the document to a previous node; commits updates. 509 * @param annotation the routing annotation 510 * @param returnPoint the node to return to 511 * @see #returnToPreviousNode(String, String) 512 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#returnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.ReturnPoint) 513 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 514 */ 515 void returnToPreviousNode(String annotation, ReturnPoint returnPoint); 516 /** 517 * Moves the document to a different node; commits updates. 518 * @param movePoint the node to move to 519 * @param annotation the routing annotation 520 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#move(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.MovePoint) 521 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 522 */ 523 void move(MovePoint movePoint, String annotation); 524 /** 525 * Takes authority of a group by a member of that group; commits updates. 526 * @param annotation the routing annotation 527 * @param groupId the group for which to take authority 528 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#takeGroupAuthority(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 529 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 530 */ 531 void takeGroupAuthority(String annotation, String groupId); 532 /** 533 * Releases authority of a group by a member of that group; commits updates. 534 * @param annotation the routing annotation 535 * @param groupId the group for which to take authority 536 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#releaseGroupAuthority(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 537 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 538 */ 539 void releaseGroupAuthority(String annotation, String groupId); 540 541 /** 542 * Places the document in exception routing; commits updates. 543 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#placeInExceptionRouting(org.kuali.rice.kew.api.action.DocumentActionParameters) 544 * @param annotation the routing annotation 545 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 546 */ 547 void placeInExceptionRouting(String annotation); 548 549 /** 550 * Performs a super-user blanket-approve action; commits updates. 551 * The current user must be a super-user for this document. 552 * @param annotation the routing annotation 553 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserBlanketApprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 554 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 555 */ 556 void superUserBlanketApprove(String annotation); 557 /** 558 * Performs a super-user approve action for the specified node; commits updates. 559 * The current user must be a super-user for this document. 560 * @param nodeName the node to super-user approve 561 * @param annotation the routing annotation 562 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserNodeApprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, String) 563 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 564 */ 565 void superUserNodeApprove(String nodeName, String annotation); 566 /** 567 * Performs a super-user approve action for the specified node; commits updates. 568 * The current user must be a super-user for this document. 569 * @param actionRequestId the action request to satisfy/approve 570 * @param annotation the routing annotation 571 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserTakeRequestedAction(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, String) 572 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 573 */ 574 void superUserTakeRequestedAction(String actionRequestId, String annotation); 575 /** 576 * Performs a super-user disapprove action; commits updates. 577 * The current user must be a super-user for this document. 578 * @param annotation the routing annotation 579 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserDisapprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 580 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 581 */ 582 void superUserDisapprove(String annotation); 583 /** 584 * Performs a super-user cancel action; commits updates. 585 * The current user must be a super-user for this document. 586 * @param annotation the routing annotation 587 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserCancel(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 588 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 589 */ 590 void superUserCancel(String annotation); 591 /** 592 * Performs a super-user "return to previous node" action; commits updates. 593 * The current user must be a super-user for this document. 594 * @param returnPoint the node to return to 595 * @param annotation the routing annotation 596 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserReturnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, org.kuali.rice.kew.api.action.ReturnPoint) 597 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 598 */ 599 void superUserReturnToPreviousNode(ReturnPoint returnPoint, String annotation); 600 /** 601 * Records a log action which adds an annotation on the document but does not affect routing. 602 * This action is stateless and does not cause a commit of document updates. 603 * @param annotation the annotation to log 604 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidActionTakenException 605 */ 606 void logAnnotation(String annotation); 607 608 /** 609 * Returns whether a completion request is one of the requested actions. 610 * @see #getRequestedActions() 611 * @return whether a completion request is one of the requested actions. 612 */ 613 boolean isCompletionRequested(); 614 /** 615 * Returns whether an approval request is one of the requested actions. 616 * @see #getRequestedActions() 617 * @return whether an approval request is one of the requested actions. 618 */ 619 boolean isApprovalRequested(); 620 /** 621 * Returns whether an acknowledge request is one of the requested actions. 622 * @see #getRequestedActions() 623 * @return whether an acknowledge request is one of the requested actions. 624 */ 625 boolean isAcknowledgeRequested(); 626 /** 627 * Returns whether an FYI is one of the requested actions. 628 * @see #getRequestedActions() 629 * @return whether an FYI is one of the requested actions. 630 */ 631 boolean isFYIRequested(); 632 633 /** 634 * Returns whether a blank-approve action is a valid action. 635 * @see #getValidActions() 636 * @return whether a blank-approve action is a valid action. 637 */ 638 boolean isBlanketApproveCapable(); 639 /** 640 * Returns whether a route action is a valid action. 641 * @see #getValidActions() 642 * @return whether a route action is a valid action. 643 */ 644 boolean isRouteCapable(); 645 /** 646 * Returns whether the specified action type is valid 647 * @param actionType the non-null ActionType to check 648 * @see #getValidActions() 649 * @return whether the specified action type is valid 650 */ 651 boolean isValidAction(ActionType actionType); 652 653 /** 654 * Helper that checks whether the document has the given status 655 * NOTE: does this really need to be in the public API? it only appears to be used internally 656 * @see #getStatus() 657 * @param status the status to check 658 * @return whether the document status is the specified status 659 */ 660 boolean checkStatus(DocumentStatus status); 661 /** 662 * Indicates if the document is in the initiated state or not. 663 * @see #getStatus() 664 * @return true if in the specified state 665 */ 666 boolean isInitiated(); 667 /** 668 * Indicates if the document is in the saved state or not. 669 * @see #getStatus() 670 * @return true if in the specified state 671 */ 672 boolean isSaved(); 673 /** 674 * Indicates if the document is in the enroute state or not. 675 * @see #getStatus() 676 * @return true if in the specified state 677 */ 678 boolean isEnroute(); 679 /** 680 * Indicates if the document is in the exception state or not. 681 * @see #getStatus() 682 * @return true if in the specified state 683 */ 684 boolean isException(); 685 /** 686 * Indicates if the document is in the canceled state or not. 687 * @see #getStatus() 688 * @return true if in the specified state 689 */ 690 boolean isCanceled(); 691 /** 692 * Indicates if the document is in the recalled state or not. 693 * @since 2.1 694 * @see #getStatus() 695 * @return true if in the specified state 696 */ 697 boolean isRecalled(); 698 /** 699 * Indicates if the document is in the disapproved state or not. 700 * @see #getStatus() 701 * @return true if in the specified state 702 */ 703 boolean isDisapproved(); 704 /** 705 * Indicates if the document is in the Processed or Finalized state. 706 * @see #getStatus() 707 * @return true if in the specified state 708 */ 709 boolean isApproved(); 710 /** 711 * Indicates if the document is in the processed state or not. 712 * @see #getStatus() 713 * @return true if in the specified state 714 */ 715 boolean isProcessed(); 716 /** 717 * Indicates if the document is in the final state or not. 718 * @see #getStatus() 719 * @return true if in the specified state 720 */ 721 boolean isFinal(); 722 723 /** 724 * Returns the names of the route nodes on the document which are currently active. 725 * 726 * <p>If the document has completed its routing (i.e. it is in processed or final status) then this method may 727 * return an empty set since no nodes are active at that time. In order to get either the active *or* terminal 728 * nodes, use the {@link #getCurrentNodeNames()} method.</p> 729 * 730 * @see #getActiveRouteNodeInstances() 731 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getActiveRouteNodeInstances(String) 732 * @return an unmodifiable set containing the names of the active nodes for this document 733 */ 734 Set<String> getNodeNames(); 735 /** 736 * Returns the names of the nodes at which the document is currently at in it's route path. 737 * 738 * <p>This method differs from {@link #getNodeNames()} in the fact that if there are no active nodes, it will 739 * return the last nodes on the document instead (a.k.a. the document's terminal nodes).</p> 740 * 741 * @see #getCurrentRouteNodeInstances() 742 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getCurrentRouteNodeInstances(String) 743 * @return an unmodifiable set containing the names of the nodes at which this document is currently located within it's route path 744 */ 745 Set<String> getCurrentNodeNames(); 746 /** 747 * Returns the list of active route node instances 748 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getActiveRouteNodeInstances(String) 749 * @return the list of active route node instances 750 */ 751 List<RouteNodeInstance> getActiveRouteNodeInstances(); 752 /** 753 * Returns the list of active route node instances 754 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getCurrentRouteNodeInstances(String) 755 * @return the list of active route node instances 756 */ 757 List<RouteNodeInstance> getCurrentRouteNodeInstances(); 758 /** 759 * Returns the flattened list of route node instances 760 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getRouteNodeInstances(String) 761 * @return the flattened list of route node instances 762 */ 763 List<RouteNodeInstance> getRouteNodeInstances(); 764 /** 765 * Returns the list of previous route node names 766 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getPreviousRouteNodeNames(String) 767 * @return the list of previous route node names 768 */ 769 List<String> getPreviousNodeNames(); 770 771 772 /** 773 * Returns detailed document information 774 * TODO: consolidate with Document/ModifiableDocument or eliminate? currently bypasses 775 * locally cached Document data 776 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getDocumentDetail(String) 777 * @return detailed document information 778 */ 779 DocumentDetail getDocumentDetail(); 780 /** 781 * Sets internal DocumentContentUpdate object 782 * TODO: exposes internal API and used only by tests, candidate for elimination? 783 * @param documentContentUpdate the DocumentContentUpdate to set 784 */ 785 void updateDocumentContent(DocumentContentUpdate documentContentUpdate); 786 }