package framework.scenario;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry;
public class ScenarioState extends State {
private Hashtable<Event, Event> transitionSyncs = new Hashtable<Event, Event>();
private Hashtable<Event, ArrayList<State>> transitionGuards = new Hashtable<Event, ArrayList<State>>();
private Hashtable<Event, ScenarioAction> transitionActions = new Hashtable<Event, ScenarioAction>();
private String message = null;
public ScenarioState() {
super();
}
public ScenarioState(Hashtable<Event, State> transitions,
Hashtable<Event, Event> transitionSyncs,
Hashtable<Event, ArrayList<State>> transitionGuards,
Hashtable<Event, ScenarioAction> transitionActions,
String message) {
super(transitions);
this.transitionSyncs = transitionSyncs;
this.transitionGuards = transitionGuards;
this.transitionActions = transitionActions;
this.message = message;
}
public void addTransition(Event event, State succ, Event syncEvent, ArrayList<State> guards, ScenarioAction action) {
addTransition(event, succ);
if (syncEvent != null) transitionSyncs.put(event, syncEvent);
if (guards != null) transitionGuards.put(event, guards);
if (action != null) transitionActions.put(event, action);
}
Event canTrans(Event event) {
Enumeration<Event> events = getEvents();
while (events.hasMoreElements()) {
Event e = events.nextElement();
if (event == e || event == transitionSyncs.get(e)) {
ArrayList<State> guardStates = transitionGuards.get(e);
boolean bSatisfyGuard = true;
for (int n = 0; n < guardStates.size(); n++) {
State s = guardStates.get(n);
if (s.getOwner().getCurrentState() != s) {
bSatisfyGuard = false;
break;
}
}
if (bSatisfyGuard) return e;
}
}
return null;
}
public ScenarioAction getAction(Event e) {
return transitionActions.get(e);
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}