package com.webgroupmedia.cerb4.exporter.zendesk;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class ZenRunnable implements Runnable {
private Document document;
private IResponseHandler responseHandler;
private HttpClient httpClient;
private final GetMethod method;
public interface IResponseHandler {
public void onZenResponse(Document document);
}
public ZenRunnable(HttpClient httpClient, GetMethod method, IResponseHandler responseHandler) {
this.httpClient = httpClient;
this.method = method;
this.responseHandler = responseHandler;
}
public void run() {
requestDoc();
}
public Document requestDoc() {
InputStream inputStream;
try {
httpClient.executeMethod(method);
inputStream = method.getResponseBodyAsStream();
if (HttpStatus.SC_OK != method.getStatusCode()) {
String errorMessage = "Connection Error (code: " + method.getStatusCode() + "): " + method.getStatusText();
System.out.println(errorMessage);
return null;
}
SAXReader reader = new SAXReader();
try {
document = reader.read(inputStream);
if(responseHandler != null) {
responseHandler.onZenResponse(document);
}
} catch (DocumentException e) {
e.printStackTrace();
}
} catch (HttpException e) {
e.printStackTrace();
//throw new ZenDocumentFetchException("HttpException accessing zendesk xml: "+ method.getURI().toString(), e);
} catch (IOException e) {
e.printStackTrace();
//throw new ZenDocumentFetchException("IOException accessing zendesk xml: "+ method.getURI().toString(), e);
}
finally {
if(method!=null) {
method.releaseConnection();
}
}
return document;
}
}