/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.incubator; /** * A variant of the AbstractStateMachine base class where all valid state transitions are defined by a n-by-2 matrix, where each matrix row * represents a valid state change. The "from" state must be in column 1 (array index 0), the "to" state in the second (array index 1). * * @param <S> the Enum defining the states of this state machine * @param <E> the event type * * @author Robert Mischke */ public abstract class AbstractFixedTransitionsStateMachine<S extends Enum<?>, E> extends AbstractStateMachine<S, E> { private final S[][] validTransitions; public AbstractFixedTransitionsStateMachine(S initialState, S[][] validTransitions) { super(initialState); this.validTransitions = validTransitions; // TODO validate array } protected boolean isStateChangeValid(S oldState, S newState) { // TODO optimize if necessary for (S[] validTransition : validTransitions) { if (validTransition[0] == oldState && validTransition[1] == newState) { return true; } } return false; } }