/*
* Copyright (c) 2014. The Trustees of Indiana University.
*
* This version of the code is licensed under the MPL 2.0 Open Source license with additional
* healthcare disclaimer. If the user is an entity intending to commercialize any application
* that uses this code in a for-profit venture, please contact the copyright holder.
*/
package com.muzima.adapters.observations;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import com.muzima.R;
import com.muzima.api.model.Encounter;
import com.muzima.controller.ObservationController;
import com.muzima.model.observation.EncounterWithObservations;
import com.muzima.model.observation.Encounters;
import java.util.List;
public class ObservationsByEncounterBackgroundTask extends AsyncTask<Void, Encounters, Encounters> {
private EncounterAction encounterAction;
private ObservationsByEncounterAdapter observationsByEncounterAdapter;
public ObservationsByEncounterBackgroundTask(ObservationsByEncounterAdapter observationsByEncounterAdapter, EncounterAction encounterAction) {
this.observationsByEncounterAdapter = observationsByEncounterAdapter;
this.encounterAction = encounterAction;
}
@Override
protected void onPreExecute() {
if (observationsByEncounterAdapter.getBackgroundListQueryTaskListener() != null) {
observationsByEncounterAdapter.getBackgroundListQueryTaskListener().onQueryTaskStarted();
}
}
@Override
protected Encounters doInBackground(Void... params) {
Encounters encountersWithObservations = null;
Encounters temp = null;
try {
List<Encounter> encounters = encounterAction.getEncounters();
for(Encounter encounter : encounters) {
if(!isCancelled()) {
temp = encounterAction.get(encounter);
if (temp != null) {
temp.sortByDate();
if (encountersWithObservations == null) {
encountersWithObservations = temp;
} else {
encountersWithObservations.addAll(temp);
}
publishProgress(temp);
}
} else {
break;
}
}
} catch (ObservationController.LoadObservationException e) {
Log.w("Observations", String.format("Exception while loading observations for %s.", encounterAction), e);
}
return encountersWithObservations;
}
@Override
protected void onPostExecute(Encounters encountersWithObservations) {
if (encountersWithObservations == null) {
Toast.makeText(observationsByEncounterAdapter.getContext(), observationsByEncounterAdapter.getContext().getString(R.string.error_observation_fetch), Toast.LENGTH_SHORT).show();
return;
}
if (observationsByEncounterAdapter.getBackgroundListQueryTaskListener() != null) {
observationsByEncounterAdapter.getBackgroundListQueryTaskListener().onQueryTaskFinish();
}
}
@Override
protected void onProgressUpdate(Encounters... encountersWithObservations) {
if (encountersWithObservations == null) {
return;
}
for (Encounters encounters : encountersWithObservations) {
for (EncounterWithObservations encountersWithObservation : encounters) {
observationsByEncounterAdapter.add(encountersWithObservation);
}
}
observationsByEncounterAdapter.notifyDataSetChanged();
}
}