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
14
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
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
47 synchronized(worldView.getAll(objectClass)) {
48 addAll(worldView.getAll(objectClass).values());
49 }
50 }
51 }