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