package com.lmit.jenkins.android.networking;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import android.os.AsyncTask;
import com.lmit.jenkins.android.configuration.Configuration;
import com.lmit.jenkinscloud.commons.JenkinsCloudDataNode;
import com.lmit.jenkinscloud.commons.JenkinsCloudNode;
import com.lmit.jenkinscloud.commons.JenkinsCloudPageReset;
import com.lmit.jenkinscloud.commons.SyncCallback;
public class HudsonMobiAsyncHttpClient extends HudsonMobiSynchHttpClient {
@Override
public void call(boolean forceRefresh, String path,
final SyncCallback<JenkinsCloudNode> callback) {
new AsynchHttpGetTask(callback).execute("" + forceRefresh, path);
}
public void call2Synch(boolean forceRefresh, String url, final SyncCallback<InputStream> callback) {
InputStream result = null;
AbstractSecureHttpClient client =
new ServerAuthenticationDefaultHttpClient(url);
log.debug("Getting URL: '" + url + "'");
try {
HttpResponse response = client.executeGetQuery(forceRefresh, userHeaders);
lastHttpHeaders = response.getAllHeaders().clone();
if (response.getStatusLine().getStatusCode() == 200) {
result = response.getEntity().getContent();
callback.onSuccess(result);
} else {
throw new IOException("HTTP-Error " + response.getStatusLine().getStatusCode() + ":"
+ response.getStatusLine().getReasonPhrase());
}
} catch (Exception e) {
callback.onFailure(e);
}
}
@Override
public void call2(boolean forceRefresh, String path, final SyncCallback<InputStream> callback) {
new InternalAsynchTask2(callback).execute("" + forceRefresh, path);
}
private class InternalAsynchTask2 extends
AsyncTask<String, Void, InputStream> {
private SyncCallback<InputStream> callback;
private Throwable e;
public InternalAsynchTask2(SyncCallback<InputStream> callback) {
this.callback = callback;
}
@Override
protected InputStream doInBackground(String... paramArrayOfParams) {
InputStream result = null;
boolean forceRefresh = Boolean.parseBoolean(paramArrayOfParams[0]);
String url = paramArrayOfParams[1];
AbstractSecureHttpClient client =
new ServerAuthenticationDefaultHttpClient(url);
log.debug("Getting URL: '" + url + "'");
try {
HttpResponse response = client.executeGetQuery(forceRefresh, userHeaders);
lastHttpHeaders = response.getAllHeaders().clone();
if (response.getStatusLine().getStatusCode() == 200) {
result = response.getEntity().getContent();
} else {
this.e =
new Throwable("Error "
+ response.getStatusLine().getReasonPhrase());
}
} catch (Exception e) {
this.e = e;
}
return result;
}
@Override
protected void onPostExecute(InputStream result) {
if (e == null) {
callback.onSuccess(result);
} else {
callback.onFailure(e);
}
}
}
private class AsynchHttpGetTask extends
AsyncTask<String, Void, JenkinsCloudNode> {
private SyncCallback<JenkinsCloudNode> callback;
private Throwable e;
public AsynchHttpGetTask(SyncCallback<JenkinsCloudNode> callback) {
this.callback = callback;
}
@Override
protected JenkinsCloudNode doInBackground(String... paramArrayOfParams) {
JenkinsCloudNode result = null;
boolean forceRefresh = Boolean.parseBoolean(paramArrayOfParams[0]);
String url = paramArrayOfParams[1];
AbstractSecureHttpClient client =
new ServerAuthenticationDefaultHttpClient(url);
log.debug("Getting URL: '" + url + "'");
try {
HttpResponse response = client.executeGetQuery(forceRefresh, userHeaders);
lastHttpHeaders = response.getAllHeaders().clone();
switch (response.getStatusLine().getStatusCode()) {
case HttpURLConnection.HTTP_OK:
InputStream responseInStream = response.getEntity().getContent();
try {
result = JenkinsCloudDataNode.fromStream(responseInStream, response.getEntity().getContentType().getValue());
setETag(result, response);
} finally {
responseInStream.close();
}
break;
case HttpURLConnection.HTTP_NOT_MODIFIED:
result = client.getCachedNode();
break;
case HttpURLConnection.HTTP_RESET:
callback.onSuccess(new JenkinsCloudPageReset());
break;
default:
Configuration.getInstance().setConnected(false, true);
StatusLine statusLine = response.getStatusLine();
this.e =
new IOException("HTTP Error: " + statusLine.getStatusCode()
+ " - " + statusLine.getReasonPhrase());
}
} catch (Exception e) {
this.e = e;
Configuration.getInstance().setConnected(false, true);
}
return result;
}
@Override
protected void onPostExecute(JenkinsCloudNode result) {
if (e == null) {
callback.onSuccess(result);
} else {
callback.onFailure(e);
}
}
}
}