/*
* @(#)StateEngine.java 1.9 03/12/19
*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.sun.corba.se.spi.orbutil.fsm;
/**
* A StateEngine defines the state transition function for a
* finite state machine (FSM). A FSM always has a current state.
* In response to an Input, the FSM performs an Action and
* makes a transition to a new state. Note that any object can
* be used as an input if it supports the Input interface.
* For example, a protocol message may be an input. The FSM
* uses only the result of calling getLabel on the Input to
* drive the transition.
* <p>
* The function can be non-deterministic
* in that the same input may cause transitions to different new
* states from the current state. In this case, the action that
* is executed for the transition must set the correct new state.
*
* @version @(#)StateEngine.java 1.9 03/12/19
* @author Ken Cavanaugh
*/
public interface StateEngine
{
/** Add a new transition (old,in,guard,act,new) to the state engine.
* Multiple calls to add with the same old and in are permitted,
* in which case only a transition in which the guard evaluates to
* true will be taken. If no such transition is enabled, a default
* will be taken. If more than one transition is enabled, one will
* be chosen arbitrarily.
* This method can only be called before done(). An attempt to
* call it after done() results in an IllegalStateException.
*/
public StateEngine add( State oldState, Input input, Guard guard,
Action action, State newState ) throws IllegalStateException ;
/** Add a transition with a guard that always evaluates to true.
*/
public StateEngine add( State oldState, Input input,
Action action, State newState ) throws IllegalStateException ;
/** Set the default transition and action for a state.
* This transition will be used if no more specific transition was
* defined for the actual input. Repeated calls to this method
* simply change the default.
* This method can only be called before done(). An attempt to
* call it after done() results in an IllegalStateException.
*/
public StateEngine setDefault( State oldState, Action action, State newState )
throws IllegalStateException ;
/** Equivalent to setDefault( oldState, act, newState ) where act is an
* action that does nothing.
*/
public StateEngine setDefault( State oldState, State newState )
throws IllegalStateException ;
/** Euaivalent to setDefault( oldState, oldState )
*/
public StateEngine setDefault( State oldState )
throws IllegalStateException ;
/** Set the default action used in this state engine. This is the
* action that is called whenever there is no applicable transition.
* Normally this would simply flag an error. This method can only
* be called before done(). An attempt to
* call it after done() results in an IllegalStateException.
*/
public void setDefaultAction( Action act ) throws IllegalStateException ;
/** Called after all transitions have been added to the state engine.
* This provides an opportunity for the implementation to optimize
* its representation before the state engine is used. This method
* may only be called once. An attempt to call it more than once
* results in an IllegalStateException.
*/
public void done() throws IllegalStateException ;
/** Create an instance of a FSM that uses this state engine.
* The initial state of the FSM will be the stateState specified
* here. This method can only be called after done(). An attempt
* to call it before done results in an IllegalStateException.
*/
public FSM makeFSM( State startState ) throws IllegalStateException ;
}
// end of StateEngine.java
|