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.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.server.support.AbstractServerFSMState;
15
16
17
18
19
20
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 AbstractServerFSMState<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 }