package co.createch.MetroRappid.model; import android.content.Context; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import co.createch.MetroRappid.data.RouteDirectionDeserializer; import co.createch.MetroRappid.data.RouteRepository; /** * Created by Seth Gholson on 5/31/14. */ public class FileRouteRepository implements RouteRepository { private Context mContext; public FileRouteRepository(Context context) { mContext = context; } @Override public RoutePath getShapesForRoute(String routeId, RouteDirection direction) { int resourceId = getResourceIdForRoute(routeId, direction); return getRoutePath(resourceId); } private int getResourceIdForRoute(String routeId, RouteDirection direction) { String resourceName = String.format("shapes_%s_%d", routeId, direction.getKey()); return mContext.getResources().getIdentifier(resourceName, "raw", mContext.getPackageName()); } private RoutePath getRoutePath(int resource) { if (resource == 0) { return null; } RoutePath routePath; InputStream raw = mContext.getResources().openRawResource(resource); Reader reader = new BufferedReader(new InputStreamReader(raw)); final Gson gson = new GsonBuilder() .registerTypeAdapter(RouteDirection.class, new RouteDirectionDeserializer()) .create(); Type listType = new TypeToken<RoutePath>() { }.getType(); routePath = gson.fromJson(reader, listType); return routePath; } }