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