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.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   * Used to check the message that is used to leave the state.
11   * <p><p>
12   * All other messages are considered as the violation of the protocol -> throws UnexpectedMessageException.
13   * @author Jimmy
14   * 
15   * @param <CONTEXT>
16   */
17  public abstract class ObserverMessageExpectedState<CONTEXT extends TranslatorContext> extends AbstractObserverFSMState<InfoMessage, CONTEXT> {
18  
19  	@SuppressWarnings("unchecked")
20  	private Class message;
21  	
22  	/**
23  	 * @param expectedMessage message that triggers the switch to another state
24  	 */
25  	@SuppressWarnings("unchecked")
26  	public ObserverMessageExpectedState(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