Package org.zkoss.fsm
Class StateMachine<E,C,IN>
- java.lang.Object
-
- org.zkoss.fsm.StateMachine<E,C,IN>
-
public abstract class StateMachine<E,C,IN> extends java.lang.Object
A Finite State Machine implementation. This state machine is callback based, which differs from the standard FSM from textbook. Easier to use and faster to develop and debug.- Since:
- 6.0.0
- Author:
- simonpai
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
StateMachine.StateMachineException
-
Constructor Summary
Constructors Constructor Description StateMachine()
Construct a state machine
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
afterStep(IN input, C inputClass, E origin, E destination)
This method is called after executing a stepprotected void
beforeStep(IN input, C inputClass, E origin)
This method is called before executing a stepprotected void
doDebug(java.lang.String message)
Manually send a debug messageprotected void
doReject(IN input)
Reject a characterprotected abstract C
getClass(IN input)
Determines the class for an input character.E
getCurrentState()
Return the current stateprotected abstract E
getLandingState(IN input, C inputClass)
Determines the initial state upon meeting the input character and classStateCtx<E,C,IN>
getState(E token)
Get the state by token.StateCtx<E,C,IN>
getState(E token, boolean autoCreate)
Get the state by token.protected void
init()
Called at the constructor of state machineboolean
isSuspended()
Return true if the machine is suspendedboolean
isTerminated()
Return true if the machine is stoppedprotected void
onDebug(java.lang.String message)
This method is call at certain situations when debug mode is on.protected void
onReject(IN input)
This method is called when the machine rejects an input characterprotected void
onReset()
This method is called at constructor and when reseting the machine.protected void
onStart(IN input, C inputClass, E landing)
This method is called when the machine takes the first character.protected void
onStop(boolean endOfInput)
This method is called when the machine stopsStateCtx<E,C,IN>
removeState(E token)
Remove the state by token.void
run(IN input)
Feed the machine a single charactervoid
run(java.util.Iterator<IN> inputs)
Feed the machine a stream of charactersStateMachine<E,C,IN>
setDebugMode(boolean mode)
Set debug mode, whereonDebug(String)
is called at certain timing to assist user develop the state machineStateCtx<E,C,IN>
setState(E token, StateCtx<E,C,IN> state)
Set the state by tokenvoid
start(IN input)
Starts the machine with a single input character.void
start(java.util.Iterator<IN> inputs)
Starts the machine with a stream of input characters.protected void
suspend()
Suspend the machinevoid
terminate()
Terminates the machine.
-
-
-
Method Detail
-
setDebugMode
public StateMachine<E,C,IN> setDebugMode(boolean mode)
Set debug mode, whereonDebug(String)
is called at certain timing to assist user develop the state machine
-
setState
public StateCtx<E,C,IN> setState(E token, StateCtx<E,C,IN> state)
Set the state by token- Returns:
- the state
-
removeState
public StateCtx<E,C,IN> removeState(E token)
Remove the state by token.- Returns:
- the removed state
-
getState
public StateCtx<E,C,IN> getState(E token)
Get the state by token. Automatically creates one if it does not exist.
-
getState
public StateCtx<E,C,IN> getState(E token, boolean autoCreate)
Get the state by token.- Parameters:
autoCreate
- if true, automatically creates one if it does not exist.
-
init
protected void init()
Called at the constructor of state machine
-
getLandingState
protected abstract E getLandingState(IN input, C inputClass)
Determines the initial state upon meeting the input character and class
-
onReset
protected void onReset()
This method is called at constructor and when reseting the machine.
-
onStart
protected void onStart(IN input, C inputClass, E landing)
This method is called when the machine takes the first character.
-
beforeStep
protected void beforeStep(IN input, C inputClass, E origin)
This method is called before executing a step
-
afterStep
protected void afterStep(IN input, C inputClass, E origin, E destination)
This method is called after executing a step
-
onStop
protected void onStop(boolean endOfInput)
This method is called when the machine stops- Parameters:
endOfInput
- true if the machine stops due to end of input
-
onReject
protected void onReject(IN input)
This method is called when the machine rejects an input character
-
onDebug
protected void onDebug(java.lang.String message)
This method is call at certain situations when debug mode is on.- See Also:
setDebugMode(boolean)
-
run
public final void run(java.util.Iterator<IN> inputs)
Feed the machine a stream of characters
-
run
public final void run(IN input)
Feed the machine a single character
-
start
public final void start(java.util.Iterator<IN> inputs)
Starts the machine with a stream of input characters.
-
start
public final void start(IN input)
Starts the machine with a single input character.
-
terminate
public final void terminate()
Terminates the machine.
-
getCurrentState
public E getCurrentState()
Return the current state
-
isTerminated
public boolean isTerminated()
Return true if the machine is stopped
-
isSuspended
public boolean isSuspended()
Return true if the machine is suspended
-
suspend
protected final void suspend()
Suspend the machine
-
doReject
protected final void doReject(IN input)
Reject a character
-
doDebug
protected final void doDebug(java.lang.String message)
Manually send a debug message- See Also:
onDebug(String)
,setDebugMode(boolean)
-
-