001: /*
002: * Copyright 2005-2006 The Kuali Foundation.
003: *
004: *
005: * Licensed under the Educational Community License, Version 1.0 (the "License");
006: * you may not use this file except in compliance with the License.
007: * You may obtain a copy of the License at
008: *
009: * http://www.opensource.org/licenses/ecl1.php
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package edu.iu.uis.eden.engine.node;
018:
019: import java.util.List;
020: import java.util.Set;
021:
022: import edu.iu.uis.eden.doctype.DocumentType;
023: import edu.iu.uis.eden.routeheader.DocumentRouteHeaderValue;
024:
025: /**
026: * A service which provides data access for {@link RouteNode}, {@link RouteNodeInstance},
027: * {@link NodeState}, and {@link Branch} objects.
028: *
029: * @author ewestfal
030: * @author rkirkend
031: */
032: public interface RouteNodeService {
033:
034: public void save(RouteNode node);
035:
036: public void save(RouteNodeInstance nodeInstance);
037:
038: public void save(NodeState nodeState);
039:
040: public void save(Branch branch);
041:
042: public RouteNode findRouteNodeById(Long nodeId);
043:
044: public RouteNodeInstance findRouteNodeInstanceById(
045: Long nodeInstanceId);
046:
047: /**
048: * Retrieves the initial node instances of the given document. The initial node instances are
049: * those node instances which are at the very beginning of the route. Usually, this will
050: * just be a single node instance.
051: */
052: public List getInitialNodeInstances(Long documentId);
053:
054: /**
055: * Retrieves the active node instances of the given Document. The active node instances
056: * represent where in the route path the document is currently located.
057: */
058: public List getActiveNodeInstances(Long documentId);
059:
060: public List getActiveNodeInstances(DocumentRouteHeaderValue document);
061:
062: /**
063: * Retrieves the terminal node instances of the given Document. The terminal node instances
064: * are nodes in the route path which are both inactive and complete and have no next nodes
065: * in their path. Terminal node instances will typically only exist on documents which are no
066: * longer Enroute.
067: */
068: public List getTerminalNodeInstances(Long documentId);
069:
070: /**
071: * Returns the node instances representing the most recent node instances in the document.
072: * The algorithm for locating the current nodes is as follows: If the document has
073: * active node instances, return those, otherwise return it's terminal node instances.
074: */
075: public List getCurrentNodeInstances(Long documentId);
076:
077: public NodeState findNodeState(Long nodeInstanceId, String key);
078:
079: public RouteNode findRouteNodeByName(Long documentTypeId,
080: String name);
081:
082: public List findFinalApprovalRouteNodes(Long documentTypeId);
083:
084: public List findNextRouteNodesInPath(
085: RouteNodeInstance nodeInstance, String nodeName);
086:
087: public boolean isNodeInPath(DocumentRouteHeaderValue document,
088: String nodeName);
089:
090: public List findRouteNodeInstances(Long documentId);
091:
092: public List findProcessNodeInstances(RouteNodeInstance process);
093:
094: public Set findPreviousNodeNames(Long documentId);
095:
096: public Set findFutureNodeNames(Long documentId);
097:
098: /**
099: * Flatten all the document types route nodes into a single List. This includes all processes
100: * on the DocumentType.
101: *
102: * @param documentType DocumentType who's nodes will be flattened.
103: * @param climbHierarchy whether to include the parents nodes if the passed in DocumentType contains no nodes
104: * @return List or empty List
105: */
106: public List getFlattenedNodes(DocumentType documentType,
107: boolean climbHierarchy);
108:
109: public List getFlattenedNodes(Process process);
110:
111: /**
112: * Returns a flattened list of RouteNodeInstances on the given document. If the includeProcesses flag is
113: * true than this method includes process RouteNodeInstances, otherwise they are excluded.
114: * which are processes.
115: */
116: public List getFlattenedNodeInstances(
117: DocumentRouteHeaderValue document, boolean includeProcesses);
118:
119: public NodeGraphSearchResult searchNodeGraph(
120: NodeGraphSearchCriteria criteria);
121:
122: /**
123: * Returns a list of active node instances associated with the document that are active
124: * @param document
125: * @param nodeName
126: * @return
127: */
128: public List getActiveNodeInstances(
129: DocumentRouteHeaderValue document, String nodeName);
130:
131: public void deleteByRouteNodeInstance(
132: RouteNodeInstance routeNodeInstance);
133:
134: public void deleteNodeStateById(Long nodeStateId);
135:
136: public void deleteNodeStates(List statesToBeDeleted);
137:
138: /**
139: * Record that the given RouteNodeInstance on the Document was revoked. This will happen when an
140: * action such as Return to Previous or Move Document bypasses the given RouteNodeInstance on it's
141: * path back to a previous point in the history of the document's route path.
142: */
143: public void revokeNodeInstance(DocumentRouteHeaderValue document,
144: RouteNodeInstance nodeInstance);
145:
146: /**
147: * Returns a List of the revoked RouteNodeInstances on the given Document.
148: *
149: * @see revokeNodeInstance
150: */
151: public List getRevokedNodeInstances(
152: DocumentRouteHeaderValue document);
153:
154: }
|