Package org.zkoss.fsm

Class 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
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected E _current  
      protected boolean _debug  
      protected boolean _run  
      protected java.util.Map<E,​StateCtx<E,​C,​IN>> _states  
      protected int _step  
    • 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 step
      protected void beforeStep​(IN input, C inputClass, E origin)
      This method is called before executing a step
      protected void doDebug​(java.lang.String message)
      Manually send a debug message
      protected void doReject​(IN input)
      Reject a character
      protected abstract C getClass​(IN input)
      Determines the class for an input character.
      E getCurrentState()
      Return the current state
      protected abstract E getLandingState​(IN input, C inputClass)
      Determines the initial state upon meeting the input character and class
      StateCtx<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 machine
      boolean isSuspended()
      Return true if the machine is suspended
      boolean isTerminated()
      Return true if the machine is stopped
      protected 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 character
      protected 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 stops
      StateCtx<E,​C,​IN> removeState​(E token)
      Remove the state by token.
      void run​(IN input)
      Feed the machine a single character
      void run​(java.util.Iterator<IN> inputs)
      Feed the machine a stream of characters
      StateMachine<E,​C,​IN> setDebugMode​(boolean mode)
      Set debug mode, where onDebug(String) is called at certain timing to assist user develop the state machine
      StateCtx<E,​C,​IN> setState​(E token, StateCtx<E,​C,​IN> state)
      Set the state by token
      void 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 machine
      void terminate()
      Terminates the machine.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • _states

        protected final java.util.Map<E,​StateCtx<E,​C,​IN>> _states
      • _current

        protected E _current
      • _run

        protected boolean _run
      • _step

        protected int _step
      • _debug

        protected boolean _debug
    • Constructor Detail

      • StateMachine

        public StateMachine()
        Construct a state machine
    • Method Detail

      • setDebugMode

        public StateMachine<E,​C,​IN> setDebugMode​(boolean mode)
        Set debug mode, where onDebug(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
      • getClass

        protected abstract C getClass​(IN input)
        Determines the class for an input character.
      • 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