View Javadoc

1   package cz.cuni.amis.pogamut.base.utils.collections.adapters;
2   
3   import java.util.HashSet;
4   
5   import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
6   import cz.cuni.amis.pogamut.base.communication.worldview.object.IWorldObjectEventListener;
7   import cz.cuni.amis.pogamut.base.communication.worldview.object.event.WorldObjectDestroyedEvent;
8   import cz.cuni.amis.pogamut.base.communication.worldview.object.event.WorldObjectFirstEncounteredEvent;
9   import cz.cuni.amis.pogamut.base3d.worldview.object.IViewable;
10  import cz.cuni.amis.pogamut.base3d.worldview.object.event.WorldObjectAppearedEvent;
11  import cz.cuni.amis.pogamut.base3d.worldview.object.event.WorldObjectDisappearedEvent;
12  import cz.cuni.amis.utils.collections.ObservableSet;
13  
14  /**
15   * Provides set of all existing world objects extending some class as observable set.
16   * @author ik
17   */
18  public class WVObjectsSetAdapter<T extends IViewable> extends ObservableSet<T> {
19  
20      IWorldObjectEventListener<T, WorldObjectFirstEncounteredEvent<T>> addListener;
21      IWorldObjectEventListener<T, WorldObjectDestroyedEvent<T>> remListener;
22  
23  	public WVObjectsSetAdapter(Class<T> objectClass, IWorldView worldView) {
24          super(new HashSet<T>());
25          // register listener
26          worldView.addObjectListener(
27          	objectClass, 
28          	WorldObjectFirstEncounteredEvent.class,
29          	addListener = new IWorldObjectEventListener<T, WorldObjectFirstEncounteredEvent<T>>() {
30  
31              @Override
32              public void notify(WorldObjectFirstEncounteredEvent<T> event) {
33                  add(event.getObject());
34              }
35          });
36  
37          worldView.addObjectListener(
38          	objectClass,
39          	WorldObjectDestroyedEvent.class,
40          	remListener = new IWorldObjectEventListener<T, WorldObjectDestroyedEvent<T>>() {
41  	            @Override
42  	            public void notify(WorldObjectDestroyedEvent<T> event) {
43  	                remove(event.getObject());
44  	            }
45          	}
46          );
47  
48          // add the data
49          synchronized(worldView.getAll(objectClass)) {
50          	addAll(worldView.getAll(objectClass).values());
51          }
52      }
53  }