package org.mobicents.slee.resource.xcapclient.handler;
import java.io.IOException;
import java.util.List;
import org.mobicents.slee.resource.xcapclient.ResponseEvent;
import org.mobicents.slee.resource.xcapclient.XCAPClientResourceAdaptor;
import org.mobicents.slee.resource.xcapclient.XCAPResourceAdaptorActivityHandle;
import org.openxdm.xcap.client.RequestHeader;
import org.openxdm.xcap.client.Response;
import org.openxdm.xcap.common.key.XcapUriKey;
/**
* Asbtract class for a handler
* @author emmartins
*
*/
public abstract class AbstractAsyncHandler implements Runnable {
protected XcapUriKey key;
protected XCAPClientResourceAdaptor ra;
protected XCAPResourceAdaptorActivityHandle handle;
protected List<RequestHeader> additionalRequestHeaders;
protected AbstractAsyncHandler(XCAPClientResourceAdaptor ra,XCAPResourceAdaptorActivityHandle handle,XcapUriKey key, List<RequestHeader> additionalRequestHeaders) {
super();
this.key = key;
this.ra = ra;
this.handle = handle;
this.additionalRequestHeaders = additionalRequestHeaders;
}
/**
* To be implemented by concrete handler, sends the request to the XCAP and
* processes response.
*
* @return
* @throws IOException
* @throws Exception
*/
protected abstract Response doRequest() throws Exception;
public void run() {
ResponseEvent event = null;
try {
// execute method and get response
Response response = doRequest();
// create event with response
event = new ResponseEvent(response);
}
catch(Exception e) {
// create event with exception
event = new ResponseEvent(e);
}
// process event
ra.processResponseEvent(event,handle);
}
}