1 package org
.argeo
.slc
.web
.mvc
;
3 import java
.io
.Serializable
;
5 import java
.util
.Vector
;
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
;
16 public class WebSlcEventListenerRegister
implements SlcEventListenerRegister
,
18 private final static Log log
= LogFactory
19 .getLog(WebSlcEventListenerRegister
.class);
20 public final static String ATTR_EVENT_LISTENER
= "slcEventListener";
22 static final long serialVersionUID
= 1l;
24 transient private SlcEventListener eventListener
= null;
26 private String clientId
= null;
29 private List
<SlcEventListenerDescriptor
> descriptors
= new Vector
<SlcEventListenerDescriptor
>();
31 public synchronized void addEventListenerDescriptor(
32 SlcEventListenerDescriptor eventListenerDescriptor
) {
33 if (descriptors
.contains(eventListenerDescriptor
))
34 descriptors
.remove(eventListenerDescriptor
);
35 descriptors
.add(eventListenerDescriptor
);
38 public synchronized void removeEventListenerDescriptor(
39 SlcEventListenerDescriptor eventListenerDescriptor
) {
40 descriptors
.remove(eventListenerDescriptor
);
43 // public synchronized List<SlcEventListenerDescriptor> getDescriptorsCopy()
45 // return new ArrayList<SlcEventListenerDescriptor>(descriptors);
48 public SlcEvent
listen(SlcEventListener eventListener
, Long timeout
) {
50 this.eventListener
= eventListener
;
51 return this.eventListener
.listen(clientId
, descriptors
, timeout
);
55 clientId
= getSessionId();
58 if (log
.isDebugEnabled())
59 log
.debug("Initialized web event listener " + clientId
);
64 if (eventListener
!= null)
65 eventListener
.close(clientId
);
67 if (log
.isDebugEnabled())
68 log
.debug("Closed web event listener " + clientId
);
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
);
78 protected String
getSessionId() {
79 return RequestContextHolder
.currentRequestAttributes().getSessionId();
82 public String
getClientId() {