]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java
@update:79; First end-to-end integration test
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / services / EventPublisherAspect.java
1 package org.argeo.slc.services;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.argeo.slc.msg.MsgConstants;
9 import org.argeo.slc.msg.event.SlcEvent;
10 import org.argeo.slc.msg.event.SlcEventPublisher;
11 import org.argeo.slc.msg.process.SlcExecutionStatusRequest;
12 import org.argeo.slc.process.SlcExecution;
13 import org.argeo.slc.runtime.SlcAgentDescriptor;
14 import org.aspectj.lang.JoinPoint;
15 import org.aspectj.lang.annotation.After;
16 import org.aspectj.lang.annotation.Aspect;
17
18 @Aspect
19 public class EventPublisherAspect {
20 public final static String EVT_AGENT_REGISTERED = "agentRegistered";
21 public final static String EVT_AGENT_UNREGISTERED = "agentUnregistered";
22 public final static String EVT_NEW_SLC_EXECUTION = "newSlcExecution";
23 public final static String EVT_UPDATE_SLC_EXECUTION_STATUS = "updateSlcExecutionStatus";
24
25 private final static Log log = LogFactory
26 .getLog(EventPublisherAspect.class);
27
28 private List<SlcEventPublisher> eventPublishers;
29
30 @After("execution(void org.argeo.slc.services.runtime.AgentService.register(..))")
31 public void registerAgent(JoinPoint jp) throws Throwable {
32 SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0];
33 SlcEvent event = new SlcEvent(EVT_AGENT_REGISTERED);
34 event.getHeaders().put(MsgConstants.PROPERTY_SLC_AGENT_ID,
35 agentDescriptor.getUuid());
36 publishEvent(event);
37 }
38
39 @After("execution(void org.argeo.slc.services.runtime.AgentService.unregister(..))")
40 public void unregisterAgent(JoinPoint jp) throws Throwable {
41 SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0];
42 SlcEvent event = new SlcEvent(EVT_AGENT_UNREGISTERED);
43 event.getHeaders().put(MsgConstants.PROPERTY_SLC_AGENT_ID,
44 agentDescriptor.getUuid());
45 publishEvent(event);
46 }
47
48 @After("execution(void org.argeo.slc.services.process.SlcExecutionService.newExecution(..))")
49 public void newSlcExecution(JoinPoint jp) throws Throwable {
50 SlcExecution slcExecution = (SlcExecution) jp.getArgs()[0];
51 SlcEvent event = new SlcEvent(EVT_NEW_SLC_EXECUTION);
52 event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_ID,
53 slcExecution.getUuid());
54 publishEvent(event);
55 }
56
57 @After("execution(void org.argeo.slc.services.process.SlcExecutionService.updateStatus(..))")
58 public void updateSlcExecutionStatus(JoinPoint jp) throws Throwable {
59 SlcExecutionStatusRequest msg = (SlcExecutionStatusRequest) jp
60 .getArgs()[0];
61 SlcEvent event = new SlcEvent(EVT_UPDATE_SLC_EXECUTION_STATUS);
62 event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_ID,
63 msg.getSlcExecutionUuid());
64 event.getHeaders().put(MsgConstants.PROPERTY_SLC_EXECUTION_STATUS,
65 msg.getNewStatus());
66 publishEvent(event);
67 }
68
69 public void setEventPublishers(List<SlcEventPublisher> eventPublishers) {
70 this.eventPublishers = eventPublishers;
71 }
72
73 protected void publishEvent(SlcEvent event) {
74
75 for (Iterator<SlcEventPublisher> it = eventPublishers.iterator(); it
76 .hasNext();) {
77 SlcEventPublisher eventPublisher = it.next();
78 if (log.isTraceEnabled())
79 log.debug("Publish event: "
80 + event.getHeaders().get(SlcEvent.EVENT_TYPE) + " to "
81 + eventPublisher);
82 eventPublisher.publish(event);
83 }
84 }
85 }