package com.mechinn.android.ouralliance.rest; import android.util.Log; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.mechinn.android.ouralliance.data.Event; import com.mechinn.android.ouralliance.data.Match; import com.mechinn.android.ouralliance.data.Team; import com.squareup.okhttp.OkHttpClient; import retrofit.Callback; import retrofit.RequestInterceptor; import retrofit.RestAdapter; import retrofit.client.Header; import retrofit.client.OkClient; import retrofit.client.Request; import retrofit.client.Response; import retrofit.converter.GsonConverter; import retrofit.http.GET; import retrofit.http.Path; import timber.log.Timber; import java.io.IOException; import java.util.Date; import java.util.List; /** * Created by mechinn on 3/7/14. */ public class TheBlueAlliance { public static final String TAG = "TheBlueAlliance"; private static final RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader("X-TBA-App-Id", "com.mechinn.android.ouralliance:FRC_mobile_scouting_application:2015"); } }; private static final Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .registerTypeAdapter(Date.class, new JsonDateAdapter()) .create(); private static final RestAdapter restAdapter = new RestAdapter .Builder() .setEndpoint("http://www.thebluealliance.com/api/v2") .setRequestInterceptor(requestInterceptor) .setClient(new InterceptingOkClient()) .setLogLevel(RestAdapter.LogLevel.FULL) .setConverter(new GsonConverter(gson)) .build(); private static final TheBlueAllianceAPIv2 service = restAdapter.create(TheBlueAllianceAPIv2.class); public static TheBlueAllianceAPIv2 getService() { return service; } public static class InterceptingOkClient extends OkClient { public InterceptingOkClient() { } public InterceptingOkClient(OkHttpClient client) { super(client); } @Override public Response execute(Request request) throws IOException { Response response = super.execute(request); for (Header header : response.getHeaders()) { Timber.d(header.toString()); } return response; } } public interface TheBlueAllianceAPIv2 { public static final String TAG = "TheBlueAllianceAPIv2"; @GET("/teams/{page}") public List<Team> getTeamPage(@Path("page") String page); @GET("/teams/{page}") public void getTeamPage(@Path("page") String page, Callback<List<Team>> callback); @GET("/team/{team}") public Team getTeam(@Path("team") String team); @GET("/team/{team}") public void getTeam(@Path("team") String team, Callback<Team> callback); @GET("/team/{team}/{year}/events") public List<Event> getTeamEvents(@Path("team") String team, @Path("year") int year); @GET("/team/{team}/{year}/events") public void getTeamEvents(@Path("team") String team, @Path("year") int year, Callback<List<Event>> callback); // @GET("/team/{team}/event/{event}/awards") // public Team getTeamEventAwards(@Path("team") String team, @Path("event") int event); // // @GET("/team/{team}/event/{event}/awards") // public void getTeamEventAwards(@Path("team") String team, @Path("event") int event, Callback<Team> callback); @GET("/team/{team}/event/{event}/matches") public List<Match> getTeamEventMatches(@Path("team") String team, @Path("event") int event); @GET("/team/{team}/event/{event}/matches") public void getTeamEventMatches(@Path("team") String team, @Path("event") int event, Callback<List<Match>> callback); @GET("/team/{team}/years_participated") public int[] getTeamYearsParticipated(@Path("team") String team); @GET("/team/{team}/years_participated") public void getTeamYearsParticipated(@Path("team") String team, Callback<int[]> callback); // @GET("/team/{team}/{year}/media") // public List<Multimedia> getTeamMedia(@Path("team") String team, @Path("year") int year); // // @GET("/team/{team}/{year}/media") // public void getTeamMedia(@Path("team") String team, @Path("year") int year, Callback<List<Multimedia>> callback); @GET("/events/{year}") public List<Event> getEventList(@Path("year") int year); @GET("/events/{year}") public void getEventList(@Path("year") int year, Callback<List<Event>> callback); @GET("/event/{event}") public Event getEvent(@Path("event") String event); @GET("/event/{event}") public void getEvent(@Path("event") String event, Callback<Event> callback); @GET("/event/{event}/teams") public List<Team> getEventTeams(@Path("event") String event); @GET("/event/{event}/teams") public void getEventTeams(@Path("event") String event, Callback<List<Team>> callback); @GET("/event/{event}/matches") public List<Match> getEventMatches(@Path("event") String event); @GET("/event/{event}/matches") public void getEventMatches(@Path("event") String event, Callback<List<Match>> callback); // @GET("/event/{event}/stats") // public List<Match> getEventStats(@Path("event") String event); // // @GET("/event/{event}/stats") // public void getEventStats(@Path("event") String event, Callback<List<Match>> callback); // @GET("/event/{event}/rankings") // public List<Match> getEventRankings(@Path("event") String event); // // @GET("/event/{event}/rankings") // public void getEventRankings(@Path("event") String event, Callback<List<Match>> callback); // @GET("/event/{event}/awards") // public List<Match> getEventAwards(@Path("event") String event); // // @GET("/event/{event}/awards") // public void getEventAwards(@Path("event") String event, Callback<List<Match>> callback); // @GET("/event/{event}/district_points") // public List<Match> getEventDistrictPoints(@Path("event") String event); // // @GET("/event/{event}/district_points") // public void getEventDistrictPoints(@Path("event") String event, Callback<List<Match>> callback); @GET("/match/{match}") public Match getMatch(@Path("match") String match); @GET("/match/{match}") public void getMatch(@Path("match") String match, Callback<Match> callback); // @GET("/districts/{year}") // public List<Match> getDistrictList(@Path("year") int year); // // @GET("/districts/{year}") // public void getDistrictList(@Path("year") int year, Callback<List<Match>> callback); @GET("/district/{district}/{year}/events") public List<Event> getDistrictEvents(@Path("district") District district,@Path("year") int year); @GET("/district/{district}/{year}/events") public void getDistrictEvents(@Path("district") District district,@Path("year") int year, Callback<List<Event>> callback); // @GET("/district/{district}/{year}/rankings") // public List<Match> getDistrictRankings(@Path("district") District district, @Path("year") int year); // // @GET("/district/{district}/{year}/rankings") // public void getDistrictRankings(@Path("district") District district, @Path("year") int year, Callback<List<Match>> callback); } public enum District { NO_DISTRICT(""), MICHIGAN("fim"), MID_ATLANTIC("mar"), NEW_ENGLAND("ne"), PACIFIC_NORTHWEST("pnw"), INDIANA("in"); private String value; private District(String value) { this.value = value; } public int getValue() { if(value.equals(MICHIGAN)) { return 1; } else if(value.equals(MID_ATLANTIC)) { return 2; } else if(value.equals(NEW_ENGLAND)) { return 3; } else if(value.equals(PACIFIC_NORTHWEST)) { return 4; } else if(value.equals(INDIANA)) { return 5; } else { return 0; } } public String toString() { if(value.equals(MICHIGAN)) { return "Michigan"; } else if(value.equals(MID_ATLANTIC)) { return "Mid Atlantic"; } else if(value.equals(NEW_ENGLAND)) { return "New England"; } else if(value.equals(PACIFIC_NORTHWEST)) { return "Pacific Northwest"; } else if(value.equals(INDIANA)) { return "Indiana"; } else { return ""; } } } public static String getEvent(int value) { switch(value) { case 0: return "Regional"; case 1: return "District"; case 2: return "District Championship"; case 3: return "Championship Division"; case 4: return "Championship Finals"; case 99: return "Offseason"; case 100: return "Preseason"; default: return "--"; } } public static District getDistrict(int value) { switch(value) { case 1: return District.MICHIGAN; case 2: return District.MID_ATLANTIC; case 3: return District.NEW_ENGLAND; case 4: return District.PACIFIC_NORTHWEST; case 5: return District.INDIANA; default: return District.NO_DISTRICT; } } }