View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator.server.state;
2   
3   import cz.cuni.amis.fsm.FSMState;
4   import cz.cuni.amis.fsm.FSMTransition;
5   import cz.cuni.amis.fsm.IFSMState;
6   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
7   import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
8   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Mutator;
9   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MutatorListEnd;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.MutatorListStart;
11  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
12  import cz.cuni.amis.pogamut.ut2004.communication.translator.server.support.ServerListState;
13  import cz.cuni.amis.pogamut.ut2004.communication.translator.shared.events.MutatorListObtained;
14  
15  
16  /**
17   * Takes care of the mutator list. It stores them inside a List object and when END message comes it sends
18   * them to the world view via MutatorListObtained event.
19   * @author Jimmy
20   */
21  @FSMState(map={
22  				@FSMTransition(
23  					state=ServerRunningState.class, 
24  					symbol={MutatorListEnd.class}, 
25  					transition={})
26  				}
27  )
28  public class MutatorListState extends ServerListState<Mutator, TranslatorContext>{
29  
30  	public MutatorListState() {
31  		super(MutatorListStart.class, Mutator.class, MutatorListEnd.class);
32  	}
33  	
34  	@Override
35  	public void stateEntering(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> fromState, InfoMessage symbol) {
36  		super.restart(context);
37  		super.stateEntering(context, fromState, symbol);
38  	}
39  	
40  	@Override
41  	public void stateLeaving(TranslatorContext context, IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) {
42  		super.stateLeaving(context, toState, symbol);
43  		long simTime = 
44  			(symbol instanceof IWorldChangeEvent ? ((IWorldChangeEvent)symbol).getSimTime() : 0);
45  		context.getEventQueue().pushEvent(new MutatorListObtained(getList(), simTime));
46  		newList();
47  	}
48  	
49  	@Override
50  	protected void innerStateSymbol(TranslatorContext context,
51  			InfoMessage symbol) {
52  		super.innerStateSymbol(context, symbol);
53  		if (symbol instanceof Mutator) {
54  			context.getEventQueue().pushEvent((Mutator)symbol);
55  		}
56  	}
57  	
58  
59  }