package ee.telekom.workflow.graph;
import java.util.Date;
import java.util.Map;
import ee.telekom.workflow.core.workitem.WorkItem;
/**
* A {@link GraphEngine} is the interface that is internally used used to
* communicated with a graph engine.
*/
public interface GraphEngine extends GraphEngineFacade{
/**
* Adds a new, active token to the given instance pointing to the given node
* with the given parent.
*
* @param instance
* the instance to add to
* @param node
* the node that the new token will point to
* @param parent
* the new token's parent token
* @return the new token
*/
Token addToken( GraphInstance instance, Node node, Token parent );
/**
* Adds a new {@link SignalItem} to the given instance which is associated
* to the given token. The {@link SignalItem} is awaiting a signal with the
* given name.
*
* @param instance
* the instance to add the new signal item to
* @param token
* the token to associate the signal item with
* @param signal
* the signal's name to wait for
* @return the new signal item
*/
GraphWorkItem addSignalItem( GraphInstance instance, Token token, String signal );
/**
* Adds a new {@link TimerItem} to the given instance which is associated to
* the given token. The {@link TimerItem} is awaiting the given dueDate.
*
* @param instance
* the instance to add the new timer item to
* @param token
* the token to associate the timer item with
* @param dueDate
* the due date to wait for
* @return the new timer item
*/
GraphWorkItem addTimerItem( GraphInstance instance, Token token, Date dueDate );
/**
* Adds a new {@link TaskItem} to the given instance which is associated to
* the given token. The {@link TaskItem} is awaiting external execution.
*
* @param instance
* the instance to add the new task item to
* @param token
* the token to associate the task item with
* @param bean
* the bean to call a method on
* @param method
* the method to call to
* @param arguments
* the method call's arguments
* @return the new task item
*/
GraphWorkItem addTaskItem( GraphInstance instance, Token token, String bean,
String method, Object[] arguments );
/**
* Adds a new {@link HumanTaskItem} to the given instance which is
* associated to the given token. The {@link HumanTaskItem} is awaiting
* external resolution.
*
* @param instance
* the instance to add the new human task item to
* @param token
* the token to associate the human task item with
* @param role
* the role a user must be assigned to resolve the given task
* @param user
* the user the task is assigned to or <code>null</code> if the
* assignment is role based.
* @param arguments
* the task arguments
* @return the new human task item
*/
GraphWorkItem addHumanTaskItem( GraphInstance instance, Token token, String role,
String user, Map<String, Object> arguments );
/**
* If existent, cancels the active work item associated with the given
* token.
*/
void cancelWorkItem( Token token );
/**
* A shorthand for {@link #complete(Token, Object, String)} using a the
* default transition name {@link Transition#DEFAULT_TRANSITION_NAME}.
*/
void complete( Token token, Object result );
/**
* Finishes the execution of the given {@link Token}'s current {@link Node}
* on the associated {@link GraphInstance}. The method will take the
* required steps to merge the given result into the graph instance's
* {@link Environment} and to continue the token's execution along the
* {@link Transition} with the given name.
*
* <p>
*
* If a call to {@link Node#execute(GraphEngine, Token)} does not contain a
* call to this method, then the token's execution halts at that point. This
* is generally referred to as a wait state. This occurs, for example, if
* the action represented by that node must be done by a human or some
* external system.
*
* <br/>
*
* When the external system has determined that the {@link Node} has
* completed its work, it should invoke
* {@link GraphEngineFacade#complete(WorkItem)} to continue executing the
* graph instance.
*
*
* @param token
* The token to continue execution on
* @param result
* The result of the node execution
* @param transitionName
* The transition's name along which to continue execution
*
*/
void complete( Token token, Object result, String transitionName );
/**
* Cancels the given token. I.e. marks the token as inactive an call's the
* {@link Node#cancel(GraphEngine, Token)} on the node that this token is
* currently pointing to.
*/
void cancel( Token token );
/**
* Marks the given token and all direct parent tokens active that do not
* have any further active child tokens.
*/
void terminate( Token token );
}