Coverage Report - org.kuali.rice.kew.api.action.WorkflowDocumentActionsService
 
Classes in this File Line Coverage Branch Coverage Complexity
WorkflowDocumentActionsService
N/A
N/A
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.action;
 17  
 
 18  
 import java.util.List;
 19  
 import java.util.Set;
 20  
 
 21  
 import javax.jws.WebMethod;
 22  
 import javax.jws.WebParam;
 23  
 import javax.jws.WebResult;
 24  
 import javax.jws.WebService;
 25  
 import javax.jws.soap.SOAPBinding;
 26  
 import javax.xml.bind.annotation.XmlElement;
 27  
 import javax.xml.bind.annotation.XmlElementWrapper;
 28  
 
 29  
 import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
 30  
 import org.kuali.rice.kew.api.KewApiConstants;
 31  
 import org.kuali.rice.kew.api.WorkflowDocument;
 32  
 import org.kuali.rice.kew.api.doctype.IllegalDocumentTypeException;
 33  
 import org.kuali.rice.kew.api.document.Document;
 34  
 import org.kuali.rice.kew.api.document.DocumentContentUpdate;
 35  
 import org.kuali.rice.kew.api.document.DocumentDetail;
 36  
 import org.kuali.rice.kew.api.document.DocumentStatus;
 37  
 import org.kuali.rice.kew.api.document.DocumentUpdate;
 38  
 import org.kuali.rice.kew.api.document.InvalidDocumentContentException;
 39  
 import org.kuali.rice.kew.api.document.attribute.WorkflowAttributeDefinition;
 40  
 import org.kuali.rice.kew.api.document.attribute.WorkflowAttributeValidationError;
 41  
 import org.kuali.rice.kew.api.document.WorkflowDocumentService;
 42  
 import org.kuali.rice.kew.api.rule.Rule;
 43  
 import org.kuali.rice.kew.api.rule.RuleReportCriteria;
 44  
 
 45  
 /**
 46  
  * This service defines various operations which are used to perform actions against a workflow
 47  
  * {@link Document}. These actions include creation, routing, approval, acknowledgment, saving,
 48  
  * updating document data, etc.
 49  
  * 
 50  
  * <p>
 51  
  * It also includes operations that allow for loading of information about which actions a given
 52  
  * principal is permitted to execute against a given document ({@link ValidActions}), as well as
 53  
  * providing information about what actions a particular principal has been requested to execute
 54  
  * against a given document ({@link RequestedActions}).
 55  
  * 
 56  
  * <p>
 57  
  * This service can be used in conjunction with the {@link WorkflowDocumentService} which provides
 58  
  * additional operations that relate to documents (but not document actions).
 59  
  * 
 60  
  * <p>
 61  
  * Unless otherwise specified, all parameters to all methods must not be null. If the argument is a
 62  
  * string value it must also not be "blank" (either the empty string or a string of only
 63  
  * whitespace). In the cases where this is violated, a {@link RiceIllegalArgumentException} will be
 64  
  * thrown. Additionally, unless otherwise specified, all methods will return non-null return values.
 65  
  * In the case of collections, an empty collection will be returned in preference to a null
 66  
  * collection value. All collections which are returned from methods on this service will be
 67  
  * unmodifiable collections.
 68  
  * 
 69  
  * <p>
 70  
  * Many of the actions trigger processing by the workflow engine. Unless otherwise specified, any
 71  
  * method on this service which performs an action against the document will also submit the
 72  
  * document to the workflow engine after performing the action. This may trigger the workflow
 73  
  * document to transition to the next node in the workflow process or activate additional action
 74  
  * requests depending on what the current state of the active node instance(s) is on the document.
 75  
  * 
 76  
  * <p>
 77  
  * Workflow engine processing may happen either asynchronously or synchronously depending on
 78  
  * configuration and capabilities of the back end workflow engine implementation. However,
 79  
  * asynchronous operation is suggested for most use cases. This means that when operating in
 80  
  * asynchronous mode, after an action is submitted against the document there may be a delay in
 81  
  * state changes to the document. For example, if a principal submits an approve against a document
 82  
  * that triggers transition to the next node in the workflow process (generating new action requests
 83  
  * in the process) those new actions requests will not be represented in the information returned in
 84  
  * the {@link DocumentActionResult} result object. Though future invocations of
 85  
  * {@link #determineRequestedActions(String, String)} and similar methods may yield such
 86  
  * information, though it may do so after an non-deterministic amount of time since the workflow
 87  
  * engine makes no guarantees about how quickly it will complete processing. Additionally,
 88  
  * asynchronous workflow processing is scheduled in a work queue and therefore it may not be picked
 89  
  * up for processing immediately depending on system load and other factors.
 90  
  * 
 91  
  * <p>
 92  
  * If there is an error during asynchronous workflow processing then the document will be put into
 93  
  * exception routing (which can be executed in various ways depending on how the document type
 94  
  * defines it's exception policy). Regardless of the exact process that gets triggered during
 95  
  * exception routing, the end result is a set of {@link ActionRequestType#COMPLETE} requests to
 96  
  * those principals who are capable of resolving the exception scenario as well as the document's
 97  
  * status being transitioned to {@link DocumentStatus#EXCEPTION}. Once they have resolved any
 98  
  * barriers to successful processing of the document, they can take the
 99  
  * {@link #complete(DocumentActionParameters)} action against the document in order to satisfy the
 100  
  * outstanding exception request(s) and send the document back through the workflow engine.
 101  
  * 
 102  
  * <p>
 103  
  * In contrast, when operating the workflow engine in synchronous mode, processing will happen
 104  
  * immediately and control will not be returned to the caller until all outstanding processing has
 105  
  * completed. As a result, the information returned in the {@link DocumentActionResult} will always
 106  
  * be in a consistent state after each action is performed. When operating in synchronous mode, the
 107  
  * process of exception routing does not occur when failures are encountered during workflow engine
 108  
  * processing, rather any exceptions that are raised during processing will instead be thrown back
 109  
  * to the calling code.
 110  
  * 
 111  
  * <p>
 112  
  * Implementations of this service are required to be thread-safe and should be able to be invoked
 113  
  * either locally or remotely.
 114  
  * 
 115  
  * @see WorkflowDocumentService
 116  
  * @see WorkflowDocument
 117  
  * 
 118  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 119  
  * 
 120  
  */
 121  
 @WebService(name = "workflowDocumentActionsService", targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0)
 122  
 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
 123  
 public interface WorkflowDocumentActionsService {
 124  
 
 125  
     /**
 126  
      * Creates a new document instance from the given document type. The initiator of the resulting
 127  
      * document will be the same as the initiator that is passed to this method. Optional
 128  
      * {@link DocumentUpdate} and {@link DocumentContentUpdate} parameters can be supplied in order
 129  
      * to create the document with these additional pieces of data already set.
 130  
      * 
 131  
      * <p>
 132  
      * By default, if neither the {@link DocumentUpdate} or {@link DocumentContentUpdate} is passed
 133  
      * to this method, the document that is created and returned from this operation will have the
 134  
      * following initial state:
 135  
      * 
 136  
      * <ul>
 137  
      * <ol>
 138  
      * {@code status} set to {@link DocumentStatus#INITIATED}
 139  
      * </ol>
 140  
      * <ol>
 141  
      * {@code createDate} and {@code dateLastModified} set to the current date and time
 142  
      * </ol>
 143  
      * <ol>
 144  
      * {@code current} set to 'true'
 145  
      * </ol>
 146  
      * <ol>
 147  
      * {@code documentContent} set to the default and empty content
 148  
      * </ol>
 149  
      * </ul>
 150  
      * 
 151  
      * <p>
 152  
      * Additionally, the initial {@link org.kuali.rice.kew.api.document.node.RouteNodeInstance} for the workflow process on the document
 153  
      * will be created and linked to the document as it's initial node. Once the document is
 154  
      * created, the {@link #route(DocumentActionParameters)} operation must be invoked in order to
 155  
      * submit it to the workflow engine for initial processing.
 156  
      * 
 157  
      * <p>
 158  
      * In certain situations, the given principal may not be permitted to initiate documents of the
 159  
      * given type. In these cases an {@link InvalidActionTakenException} will be thrown.
 160  
      * 
 161  
      * @param documentTypeName the name of the document type from which to create this document
 162  
      * @param initiatorPrincipalId the id of the principal who is initiating this document
 163  
      * @param documentUpdate specifies additional document to set on the document upon creation,
 164  
      *        this is optional and if null is passed then the document will be created with the
 165  
      *        default document state
 166  
      * @param documentContentUpdate defines what the initial document content for the document
 167  
      *        should be, this is optional if null is passed then the document will be created with
 168  
      *        the default empty document content
 169  
      * 
 170  
      * @return the document that was created
 171  
      * 
 172  
      * @throws RiceIllegalArgumentException if {@code principalId} is null or blank
 173  
      * @throws RiceIllegalArgumentException if {@code principalId} does not identify a valid
 174  
      *         principal
 175  
      * @throws RiceIllegalArgumentException if {@code documentTypeName} is null or blank
 176  
      * @throws RiceIllegalArgumentException if {@code documentTypeName} does not identify an
 177  
      *         existing document type
 178  
      * @throws IllegalDocumentTypeException if the specified document type is not active
 179  
      * @throws IllegalDocumentTypeException if the specified document type does not support document
 180  
      *         creation (in other words, it's a document type that is only used as a parent)
 181  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 182  
      *         action
 183  
      */
 184  
     @WebMethod(operationName = "create")
 185  
     @WebResult(name = "document")
 186  
     @XmlElement(name = "document", required = true)
 187  
     Document create(
 188  
             @WebParam(name = "documentTypeName") String documentTypeName,
 189  
             @WebParam(name = "initiatorPrincipalId") String initiatorPrincipalId,
 190  
             @WebParam(name = "documentUpdate") DocumentUpdate documentUpdate,
 191  
             @WebParam(name = "documentContentUpdate") DocumentContentUpdate documentContentUpdate)
 192  
             throws RiceIllegalArgumentException, IllegalDocumentTypeException, InvalidActionTakenException;
 193  
 
 194  
     /**
 195  
      * Determines which actions against the document with the given id are valid for the principal
 196  
      * with the given id.
 197  
      * 
 198  
      * @param documentId the id of the document for which to determine valid actions
 199  
      * @param principalId the id of the principal for which to determine valid actions against the
 200  
      *        given document
 201  
      * 
 202  
      * @return a {@link ValidActions} object which contains the valid actions for the given
 203  
      *         principal against the given document
 204  
      * 
 205  
      * @throws RiceIllegalArgumentException if {@code documentId} is null or blank
 206  
      * @throws RiceIllegalArgumentException if document with the given {@code documentId} does not
 207  
      *         exist
 208  
      * @throws RiceIllegalArgumentException if {@code principalId} is null or blank
 209  
      * @throws RiceIllegalArgumentException if principal with the given {@code principalId} does not
 210  
      *         exist
 211  
      */
 212  
     @WebMethod(operationName = "determineValidActions")
 213  
     @WebResult(name = "validActions")
 214  
     @XmlElement(name = "validActions", required = true)
 215  
     ValidActions determineValidActions(
 216  
             @WebParam(name = "documentId") String documentId,
 217  
             @WebParam(name = "principalId") String principalId)
 218  
             throws RiceIllegalArgumentException;
 219  
 
 220  
     /**
 221  
      * Determines which actions are requested against the document with the given id for the
 222  
      * principal with the given id. These are generally derived based on action requests that are
 223  
      * currently pending against the document.
 224  
      * 
 225  
      * <p>
 226  
      * This method is distinguished from {@link #determineValidActions(String, String)} in that fact
 227  
      * that valid actions are the actions that the principal is permitted to take, while requested
 228  
      * actions are those that the principal is specifically being asked to take. Note that the
 229  
      * actions that are requested are used when assembling valid actions but are not necessarily the
 230  
      * only authoritative source for determination of valid actions for the principal, as
 231  
      * permissions and other configuration can also come into play.
 232  
      * 
 233  
      * @param documentId the id of the document for which to determine requested actions
 234  
      * @param principalId the id of the principal for which to determine requested actions against
 235  
      *        the given document
 236  
      * 
 237  
      * @return a {@link RequestedActions} object which contains the actions that are being requested
 238  
      *         from the given principal against the given document
 239  
      * 
 240  
      * @throws RiceIllegalArgumentException if {@code documentId} is null or blank
 241  
      * @throws RiceIllegalArgumentException if document with the given {@code documentId} does not
 242  
      *         exist
 243  
      * @throws RiceIllegalArgumentException if {@code principalId} is null or blank
 244  
      * @throws RiceIllegalArgumentException if principal with the given {@code principalId} does not
 245  
      *         exist
 246  
      */
 247  
     @WebMethod(operationName = "determineRequestedActions")
 248  
     @WebResult(name = "requestedActions")
 249  
     @XmlElement(name = "requestedActions", required = true)
 250  
     RequestedActions determineRequestedActions(
 251  
             @WebParam(name = "documentId") String documentId,
 252  
             @WebParam(name = "principalId") String principalId)
 253  
             throws RiceIllegalArgumentException;
 254  
 
 255  
     /**
 256  
      * Executes an {@link ActionType#ACKNOWLEDGE} action for the given principal and document
 257  
      * specified in the supplied parameters. When a principal acknowledges a document, any of the
 258  
      * principal's pending action requests at or below the acknowledge level (which includes fyi
 259  
      * requests as well) will be satisfied by the principal's action. The principal's action should
 260  
      * be recorded with the document as an {@link ActionTaken}.
 261  
      * 
 262  
      * <p>
 263  
      * Depending on document type policy, a pending action request at or below the acknowledge level
 264  
      * may have to exist on the document in order for the principal to take this action. Otherwise
 265  
      * an {@link InvalidActionTakenException} may be thrown. In order to determine if an acknowledge
 266  
      * action is valid, the {@link ValidActions} or {@link RequestedActions} for the document can be
 267  
      * checked.
 268  
      * 
 269  
      * @param parameters the parameters which indicate which principal is executing the action
 270  
      *        against which document, as well as additional operations to take against the document,
 271  
      *        such as updating document data
 272  
      * 
 273  
      * @return the result of executing the action, including a view on the updated state of the
 274  
      *         document and related actions
 275  
      * 
 276  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 277  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 278  
      *         {@code parameters} exists
 279  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 280  
      *         in {@code parameters} exists
 281  
      * @throws InvalidDocumentContentException if the document content on the
 282  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 283  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 284  
      *         action
 285  
      */
 286  
     @WebMethod(operationName = "acknowledge")
 287  
     @WebResult(name = "documentActionResult")
 288  
     @XmlElement(name = "documentActionResult", required = true)
 289  
     DocumentActionResult acknowledge(@WebParam(name = "parameters") DocumentActionParameters parameters)
 290  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 291  
 
 292  
     /**
 293  
      * Executes an {@link ActionType#APPROVE} action for the given principal and document specified
 294  
      * in the supplied parameters. When a principal approves a document, any of the principal's
 295  
      * pending action requests at or below the approve level (which includes complete, acknowledge,
 296  
      * and fyi requests as well) will be satisfied by the principal's action. The principal's action
 297  
      * should be recorded with the document as an {@link ActionTaken}.
 298  
      * 
 299  
      * <p>
 300  
      * Depending on document type policy, a pending action request at or below the approve level may
 301  
      * have to exist on the document in order for the principal to take this action. Otherwise an
 302  
      * {@link InvalidActionTakenException} may be thrown. In order to determine if an approve action
 303  
      * is valid, the {@link ValidActions} or {@link RequestedActions} for the document can be
 304  
      * checked.
 305  
      * 
 306  
      * @param parameters the parameters which indicate which principal is executing the action
 307  
      *        against which document, as well as additional operations to take against the document,
 308  
      *        such as updating document data
 309  
      * 
 310  
      * @return the result of executing the action, including a view on the updated state of the
 311  
      *         document and related actions
 312  
      * 
 313  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 314  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 315  
      *         {@code parameters} exists
 316  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 317  
      *         in {@code parameters} exists
 318  
      * @throws InvalidDocumentContentException if the document content on the
 319  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 320  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 321  
      *         action
 322  
      */
 323  
     @WebMethod(operationName = "approve")
 324  
     @WebResult(name = "documentActionResult")
 325  
     @XmlElement(name = "documentActionResult", required = true)
 326  
     DocumentActionResult approve(@WebParam(name = "parameters") DocumentActionParameters parameters)
 327  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 328  
 
 329  
     /**
 330  
      * Executes an {@link ActionType#ADHOC_REQUEST} action for the given principal and document
 331  
      * specified in the supplied parameters to create an ad hoc action request to the target
 332  
      * principal specified in the {@code AdHocToPrincipal}.
 333  
      * 
 334  
      * <p>
 335  
      * Operates as per {@link #adHocToGroup(DocumentActionParameters, AdHocToGroup)} with the
 336  
      * exception that this method is used to send an adhoc request to principal instead of a group.
 337  
      * 
 338  
      * <p>
 339  
      * Besides this difference, the same rules that are in play for sending ad hoc requests to group
 340  
      * apply for sending ad hoc requests to principals.
 341  
      * 
 342  
      * @param parameters the parameters which indicate which principal is executing the action
 343  
      *        against which document, as well as additional operations to take against the document,
 344  
      *        such as updating document data
 345  
      * @param adHocToPrincipal defines various pieces of information that informs what type of ad
 346  
      *        hoc request should be created
 347  
      * 
 348  
      * @return the result of executing the action, including a view on the updated state of the
 349  
      *         document and related actions
 350  
      * 
 351  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 352  
      * @throws RiceIllegalArgumentException if {@code adHocToPrincipal} is null
 353  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 354  
      *         {@code parameters} exists
 355  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 356  
      *         in {@code parameters} exists
 357  
      * @throws InvalidDocumentContentException if the document content on the
 358  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 359  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 360  
      *         action
 361  
      * @throws InvalidActionTakenException if the target principal is not permitted to receive ad
 362  
      *         hoc requests on documents of this type
 363  
      * @throws InvalidActionTakenException if the specified ad hoc request cannot be generated
 364  
      *         because the current state of the document would result in an illegal request being
 365  
      *         generated
 366  
      * 
 367  
      * @see #adHocToGroup(DocumentActionParameters, AdHocToGroup)
 368  
      */
 369  
     @WebMethod(operationName = "adHocToPrincipal")
 370  
     @WebResult(name = "documentActionResult")
 371  
     @XmlElement(name = "documentActionResult", required = true)
 372  
     DocumentActionResult adHocToPrincipal(
 373  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 374  
             @WebParam(name = "adHocToPrincipal") AdHocToPrincipal adHocToPrincipal)
 375  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 376  
 
 377  
     /**
 378  
      * Executes an {@link ActionType#ADHOC_REQUEST} action for the given group and document
 379  
      * specified in the supplied parameters to create an ad hoc action request to the target group
 380  
      * specified in the {@code AdHocToGroup}. The {@code AdHocToGroup} contains additional
 381  
      * information on how the ad hoc action request should be created, including the type of request
 382  
      * to generate, at which node it should generated, etc.
 383  
      * 
 384  
      * <p>
 385  
      * The policy for how ad hoc actions handle request generation and interact with the workflow
 386  
      * engine is different depending on the state of the document when the request to generate the
 387  
      * ad hoc is submitted. There are also different scenarios under which certain types of ad hoc
 388  
      * actions are allowed to be executed (throwing {@link InvalidActionTakenException} in
 389  
      * situations where the actions are not permitted). The rules are defined as follows:
 390  
      * 
 391  
      * <ol>
 392  
      * <li>If the status of the document is {@link DocumentStatus#INITIATED} then the action request
 393  
      * will be generated with a status of {@link ActionRequestStatus#INITIALIZED} and no processing
 394  
      * directives will be submitted to the workflow engine. When the document is routed, these ad
 395  
      * hoc requests will get activated</li>
 396  
      * <li>If the ad hoc request being created is an {@link ActionRequestType#COMPLETE} or
 397  
      * {@link ActionRequestType#APPROVE} and the document is in a "terminal" state (either
 398  
      * {@link DocumentStatus#CANCELED}, {@link DocumentStatus#DISAPPROVED},
 399  
      * {@link DocumentStatus#PROCESSED}, {@link DocumentStatus#FINAL}) or is in
 400  
      * {@link DocumentStatus#EXCEPTION} status, then an {@link InvalidActionTakenException} will be
 401  
      * thrown. This is because submitting such an action with a document in that state would result
 402  
      * in creation of an illegal action request.</li>
 403  
      * <li>If the document is in a "terminal" state (see above for definition) then the request will
 404  
      * be immediately (and synchronously) activated.</li>
 405  
      * <li>Otherwise, after creating the ad hoc request it will be in the
 406  
      * {@link ActionRequestStatus#INITIALIZED} status, and the document will be immediately
 407  
      * forwarded to the workflow engine for processing at which point the ad hoc request will
 408  
      * activated at the appropriate time.</li>
 409  
      * </ol>
 410  
      * 
 411  
      * <p>
 412  
      * Unlink other actions, ad hoc actions don't result in the recording of an {@link ActionTaken}
 413  
      * against the document. Instead, only the requested ad hoc {@link ActionRequest} is created.
 414  
      * 
 415  
      * @param parameters the parameters which indicate which principal is executing the action
 416  
      *        against which document, as well as additional operations to take against the document,
 417  
      *        such as updating document data
 418  
      * @param adHocToGroup defines various pieces of information that informs what type of ad hoc
 419  
      *        request should be created
 420  
      * 
 421  
      * @return the result of executing the action, including a view on the updated state of the
 422  
      *         document and related actions
 423  
      * 
 424  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 425  
      * @throws RiceIllegalArgumentException if {@code adHocToGroup} is null
 426  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 427  
      *         {@code parameters} exists
 428  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 429  
      *         in {@code parameters} exists
 430  
      * @throws InvalidDocumentContentException if the document content on the
 431  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 432  
      * @throws InvalidActionTakenException if the supplied principals i is not allowed to execute
 433  
      *         this action
 434  
      * @throws InvalidActionTakenException if any of the principals in the target group are not
 435  
      *         permitted to receive ad hoc requests on documents of this type
 436  
      * @throws InvalidActionTakenException if the specified ad hoc request cannot be generated
 437  
      *         because the current state of the document would result in an illegal request being
 438  
      *         generated
 439  
      */
 440  
     @WebMethod(operationName = "adHocToGroup")
 441  
     @WebResult(name = "documentActionResult")
 442  
     @XmlElement(name = "documentActionResult", required = true)
 443  
     DocumentActionResult adHocToGroup(
 444  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 445  
             @WebParam(name = "adHocToGroup") AdHocToGroup adHocToGroup)
 446  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 447  
 
 448  
     /**
 449  
      * Executes an {@link ActionType#ADHOC_REQUEST_REVOKE} action for the given principal and
 450  
      * document specified in the supplied parameters against the action request with the given id.
 451  
      * The process of revoking an ad hoc request simply deactivates the request associating the
 452  
      * generated {@link ActionTaken} of the revoke action with the deactivated request (this allows
 453  
      * for it to be determined what caused the ad hoc request to be deactivated). As with other
 454  
      * actions, this action taken is then recorded with the document.
 455  
      * 
 456  
      * @param parameters the parameters which indicate which principal is executing the action
 457  
      *        against which document, as well as additional operations to take against the document,
 458  
      *        such as updating document data
 459  
      * @param actionRequestId the id of the action request to revoke
 460  
      * 
 461  
      * @return the result of executing the action, including a view on the updated state of the
 462  
      *         document and related actions
 463  
      * 
 464  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 465  
      * @throws RiceIllegalArgumentException if {@code actionRequestId} is null or blank
 466  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 467  
      *         {@code parameters} exists
 468  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 469  
      *         in {@code parameters} exists
 470  
      * @throws InvalidDocumentContentException if the document content on the
 471  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 472  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 473  
      *         action
 474  
      * @throws InvalidActionTakenException if a pending ad hoc request with the given
 475  
      *         {@code actionRequestId} does not exist on the specified document, this could mean
 476  
      *         that the action request id is invalid, or that the action request has already been
 477  
      *         deactivated and is no longer pending
 478  
      */
 479  
     @WebMethod(operationName = "revokeAdHocRequestById")
 480  
     @WebResult(name = "documentActionResult")
 481  
     @XmlElement(name = "documentActionResult", required = true)
 482  
     DocumentActionResult revokeAdHocRequestById(
 483  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 484  
             @WebParam(name = "actionRequestId") String actionRequestId)
 485  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 486  
 
 487  
     /**
 488  
      * Executes an {@link ActionType#ADHOC_REQUEST_REVOKE} action which revokes all pending ad hoc
 489  
      * action requests that match the supplied {@link AdHocRevoke} criteria for the given principal
 490  
      * and document specified in the supplied parameters. The process of revoking an ad hoc requests
 491  
      * simply deactivates all ad hoc requests that match the given {@code AdHocRevoke} criteria,
 492  
      * associating the generated {@link ActionTaken} of the revoke action with the deactivated
 493  
      * requests (this allows for it to be determined what caused the ad hoc request to be
 494  
      * deactivated). As with other actions, this action taken is then recorded with the document.
 495  
      * 
 496  
      * <p>
 497  
      * It's possible that the given ad hoc revoke command will match no action requests on the
 498  
      * document, in which case this method will complete successfully but no requests will be
 499  
      * deactivated.
 500  
      * 
 501  
      * @param parameters the parameters which indicate which principal is executing the action
 502  
      *        against which document, as well as additional operations to take against the document,
 503  
      *        such as updating document data
 504  
      * @param revoke the criteria for matching ad hoc action requests on the specified document that
 505  
      *        should be revoked
 506  
      * 
 507  
      * @return the result of executing the action, including a view on the updated state of the
 508  
      *         document and related actions
 509  
      * 
 510  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 511  
      * @throws RiceIllegalArgumentException if {@code revoke} is null
 512  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 513  
      *         {@code parameters} exists
 514  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 515  
      *         in {@code parameters} exists
 516  
      * @throws InvalidDocumentContentException if the document content on the
 517  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 518  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 519  
      *         action
 520  
      */
 521  
     @WebMethod(operationName = "revokeAdHocRequests")
 522  
     @WebResult(name = "documentActionResult")
 523  
     @XmlElement(name = "documentActionResult", required = true)
 524  
     DocumentActionResult revokeAdHocRequests(
 525  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 526  
             @WebParam(name = "revoke") AdHocRevoke revoke)
 527  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 528  
 
 529  
     /**
 530  
      * Executes an {@link ActionType#ADHOC_REQUEST_REVOKE} action which revokes all pending ad hoc
 531  
      * action requests for the given principal and document specified in the supplied parameters.
 532  
      * This process of revoking all ad hoc requests will simply deactivate all ad hoc requests on
 533  
      * the specified document, associating the generated {@link ActionTaken} of the revoke action
 534  
      * with the deactivated requests (this allows for it to be determined what caused the ad hoc
 535  
      * request to be deactivated). As with other actions, this action taken is then recorded with
 536  
      * the document.
 537  
      * 
 538  
      * <p>
 539  
      * It's possible that the specified document will have no pending adhoc requests, in which case
 540  
      * this method will complete successfully but no requests will be deactivated.
 541  
      * 
 542  
      * @param parameters the parameters which indicate which principal is executing the action
 543  
      *        against which document, as well as additional operations to take against the document,
 544  
      *        such as updating document data
 545  
      * 
 546  
      * @return the result of executing the action, including a view on the updated state of the
 547  
      *         document and related actions
 548  
      * 
 549  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 550  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 551  
      *         {@code parameters} exists
 552  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 553  
      *         in {@code parameters} exists
 554  
      * @throws InvalidDocumentContentException if the document content on the
 555  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 556  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 557  
      *         action
 558  
      */
 559  
     @WebMethod(operationName = "revokeAllAdHocRequests")
 560  
     @WebResult(name = "documentActionResult")
 561  
     @XmlElement(name = "documentActionResult", required = true)
 562  
     DocumentActionResult revokeAllAdHocRequests(@WebParam(name = "parameters") DocumentActionParameters parameters)
 563  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 564  
 
 565  
     /**
 566  
      * Executes a {@link ActionType#CANCEL} action for the given principal and document specified in
 567  
      * the supplied parameters. When a principal cancels a document, all pending action requests on
 568  
      * the document are deactivated and the the principal's action will be recorded on the document
 569  
      * as an {@link ActionTaken}. Additionally, the document will be (synchronously) transitioned to
 570  
      * the {@link DocumentStatus#CANCELED} status.
 571  
      * 
 572  
      * <p>
 573  
      * In order to cancel a document, the principal must have permission to cancel documents of the
 574  
      * appropriate type, and one of the following must hold true:
 575  
      * 
 576  
      * <ol>
 577  
      * <li>The document must have a status of {@link DocumentStatus#INITIATED} <strong>or</strong></li>
 578  
      * <li>The document must have a status of {@link DocumentStatus#SAVED} <strong>or</strong></li>
 579  
      * <li>The principal must have a pending "complete" or "approve" request on the document.
 580  
      * 
 581  
      * @param parameters the parameters which indicate which principal is executing the action
 582  
      *        against which document, as well as additional operations to take against the document,
 583  
      *        such as updating document data
 584  
      * 
 585  
      * @return the result of executing the action, including a view on the updated state of the
 586  
      *         document and related actions
 587  
      * 
 588  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 589  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 590  
      *         {@code parameters} exists
 591  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 592  
      *         in {@code parameters} exists
 593  
      * @throws InvalidDocumentContentException if the document content on the
 594  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 595  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 596  
      *         action
 597  
      */
 598  
     @WebMethod(operationName = "cancel")
 599  
     @WebResult(name = "documentActionResult")
 600  
     @XmlElement(name = "documentActionResult", required = true)
 601  
     DocumentActionResult cancel(@WebParam(name = "parameters") DocumentActionParameters parameters)
 602  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 603  
 
 604  
     /**
 605  
      * Executes an {@link ActionType#FYI} action for the given principal and document specified in
 606  
      * the supplied parameters. When a principal clears fyis on a document, any of the principal's
 607  
      * pending fyis will be satisfied by the principal's action. The principal's action should be
 608  
      * recorded with the document as an {@link ActionTaken}.
 609  
      * 
 610  
      * <p>
 611  
      * Depending on document type policy, a pending fyi request may have to exist on the document in
 612  
      * order for the principal to take this action. Otherwise an {@link InvalidActionTakenException}
 613  
      * may be thrown. In order to determine if an fyi action is valid, the {@link ValidActions} or
 614  
      * {@link RequestedActions} for the document can be checked.
 615  
      * 
 616  
      * @param parameters the parameters which indicate which principal is executing the action
 617  
      *        against which document, as well as additional operations to take against the document,
 618  
      *        such as updating document data
 619  
      * 
 620  
      * @return the result of executing the action, including a view on the updated state of the
 621  
      *         document and related actions
 622  
      * 
 623  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 624  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 625  
      *         {@code parameters} exists
 626  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 627  
      *         in {@code parameters} exists
 628  
      * @throws InvalidDocumentContentException if the document content on the
 629  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 630  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 631  
      *         action
 632  
      */
 633  
     @WebMethod(operationName = "clearFyi")
 634  
     @WebResult(name = "documentActionResult")
 635  
     @XmlElement(name = "documentActionResult", required = true)
 636  
     DocumentActionResult clearFyi(@WebParam(name = "parameters") DocumentActionParameters parameters)
 637  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 638  
 
 639  
     /**
 640  
      * Executes an {@link ActionType#COMPLETE} action for the given principal and document specified
 641  
      * in the supplied parameters. When a principal completes a document, any of the principal's
 642  
      * pending action requests at or below the complete level (which includes approve, acknowledge,
 643  
      * and fyi requests as well) will be satisfied by the principal's action. The principal's action
 644  
      * should be recorded with the document as an {@link ActionTaken}.
 645  
      * 
 646  
      * <p>
 647  
      * Depending on document type policy, a pending action request at or below the complete level
 648  
      * may have to exist on the document in order for the principal to take this action. Otherwise
 649  
      * an {@link InvalidActionTakenException} may be thrown. In order to determine if an complete
 650  
      * action is valid, the {@link ValidActions} or {@link RequestedActions} for the document can be
 651  
      * checked.
 652  
      * 
 653  
      * @param parameters the parameters which indicate which principal is executing the action
 654  
      *        against which document, as well as additional operations to take against the document,
 655  
      *        such as updating document data
 656  
      * 
 657  
      * @return the result of executing the action, including a view on the updated state of the
 658  
      *         document and related actions
 659  
      * 
 660  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 661  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 662  
      *         {@code parameters} exists
 663  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 664  
      *         in {@code parameters} exists
 665  
      * @throws InvalidDocumentContentException if the document content on the
 666  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 667  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 668  
      *         action
 669  
      */
 670  
     @WebMethod(operationName = "complete")
 671  
     @WebResult(name = "documentActionResult")
 672  
     @XmlElement(name = "documentActionResult", required = true)
 673  
     DocumentActionResult complete(@WebParam(name = "parameters") DocumentActionParameters parameters)
 674  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 675  
 
 676  
     /**
 677  
      * Executes a {@link ActionType#DISAPPROVE} action for the given principal and document
 678  
      * specified in the supplied parameters. When a principal disapproves a document, all pending
 679  
      * action requests on the document are deactivated and the the principal's action will be
 680  
      * recorded on the document as an {@link ActionTaken}. Additionally, the document will be
 681  
      * (synchronously) transitioned to the {@link DocumentStatus#DISAPPROVED} status.
 682  
      * 
 683  
      * <p>
 684  
      * Depending on document type policy and configuration, notifications may be sent to past
 685  
      * approvers of the document. By default, an "acknowledge" request will be sent to each
 686  
      * principal who took an "approve" or "complete" action on the document previously.
 687  
      * 
 688  
      * <p>
 689  
      * In order to disapprove a document, the principal must have a pending approve or complete
 690  
      * request on the document.
 691  
      * 
 692  
      * @param parameters the parameters which indicate which principal is executing the action
 693  
      *        against which document, as well as additional operations to take against the document,
 694  
      *        such as updating document data
 695  
      * 
 696  
      * @return the result of executing the action, including a view on the updated state of the
 697  
      *         document and related actions
 698  
      * 
 699  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 700  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 701  
      *         {@code parameters} exists
 702  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 703  
      *         in {@code parameters} exists
 704  
      * @throws InvalidDocumentContentException if the document content on the
 705  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 706  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 707  
      *         action
 708  
      */
 709  
     @WebMethod(operationName = "disapprove")
 710  
     @WebResult(name = "documentActionResult")
 711  
     @XmlElement(name = "documentActionResult", required = true)
 712  
     DocumentActionResult disapprove(@WebParam(name = "parameters") DocumentActionParameters parameters)
 713  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 714  
 
 715  
     /**
 716  
      * Submits a document that is in either the "initiated" or "saved" state to the workflow engine
 717  
      * for processing. The route action triggers the beginning of the routing process and
 718  
      * (synchronously) switches the status of the document to {@link DocumentStatus#ENROUTE}. It
 719  
      * then queues up a request to the workflow engine to process the document.
 720  
      * 
 721  
      * <p>
 722  
      * When the route action is executed, an {@link ActionType#COMPLETE} action is recorded on the
 723  
      * document for the principal who executed the route action. At this point in time, any action
 724  
      * requests that are currently on the document in an "initialized" state will be activated.
 725  
      * Requests of this nature can commonly exist if ad hoc requests have been attached to the
 726  
      * document prior to execution of the route action.
 727  
      * 
 728  
      * <p>
 729  
      * By default, the principal who initiated the document is the same principal who must submit
 730  
      * the route command. However, a document type policy can be set which will relax this
 731  
      * constraint.
 732  
      * 
 733  
      * <p>
 734  
      * The route action should ideally only ever be executed once for a given document. Depending on
 735  
      * document type policy, attempting to execute a "route" action against a document which is
 736  
      * already enroute or in a terminal state may result in an {@link InvalidActionTakenException}
 737  
      * being thrown.
 738  
      * 
 739  
      * @param parameters the parameters which indicate which principal is executing the action
 740  
      *        against which document, as well as additional operations to take against the document,
 741  
      *        such as updating document data
 742  
      * 
 743  
      * @return the result of executing the action, including a view on the updated state of the
 744  
      *         document and related actions
 745  
      * 
 746  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 747  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 748  
      *         {@code parameters} exists
 749  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 750  
      *         in {@code parameters} exists
 751  
      * @throws InvalidDocumentContentException if the document content on the
 752  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 753  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 754  
      *         action
 755  
      */
 756  
     @WebMethod(operationName = "route")
 757  
     @WebResult(name = "documentActionResult")
 758  
     @XmlElement(name = "documentActionResult", required = true)
 759  
     DocumentActionResult route(@WebParam(name = "parameters") DocumentActionParameters parameters)
 760  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 761  
 
 762  
     /**
 763  
      * Triggers the execution of a full {@link ActionType#BLANKET_APPROVE} action for the given
 764  
      * principal and document specified in the supplied parameters. Blanket approval will
 765  
      * orchestrate a document from it's current node all the way to the end of the document's
 766  
      * workflow process. During this process, it will automatically act on all "approve" and
 767  
      * "complete" requests, effectively bypassing them. When it does this, it will notify the
 768  
      * original recipients of these requests by routing acknowledge requests to them.
 769  
      * 
 770  
      * <p>
 771  
      * Blanket approve processing is handled by a special mode of the workflow engine which runs the
 772  
      * document through it's full processing lifecycle, ensuring that it makes it's way to the end
 773  
      * of it's route path (by bypassing any steps that would cause the process to halt, such as
 774  
      * approval requests). Because of this nature, blanket approve processing behavior is governed
 775  
      * by the same configuration as the rest of the workflow engine. So depending on whether the
 776  
      * engine is configured or synchronous or asynchronous operation, the blanket approve processing
 777  
      * will behave in the same manner.
 778  
      * 
 779  
      * <p>
 780  
      * In order to execute a blanket approve operation, the principal must have permissions to do
 781  
      * so.
 782  
      * 
 783  
      * @param parameters the parameters which indicate which principal is executing the action
 784  
      *        against which document, as well as additional operations to take against the document,
 785  
      *        such as updating document data
 786  
      * 
 787  
      * @return the result of executing the action, including a view on the updated state of the
 788  
      *         document and related actions
 789  
      * 
 790  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 791  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 792  
      *         {@code parameters} exists
 793  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 794  
      *         in {@code parameters} exists
 795  
      * @throws InvalidDocumentContentException if the document content on the
 796  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 797  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 798  
      *         action
 799  
      */
 800  
     @WebMethod(operationName = "blanketApprove")
 801  
     @WebResult(name = "documentActionResult")
 802  
     @XmlElement(name = "documentActionResult", required = true)
 803  
     DocumentActionResult blanketApprove(@WebParam(name = "parameters") DocumentActionParameters parameters)
 804  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 805  
 
 806  
     /**
 807  
      * Triggers the execution of a {@link ActionType#BLANKET_APPROVE} action which orchestrates the
 808  
      * document to the given set of node names for the given principal and document specified in the
 809  
      * supplied parameters. This method functions the same as
 810  
      * {@link #blanketApprove(DocumentActionParameters)} with the exception that the blanket approve
 811  
      * process will be halted once all node names in the given set have been reached.
 812  
      * 
 813  
      * <p>
 814  
      * If null or an empty set is passed for {@code nodeNames} on this method, it's behavior will be
 815  
      * equivalent to {@link #blanketApprove(DocumentActionParameters)}.
 816  
      * 
 817  
      * @param parameters the parameters which indicate which principal is executing the action
 818  
      *        against which document, as well as additional operations to take against the document,
 819  
      *        such as updating document data
 820  
      * @param nodeNames a set of node names to which to blanket approve the given document
 821  
      * 
 822  
      * @return the result of executing the action, including a view on the updated state of the
 823  
      *         document and related actions
 824  
      * 
 825  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 826  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 827  
      *         {@code parameters} exists
 828  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 829  
      *         in {@code parameters} exists
 830  
      * @throws InvalidDocumentContentException if the document content on the
 831  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 832  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 833  
      *         action
 834  
      */
 835  
     @WebMethod(operationName = "blanketApproveToNodes")
 836  
     @WebResult(name = "documentActionResult")
 837  
     @XmlElement(name = "documentActionResult", required = true)
 838  
     DocumentActionResult blanketApproveToNodes(
 839  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 840  
             @WebParam(name = "nodeName") Set<String> nodeNames)
 841  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 842  
 
 843  
     /**
 844  
      * Triggers the execution of a {@link ActionType#RETURN_TO_PREVIOUS} action for the given
 845  
      * principal and document specified in the supplied parameters. Return a document to a previous
 846  
      * node will allow for the document to be pushed back to an earlier node in the process based on
 847  
      * the criteria present in the {@link ReturnPoint} that is passed to this method.
 848  
      * 
 849  
      * <p>
 850  
      * The document is synchronously returned to the suggested return point (assuming the desired
 851  
      * return point can be identified for the given document), and then the document will be
 852  
      * submitted to the engine for further processing (effectively, re-establishing the flow of the
 853  
      * document from the target return point).
 854  
      * 
 855  
      * <p>
 856  
      * Return the document to the first node in the document is treated as a special case and,
 857  
      * rather then transitioning the document back to the "initiated" status, will route a
 858  
      * "complete" request to the initiator of the document. The effectively enacts a return to the
 859  
      * document initiator in these cases.
 860  
      * 
 861  
      * @param parameters the parameters which indicate which principal is executing the action
 862  
      *        against which document, as well as additional operations to take against the document,
 863  
      *        such as updating document data
 864  
      * 
 865  
      * @return the result of executing the action, including a view on the updated state of the
 866  
      *         document and related actions
 867  
      * 
 868  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 869  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 870  
      *         {@code parameters} exists
 871  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 872  
      *         in {@code parameters} exists
 873  
      * @throws InvalidDocumentContentException if the document content on the
 874  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 875  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 876  
      *         action
 877  
      */
 878  
     @WebMethod(operationName = "returnToPreviousNode")
 879  
     @WebResult(name = "documentActionResult")
 880  
     @XmlElement(name = "documentActionResult", required = true)
 881  
     DocumentActionResult returnToPreviousNode(
 882  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 883  
             @WebParam(name = "returnPoint") ReturnPoint returnPoint)
 884  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 885  
 
 886  
 
 887  
     /**
 888  
      * Triggers the execution of a {@link ActionType#MOVE} action for the given
 889  
      * principal and document specified in the supplied parameters. Move a document to a
 890  
      * node will allow for the document to be pushed to a different node in the process based on
 891  
      * the criteria present in the {@link MovePoint} that is passed to this method.
 892  
      *
 893  
      * <p />
 894  
      * The document is synchronously moved to the suggested move point (assuming the desired
 895  
      * move point can be identified for the given document), and then the document will be
 896  
      * submitted to the engine for further processing (effectively, re-establishing the flow of the
 897  
      * document from the target return point).
 898  
      *
 899  
      *
 900  
      * @param parameters the parameters which indicate which principal is executing the action
 901  
      *        against which document, as well as additional operations to take against the document,
 902  
      *        such as updating document data
 903  
      * @param movePoint the point to move the document
 904  
      *
 905  
      * @return the result of executing the action, including a view on the updated state of the
 906  
      *         document and related actions
 907  
      *
 908  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 909  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 910  
      *         {@code parameters} exists
 911  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 912  
      *         in {@code parameters} exists
 913  
      * @throws InvalidDocumentContentException if the document content on the
 914  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 915  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 916  
      *         action
 917  
      */
 918  
     @WebMethod(operationName = "move")
 919  
     @WebResult(name = "documentActionResult")
 920  
     @XmlElement(name = "documentActionResult", required = true)
 921  
     DocumentActionResult move(
 922  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 923  
             @WebParam(name = "movePoint") MovePoint movePoint)
 924  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 925  
 
 926  
     /**
 927  
      * Triggers the execution of a {@link ActionType#TAKE_GROUP_AUTHORITY} action for the given
 928  
      * principal and document specified in the supplied parameters. Takes authority of a group by a
 929  
      * member of that group.
 930  
      *
 931  
      * @param parameters the parameters which indicate which principal is executing the action
 932  
      *        against which document, as well as additional operations to take against the document,
 933  
      *        such as updating document data
 934  
      * @param groupId the group id to take authority of
 935  
      *
 936  
      * @return the result of executing the action, including a view on the updated state of the
 937  
      *         document and related actions
 938  
      *
 939  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 940  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 941  
      *         {@code parameters} exists
 942  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 943  
      *         in {@code parameters} exists
 944  
      * @throws InvalidDocumentContentException if the document content on the
 945  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 946  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 947  
      *         action
 948  
      */
 949  
     @WebMethod(operationName = "takeGroupAuthority")
 950  
     @WebResult(name = "documentActionResult")
 951  
     @XmlElement(name = "documentActionResult", required = true)
 952  
     DocumentActionResult takeGroupAuthority(
 953  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 954  
             @WebParam(name = "groupId") String groupId)
 955  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 956  
 
 957  
     /**
 958  
      * Triggers the execution of a {@link ActionType#RELEASE_GROUP_AUTHORITY} action for the given
 959  
      * principal and document specified in the supplied parameters. Releases authority of a group by a
 960  
      * member of that group.
 961  
      *
 962  
      * @param parameters the parameters which indicate which principal is executing the action
 963  
      *        against which document, as well as additional operations to take against the document,
 964  
      *        such as updating document data
 965  
      * @param groupId the group id to take authority of
 966  
      *
 967  
      * @return the result of executing the action, including a view on the updated state of the
 968  
      *         document and related actions
 969  
      *
 970  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 971  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 972  
      *         {@code parameters} exists
 973  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 974  
      *         in {@code parameters} exists
 975  
      * @throws InvalidDocumentContentException if the document content on the
 976  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 977  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 978  
      *         action
 979  
      */
 980  
     @WebMethod(operationName = "releaseGroupAuthority")
 981  
     @WebResult(name = "documentActionResult")
 982  
     @XmlElement(name = "documentActionResult", required = true)
 983  
     DocumentActionResult releaseGroupAuthority(
 984  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 985  
             @WebParam(name = "groupId") String groupId)
 986  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 987  
 
 988  
     /**
 989  
      * Triggers the execution of a {@link ActionType#SAVE} action for the given
 990  
      * principal and document specified in the supplied parameters. Saves a document to a
 991  
      * at the current point.
 992  
      *
 993  
      * @param parameters the parameters which indicate which principal is executing the action
 994  
      *        against which document, as well as additional operations to take against the document,
 995  
      *        such as updating document data
 996  
      *
 997  
      * @return the result of executing the action, including a view on the updated state of the
 998  
      *         document and related actions
 999  
      *
 1000  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1001  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1002  
      *         {@code parameters} exists
 1003  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1004  
      *         in {@code parameters} exists
 1005  
      * @throws InvalidDocumentContentException if the document content on the
 1006  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1007  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1008  
      *         action
 1009  
      */
 1010  
     @WebMethod(operationName = "save")
 1011  
     @WebResult(name = "documentActionResult")
 1012  
     @XmlElement(name = "documentActionResult", required = true)
 1013  
     DocumentActionResult save(@WebParam(name = "parameters") DocumentActionParameters parameters)
 1014  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1015  
 
 1016  
     /**
 1017  
      * Triggers the execution of a {@link ActionType#SAVE} action for the given
 1018  
      * principal and document specified in the supplied parameters. Saves the current document data for
 1019  
      * the document.  Note that passing an annotation to this will have no effect because it is not
 1020  
      * recorded in the route log
 1021  
      *
 1022  
      * @param parameters the parameters which indicate which principal is executing the action
 1023  
      *        against which document, as well as additional operations to take against the document,
 1024  
      *        such as updating document data
 1025  
      *
 1026  
      * @return the result of executing the action, including a view on the updated state of the
 1027  
      *         document and related actions
 1028  
      *
 1029  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1030  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1031  
      *         {@code parameters} exists
 1032  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1033  
      *         in {@code parameters} exists
 1034  
      * @throws InvalidDocumentContentException if the document content on the
 1035  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1036  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1037  
      *         action
 1038  
      */
 1039  
     @WebMethod(operationName = "saveDocumentData")
 1040  
     @WebResult(name = "documentActionResult")
 1041  
     @XmlElement(name = "documentActionResult", required = true)
 1042  
     DocumentActionResult saveDocumentData(@WebParam(name = "parameters") DocumentActionParameters parameters)
 1043  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1044  
 
 1045  
     /**
 1046  
      * Deletes the document.
 1047  
      *
 1048  
      * @param documentId the unique id of the document to delete
 1049  
      * @param principalId
 1050  
      *
 1051  
      * @return the document that was removed from the system
 1052  
      *
 1053  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1054  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1055  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} exists
 1056  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1057  
      *         action
 1058  
      */
 1059  
     @WebMethod(operationName = "delete")
 1060  
     @WebResult(name = "document")
 1061  
     @XmlElement(name = "document", required = true)
 1062  
     Document delete(
 1063  
             @WebParam(name = "documentId") String documentId,
 1064  
             @WebParam(name = "principalId") String principalId)
 1065  
             throws RiceIllegalArgumentException, InvalidActionTakenException;
 1066  
 
 1067  
     /**
 1068  
      * Records the non-routed document action. - Checks to make sure the document status
 1069  
      * allows the action. Records the action.
 1070  
      *
 1071  
      * @param documentId the unique id of the document to delete
 1072  
      * @param principalId
 1073  
      *
 1074  
      * @return the document that was removed from the system
 1075  
      *
 1076  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1077  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1078  
      * @throws RiceIllegalArgumentException if {@code annotation} is null
 1079  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} exists
 1080  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1081  
      *         action
 1082  
      */
 1083  
     @WebMethod(operationName = "logAnnotation")
 1084  
     void logAnnotation(
 1085  
             @WebParam(name = "documentId") String documentId,
 1086  
             @WebParam(name = "principalId") String principalId,
 1087  
             @WebParam(name = "annotation") String annotation)
 1088  
             throws RiceIllegalArgumentException, InvalidActionTakenException;
 1089  
 
 1090  
     // TODO  finish javadoc
 1091  
     /**
 1092  
      *
 1093  
      *
 1094  
      * @param documentId the unique id of the document to delete
 1095  
      *
 1096  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1097  
      */
 1098  
     @WebMethod(operationName = "initiateIndexing")
 1099  
     void initiateIndexing(@WebParam(name = "documentId") String documentId)
 1100  
             throws RiceIllegalArgumentException;
 1101  
 
 1102  
 
 1103  
     /**
 1104  
      * Triggers the execution of a {@link ActionType#SU_BLANKET_APPROVE} action for the given
 1105  
      * principal and document specified in the supplied parameters. Does a blanket approve for a super user
 1106  
      * and runs post-processing depending on {@code executePostProcessor}
 1107  
      *
 1108  
      * @param parameters the parameters which indicate which principal is executing the action
 1109  
      *        against which document, as well as additional operations to take against the document,
 1110  
      *        such as updating document data
 1111  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1112  
      *
 1113  
      * @return the result of executing the action, including a view on the updated state of the
 1114  
      *         document and related actions
 1115  
      *
 1116  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1117  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1118  
      *         {@code parameters} exists
 1119  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1120  
      *         in {@code parameters} exists
 1121  
      * @throws InvalidDocumentContentException if the document content on the
 1122  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1123  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1124  
      *         action
 1125  
      */
 1126  
     @WebMethod(operationName = "superUserBlanketApprove")
 1127  
     @WebResult(name = "documentActionResult")
 1128  
     @XmlElement(name = "documentActionResult", required = true)
 1129  
     DocumentActionResult superUserBlanketApprove(
 1130  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1131  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor)
 1132  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1133  
 
 1134  
     /**
 1135  
      * Triggers the execution of a {@link ActionType#SU_APPROVE} action for the given
 1136  
      * principal and document specified in the supplied parameters. Does an approve for a super user
 1137  
      * on a node and runs post-processing depending on {@code executePostProcessor}
 1138  
      *
 1139  
      * @param parameters the parameters which indicate which principal is executing the action
 1140  
      *        against which document, as well as additional operations to take against the document,
 1141  
      *        such as updating document data
 1142  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1143  
      *
 1144  
      * @return the result of executing the action, including a view on the updated state of the
 1145  
      *         document and related actions
 1146  
      *
 1147  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1148  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1149  
      *         {@code parameters} exists
 1150  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1151  
      *         in {@code parameters} exists
 1152  
      * @throws InvalidDocumentContentException if the document content on the
 1153  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1154  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1155  
      *         action
 1156  
      */
 1157  
     @WebMethod(operationName = "superUserNodeApprove")
 1158  
     @WebResult(name = "documentActionResult")
 1159  
     @XmlElement(name = "documentActionResult", required = true)
 1160  
     DocumentActionResult superUserNodeApprove(
 1161  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1162  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor,
 1163  
             @WebParam(name = "nodeName") String nodeName)
 1164  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1165  
 
 1166  
     /**
 1167  
      * Triggers the execution of a {@link ActionType#SU_APPROVE} action for the given
 1168  
      * actionRequestId and principal and document specified in the supplied parameters. Does an approve for a super user
 1169  
      * on a node and runs post-processing depending on {@code executePostProcessor}
 1170  
      *
 1171  
      * @param parameters the parameters which indicate which principal is executing the action
 1172  
      *        against which document, as well as additional operations to take against the document,
 1173  
      *        such as updating document data
 1174  
      * @param actionRequestId unique Id of an action request to take action on
 1175  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1176  
      *
 1177  
      * @return the result of executing the action, including a view on the updated state of the
 1178  
      *         document and related actions
 1179  
      *
 1180  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1181  
      * @throws RiceIllegalArgumentException if (@code actionRequestId}
 1182  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1183  
      *         {@code parameters} exists
 1184  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1185  
      *         in {@code parameters} exists
 1186  
      * @throws InvalidDocumentContentException if the document content on the
 1187  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1188  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1189  
      *         action
 1190  
      */
 1191  
     @WebMethod(operationName = "superUserTakeRequestedAction")
 1192  
     @WebResult(name = "documentActionResult")
 1193  
     @XmlElement(name = "documentActionResult", required = true)
 1194  
     DocumentActionResult superUserTakeRequestedAction(
 1195  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1196  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor,
 1197  
             @WebParam(name = "actionRequestId") String actionRequestId)
 1198  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1199  
 
 1200  
     /**
 1201  
      * Triggers the execution of a {@link ActionType#SU_DISAPPROVE} action for the given
 1202  
      * principal and document specified in the supplied parameters. Does a disapprove for a super user
 1203  
      * on a node and runs post-processing depending on {@code executePostProcessor}
 1204  
      *
 1205  
      * @param parameters the parameters which indicate which principal is executing the action
 1206  
      *        against which document, as well as additional operations to take against the document,
 1207  
      *        such as updating document data
 1208  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1209  
      *
 1210  
      * @return the result of executing the action, including a view on the updated state of the
 1211  
      *         document and related actions
 1212  
      *
 1213  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1214  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1215  
      *         {@code parameters} exists
 1216  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1217  
      *         in {@code parameters} exists
 1218  
      * @throws InvalidDocumentContentException if the document content on the
 1219  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1220  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1221  
      *         action
 1222  
      */
 1223  
     @WebMethod(operationName = "superUserDisapprove")
 1224  
     @WebResult(name = "documentActionResult")
 1225  
     @XmlElement(name = "documentActionResult", required = true)
 1226  
     DocumentActionResult superUserDisapprove(
 1227  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1228  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor)
 1229  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1230  
 
 1231  
     /**
 1232  
      * Triggers the execution of a {@link ActionType#SU_CANCEL} action for the given
 1233  
      * principal and document specified in the supplied parameters. Does an cancel for a super user
 1234  
      * on a node and runs post-processing depending on {@code executePostProcessor}
 1235  
      *
 1236  
      * @param parameters the parameters which indicate which principal is executing the action
 1237  
      *        against which document, as well as additional operations to take against the document,
 1238  
      *        such as updating document data
 1239  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1240  
      *
 1241  
      * @return the result of executing the action, including a view on the updated state of the
 1242  
      *         document and related actions
 1243  
      *
 1244  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1245  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1246  
      *         {@code parameters} exists
 1247  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1248  
      *         in {@code parameters} exists
 1249  
      * @throws InvalidDocumentContentException if the document content on the
 1250  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1251  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1252  
      *         action
 1253  
      */
 1254  
     @WebMethod(operationName = "superUserCancel")
 1255  
     @WebResult(name = "documentActionResult")
 1256  
     @XmlElement(name = "documentActionResult", required = true)
 1257  
     DocumentActionResult superUserCancel(
 1258  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1259  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor)
 1260  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1261  
 
 1262  
     /**
 1263  
      * Triggers the execution of a {@link ActionType#SU_RETURN_TO_PREVIOUS} action for the given
 1264  
      * principal and document specified in the supplied parameters. Returns the document to the
 1265  
      * previous node for a super user on a node and runs post-processing depending on {@code executePostProcessor}
 1266  
      *
 1267  
      * @param parameters the parameters which indicate which principal is executing the action
 1268  
      *        against which document, as well as additional operations to take against the document,
 1269  
      *        such as updating document data
 1270  
      * @param executePostProcessor boolean value determining if the post-processor should be run or not
 1271  
      * @param returnPoint point to return to
 1272  
      *
 1273  
      * @return the result of executing the action, including a view on the updated state of the
 1274  
      *         document and related actions
 1275  
      *
 1276  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1277  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1278  
      *         {@code parameters} exists
 1279  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1280  
      *         in {@code parameters} exists
 1281  
      * @throws InvalidDocumentContentException if the document content on the
 1282  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1283  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1284  
      *         action
 1285  
      */
 1286  
     @WebMethod(operationName = "superUserReturnToPreviousNode")
 1287  
     @WebResult(name = "documentActionResult")
 1288  
     @XmlElement(name = "documentActionResult", required = true)
 1289  
     DocumentActionResult superUserReturnToPreviousNode(
 1290  
             @WebParam(name = "parameters") DocumentActionParameters parameters,
 1291  
             @WebParam(name = "executePostProcessor") boolean executePostProcessor,
 1292  
             @WebParam(name = "returnPoint") ReturnPoint returnPoint)
 1293  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1294  
 
 1295  
     /**
 1296  
      * Places a document in exception routing or the given principal and document specified in the supplied parameters.
 1297  
      *
 1298  
      * @param parameters the parameters which indicate which principal is executing the action
 1299  
      *        against which document, as well as additional operations to take against the document,
 1300  
      *        such as updating document data
 1301  
      *
 1302  
      * @return the result of executing the action, including a view on the updated state of the
 1303  
      *         document and related actions
 1304  
      *
 1305  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1306  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1307  
      *         {@code parameters} exists
 1308  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1309  
      *         in {@code parameters} exists
 1310  
      * @throws InvalidDocumentContentException if the document content on the
 1311  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1312  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1313  
      *         action
 1314  
      */
 1315  
     @WebMethod(operationName = "placeInExceptionRouting")
 1316  
     @WebResult(name = "documentActionResult")
 1317  
     @XmlElement(name = "documentActionResult", required = true)
 1318  
     DocumentActionResult placeInExceptionRouting(@WebParam(name = "parameters") DocumentActionParameters parameters)
 1319  
             throws RiceIllegalArgumentException, InvalidDocumentContentException, InvalidActionTakenException;
 1320  
 
 1321  
     /**
 1322  
      * Validates a workflow attribute definition and returns a list of validation errors
 1323  
      *
 1324  
      * @param definition WorkflowAttributeDefinition to validate
 1325  
      *
 1326  
      * @return a list of WorkflowAttributeValidationErrors caused by validation of the passed in {@code definition}
 1327  
      *
 1328  
      * @throws RiceIllegalArgumentException if {@code parameters} is null
 1329  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1330  
      *         {@code parameters} exists
 1331  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1332  
      *         in {@code parameters} exists
 1333  
      * @throws InvalidDocumentContentException if the document content on the
 1334  
      *         {@link DocumentContentUpdate} supplied with the {@code parameters} is invalid.
 1335  
      * @throws InvalidActionTakenException if the supplied principal is not allowed to execute this
 1336  
      *         action
 1337  
      */
 1338  
     @WebMethod(operationName = "validateWorkflowAttributeDefinition")
 1339  
     @WebResult(name = "validationErrors")
 1340  
     @XmlElementWrapper(name = "validationErrors", required = true)
 1341  
     @XmlElement(name = "validationError", required = true)
 1342  
     List<WorkflowAttributeValidationError> validateWorkflowAttributeDefinition(
 1343  
             @WebParam(name = "definition") WorkflowAttributeDefinition definition)
 1344  
             throws RiceIllegalArgumentException;
 1345  
 
 1346  
     // TODO add, annotate, and javadoc the following methods to this service
 1347  
     /**
 1348  
      * Determines if a passed in user exists in a document's route log or future route depending on the passed in
 1349  
      * {@code lookFuture} value
 1350  
      *
 1351  
      * @param documentId unique Id of document
 1352  
      * @param principalId unique Id of Principal to look for in document's route log
 1353  
      * @param lookFuture boolean value determines whether or not to look at the future route log
 1354  
      *
 1355  
      * @return boolean value representing if a principal exists in a Document's route log
 1356  
      *
 1357  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1358  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1359  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1360  
      *         {@code parameters} exists
 1361  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1362  
      *         in {@code parameters} exists
 1363  
      */
 1364  
     @WebMethod(operationName = "isUserInRouteLog")
 1365  
     @WebResult(name = "userInRouteLog")
 1366  
     boolean isUserInRouteLog(
 1367  
             @WebParam(name = "documentId") String documentId,
 1368  
             @WebParam(name = "principalId") String principalId,
 1369  
             @WebParam(name = "lookFuture") boolean lookFuture)
 1370  
             throws RiceIllegalArgumentException;
 1371  
 
 1372  
     /**
 1373  
      * Determines if a passed in user exists in a document's route log or future route depending on the passed in
 1374  
      * {@code lookFuture} value and {@code flattenNodes}
 1375  
      *
 1376  
      * @param documentId unique Id of document
 1377  
      * @param principalId unique Id of Principal to look for in document's route log
 1378  
      * @param lookFuture boolean value determines whether or not to look at the future route log
 1379  
      *
 1380  
      * @return boolean value representing if a principal exists in a Document's route log
 1381  
      *
 1382  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1383  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1384  
      * @throws RiceIllegalArgumentException if no document with the {@code documentId} specified in
 1385  
      *         {@code parameters} exists
 1386  
      * @throws RiceIllegalArgumentException if no principal with the {@code principalId} specified
 1387  
      *         in {@code parameters} exists
 1388  
      */
 1389  
     @WebMethod(operationName = "isUserInRouteLogWithOptionalFlattening")
 1390  
     @WebResult(name = "userInRouteLogWithOptionalFlattening")
 1391  
     boolean isUserInRouteLogWithOptionalFlattening(
 1392  
             @WebParam(name = "documentId") String documentId,
 1393  
             @WebParam(name = "principalId") String principalId,
 1394  
             @WebParam(name = "lookFuture") boolean lookFuture,
 1395  
             @WebParam(name = "flattenNodes") boolean flattenNodes)
 1396  
             throws RiceIllegalArgumentException;
 1397  
 
 1398  
     /**
 1399  
      * Re-resolves the given role for all documents for the given document type (including children).
 1400  
      *
 1401  
      * @param documentTypeName documentTypeName of DocuemntType for role
 1402  
      * @param roleName name of Role to reresolve
 1403  
      * @param qualifiedRoleNameLabel qualified role name label
 1404  
      *
 1405  
      * @throws RiceIllegalArgumentException if {@code documentTypeName} is null
 1406  
      * @throws RiceIllegalArgumentException if {@code roleName} is null
 1407  
      * @throws RiceIllegalArgumentException if {@code qualifiedRoleNameLable} is null
 1408  
      */
 1409  
     @WebMethod(operationName = "reResolveRoleByDocTypeName")
 1410  
     void reResolveRoleByDocTypeName(
 1411  
                     @WebParam(name = "documentTypeName") String documentTypeName,
 1412  
                     @WebParam(name = "roleName") String roleName,
 1413  
                     @WebParam(name = "qualifiedRoleNameLabel") String qualifiedRoleNameLabel)
 1414  
             throws RiceIllegalArgumentException;
 1415  
 
 1416  
     /**
 1417  
      * Re-resolves the given role for all documents for the given document id (including children).
 1418  
      *
 1419  
      * @param documentId documentId of Docuemnt for role
 1420  
      * @param roleName name of Role to reresolve
 1421  
      * @param qualifiedRoleNameLabel qualified role name label
 1422  
      *
 1423  
      * @throws RiceIllegalArgumentException if {@code documentTypeName} is null
 1424  
      * @throws RiceIllegalArgumentException if {@code roleName} is null
 1425  
      * @throws RiceIllegalArgumentException if {@code qualifiedRoleNameLable} is null
 1426  
      */
 1427  
     @WebMethod(operationName = "reResolveRoleByDocumentId")
 1428  
     void reResolveRoleByDocumentId(
 1429  
                     @WebParam(name = "documentId") String documentId,
 1430  
                     @WebParam(name = "roleName") String roleName,
 1431  
                     @WebParam(name = "qualifiedRoleNameLabel") String qualifiedRoleNameLabel)
 1432  
             throws RiceIllegalArgumentException;
 1433  
 
 1434  
     /**
 1435  
      * Executes a simulation of a document to get all previous and future route information
 1436  
      *
 1437  
      * @param reportCriteria criteria for the simulation to follow
 1438  
      *
 1439  
      * @return DocumentDetail object representing the results of the simulation
 1440  
      *
 1441  
      * @throws RiceIllegalArgumentException if {@code reportCriteria} is null
 1442  
      */
 1443  
     @WebMethod(operationName = "executeSimulation")
 1444  
     @WebResult(name = "documentDetail")
 1445  
     DocumentDetail executeSimulation(
 1446  
             @WebParam(name = "reportCriteria") RoutingReportCriteria reportCriteria)
 1447  
             throws RiceIllegalArgumentException;
 1448  
 
 1449  
     /**
 1450  
      * Determines if a passed in user is the final approver for a document
 1451  
      *
 1452  
      * @param documentId unique Id of the document
 1453  
      * @param principalId unique Id of Principal to look for in document's route log
 1454  
      *
 1455  
      * @return boolean value representing if a principal is the final approver for a document
 1456  
      *
 1457  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1458  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1459  
      */
 1460  
     @WebMethod(operationName = "isFinalApprover")
 1461  
     @WebResult(name = "finalApprover")
 1462  
     boolean isFinalApprover(
 1463  
                 @WebParam(name = "documentId") String documentId,
 1464  
                     @WebParam(name = "principalId") String principalId)
 1465  
             throws RiceIllegalArgumentException;
 1466  
 
 1467  
     /**
 1468  
      * Determines if a passed in user is the last approver at a specified route node
 1469  
      *
 1470  
      * @param documentId unique Id of the document
 1471  
      * @param principalId unique Id of Principal to look for in document's route log
 1472  
      * @param nodeName name of route node to determine last approver for
 1473  
      *
 1474  
      * @return boolean value representing if a principal is the last approver at the specified route node
 1475  
      *
 1476  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1477  
      * @throws RiceIllegalArgumentException if {@code principalId} is null
 1478  
      * @throws RiceIllegalArgumentException if {@code nodeName} is null
 1479  
      */
 1480  
     @WebMethod(operationName = "isLastApproverAtNode")
 1481  
     @WebResult(name = "lastApproverAtNode")
 1482  
     boolean isLastApproverAtNode(
 1483  
                     @WebParam(name = "documentId") String documentId,
 1484  
                     @WebParam(name = "principalId") String principalId,
 1485  
                     @WebParam(name = "nodeName") String nodeName)
 1486  
             throws RiceIllegalArgumentException;
 1487  
 
 1488  
     /**
 1489  
      * Determines if a route node has an 'approve action' request
 1490  
      *
 1491  
      * @param docType document type of document
 1492  
      * @param docContent string representing content of document
 1493  
      * @param nodeName name of route node to determine if approve action request exists
 1494  
      *
 1495  
      * @return boolean value representing if a route node has an 'approve action' request
 1496  
      *
 1497  
      * @throws RiceIllegalArgumentException if {@code docType} is null
 1498  
      * @throws RiceIllegalArgumentException if {@code docContent} is null
 1499  
      * @throws RiceIllegalArgumentException if {@code nodeName} is null
 1500  
      */
 1501  
     @WebMethod(operationName = "routeNodeHasApproverActionRequest")
 1502  
     @WebResult(name = "routeNodeHasApproverActionRequest")
 1503  
     boolean routeNodeHasApproverActionRequest(
 1504  
                     @WebParam(name = "docType") String docType,
 1505  
                     @WebParam(name = "docContent") String docContent,
 1506  
                     @WebParam(name = "nodeName") String nodeName)
 1507  
             throws RiceIllegalArgumentException;
 1508  
 
 1509  
     /**
 1510  
      * Determines if a document has at least one action request
 1511  
      *
 1512  
      * @param reportCriteria criteria for routing report
 1513  
      * @param actionRequestedCodes list of action request codes to see if they exist for the document
 1514  
      * @param ignoreCurrentActionRequests boolean value to determine if current action requests should be ignored
 1515  
      *
 1516  
      * @return boolean value representing if a document will have at least one action request
 1517  
      *
 1518  
      * @throws RiceIllegalArgumentException if {@code docType} is null
 1519  
      * @throws RiceIllegalArgumentException if {@code docContent} is null
 1520  
      * @throws RiceIllegalArgumentException if {@code nodeName} is null
 1521  
      */
 1522  
     @WebMethod(operationName = "documentWillHaveAtLeastOneActionRequest")
 1523  
     @WebResult(name = "documentWillHaveAtLeastOneActionRequest")
 1524  
     boolean documentWillHaveAtLeastOneActionRequest(
 1525  
                     @WebParam(name = "reportCriteria") RoutingReportCriteria reportCriteria,
 1526  
                     @WebParam(name = "actionRequestedCodes") List<String> actionRequestedCodes,
 1527  
                     @WebParam(name = "ignoreCurrentActionRequests") boolean ignoreCurrentActionRequests)
 1528  
             throws RiceIllegalArgumentException;
 1529  
 
 1530  
     /**
 1531  
      * Returns a list of principal Ids that exist in a route log
 1532  
      *
 1533  
      * @param documentId unique id of the document to get the route log for
 1534  
      * @param lookFuture boolean value that determines if the method should look at future action requests
 1535  
      *
 1536  
      * @return list of principal ids that exist in a route log
 1537  
      *
 1538  
      * @throws RiceIllegalArgumentException if {@code documentId} is null
 1539  
      */
 1540  
     @WebMethod(operationName = "getPrincipalIdsInRouteLog")
 1541  
     @WebResult(name = "principalIds")
 1542  
     @XmlElementWrapper(name = "principalIds", required = true)
 1543  
     @XmlElement(name = "principalId", required = true)
 1544  
     List<String> getPrincipalIdsInRouteLog(
 1545  
                     @WebParam(name = "documentId") String documentId,
 1546  
                     @WebParam(name = "lookFuture") boolean lookFuture)
 1547  
             throws RiceIllegalArgumentException;
 1548  
 
 1549  
 }