package ca.ualberta.cs.cmput301f14t14.questionapp.data.threading;
import java.io.IOException;
import ca.ualberta.cs.cmput301f14t14.questionapp.model.Answer;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.Callback;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.DataManager;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.IDataStore;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.EventBus;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.eventbus.events.AnswerPushDelayedEvent;
import android.content.Context;
import android.util.Log;
/**
* This task updates or creates an answer record.
* The user is responsible for ensuring that the related records are updated.
*/
public class AddAnswerTask extends AbstractDataManagerTask<Answer, Void, Void>{
public AddAnswerTask(Context c) {
super(c);
}
public AddAnswerTask(Context c, Callback<Void> callback) {
super(c, callback);
}
@Override
protected Void doInBackground(Answer... args) {
IDataStore remote = DataManager.getInstance(getContext()).getRemoteDataStore();
IDataStore local = DataManager.getInstance(getContext()).getLocalDataStore();
Answer ans = args[0];
// Save the answer record remotely
try {
remote.putAnswer(ans);
} catch (IOException e) {
Log.d("AddAnswerTask", "Failed to push answer remotely");
if (EventBus.getInstance().getEventQueue().contains(new AnswerPushDelayedEvent(ans))){
return null;
}
tryPushLater(new AnswerPushDelayedEvent(ans));
}
try {
local.putAnswer(ans);
local.save();
} catch (IOException e) {
Log.e("AddAnswerTask", "Failed to save answer record");
}
return null;
}
}