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