/** * */ 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); } }