package net.naonedbus.loader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.naonedbus.BuildConfig;
import net.naonedbus.bean.Equipement;
import net.naonedbus.bean.Equipement.Type;
import net.naonedbus.map.layer.loader.BiclooMapLoader;
import net.naonedbus.map.layer.loader.EquipementMapLoader;
import net.naonedbus.map.layer.loader.MapLayerLoader;
import net.naonedbus.map.layer.loader.ParkingMapLoader;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.twotoasters.clusterkraf.InputPoint;
public class MapLoader extends AsyncTask<Equipement.Type, ArrayList<InputPoint>, Void> {
private static String LOG_TAG = "MapLoader";
private static boolean DBG = BuildConfig.DEBUG;
private final WeakReference<MapLoaderCallback> mCallback;
private final WeakReference<Context> mContext;
private final Map<Equipement.Type, MapLayerLoader> mLoaders;
public MapLoader(final Context context, final MapLoaderCallback callback) {
mContext = new WeakReference<Context>(context);
mCallback = new WeakReference<MapLoaderCallback>(callback);
mLoaders = new HashMap<Equipement.Type, MapLayerLoader>();
mLoaders.put(Type.TYPE_ARRET, new EquipementMapLoader(Type.TYPE_ARRET));
mLoaders.put(Type.TYPE_BICLOO, new BiclooMapLoader());
mLoaders.put(Type.TYPE_PARKING, new ParkingMapLoader());
}
@Override
protected Void doInBackground(final Equipement.Type... types) {
final Context context = mContext.get();
if (context != null) {
for (final Type type : types) {
final MapLayerLoader loader = mLoaders.get(type);
publishProgress(loader.getInputPoints(context));
}
} else {
if (DBG)
Log.w(LOG_TAG, "doInBackground context null");
}
return null;
}
@Override
protected void onProgressUpdate(final ArrayList<InputPoint>... values) {
final MapLoaderCallback callback = mCallback.get();
if (callback != null) {
for (final ArrayList<InputPoint> value : values) {
callback.onLayerLoaded(value);
}
} else {
if (DBG)
Log.w(LOG_TAG, "onProgressUpdate callback null");
}
}
@Override
protected void onPreExecute() {
MapLoaderCallback callback = mCallback.get();
if (callback != null) {
callback.onMapLoaderStart();
} else {
if (DBG)
Log.w(LOG_TAG, "onPreExecute callback null");
}
}
@Override
protected void onPostExecute(Void result) {
MapLoaderCallback callback = mCallback.get();
if (callback != null) {
callback.onMapLoaderEnd();
} else {
if (DBG)
Log.w(LOG_TAG, "onPostExecute callback null");
}
}
public interface MapLoaderCallback {
void onMapLoaderStart();
void onMapLoaderEnd();
void onLayerLoaded(ArrayList<InputPoint> result);
}
}