View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.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.base.communication.translator.event.IWorldChangeEvent;
8   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PasswdOk;
9   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PasswdWrong;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Password;
11  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
12  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorMessages;
13  import cz.cuni.amis.pogamut.ut2004.communication.translator.UnexpectedMessageException;
14  import cz.cuni.amis.pogamut.ut2004.communication.translator.observer.support.AbstractObserverFSMState;
15  
16  /**
17   * Entered by the Password message that is sent to the world view, the state then wait for PasswdOk or PasswdWrong
18   * message to came.
19   * 
20   * @author Jimmy
21   */
22  @FSMState(map={@FSMTransition(
23                  state=ReadyState.class, 
24                  symbol={PasswdOk.class}, 
25                  transition={}),
26                 @FSMTransition(
27                  state=CommunicationTerminatedState.class, 
28                  symbol={PasswdWrong.class},
29                  transition={})}
30  )
31  public class PasswordState extends AbstractObserverFSMState<InfoMessage, TranslatorContext> {
32  	
33  	@Override
34  	public void init(TranslatorContext context) {
35  	}
36  
37  	@Override
38  	public void restart(TranslatorContext context) {
39  	}
40  
41  	@Override
42  	public void stateEntering(TranslatorContext context,
43  			IFSMState<InfoMessage, TranslatorContext> fromState,
44  			InfoMessage symbol) {
45  		if (!(symbol instanceof Password)) throw new UnexpectedMessageException(TranslatorMessages.unexpectedMessage(this, symbol, Password.class), context.getLogger(), this);
46  		if (!(symbol instanceof IWorldChangeEvent)) throw new UnexpectedMessageException(TranslatorMessages.messageNotWorldEvent(this, symbol), context.getLogger(), this);
47  		context.getEventQueue().pushEvent((IWorldChangeEvent)symbol);
48  	}
49  
50  	@Override
51  	public void stateLeaving(TranslatorContext context,
52  			IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) {
53  	}
54  
55  	@Override
56  	protected void innerStateSymbol(TranslatorContext context, InfoMessage symbol) {
57  		if (!(symbol instanceof Password)) throw new UnexpectedMessageException(TranslatorMessages.unexpectedMessage(this, symbol), context.getLogger(), this);
58  	}
59  	
60  }