View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator.bot;
2   
3   import java.util.logging.Logger;
4   
5   import com.google.inject.Inject;
6   
7   import cz.cuni.amis.fsm.FSM;
8   import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage;
9   import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
10  import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
11  import cz.cuni.amis.pogamut.base.communication.translator.exception.TranslatorException;
12  import cz.cuni.amis.pogamut.base.utils.logging.IAgentLogger;
13  import cz.cuni.amis.pogamut.ut2004.communication.translator.IWorldEventQueue;
14  import cz.cuni.amis.pogamut.ut2004.communication.translator.TranslatorContext;
15  import cz.cuni.amis.pogamut.ut2004.communication.translator.IWorldEventQueue.Queue;
16  import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.state.HelloBotExpectedState;
17  import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.ItemTranslator;
18  
19  /**
20   * BotFSM is wrapper for the FSM instance that uses states from cz.cuni.amis.pogamut.ut2004.communication.translator.bot package.
21   * 
22   * @author Jimmy
23   */
24  public class BotFSM implements IWorldMessageTranslator {
25  	
26  	private IWorldEventQueue eventQueue = new IWorldEventQueue.Queue();
27  	
28  	private TranslatorContext context = null;
29  	
30  	private FSM<InfoMessage, TranslatorContext> fsm = null;
31  
32  	private Logger log;
33  	
34  	@Inject
35  	public BotFSM(ItemTranslator translator, IAgentLogger logger) {
36  		this.log = logger.getCategory(getClass().getSimpleName());
37  		context = new TranslatorContext(eventQueue, translator, log);
38  		fsm = new FSM<InfoMessage, TranslatorContext>(context, HelloBotExpectedState.class, log);
39  	}
40  
41  	@Override
42  	public IWorldChangeEvent[] processMessage(InfoMessage message) throws TranslatorException {
43  		fsm.push(context, message);
44  		return eventQueue.popEvents();
45  	}
46  
47  	@Override
48  	public void reset() {
49  		context.reset();
50  		this.fsm.restart(context);
51  	}
52  	
53  	public String toString() {
54  		return "BotFSM";
55  	}
56  
57  }