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