1 package cz.cuni.amis.pogamut.udk.communication.translator.bot.state; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import cz.cuni.amis.fsm.FSMState; 8 import cz.cuni.amis.fsm.FSMTransition; 9 import cz.cuni.amis.fsm.IFSMState; 10 import cz.cuni.amis.pogamut.base.communication.messages.InfoMessage; 11 import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId; 12 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.Item; 13 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.ItemListEnd; 14 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.ItemListStart; 15 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.NavPoint; 16 import cz.cuni.amis.pogamut.udk.communication.translator.TranslatorContext; 17 import cz.cuni.amis.pogamut.udk.communication.translator.bot.support.BotListState; 18 19 @FSMState( 20 map={ 21 @FSMTransition( 22 state=HandshakeControllerState.class, 23 symbol={ItemListEnd.class}, 24 transition={} 25 ) 26 } 27 ) 28 public class ItemListState extends BotListState<Item, TranslatorContext> { 29 30 public ItemListState() { 31 super(ItemListStart.class, Item.class, ItemListEnd.class); 32 } 33 34 @Override 35 public void stateLeaving(TranslatorContext translatorContext, 36 IFSMState<InfoMessage, TranslatorContext> toState, InfoMessage symbol) { 37 processNavPointsAndItems(translatorContext.getNavPoints(), getList(), translatorContext); 38 newList(); 39 } 40 41 private void processNavPointsAndItems(Map<UnrealId, NavPoint> origNavPoints, List<Item> list, TranslatorContext context) { 42 Map<UnrealId, Item> items = new HashMap<UnrealId, Item>(); 43 44 for (Item item : list) { 45 items.put(item.getId(), item); 46 } 47 48 context.setItems(items); 49 context.processNavPointsAndItems(); 50 } 51 52 @Override 53 public void stateSymbol(TranslatorContext context, InfoMessage symbol) { 54 super.stateSymbol(context, symbol); 55 context.getEventQueue().pushEvent((Item)symbol); 56 } 57 }