package org.mobicents.slee.sipevent.server.subscription.eventlist;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import org.openxdm.xcap.client.XCAPClient;
import org.openxdm.xcap.client.appusage.resourcelists.jaxb.EntryType;
import org.openxdm.xcap.client.appusage.resourcelists.jaxb.ListType;
import org.openxdm.xcap.client.appusage.resourcelists.jaxb.EntryType.DisplayName;
import org.openxdm.xcap.client.appusage.rlsservices.jaxb.ObjectFactory;
import org.openxdm.xcap.client.appusage.rlsservices.jaxb.PackagesType;
import org.openxdm.xcap.client.appusage.rlsservices.jaxb.RlsServices;
import org.openxdm.xcap.client.appusage.rlsservices.jaxb.ServiceType;
import org.openxdm.xcap.common.key.UserDocumentUriKey;
import org.openxdm.xcap.server.slee.appusage.rlsservices.RLSServicesAppUsage;
public class RlsServicesManager {
private XCAPClient xCAPClient;
private final ResourceListServerSipTest test;
private final String serviceUri;
private final String[] entryURIs;
public RlsServicesManager(String serviceUri, String[] entryURIs, ResourceListServerSipTest test) {
this.serviceUri = serviceUri;
this.entryURIs = entryURIs;
this.test = test;
try {
xCAPClient = ServerConfiguration.getXCAPClientInstance();
} catch (InterruptedException e) {
e.printStackTrace();
test.failTest(e.getMessage());
}
}
public void putRlsServices() {
try {
xCAPClient.put(new UserDocumentUriKey(RLSServicesAppUsage.ID,serviceUri,"index"), RLSServicesAppUsage.MIMETYPE, getRlsServices(entryURIs).getBytes("UTF-8"),null);
} catch (Exception e) {
e.printStackTrace();
test.failTest(e.getMessage());
}
}
public void deleteRlsServices() {
try {
xCAPClient.delete(new UserDocumentUriKey(RLSServicesAppUsage.ID,serviceUri,"index"),null);
} catch (Exception e) {
e.printStackTrace();
test.failTest(e.getMessage());
}
}
private EntryType createEntryType(String uri) {
EntryType entryType = new EntryType();
entryType.setUri(uri);
DisplayName displayName = new EntryType.DisplayName();
displayName.setValue(uri);
entryType.setDisplayName(displayName);
return entryType;
}
private String getRlsServices(String[] entryURIs) {
StringWriter stringWriter = new StringWriter();
try {
JAXBContext context = JAXBContext.newInstance("org.openxdm.xcap.client.appusage.rlsservices.jaxb");
ListType listType = new ListType();
for (String entryURI : entryURIs) {
listType.getListOrExternalOrEntry().add(createEntryType(entryURI));
}
ServiceType serviceType = new ServiceType();
serviceType.setList(listType);
PackagesType packagesType = new PackagesType();
packagesType.getPackageAndAny().add(new ObjectFactory().createPackagesTypePackage("presence"));
serviceType.setPackages(packagesType);
serviceType.setUri(serviceUri);
RlsServices rlsServices = new RlsServices();
rlsServices.getService().add(serviceType);
context.createMarshaller().marshal(rlsServices, stringWriter);
return stringWriter.toString();
} catch (Exception e) {
e.printStackTrace();
test.failTest(e.getMessage());
}
finally {
try {
stringWriter.close();
} catch (IOException e) {
e.printStackTrace();
test.failTest(e.getMessage());
}
}
return null;
}
}