package com.kth.baasio.callback;
import com.kth.baasio.exception.BaasioException;
import com.kth.baasio.query.BaasioQuery;
import com.kth.baasio.response.BaasioResponse;
import org.springframework.web.client.HttpClientErrorException;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
public abstract class BaasioQueryAsyncTask extends AsyncTask<Void, Void, BaasioResponse> {
BaasioQueryCallback mCallback;
BaasioQuery mQuery;
private Handler mHandler = new Handler(Looper.getMainLooper());
public BaasioQueryAsyncTask(BaasioQuery query, BaasioQueryCallback callback) {
this.mCallback = callback;
this.mQuery = query;
}
private void onException(final BaasioException e) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
mCallback.onException(e);
}
}
});
}
@Override
protected BaasioResponse doInBackground(Void... v) {
try {
return doTask();
} catch (HttpClientErrorException e) {
onException(new BaasioException(e.getStatusCode(), e.getResponseBodyAsString()));
} catch (BaasioException e) {
onException(e);
} catch (Exception e) {
onException(new BaasioException(e));
}
return null;
}
public abstract BaasioResponse doTask() throws Exception;
@Override
protected void onPostExecute(BaasioResponse response) {
if (mCallback != null && response != null) {
mCallback.onResponse(response.getEntities(), response.getList(),
(BaasioQuery)mQuery.clone(), response.getTimestamp());
}
}
}