The definition of a flow, a program that when executed carries out a task on behalf of a single client.
A flow definition is a reusable, self-contained controller module that defines a blue print for an executable user task. Flows typically orchestrate controlled navigations or dialogs within web applications to guide users through fulfillment of a business process/goal that takes place over a series of steps, modeled as states.
Structurally a flow definition is composed of a set of states. A {@link StateDefinition state} is a point in a flowwhere a behavior is executed; for example, showing a view, executing an action, spawning a subflow, or terminating the flow. Different types of states execute different behaviors in a polymorphic fashion. Most states are {@link TransitionableStateDefinition transitionable states}, meaning they can respond to events by taking the flow from one state to another.
Each flow has exactly one {@link #getStartState() start state} which defines the starting point of the program.
This interface exposes the flow's identifier, states, and other definitional attributes. It is suitable for introspection by tools as well as user-code at flow execution time.
Flow definitions may be annotated with attributes.
@author Keith Donald
@author Erwin Vervaet