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.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 * Cancels the document, commits updates. 311 * @param annotation the document action annotation 312 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#cancel(org.kuali.rice.kew.api.action.DocumentActionParameters) 313 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 314 */ 315 void blanketApprove(String annotation); 316 /** 317 * Blanket-approves the document, commits updates. 318 * @param annotation the document action annotation 319 * @param nodeNames a set of node names to which to blanket approve the given document 320 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#blanketApproveToNodes(org.kuali.rice.kew.api.action.DocumentActionParameters, java.util.Set) 321 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 322 */ 323 void blanketApprove(String annotation, String... nodeNames); 324 /** 325 * Save the document data without affecting routing, commits updates. 326 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#saveDocumentData(org.kuali.rice.kew.api.action.DocumentActionParameters) 327 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 328 */ 329 void saveDocumentData(); 330 /** 331 * Acknowledges the document, commits updates. 332 * @param annotation the document action annotation 333 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#acknowledge(org.kuali.rice.kew.api.action.DocumentActionParameters) 334 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 335 */ 336 void acknowledge(String annotation); 337 /** 338 * Clears an outstanding FYI on the document, commits updates. 339 * @param annotation the document action annotation 340 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#clearFyi(org.kuali.rice.kew.api.action.DocumentActionParameters) 341 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 342 */ 343 void fyi(String annotation); 344 /** 345 * Clears an outstanding FYI on the document without an annotation, commits updates. 346 * @see #fyi(String) 347 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 348 */ 349 void fyi(); 350 /** 351 * Deletes the document. Any pending updates are <b>NOT</b> committed, they are discarded. 352 * After deletion this WorkflowDocument object will no longer be valid, and any operations 353 * that interact with the workflow system will throws an {@link IllegalStateException} 354 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#delete(String, String) 355 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidActionTakenException 356 */ 357 void delete(); 358 /** 359 * Reloads the document state, any pending changes will be <i><b>discarded</b></i> 360 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException 361 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getDocument(String) 362 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException 363 */ 364 void refresh(); 365 /** 366 * Sends an "ad-hoc" action request to the specified principal; commits updates. 367 * @param actionRequested the request action type 368 * @param annotation the route annotation 369 * @param targetPrincipalId the target principal id 370 * @param responsibilityDescription description of the responsibility 371 * @param forceAction whether the adhoc requests forces action by the recipient 372 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 373 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 374 */ 375 void adHocToPrincipal(ActionRequestType actionRequested, String annotation, 376 String targetPrincipalId, String responsibilityDescription, 377 boolean forceAction); 378 /** 379 * Sends an "ad-hoc" action request to the specified principal; commits updates. 380 * @param actionRequested the request action type 381 * @param nodeName the node on which to generate the adhoc request 382 * @param annotation the route annotation 383 * @param targetPrincipalId the target principal id 384 * @param responsibilityDescription description of the responsibility 385 * @param forceAction whether the adhoc requests forces action by the recipient 386 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 387 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 388 */ 389 void adHocToPrincipal(ActionRequestType actionRequested, String nodeName, 390 String annotation, String targetPrincipalId, 391 String responsibilityDescription, boolean forceAction); 392 /** 393 * Sends an "ad-hoc" action request to the specified principal; commits updates. 394 * @param actionRequested the request action type 395 * @param nodeName the node on which to generate the adhoc request 396 * @param annotation the route annotation 397 * @param targetPrincipalId the target principal id 398 * @param responsibilityDescription description of the responsibility 399 * @param forceAction whether the adhoc requests forces action by the recipient 400 * @param requestLabel the request label 401 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 402 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 403 */ 404 void adHocToPrincipal(ActionRequestType actionRequested, String nodeName, 405 String annotation, String targetPrincipalId, 406 String responsibilityDescription, boolean forceAction, 407 String requestLabel); 408 /** 409 * Sends an "ad-hoc" action request to the specified principal; commits updates. 410 * @param adHocToPrincipal a pre-constructed AdHocToPrincipal object 411 * @param annotation the route annotation 412 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 413 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 414 */ 415 void adHocToPrincipal(AdHocToPrincipal adHocToPrincipal, String annotation); 416 /** 417 * Sends an "ad-hoc" action request to the specified group; commits updates. 418 * @param actionRequested the request action type 419 * @param annotation the route annotation 420 * @param targetGroupId the target group id 421 * @param responsibilityDescription description of the responsibility 422 * @param forceAction whether the adhoc requests forces action by the recipient 423 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 424 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 425 */ 426 void adHocToGroup(ActionRequestType actionRequested, String annotation, 427 String targetGroupId, String responsibilityDescription, 428 boolean forceAction); 429 /** 430 * Sends an "ad-hoc" action request to the specified group; commits updates. 431 * @param actionRequested the request action type 432 * @param nodeName the node on which to generate the adhoc request 433 * @param annotation the route annotation 434 * @param targetGroupId the target group id 435 * @param responsibilityDescription description of the responsibility 436 * @param forceAction whether the adhoc requests forces action by the recipient 437 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 438 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 439 */ 440 void adHocToGroup(ActionRequestType actionRequested, String nodeName, 441 String annotation, String targetGroupId, 442 String responsibilityDescription, boolean forceAction); 443 /** 444 * Sends an "ad-hoc" action request to the specified principal; commits updates. 445 * @param actionRequested the request action type 446 * @param nodeName the node on which to generate the adhoc request 447 * @param annotation the route annotation 448 * @param targetGroupId the target group id 449 * @param responsibilityDescription description of the responsibility 450 * @param forceAction whether the adhoc requests forces action by the recipient 451 * @param requestLabel the request label 452 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToGroup(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToGroup) 453 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 454 */ 455 void adHocToGroup(ActionRequestType actionRequested, String nodeName, 456 String annotation, String targetGroupId, 457 String responsibilityDescription, boolean forceAction, 458 String requestLabel); 459 /** 460 * Sends an "ad-hoc" action request to the specified principal; commits updates. 461 * @param adHocToGroup a pre-constructed AdHocToGroup object 462 * @param annotation the route annotation 463 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#adHocToPrincipal(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocToPrincipal) 464 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 465 */ 466 void adHocToGroup(AdHocToGroup adHocToGroup, String annotation); 467 /** 468 * Revokes an Ad-Hoc request by id; commits updates. 469 * @param actionRequestId the action request id to revoke 470 * @param annotation the routing annotation 471 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAdHocRequestById(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 472 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 473 */ 474 void revokeAdHocRequestById(String actionRequestId, String annotation); 475 /** 476 * Revokes an Ad-Hoc request by the specified criteria; commits updates. 477 * @param revoke the criteria for matching ad hoc action requests on the specified document that 478 * should be revoked 479 * @param annotation the routing annotation 480 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAdHocRequests(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.AdHocRevoke) 481 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 482 */ 483 void revokeAdHocRequests(AdHocRevoke revoke, String annotation); 484 /** 485 * Revokes all Ad-Hoc requests; commits updates; commits updates. 486 * @param annotation the routing annotation 487 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#revokeAllAdHocRequests(org.kuali.rice.kew.api.action.DocumentActionParameters) 488 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 489 */ 490 void revokeAllAdHocRequests(String annotation); 491 /** 492 * Returns the document to a previous node; commits updates. 493 * @param nodeName the node to return to 494 * @param annotation the routing annotation 495 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#returnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.ReturnPoint) 496 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 497 */ 498 void returnToPreviousNode(String nodeName, String annotation); 499 /** 500 * Returns the document to a previous node; commits updates. 501 * @param returnPoint the node to return to 502 * @param annotation the routing annotation 503 * @see #returnToPreviousNode(String, String) 504 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#returnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.ReturnPoint) 505 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 506 */ 507 void returnToPreviousNode(ReturnPoint returnPoint, String annotation); 508 /** 509 * Moves the document to a different node; commits updates. 510 * @param movePoint the node to move to 511 * @param annotation the routing annotation 512 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#move(org.kuali.rice.kew.api.action.DocumentActionParameters, org.kuali.rice.kew.api.action.MovePoint) 513 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 514 */ 515 void move(MovePoint movePoint, String annotation); 516 /** 517 * Takes authority of a group by a member of that group; commits updates. 518 * @param annotation the routing annotation 519 * @param groupId the group for which to take authority 520 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#takeGroupAuthority(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 521 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 522 */ 523 void takeGroupAuthority(String annotation, String groupId); 524 /** 525 * Releases 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#releaseGroupAuthority(org.kuali.rice.kew.api.action.DocumentActionParameters, String) 529 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 530 */ 531 void releaseGroupAuthority(String annotation, String groupId); 532 533 /** 534 * Places the document in exception routing; commits updates. 535 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#placeInExceptionRouting(org.kuali.rice.kew.api.action.DocumentActionParameters) 536 * @param annotation the routing annotation 537 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 538 */ 539 void placeInExceptionRouting(String annotation); 540 541 /** 542 * Performs a super-user blanket-approve action; commits updates. 543 * The current user must be a super-user for this document. 544 * @param annotation the routing annotation 545 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserBlanketApprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 546 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 547 */ 548 void superUserBlanketApprove(String annotation); 549 /** 550 * Performs a super-user approve action for the specified node; commits updates. 551 * The current user must be a super-user for this document. 552 * @param nodeName the node to super-user approve 553 * @param annotation the routing annotation 554 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserNodeApprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, String) 555 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 556 */ 557 void superUserNodeApprove(String nodeName, String annotation); 558 /** 559 * Performs a super-user approve action for the specified node; commits updates. 560 * The current user must be a super-user for this document. 561 * @param actionRequestId the action request to satisfy/approve 562 * @param annotation the routing annotation 563 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserTakeRequestedAction(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, String) 564 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 565 */ 566 void superUserTakeRequestedAction(String actionRequestId, String annotation); 567 /** 568 * Performs a super-user disapprove action; commits updates. 569 * The current user must be a super-user for this document. 570 * @param annotation the routing annotation 571 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserDisapprove(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 572 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 573 */ 574 void superUserDisapprove(String annotation); 575 /** 576 * Performs a super-user cancel 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#superUserCancel(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean) 580 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 581 */ 582 void superUserCancel(String annotation); 583 /** 584 * Performs a super-user "return to previous node" action; commits updates. 585 * The current user must be a super-user for this document. 586 * @param returnPoint the node to return to 587 * @param annotation the routing annotation 588 * @see org.kuali.rice.kew.api.action.WorkflowDocumentActionsService#superUserReturnToPreviousNode(org.kuali.rice.kew.api.action.DocumentActionParameters, boolean, org.kuali.rice.kew.api.action.ReturnPoint) 589 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException 590 */ 591 void superUserReturnToPreviousNode(ReturnPoint returnPoint, String annotation); 592 /** 593 * Records a log action which adds an annotation on the document but does not affect routing. 594 * This action is stateless and does not cause a commit of document updates. 595 * @param annotation the annotation to log 596 * @throws org.kuali.rice.core.api.exception.RiceIllegalArgumentException, InvalidActionTakenException 597 */ 598 void logAnnotation(String annotation); 599 600 /** 601 * Returns whether a completion request is one of the requested actions. 602 * @see #getRequestedActions() 603 * @return whether a completion request is one of the requested actions. 604 */ 605 boolean isCompletionRequested(); 606 /** 607 * Returns whether an approval request is one of the requested actions. 608 * @see #getRequestedActions() 609 * @return whether an approval request is one of the requested actions. 610 */ 611 boolean isApprovalRequested(); 612 /** 613 * Returns whether an acknowledge request is one of the requested actions. 614 * @see #getRequestedActions() 615 * @return whether an acknowledge request is one of the requested actions. 616 */ 617 boolean isAcknowledgeRequested(); 618 /** 619 * Returns whether an FYI is one of the requested actions. 620 * @see #getRequestedActions() 621 * @return whether an FYI is one of the requested actions. 622 */ 623 boolean isFYIRequested(); 624 625 /** 626 * Returns whether a blank-approve action is a valid action. 627 * @see #getValidActions() 628 * @return whether a blank-approve action is a valid action. 629 */ 630 boolean isBlanketApproveCapable(); 631 /** 632 * Returns whether a route action is a valid action. 633 * @see #getValidActions() 634 * @return whether a route action is a valid action. 635 */ 636 boolean isRouteCapable(); 637 /** 638 * Returns whether the specified action type is valid 639 * @param actionType the non-null ActionType to check 640 * @see #getValidActions() 641 * @return whether the specified action type is valid 642 */ 643 boolean isValidAction(ActionType actionType); 644 645 /** 646 * Helper that checks whether the document has the given status 647 * NOTE: does this really need to be in the public API? it only appears to be used internally 648 * @see #getStatus() 649 * @param status the status to check 650 * @return whether the document status is the specified status 651 */ 652 boolean checkStatus(DocumentStatus status); 653 /** 654 * Indicates if the document is in the initiated state or not. 655 * @see #getStatus() 656 * @return true if in the specified state 657 */ 658 boolean isInitiated(); 659 /** 660 * Indicates if the document is in the saved state or not. 661 * @see #getStatus() 662 * @return true if in the specified state 663 */ 664 boolean isSaved(); 665 /** 666 * Indicates if the document is in the enroute state or not. 667 * @see #getStatus() 668 * @return true if in the specified state 669 */ 670 boolean isEnroute(); 671 /** 672 * Indicates if the document is in the exception state or not. 673 * @see #getStatus() 674 * @return true if in the specified state 675 */ 676 boolean isException(); 677 /** 678 * Indicates if the document is in the canceled state or not. 679 * @see #getStatus() 680 * @return true if in the specified state 681 */ 682 boolean isCanceled(); 683 /** 684 * Indicates if the document is in the disapproved state or not. 685 * @see #getStatus() 686 * @return true if in the specified state 687 */ 688 boolean isDisapproved(); 689 /** 690 * Indicates if the document is in the Processed or Finalized state. 691 * @see #getStatus() 692 * @return true if in the specified state 693 */ 694 boolean isApproved(); 695 /** 696 * Indicates if the document is in the processed state or not. 697 * @see #getStatus() 698 * @return true if in the specified state 699 */ 700 boolean isProcessed(); 701 /** 702 * Indicates if the document is in the final state or not. 703 * @see #getStatus() 704 * @return true if in the specified state 705 */ 706 boolean isFinal(); 707 708 /** 709 * Returns the names of the route nodes on the document which are currently active. 710 * 711 * <p>If the document has completed its routing (i.e. it is in processed or final status) then this method may 712 * return an empty set since no nodes are active at that time. In order to get either the active *or* terminal 713 * nodes, use the {@link #getCurrentNodeNames()} method.</p> 714 * 715 * @see #getActiveRouteNodeInstances() 716 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getActiveRouteNodeInstances(String) 717 * @return an unmodifiable set containing the names of the active nodes for this document 718 */ 719 Set<String> getNodeNames(); 720 /** 721 * Returns the names of the nodes at which the document is currently at in it's route path. 722 * 723 * <p>This method differs from {@link #getNodeNames()} in the fact that if there are no active nodes, it will 724 * return the last nodes on the document instead (a.k.a. the document's terminal nodes).</p> 725 * 726 * @see #getCurrentRouteNodeInstances() 727 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getCurrentRouteNodeInstances(String) 728 * @return an unmodifiable set containing the names of the nodes at which this document is currently located within it's route path 729 */ 730 Set<String> getCurrentNodeNames(); 731 /** 732 * Returns the list of active route node instances 733 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getActiveRouteNodeInstances(String) 734 * @return the list of active route node instances 735 */ 736 List<RouteNodeInstance> getActiveRouteNodeInstances(); 737 /** 738 * Returns the list of active route node instances 739 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getCurrentRouteNodeInstances(String) 740 * @return the list of active route node instances 741 */ 742 List<RouteNodeInstance> getCurrentRouteNodeInstances(); 743 /** 744 * Returns the flattened list of route node instances 745 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getRouteNodeInstances(String) 746 * @return the flattened list of route node instances 747 */ 748 List<RouteNodeInstance> getRouteNodeInstances(); 749 /** 750 * Returns the list of previous route node names 751 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getPreviousRouteNodeNames(String) 752 * @return the list of previous route node names 753 */ 754 List<String> getPreviousNodeNames(); 755 756 757 /** 758 * Returns detailed document information 759 * TODO: consolidate with Document/ModifiableDocument or eliminate? currently bypasses 760 * locally cached Document data 761 * @see org.kuali.rice.kew.api.document.WorkflowDocumentService#getDocumentDetail(String) 762 * @return detailed document information 763 */ 764 DocumentDetail getDocumentDetail(); 765 /** 766 * Sets internal DocumentContentUpdate object 767 * TODO: exposes internal API and used only by tests, candidate for elimination? 768 * @param documentContentUpdate the DocumentContentUpdate to set 769 */ 770 void updateDocumentContent(DocumentContentUpdate documentContentUpdate); 771 }