View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.communication.translator;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import com.google.inject.ImplementedBy;
7   
8   import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldChangeEvent;
9   
10  /**
11   * Interface for the world event queue that is used to transport new world events from the FSM to MessageTranslator. 
12   * @author Jimmy
13   */
14  @ImplementedBy(value=IWorldEventQueue.Queue.class)
15  public interface IWorldEventQueue {
16  	
17  	/**
18  	 * Add event to the queue.
19  	 * @param event
20  	 */
21  	public void pushEvent(IWorldChangeEvent event);
22  	
23  	/**
24  	 * Add events to the queue.
25  	 * @param events
26  	 */
27  	public void pushEvent(IWorldChangeEvent[] events);
28  	
29  	/**
30  	 * Returns all events in the queue + removes them from the queue.
31  	 * <p><p>
32  	 * If there are no event this must return an empty array. 
33  	 * @return
34  	 */
35  	public IWorldChangeEvent[] popEvents();
36  	
37  	public static class Queue implements IWorldEventQueue {
38  		
39  		private List<IWorldChangeEvent> events = new ArrayList<IWorldChangeEvent>(50);
40  
41  		@Override
42  		public IWorldChangeEvent[] popEvents() {
43  			IWorldChangeEvent[] newEvents = this.events.toArray(new IWorldChangeEvent[events.size()]);
44  			this.events.clear();
45  			return newEvents;
46  		}
47  		
48  		@Override
49  		public void pushEvent(IWorldChangeEvent event) {
50  			events.add(event);
51  		}
52  
53  		@Override
54  		public void pushEvent(IWorldChangeEvent[] events) {
55  			for (IWorldChangeEvent event : events) this.events.add(event);
56  		} 
57  		
58  	}
59  
60  }