1 package cz.cuni.amis.pogamut.base.communication.worldview.react;
2
3 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
4 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEvent;
5 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public abstract class EventReact<EVENT extends IWorldEvent> {
25
26 protected IWorldEventListener<EVENT> reactListener = new IWorldEventListener<EVENT>() {
27
28 @Override
29 public void notify(EVENT event) {
30 preReact(event);
31 react(event);
32 postReact(event);
33 }
34
35 };
36
37 protected IWorldView reactWorldView;
38
39 protected Class<EVENT> reactEventClass;
40
41 private boolean reactHooked = false;
42
43 public EventReact(Class<EVENT> eventClass, IWorldView worldView) {
44 this.reactWorldView = worldView;
45 this.reactEventClass = eventClass;
46 enable();
47 }
48
49
50
51
52 public synchronized void disable() {
53 if (reactHooked) {
54 reactHooked = false;
55 reactWorldView.removeEventListener(reactEventClass, reactListener);
56 }
57 }
58
59
60
61
62 public synchronized void enable() {
63 if (!reactHooked) {
64 reactHooked = true;
65 if (!reactWorldView.isListening(reactListener)) reactWorldView.addEventListener(reactEventClass, reactListener);
66 }
67 }
68
69
70
71
72
73 protected void preReact(EVENT event) {
74 }
75
76
77
78
79
80 protected abstract void react(EVENT event);
81
82
83
84
85
86 protected void postReact(EVENT event) {
87 }
88
89 }