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
16
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
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
49 synchronized(worldView.getAll(objectClass)) {
50 addAll(worldView.getAll(objectClass).values());
51 }
52 }
53 }