]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/EventPublisherAspect.java
ea0ce12c3614d02b5987ff70d89a5fdf54995b0d
[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.core.runtime.AbstractAgent;
9 import org.argeo.slc.msg.event.SlcEvent;
10 import org.argeo.slc.msg.event.SlcEventPublisher;
11 import org.argeo.slc.runtime.SlcAgentDescriptor;
12 import org.aspectj.lang.JoinPoint;
13 import org.aspectj.lang.annotation.After;
14 import org.aspectj.lang.annotation.Aspect;
15
16 @Aspect
17 public class EventPublisherAspect {
18 private final static Log log = LogFactory
19 .getLog(EventPublisherAspect.class);
20
21 private List<SlcEventPublisher> eventPublishers;
22
23 @After("execution(void org.argeo.slc.services.runtime.AgentService.register(..))")
24 public void registerAgent(JoinPoint jp) throws Throwable {
25 SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0];
26 SlcEvent event = new SlcEvent("agentRegistered");
27 event.getHeaders().put(AbstractAgent.PROPERTY_SLC_AGENT_ID,
28 agentDescriptor.getUuid());
29 publishEvent(event);
30 }
31
32 @After("execution(void org.argeo.slc.services.runtime.AgentService.unregister(..))")
33 public void unregisterAgent(JoinPoint jp) throws Throwable {
34 SlcAgentDescriptor agentDescriptor = (SlcAgentDescriptor) jp.getArgs()[0];
35 SlcEvent event = new SlcEvent("agentUnregistered");
36 event.getHeaders().put(AbstractAgent.PROPERTY_SLC_AGENT_ID,
37 agentDescriptor.getUuid());
38 publishEvent(event);
39 }
40
41 public void setEventPublishers(List<SlcEventPublisher> eventPublishers) {
42 this.eventPublishers = eventPublishers;
43 }
44
45 protected void publishEvent(SlcEvent event) {
46
47 for (Iterator<SlcEventPublisher> it = eventPublishers.iterator(); it
48 .hasNext();) {
49 SlcEventPublisher eventPublisher = it.next();
50 if (log.isTraceEnabled())
51 log.debug("Publish event: "
52 + event.getHeaders().get(SlcEvent.EVENT_TYPE) + " to "
53 + eventPublisher);
54 eventPublisher.publish(event);
55 }
56 }
57 }