]> git.argeo.org Git - lgpl/argeo-commons.git/blob - DefaultJcrListener.java
fc6888851f31b3f39cb4c42a0ee6b90337154f76
[lgpl/argeo-commons.git] / DefaultJcrListener.java
1 package org.argeo.jcr;
2
3 import javax.jcr.RepositoryException;
4 import javax.jcr.Session;
5 import javax.jcr.observation.Event;
6 import javax.jcr.observation.EventIterator;
7 import javax.jcr.observation.EventListener;
8 import javax.jcr.observation.ObservationManager;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12
13 /** To be overridden */
14 public class DefaultJcrListener implements EventListener {
15 private final static Log log = LogFactory.getLog(DefaultJcrListener.class);
16 private Session session;
17 private String path = "/";
18 private Boolean deep = true;
19
20 public void start() {
21 try {
22 addEventListener(session().getWorkspace().getObservationManager());
23 if (log.isDebugEnabled())
24 log.debug("Registered JCR event listener on " + path);
25 } catch (RepositoryException e) {
26 throw new JcrException("Cannot register event listener", e);
27 }
28 }
29
30 public void stop() {
31 try {
32 session().getWorkspace().getObservationManager()
33 .removeEventListener(this);
34 if (log.isDebugEnabled())
35 log.debug("Unregistered JCR event listener on " + path);
36 } catch (RepositoryException e) {
37 throw new JcrException("Cannot unregister event listener", e);
38 }
39 }
40
41 /** Default is listen to all events */
42 protected Integer getEvents() {
43 return Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED
44 | Event.PROPERTY_CHANGED | Event.PROPERTY_REMOVED;
45 }
46
47 /** To be overidden */
48 public void onEvent(EventIterator events) {
49 while (events.hasNext()) {
50 Event event = events.nextEvent();
51 log.debug(event);
52 }
53 }
54
55 /** To be overidden */
56 protected void addEventListener(ObservationManager observationManager)
57 throws RepositoryException {
58 observationManager.addEventListener(this, getEvents(), path, deep,
59 null, null, false);
60 }
61
62 private Session session() {
63 return session;
64 }
65
66 public void setPath(String path) {
67 this.path = path;
68 }
69
70 public void setDeep(Boolean deep) {
71 this.deep = deep;
72 }
73
74 public void setSession(Session session) {
75 this.session = session;
76 }
77
78 }