Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
RouteNodeService |
|
| 1.0;1 |
1 | /** | |
2 | * Copyright 2005-2011 The Kuali Foundation | |
3 | * | |
4 | * Licensed under the Educational Community License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.opensource.org/licenses/ecl2.php | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | package org.kuali.rice.kew.engine.node.service; | |
17 | ||
18 | import org.kuali.rice.kew.doctype.bo.DocumentType; | |
19 | import org.kuali.rice.kew.engine.node.Branch; | |
20 | import org.kuali.rice.kew.engine.node.NodeGraphSearchCriteria; | |
21 | import org.kuali.rice.kew.engine.node.NodeGraphSearchResult; | |
22 | import org.kuali.rice.kew.engine.node.NodeState; | |
23 | import org.kuali.rice.kew.engine.node.ProcessDefinitionBo; | |
24 | import org.kuali.rice.kew.engine.node.RouteNode; | |
25 | import org.kuali.rice.kew.engine.node.RouteNodeInstance; | |
26 | import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue; | |
27 | ||
28 | import java.util.List; | |
29 | ||
30 | ||
31 | /** | |
32 | * A service which provides data access for {@link RouteNode}, {@link RouteNodeInstance}, | |
33 | * {@link NodeState}, and {@link Branch} objects. | |
34 | * | |
35 | * @author Kuali Rice Team (rice.collab@kuali.org) | |
36 | */ | |
37 | public interface RouteNodeService { | |
38 | ||
39 | public void save(RouteNode node); | |
40 | public void save(RouteNodeInstance nodeInstance); | |
41 | public void save(NodeState nodeState); | |
42 | public void save(Branch branch); | |
43 | public RouteNode findRouteNodeById(String nodeId); | |
44 | public RouteNodeInstance findRouteNodeInstanceById(String nodeInstanceId); | |
45 | ||
46 | /** | |
47 | * | |
48 | * This method looks though the passed in DocumentRouteHeaderValue and retrieves a nodeInstance that | |
49 | * matches the ID passed in. | |
50 | * | |
51 | * @param nodeInstanceId | |
52 | * @param document | |
53 | * @return | |
54 | */ | |
55 | public RouteNodeInstance findRouteNodeInstanceById(String nodeInstanceId, DocumentRouteHeaderValue document); | |
56 | ||
57 | /** | |
58 | * Retrieves the initial node instances of the given document. The initial node instances are | |
59 | * those node instances which are at the very beginning of the route. Usually, this will | |
60 | * just be a single node instance. | |
61 | */ | |
62 | public List getInitialNodeInstances(String documentId); | |
63 | ||
64 | /** | |
65 | * Retrieves the active node instances of the given Document. The active node instances | |
66 | * represent where in the route path the document is currently located. | |
67 | * @param documentId of the document | |
68 | * @return list of route node instances | |
69 | */ | |
70 | public List<RouteNodeInstance> getActiveNodeInstances(String documentId); | |
71 | ||
72 | public List<RouteNodeInstance> getActiveNodeInstances(DocumentRouteHeaderValue document); | |
73 | ||
74 | /** | |
75 | * Retrieves the terminal node instances of the given Document. The terminal node instances | |
76 | * are nodes in the route path which are both inactive and complete and have no next nodes | |
77 | * in their path. Terminal node instances will typically only exist on documents which are no | |
78 | * longer Enroute. | |
79 | * @param documentId for the given Document | |
80 | * @return list of terminal node instances | |
81 | */ | |
82 | public List<RouteNodeInstance> getTerminalNodeInstances(String documentId); | |
83 | ||
84 | /** | |
85 | * Returns the node instances representing the most recent node instances in the document. | |
86 | * The algorithm for locating the current nodes is as follows: If the document has | |
87 | * active node instances, return those, otherwise return it's terminal node instances. | |
88 | */ | |
89 | public List<RouteNodeInstance> getCurrentNodeInstances(String documentId); | |
90 | ||
91 | public NodeState findNodeState(Long nodeInstanceId, String key); | |
92 | public RouteNode findRouteNodeByName(String documentTypeId, String name); | |
93 | public List<RouteNode> findFinalApprovalRouteNodes(String documentTypeId); | |
94 | public List findNextRouteNodesInPath(RouteNodeInstance nodeInstance, String nodeName); | |
95 | public boolean isNodeInPath(DocumentRouteHeaderValue document, String nodeName); | |
96 | public List findRouteNodeInstances(String documentId); | |
97 | public List findProcessNodeInstances(RouteNodeInstance process); | |
98 | public List<String> findPreviousNodeNames(String documentId); | |
99 | ||
100 | /** | |
101 | * Returns a List of the distinct node names through which this document might pass in it's future | |
102 | * routing. In certain cases this will be an approximation based on what the system knows at the | |
103 | * time of execution. | |
104 | */ | |
105 | public List<String> findFutureNodeNames(String documentId); | |
106 | ||
107 | /** | |
108 | * Flatten all the document types route nodes into a single List. This includes all processes | |
109 | * on the DocumentType. | |
110 | * | |
111 | * @param documentType DocumentType who's nodes will be flattened. | |
112 | * @param climbHierarchy whether to include the parents nodes if the passed in DocumentType contains no nodes | |
113 | * @return List or empty List | |
114 | */ | |
115 | public List<RouteNode> getFlattenedNodes(DocumentType documentType, boolean climbHierarchy); | |
116 | public List<RouteNode> getFlattenedNodes(ProcessDefinitionBo process); | |
117 | ||
118 | /** | |
119 | * Returns a flattened list of RouteNodeInstances on the given document. If the includeProcesses flag is | |
120 | * true than this method includes process RouteNodeInstances, otherwise they are excluded. | |
121 | * which are processes. | |
122 | * @param document route header value | |
123 | * @param includeProcesses flag | |
124 | * @return list of routeNodeInstances | |
125 | */ | |
126 | public List<RouteNodeInstance> getFlattenedNodeInstances(DocumentRouteHeaderValue document, boolean includeProcesses); | |
127 | ||
128 | public NodeGraphSearchResult searchNodeGraph(NodeGraphSearchCriteria criteria); | |
129 | ||
130 | /** | |
131 | * Returns a list of active node instances associated with the document that are active | |
132 | * @param document | |
133 | * @param nodeName | |
134 | * @return | |
135 | */ | |
136 | public List<RouteNodeInstance> getActiveNodeInstances(DocumentRouteHeaderValue document, String nodeName); | |
137 | public void deleteByRouteNodeInstance(RouteNodeInstance routeNodeInstance); | |
138 | public void deleteNodeStateById(Long nodeStateId); | |
139 | public void deleteNodeStates(List statesToBeDeleted); | |
140 | ||
141 | /** | |
142 | * Record that the given RouteNodeInstance on the Document was revoked. This will happen when an | |
143 | * action such as Return to Previous or Move Document bypasses the given RouteNodeInstance on it's | |
144 | * path back to a previous point in the history of the document's route path. | |
145 | */ | |
146 | public void revokeNodeInstance(DocumentRouteHeaderValue document, RouteNodeInstance nodeInstance); | |
147 | ||
148 | /** | |
149 | * Returns a List of the revoked RouteNodeInstances on the given Document. | |
150 | * | |
151 | * @see revokeNodeInstance | |
152 | */ | |
153 | public List getRevokedNodeInstances(DocumentRouteHeaderValue document); | |
154 | ||
155 | } |