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.translator.event.IWorldChangeEvent;
5 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.AliveMessage;
6 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
7 import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorMessages;
8 import cz.cuni.amis.pogamut.ut2004.communication.translator.UnexpectedMessageException;
9
10
11
12
13
14
15
16
17 public abstract class AbstractServerFSMState<SYMBOL, CONTEXT extends TranslatorContext> implements IFSMState<SYMBOL, CONTEXT> {
18
19 protected abstract void innerStateSymbol(CONTEXT context, SYMBOL symbol);
20
21 @Override
22 public final void stateSymbol(CONTEXT context, SYMBOL symbol) {
23 if (symbol instanceof AliveMessage) {
24 if (!(symbol instanceof IWorldChangeEvent)) throw new UnexpectedMessageException(TranslatorMessages.messageNotWorldEvent(this, symbol), this);
25 context.getEventQueue().pushEvent((IWorldChangeEvent) symbol);
26 } else {
27 innerStateSymbol(context, symbol);
28 }
29 }
30
31 @Override
32 public String toString() {
33 return getClass().getSimpleName();
34 }
35
36 }