zcommon/src/main/java/org/zkoss/fsm/MacroStateCtx.java

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * 
 */
package org.zkoss.fsm;

/**
 * The real power of StateMachine. This extended state allows you to define a
 * sub-StateMachine in a state. The life cycle of the inner state machine is
 * completely determined by the outer one:
 * 1. Upon {@link StateCtx#onLand} is called on the state, 
 * {@link StateMachine#start(Object)} is triggered on the inner machine
 * 2. Upon {@link StateCtx#onReturn} is called on the state, 
 * {@link StateMachine#run(Object)} is triggered on the inner machine
 * 3. Upon {@link StateCtx#onLeave} is called on the state, the inner machine 
 * is terminated.
 * 4. Upon {@link StateCtx#onStop} is called on the state, 
 * {@link StateMachine#onStop(boolean)} is triggered on the inner machine
 * @since 6.0.0
 * @author simonpai
 */
public class MacroStateCtx<E, C, IN, E2, C2> extends StateCtx<E, C, IN> {
    
    // sub machine //
    protected final StateMachine<E2, C2, IN> _submachine;
    
    /**
     * Construct a macro state, which consists of a state machine by itself.
     */
    public MacroStateCtx(StateMachine<E2, C2, IN> submachine) {
        super();
        _submachine = submachine;
    }
    
    
    
    // event handler //
    
    protected void onLand(IN input, C inputClass, E origin) {
        _submachine.start(input);
    }
    
    protected void onReturn(IN input, C inputClass) {
        _submachine.run(input);
    }
    
    protected void onLeave(IN input, C inputClass, E destination) {
        _submachine.terminateAt(input);
    }
    
    protected void onStop(boolean endOfInput) {
        _submachine.onStop(endOfInput);
    }
    
}