View Javadoc

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