]> 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
[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.ui.Model;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 import org.springframework.web.bind.annotation.RequestParam;
14
15 @Controller
16 public class EventController {
17
18 private final static Log log = LogFactory.getLog(EventController.class);
19
20 public final static String KEY_ANSWER = "__answer";
21 private Long defaultTimeout = 10000l;
22
23 // IoC
24 private SlcEventListenerRegister eventListenerRegister;
25 private SlcEventListener eventListener = null;
26
27 public EventController() {
28 if (log.isDebugEnabled())
29 log.debug("In EventController Constructor");
30 }
31
32 // Business Methods
33
34 @RequestMapping("/addEventListener.service")
35 public String addEventListener(
36 @RequestParam(SlcEvent.EVENT_TYPE) String eventType,
37 @RequestParam(value=SlcEvent.EVENT_FILTER, required=false) String eventFilter, Model model) {
38
39 eventListenerRegister
40 .addEventListenerDescriptor(new SlcEventListenerDescriptor(
41 eventType, eventFilter));
42 if (log.isTraceEnabled())
43 log.trace("Registered listener on register "
44 + eventListenerRegister.getId() + " for type " + eventType
45 + ", filter=" + eventFilter);
46 model.addAttribute(KEY_ANSWER, ExecutionAnswer
47 .ok("Execution completed properly"));
48 return KEY_ANSWER;
49
50 }
51
52 @RequestMapping("/removeEventListener.service")
53 public String removeEventListener(
54 @RequestParam(SlcEvent.EVENT_TYPE) String eventType,
55 @RequestParam(value=SlcEvent.EVENT_FILTER, required=false) String eventFilter, Model model) {
56
57 eventListenerRegister
58 .removeEventListenerDescriptor(new SlcEventListenerDescriptor(
59 eventType, eventFilter));
60 if (log.isTraceEnabled())
61 log.trace("Removed listener from register "
62 + eventListenerRegister.getId() + " for type " + eventType
63 + ", filter=" + eventFilter);
64 model.addAttribute(KEY_ANSWER, ExecutionAnswer
65 .ok("Execution completed properly"));
66 return KEY_ANSWER;
67 }
68
69 @RequestMapping("/pollEvent.service")
70 public String pollEvent(@RequestParam("timeout") String timeoutStr,
71 Model model) {
72 final Long timeout;
73 if (timeoutStr != null)
74 timeout = Long.parseLong(timeoutStr);
75 else
76 timeout = defaultTimeout;
77
78 SlcEvent event = eventListener.listen(eventListenerRegister.getId(),
79 eventListenerRegister.getDescriptorsCopy(), timeout);
80 if (event != null) {
81 model.addAttribute("event", event);
82 if (log.isTraceEnabled())
83 log.debug("Received event: "
84 + event.getHeaders().get(SlcEvent.EVENT_TYPE));
85 }
86 model.addAttribute(KEY_ANSWER, ExecutionAnswer
87 .ok("Execution completed properly"));
88 return KEY_ANSWER;
89 }
90
91 public void setEventListenerRegister(
92 SlcEventListenerRegister eventListenerRegister) {
93 this.eventListenerRegister = eventListenerRegister;
94 }
95
96 public void setDefaultTimeout(Long defaultTimeout) {
97 this.defaultTimeout = defaultTimeout;
98 }
99
100 public void setEventListener(SlcEventListener eventListener) {
101 this.eventListener = eventListener;
102 }
103 }