package org.societies.comm.xmpp.event; import java.util.List; import javax.xml.bind.JAXBException; import org.societies.api.identity.IIdentity; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ApplicationEventMulticaster; public abstract class PubsubEventStream implements ApplicationEventMulticaster { protected IIdentity pubsubService; protected String node; protected ApplicationEventMulticaster multicaster; public PubsubEventStream(IIdentity pubsubService, String node, ApplicationEventMulticaster multicaster) { this.pubsubService = pubsubService; this.node = node; this.multicaster = multicaster; } public abstract String publishLocalEvent(Object payload); public abstract void addJaxbPackages(List<String> packageList) throws JAXBException; protected void multicastRemoteEvent(PubsubEvent pe, String itemId) { pe.setPublished(pubsubService, node, itemId); multicaster.multicastEvent(pe); } @Override public void addApplicationListener(ApplicationListener arg0) { multicaster.addApplicationListener(arg0); } @Override public void multicastEvent(ApplicationEvent event) { if (event instanceof PubsubEvent) { PubsubEvent pe = (PubsubEvent)event; if (!pe.isPublished()) { // publish to XMPP node String itemId = publishLocalEvent(pe.getPayload()); pe.setPublished(pubsubService, node, itemId); } multicaster.multicastEvent(pe); } } @Override public void removeAllListeners() { multicaster.removeAllListeners(); } @Override public void removeApplicationListener(ApplicationListener arg0) { multicaster.removeApplicationListener(arg0); } @Override public void addApplicationListenerBean(String arg0) { multicaster.addApplicationListenerBean(arg0); } @Override public void removeApplicationListenerBean(String arg0) { multicaster.removeApplicationListenerBean(arg0); } }