/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.incubator; /** * Listener for state transitions in a state machine. Each listener can veto the state change by * throwing a {@link StateChangeException}. In this case, the state change will not be performed, * but other listeners may already have been executed. * * @param <T> the enum type representing the state machine states * * @author Robert Mischke */ public interface StateChangeListener<T extends Enum<?>> { /** * Reports a state transition attempt. * * @param oldState the current/old state of the state machine * @param newState the new intended state, which will be set if no listener throws an exception * @throws StateChangeException an exception that signals an error that should prevent the state * transition from happening */ void onStateChange(T oldState, T newState) throws StateChangeException; }