package com.jasonrobinson.racer.network; import com.google.gson.GsonBuilder; import com.jasonrobinson.racer.model.Ladder; import com.jasonrobinson.racer.model.Race; import java.net.SocketTimeoutException; import java.util.List; import retrofit.RestAdapter; import retrofit.RetrofitError; import retrofit.converter.Converter; import retrofit.converter.GsonConverter; import retrofit.http.GET; import retrofit.http.Path; import retrofit.http.Query; public class RaceClient { private static final String API_URL = "http://api.pathofexile.com"; public List<Race> fetchRaces() throws SocketTimeoutException, RetrofitError { GsonBuilder builder = new GsonBuilder(); builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); RaceService raceService = buildRaceService(new GsonConverter(builder.create())); return raceService.races(); } public Ladder fetchLadder(String id, int offset, int limit) throws SocketTimeoutException, RetrofitError { RaceService raceService = buildRaceService(); return raceService.ladder(id, offset, limit); } private RaceService buildRaceService() { return buildRaceService(null); } private RaceService buildRaceService(Converter converter) { RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder().setEndpoint(API_URL); if (converter != null) { restAdapterBuilder.setConverter(converter); } RestAdapter restAdapter = restAdapterBuilder.build(); return restAdapter.create(RaceService.class); } public interface RaceService { @GET("/leagues?type=event") List<Race> races(); @GET("/ladders/{id}") Ladder ladder(@Path("id") String id, @Query("offset") int offset, @Query("limit") int limit); } }