package org.societies.comm.test; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.comm.xmpp.exceptions.CommunicationException; import org.societies.api.comm.xmpp.exceptions.XMPPError; import org.societies.api.comm.xmpp.interfaces.ICommManager; import org.societies.api.comm.xmpp.pubsub.PubsubClient; import org.societies.api.comm.xmpp.pubsub.Subscriber; import org.societies.api.identity.IIdentity; import org.societies.api.identity.IIdentityManager; import org.societies.api.identity.InvalidFormatException; import org.societies.api.schema.examples.calculatorbean.CalcBean; import org.societies.comm.xmpp.event.PubsubEvent; import org.societies.comm.xmpp.event.PubsubEventFactory; import org.societies.comm.xmpp.event.PubsubEventStream; import org.societies.test.Testnode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class TestPubsubClient extends Thread implements Subscriber, ApplicationListener<PubsubEvent> { private static Logger LOG = LoggerFactory .getLogger(TestPubsubClient.class); private PubsubClient psc; private IIdentityManager idm; private ICommManager endpoint; @Autowired public TestPubsubClient(PubsubClient psc, ICommManager endpoint) { this.psc = psc; this.endpoint = endpoint; idm = endpoint.getIdManager(); start(); } //private Testnode createTestItem() { private CalcBean createTestItem() { Testnode tn = new Testnode(); tn.setTestattribute("testValue"); //return tn; CalcBean calc = new CalcBean(); calc.setMessage("successful"); return calc; } @Override public void pubsubEvent(IIdentity pubsubService, String node, String itemId, Object item) { LOG.info("### pubsubEvent from "+pubsubService+" referring to node "+node+": "+item.getClass().getName()); if (item instanceof CalcBean) { CalcBean calc = (CalcBean)item; LOG.info("###Object Info: " + calc.getMessage()); } } @Override public void run() { try { IIdentity psService = idm.getThisNetworkNode(); String node = "testNode"; List<String> packageList = new ArrayList<String>(); packageList.add("org.societies.test"); LOG.info("ready to start Pubsub and Eventing tests for jid '"+psService.getJid()+"'"); Thread.sleep(1000); LOG.info("### going to add JAXB package..."); psc.addJaxbPackages(packageList); LOG.info("### going to create testNode..."); try { psc.ownerCreate(psService, node); } catch (XMPPError e) { LOG.error("Node already exists", e); } LOG.info("### created testNode! going to subscribe testNode..."); psc.subscriberSubscribe(psService, node, this); LOG.info("### subscribed testNode! going to publish in testNode..."); Object item = createTestItem(); // <-- Create a meaningful object instance -- createTestItem(); psc.publisherPublish(psService, node, null, item); LOG.info("### published in testNode! finishing Pubsub tests..."); /* LOG.info("### starting events test..."); String node2 = "testNode2"; PubsubEventFactory pef = PubsubEventFactory.getInstance(idm.getThisNetworkNode()); PubsubEventStream stream = pef.getStream(psService, node2); stream.addJaxbPackages(packageList); LOG.info("### got stream"); stream.addApplicationListener(this); LOG.info("### added listener"); PubsubEvent event = new PubsubEvent(this, item); stream.multicastEvent(event); LOG.info("### posted event"); */ } catch (XMPPError e) { LOG.error(e.getStanzaErrorString(), e); //.getMessage(), e); } catch (CommunicationException e) { LOG.error(e.getMessage(), e); } catch (InterruptedException e) { LOG.error(e.getMessage(), e); } catch (JAXBException e) { LOG.error(e.getMessage(), e); } } @Override public void onApplicationEvent(PubsubEvent arg0) { LOG.info("### applicationEvent from "+arg0.getPubsubService()+" referring to node "+arg0.getNode()+": "+arg0.getPayload().toString()); } }