package framework.scenario;

import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;

public class FSM {
	private State initialState = null;
	protected State currentState = null;
	private Hashtable<String, State> states = new Hashtable<String, State>();
	
	public FSM(State initialState, Hashtable<String, State> states) {
		this.initialState = initialState;
		this.states = states;
		currentState = initialState;
		Collection<State> allStates = states.values();
		Iterator<State> it = allStates.iterator();
		while (it.hasNext()) {
			State s = it.next();
			s.setOwner(this);
		}
	}

	public void addState(String stateName, State s) {
		states.put(stateName, s);
		s.setOwner(this);
	}
	
	public boolean trans(Event e) {
		currentState = currentState.getSuccessor(e);
		if (currentState == null) return false;
		return true;
	}
	
	public State getCurrentState() {
		return currentState;
	}
}
