View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.messages.custom;
2   
3   import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
4   import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
5   import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.EventListener;
6   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ControlMessage;
7   
8   /**
9    * Adapter that uses {@link ControlMessages} to read {@link ControlMessage} out of {@link IWorldView} translating them into {@link ICustomControlMessage}
10   * that are {@link IWorldView#notifyImmediately(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent)} re-entered into the same {@link IWorldView}.
11   * <p><p>
12   * This means that you can use {@link EventListener} annotation for your/custom {@link ICustomControlMessage}s as usual.
13   * 
14   * Default state: DISABLED, must be {@link ControlMessageTranslator#enable()} manually!
15   * @author Jimmy
16   */
17  public class ControlMessageTranslator {
18  	
19  	private IWorldView worldView;
20  	private ControlMessages controlMessagesParser;
21  	
22  	private IWorldEventListener<ControlMessage> controlMessageListener = new IWorldEventListener<ControlMessage>() {
23  		@Override
24  		public void notify(ControlMessage event) {
25  			controlMessage(event);
26  		}
27  	};
28  	
29  	private boolean exceptionMode;
30  	
31  	private boolean enabled = false;
32  
33  	public ControlMessageTranslator(IWorldView worldView, ControlMessages controlMessagesParser, boolean exceptionOnUnreadableMessage) {
34  		this.worldView = worldView;
35  		this.controlMessagesParser = controlMessagesParser;
36  		this.exceptionMode = exceptionOnUnreadableMessage;
37  	}
38  	
39  	public ControlMessages getMessagesMapper() {
40  		return controlMessagesParser;
41  	}
42  	
43  	public void enable() {
44  		if (enabled) return;
45  		enabled = true;
46  		worldView.addEventListener(ControlMessage.class, controlMessageListener);
47  	}
48  	
49  	public void disable() {
50  		if (!enabled) return;
51  		enabled = false;
52  		worldView.removeEventListener(ControlMessage.class, controlMessageListener);
53  	}
54  	
55  	protected void controlMessage(ControlMessage event) {
56  		ICustomControlMessage msg;
57  		
58  		if (exceptionMode) {
59  			msg = controlMessagesParser.read(event);
60  		} else {
61  			try {
62  				msg = controlMessagesParser.read(event); 
63  			} catch (Exception e) {				
64  				// IGNORE...
65  				return;
66  			}
67  		}
68  		
69  		worldView.notifyImmediately(msg);
70  	}
71  
72  }