1 package cz.cuni.amis.pogamut.ut2004.communication.translator.server.support;
2
3 import cz.cuni.amis.fsm.IFSMState;
4 import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
5 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
6 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorMessages;
7 import cz.cuni.amis.pogamut.ut2004.communication.translator.UnexpectedMessageException;
8
9
10
11
12
13
14
15
16
17 public abstract class ServerMessageExpectedState<CONTEXT extends TranslatorContext> extends AbstractServerFSMState<InfoMessage, CONTEXT> {
18
19 @SuppressWarnings("unchecked")
20 private Class message;
21
22
23
24
25 @SuppressWarnings("unchecked")
26 public ServerMessageExpectedState(Class expectedMessage) {
27 message = expectedMessage;
28 }
29
30 @Override
31 public void init(CONTEXT context) {
32 }
33
34 @Override
35 public void restart(CONTEXT context) {
36 }
37
38 @Override
39 public void stateEntering(CONTEXT context,
40 IFSMState<InfoMessage, CONTEXT> fromState, InfoMessage symbol) {
41 }
42
43 @Override
44 public void stateLeaving(CONTEXT context, IFSMState<InfoMessage, CONTEXT> toState, InfoMessage symbol) {
45 if (!symbol.getClass().equals(message)) {
46 if (!message.isAssignableFrom(symbol.getClass())) {
47 throw new UnexpectedMessageException(TranslatorMessages.unexpectedMessage(this, symbol), context.getLogger(), this);
48 }
49 }
50 }
51
52 @Override
53 protected void innerStateSymbol(CONTEXT context, InfoMessage symbol) {
54 throw new UnexpectedMessageException(TranslatorMessages.unexpectedMessage(this, symbol), context.getLogger(), this);
55 }
56
57 }
58