package org.societies.comm.test; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.comm.xmpp.datatypes.Stanza; 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.interfaces.IFeatureServer; import org.societies.api.identity.IIdentityManager; import org.societies.test.Testnode; import org.societies.test.event.Eventnode; public class Test3PServiceServer extends Thread implements IFeatureServer { private static Logger LOG = LoggerFactory .getLogger(Test3PServiceServer.class); private final static List<String> NAMESPACES = Collections .unmodifiableList(Arrays.asList( "http://societies.org/test", "http://societies.org/test#event")); private static final List<String> PACKAGES = Collections .unmodifiableList(Arrays.asList( "org.societies.test", "org.societies.test.event")); private IIdentityManager idm; private ICommManager endpoint; public Test3PServiceServer(ICommManager endpoint) { this.endpoint = endpoint; idm = endpoint.getIdManager(); try { endpoint.register(this); LOG.info("Test3PServiceServer initialized! Launching test thread..."); } catch (CommunicationException e) { LOG.error("CommunicationException",e); } } private Testnode createTestItem() { Testnode tn = new Testnode(); tn.setTestattribute("serverTestValue"); return tn; } private Eventnode createEventItem() { Eventnode tn = new Eventnode(); tn.setTestattribute("serverTestValue"); return tn; } @Override public void run() { try { Thread.sleep(2000); LOG.info("Sending event..."); Object o = createEventItem(); Stanza s = new Stanza(idm.getThisNetworkNode()); endpoint.sendMessage(s, o); } catch (InterruptedException e) { LOG.error("InterruptedException",e); } catch (CommunicationException e) { LOG.error("CommunicationException",e); } } @Override public List<String> getJavaPackages() { return PACKAGES; } @Override public List<String> getXMLNamespaces() { return NAMESPACES; } @Override public void receiveMessage(Stanza arg0, Object arg1) { // TODO not tested } @Override public Object getQuery(Stanza arg0, Object arg1) throws XMPPError { LOG.info("Got IQ! Testnode:"+((Testnode)arg1).getTestattribute()); LOG.info("Sending response and starting event thread..."); start(); return createTestItem(); } @Override public Object setQuery(Stanza arg0, Object arg1) throws XMPPError { return getQuery(arg0, arg1); } }