]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/EventController.java
Introduction of annotation to handle MVC flows // Class cleaning
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / EventController.java
1 package org.argeo.slc.web.mvc;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.argeo.slc.msg.ExecutionAnswer;
6 import org.argeo.slc.msg.event.SlcEvent;
7 import org.argeo.slc.msg.event.SlcEventListener;
8 import org.argeo.slc.msg.event.SlcEventListenerDescriptor;
9 import org.argeo.slc.msg.event.SlcEventListenerRegister;
10 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.RequestParam;
13
14 @Controller
15 public class EventController {
16
17 private final static Log log = LogFactory.getLog(EventController.class);
18
19 public final static String KEY_ANSWER = "__answer";
20 private Long defaultTimeout = 10000l;
21
22 // IoC
23 private SlcEventListenerRegister eventListenerRegister;
24 private SlcEventListener eventListener = null;
25
26 public EventController() {
27 }
28
29 // Business Methods
30
31 @RequestMapping("/addEventListener.service")
32 public ExecutionAnswer addEventListener(
33 @RequestParam(SlcEvent.EVENT_TYPE) String eventType,
34 @RequestParam(value = SlcEvent.EVENT_FILTER, required = false) String eventFilter) {
35
36 eventListenerRegister
37 .addEventListenerDescriptor(new SlcEventListenerDescriptor(
38 eventType, eventFilter));
39 if (log.isTraceEnabled())
40 log.trace("Registered listener on register "
41 + eventListenerRegister.getId() + " for type " + eventType
42 + ", filter=" + eventFilter);
43 return ExecutionAnswer.ok("Execution completed properly");
44
45 }
46
47 @RequestMapping("/removeEventListener.service")
48 public ExecutionAnswer removeEventListener(
49 @RequestParam(SlcEvent.EVENT_TYPE) String eventType,
50 @RequestParam(value = SlcEvent.EVENT_FILTER, required = false) String eventFilter) {
51
52 eventListenerRegister
53 .removeEventListenerDescriptor(new SlcEventListenerDescriptor(
54 eventType, eventFilter));
55 if (log.isTraceEnabled())
56 log.trace("Removed listener from register "
57 + eventListenerRegister.getId() + " for type " + eventType
58 + ", filter=" + eventFilter);
59 return ExecutionAnswer.ok("Execution completed properly");
60 }
61
62 @RequestMapping("/pollEvent.service")
63 public Object pollEvent(
64 @RequestParam(value = "timeout", required = false) String timeoutStr) {
65 final Long timeout;
66 if (timeoutStr != null)
67 timeout = Long.parseLong(timeoutStr);
68 else
69 timeout = defaultTimeout;
70
71 SlcEvent event = eventListener.listen(eventListenerRegister.getId(),
72 eventListenerRegister.getDescriptorsCopy(), timeout);
73 if (event != null) {
74 return event;
75 } else {
76 return ExecutionAnswer.ok("Execution completed properly");
77 }
78 }
79
80 public void setEventListenerRegister(
81 SlcEventListenerRegister eventListenerRegister) {
82 this.eventListenerRegister = eventListenerRegister;
83 }
84
85 public void setDefaultTimeout(Long defaultTimeout) {
86 this.defaultTimeout = defaultTimeout;
87 }
88
89 public void setEventListener(SlcEventListener eventListener) {
90 this.eventListener = eventListener;
91 }
92 }