Event doorClosed = new Event ("doorClosed", "D1CL"); Event drawOpened = new Event ("drawOpened", "D2OP"); Event lightOn = new Event ("lightOn", "L1ON"); Event panelClosed = new Event ("panelClosed", "PNCL"); Event doorOpened = new Event ("doorOpened", "D1OP"); Command unlockDoorCmd = new Command("unlockDoor", "D1UL"); Command lockPanelCmd = new Command("lockPanel", "PNLK"); Command unlockPanelCmd = new Command("unlockPanel", "PNUL"); Command lockDoorCmd = new Command("lockDoor", "D1LK"); State idleState = new State("idle"); State activeState = new State("active"); State unlockedPanelState = new State("unlockedPanel"); State waitingForDrawState = new State("waitingForDraw"); State waitingForLightState = new State("waitingForLight"); StateMachine machine = new StateMachine(idleState); idleState.addTransition(doorClosed, activeState); idleState.addAction(unlockDoorCmd); idleState.addAction(lockPanelCmd); activeState.addTransition(lightOn, waitingForDrawState); activeState.addTransition(drawOpened, waitingForLightState); unlockedPanelState.addTransition(panelClosed, idleState); unlockedPanelState.addAction(unlockPanelCmd); unlockedPanelState.addAction(lockDoorCmd); waitingForDrawState.addTransition(drawOpened, unlockedPanelState); waitingForLightState.addTransition(lightOn, unlockedPanelState); machine.addResetEvents{doorOpened};