]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java
Attachments management
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / WebSlcEventListenerRegister.java
1 package org.argeo.slc.web.mvc;
2
3 import java.io.Serializable;
4 import java.util.List;
5 import java.util.Vector;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.slc.SlcException;
10 import org.argeo.slc.msg.event.SlcEvent;
11 import org.argeo.slc.msg.event.SlcEventListener;
12 import org.argeo.slc.msg.event.SlcEventListenerDescriptor;
13 import org.argeo.slc.msg.event.SlcEventListenerRegister;
14 import org.springframework.web.context.request.RequestContextHolder;
15
16 public class WebSlcEventListenerRegister implements SlcEventListenerRegister,
17 Serializable {
18 private final static Log log = LogFactory
19 .getLog(WebSlcEventListenerRegister.class);
20 public final static String ATTR_EVENT_LISTENER = "slcEventListener";
21
22 static final long serialVersionUID = 1l;
23
24 transient private SlcEventListener eventListener = null;
25
26 private String clientId = null;
27
28 /** Synchronized */
29 private List<SlcEventListenerDescriptor> descriptors = new Vector<SlcEventListenerDescriptor>();
30
31 public synchronized void addEventListenerDescriptor(
32 SlcEventListenerDescriptor eventListenerDescriptor) {
33 if (descriptors.contains(eventListenerDescriptor))
34 descriptors.remove(eventListenerDescriptor);
35 descriptors.add(eventListenerDescriptor);
36 }
37
38 public synchronized void removeEventListenerDescriptor(
39 SlcEventListenerDescriptor eventListenerDescriptor) {
40 descriptors.remove(eventListenerDescriptor);
41 }
42
43 // public synchronized List<SlcEventListenerDescriptor> getDescriptorsCopy()
44 // {
45 // return new ArrayList<SlcEventListenerDescriptor>(descriptors);
46 // }
47
48 public SlcEvent listen(SlcEventListener eventListener, Long timeout) {
49 checkClientId();
50 this.eventListener = eventListener;
51 return this.eventListener.listen(clientId, descriptors, timeout);
52 }
53
54 public void init() {
55 clientId = getSessionId();
56 checkClientId();
57
58 if (log.isDebugEnabled())
59 log.debug("Initialized web event listener " + clientId);
60 }
61
62 public void close() {
63 checkClientId();
64 if (eventListener != null)
65 eventListener.close(clientId);
66
67 if (log.isDebugEnabled())
68 log.debug("Closed web event listener " + clientId);
69 }
70
71 protected void checkClientId() {
72 String sessionId = getSessionId();
73 if (clientId == null || !clientId.equals(sessionId))
74 throw new SlcException("Client id " + clientId
75 + " not consistent with web session id " + sessionId);
76 }
77
78 protected String getSessionId() {
79 return RequestContextHolder.currentRequestAttributes().getSessionId();
80 }
81
82 public String getClientId() {
83 return clientId;
84 }
85
86 }