package ca.ualberta.cs.cmput301f14t14.questionapp.data.threading;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.Callback;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.DataManager;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.EventBus;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.events.AbstractEvent;
import android.content.Context;
import android.os.AsyncTask;
/**
* An AsyncTask that will run the provided callback in its onPostExecute section
* @param <S> Task parameter type
* @param <T> Task progress response type
* @param <V> Task return value type
*/
public abstract class AbstractDataManagerTask<S,T,V> extends AsyncTask<S,T,V> {
protected Context context;
protected Callback<V> callback = null;
public AbstractDataManagerTask(Context c) {
this(c, null);
}
public AbstractDataManagerTask(Context context, Callback<V> callback) {
this.context = context;
this.callback = callback;
}
protected Context getContext() {
return context;
}
public void setCallBack(Callback<V> c) {
callback = c;
}
/**
* Runs doInBackground in the current thread.
* @param param
* @return
*/
public V blockingRun(S... params){
return this.doInBackground(params);
}
@Override
protected void onPostExecute(V v) {
if (callback == null) {
return;
}
callback.run(v);
}
/* Log the pushDelayed event to the bus, and start the uploader service */
protected void tryPushLater(AbstractEvent e) {
EventBus.getInstance().addEvent(e);
DataManager.getInstance(getContext()).startUploaderService();
}
}