1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.observation;
35
36 import info.magnolia.module.ModuleLifecycle;
37 import info.magnolia.module.ModuleLifecycleContext;
38 import info.magnolia.module.observation.util.ObservationUtil;
39
40 import java.util.ArrayList;
41 import java.util.List;
42
43 import javax.jcr.observation.EventListener;
44
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52
53
54
55
56
57
58 public class ObservationModule implements ModuleLifecycle {
59 private static final Logger logger = LoggerFactory.getLogger(ObservationModule.class);
60
61
62 private List listenerConfigurations = new ArrayList();
63
64 public ObservationModule() {
65 }
66
67 public List getListenerConfigurations() {
68 return listenerConfigurations;
69 }
70
71 public void setListenerConfigurations(List listenerConfigurations) {
72 this.listenerConfigurations = listenerConfigurations;
73 }
74
75
76
77
78 public void addListenerConfiguration(ObservationConfiguration obs) {
79
80
81 if (obs.getListener() != null
82 && obs.getListener() instanceof BaseConfiguration) {
83 ((BaseConfiguration) obs.getListener()).setConfiguration(obs);
84 }
85 if (obs.isActive() && obs.isPopulated()) {
86 EventListener tmpListener = obs.getListener();
87
88 if (obs.getDelay() > 0 && obs.getMaxDelay() > 0
89 && !obs.isSynchronous()) {
90 obs.deferredListener = ObservationUtil
91 .instanciateDeferredEventListener(obs.getListener(),
92 obs.getDelay(), obs.getMaxDelay());
93 tmpListener = obs.deferredListener;
94
95 }
96 if (obs.isSynchronous()) {
97 obs.synchListener = ObservationUtil
98 .instanciateSynchEventListener(obs.getListener());
99 tmpListener = obs.synchListener;
100
101 }
102
103 ObservationUtil.registerChangeListener(obs.getRepository(), obs
104 .getPath(), obs.getIncludeSubNodes(), obs.getNodeType(),
105 obs.getConvertedEventTypes(), tmpListener);
106
107
108 listenerConfigurations.add(obs);
109 }
110 }
111
112 public void start(ModuleLifecycleContext moduleLifecycleContext) {
113 }
114
115
116
117
118 public void stop(ModuleLifecycleContext moduleLifecycleContext) {
119
120 java.util.Iterator i = this.listenerConfigurations.iterator();
121 ObservationConfiguration obs;
122 EventListener tmpListener;
123 while (i.hasNext()) {
124 obs = (ObservationConfiguration) i.next();
125
126 tmpListener = obs.getListener();
127 if (tmpListener != null) {
128 if (obs.deferredListener != null) {
129 tmpListener = obs.deferredListener;
130 } else if (obs.synchListener != null) {
131 tmpListener = obs.synchListener;
132 }
133 ObservationUtil.unregisterChangeListener(obs.getRepository(),
134 tmpListener);
135 }
136 }
137
138 }
139 }