View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator.observer.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   * This abstract server states is handling ALIVE message, descendants does not need to care about those messages.
12   * @author Jimmy
13   *
14   * @param <SYMBOL>
15   * @param <CONTEXT>
16   */
17  public abstract class AbstractObserverFSMState<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  }