package com.neuron.trafikanten.views.route; import java.util.ArrayList; import android.content.Context; import android.util.Log; import com.neuron.trafikanten.dataProviders.IGenericProviderHandler; import com.neuron.trafikanten.dataProviders.trafikanten.TrafikantenDevi; import com.neuron.trafikanten.dataSets.DeviData; import com.neuron.trafikanten.dataSets.RouteData; import com.neuron.trafikanten.dataSets.RouteDeviData; import com.neuron.trafikanten.dataSets.RouteProposal; public class RouteDeviLoader { private final static String TAG = "Trafikanten-RouteDeviLoader"; private TrafikantenDevi deviProvider = null; private Context context; IGenericProviderHandler<Void> handler; private RouteDeviData deviList; private String deviKey; public RouteDeviLoader(Context context, RouteDeviData deviList, IGenericProviderHandler<Void> handler) { this.context = context; this.handler = handler; this.deviList = deviList; } /* * Load devi, returns false if all devi is loaded */ public boolean load(ArrayList<RouteProposal> routeProposalList) { for (RouteProposal routeProposal : routeProposalList) { if (load(routeProposal)) { return true; } } Log.i(TAG,"Done loading route devi"); return false; } /* * Load devi for single proposal */ public boolean load(RouteProposal routeProposal) { for (RouteData routeData : routeProposal.travelStageList) { /* * if tourId = 0 we're walking, no devi for that ;) */ if (routeData.tourID > 0) { deviKey = deviList.getDeviKey(routeData.fromStation.stationId, routeData.lineId); /* * if the deviList contains the key we've already asked. */ if (!deviList.items.containsKey(deviKey)) { Log.i(TAG,"Loading route devi " + deviKey); loadDevi(routeData, routeData.fromStation.stationId, routeData.lineId); return true; } /* else { Log.i(TAG,"Found " + deviKey + " in cache"); } */ } } return false; } private void loadDevi(final RouteData routeData, int stationId, int lineId) { deviProvider = new TrafikantenDevi(context, stationId, new Integer(lineId).toString(), new IGenericProviderHandler<DeviData>() { private ArrayList<DeviData> list = new ArrayList<DeviData>(); @Override public void onExtra(int what, Object obj) { /* Class has no extra data */ } @Override public void onData(DeviData deviData) { list.add(deviData); } @Override public void onPostExecute(Exception exception) { if (exception == null) { deviList.items.put(deviKey, list); } deviProvider = null; handler.onPostExecute(exception); } @Override public void onPreExecute() {} }); } public void kill() { if (deviProvider != null) { deviProvider.kill(); } deviProvider = null; } }