package org.mobicents.slee.sippresence.server.publication; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import org.junit.Test; import org.mobicents.slee.sippresence.pojo.pidf.Presence; public class PresenceCompositionPolicyTest { private static final JAXBContext jaxbContext = initJAXBContext(); private static JAXBContext initJAXBContext() { try { return JAXBContext .newInstance("org.mobicents.slee.sippresence.pojo.pidf" + ":org.mobicents.slee.sippresence.pojo.pidf.oma" + ":org.mobicents.slee.sippresence.pojo.rpid" + ":org.mobicents.slee.sippresence.pojo.datamodel" + ":org.mobicents.slee.sippresence.pojo.commonschema"); } catch (JAXBException e) { e.printStackTrace(); return null; } } @Test public void test() throws JAXBException, IOException { String pidf1 = "<?xml version='1.0' encoding='UTF-8'?>" + "<presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' xmlns:op='urn:oma:xml:prs:pidf:oma-pres' entity='sip:user@example.com'>" + "<tuple id='t54bb0569'>" + "<status>" + "<basic>open</basic>" + "</status>" + "<contact>sip:my_name@example.com</contact>" + "<timestamp>2005-02-22T20:07:07Z</timestamp>" + "<op:service-description>" + "<op:service-id>org.openmobilealliance:PoC-session</op:service-id>" + "<op:version> 1.0 </op:version>" + "<op:description>This is 1</op:description>"+ "</op:service-description>"+ "</tuple>" + "<dm:person id='p65f3307a'>" + "<rpid:activities><rpid:busy/></rpid:activities>" + "<dm:note>Busy</dm:note>" + "</dm:person>" + "<dm:device id='p65f3307b'>" + "<dm:deviceID>urn:uuid:d27459b7-8213-4395-aa77-ed859a3e5b3a</dm:deviceID>" + "<dm:timestamp>2005-02-22T20:07:07Z</dm:timestamp>" + "<dm:note>BlahBlah</dm:note>" + "</dm:device>" + "<dm:device id='p65f3307c'>" + "<dm:deviceID>urn:uuid:d27459b7-8213-4395-aa77-ed859a3e5b3b</dm:deviceID>" + "<dm:timestamp>2005-02-22T20:07:07Z</dm:timestamp>" + "<dm:note>BlahBlahBlah</dm:note>" + "<op:network-availability>" + "<op:network id='IMS'>" + "<op:active/>" + "</op:network>" + "</op:network-availability>" + "</dm:device>" + "</presence>"; String pidf2 = "<?xml version='1.0' encoding='UTF-8'?>" + "<presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' xmlns:op='urn:oma:xml:prs:pidf:oma-pres' entity='sip:user@example.com'>" + "<tuple id='t54bb05690'>" + "<status>" + "<basic>open</basic>" + "</status>" + "<contact>sip:my_name@example.com</contact>" + "<timestamp>2005-02-23T20:07:07Z</timestamp>" + "<op:service-description>" + "<op:service-id>org.openmobilealliance:PoC-session</op:service-id>" + "<op:version> 1.0 </op:version>" + "<op:description>This is 2</op:description>"+ "</op:service-description>"+ "</tuple>" + "<dm:person id='p65f3307a'>" + "<rpid:activities><rpid:busy/></rpid:activities>" + "<dm:note>Busy</dm:note>" + "</dm:person>" + "<dm:device id='p65f3307b'>" + "<dm:deviceID>urn:uuid:d27459b7-8213-4395-aa77-ed859a3e5b3b</dm:deviceID>" + "<dm:timestamp>2005-02-23T20:07:07Z</dm:timestamp>" + "<dm:note>Zzz</dm:note>" + "<op:network-availability>" + "<op:network id='IMS'>" + "<op:terminated/>" + "</op:network>" + "</op:network-availability>" + "</dm:device>" + "</presence>"; StringReader sr = new StringReader(pidf1); Presence presence = ((JAXBElement<Presence>) jaxbContext.createUnmarshaller().unmarshal(sr)).getValue(); sr.close(); sr = new StringReader(pidf2); Presence otherPresence = ((JAXBElement<Presence>) jaxbContext.createUnmarshaller().unmarshal(sr)).getValue(); sr.close(); Presence compositionPresence = new PresenceCompositionPolicy().compose(presence, otherPresence); StringWriter sw = new StringWriter(); jaxbContext.createMarshaller().marshal(compositionPresence, sw); System.out.println("Composed pidf:\n"+sw.toString()); sw.close(); } }