1166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpackage com.squareup.okhttp.sample; 2166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 3166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport com.google.gson.Gson; 4166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport com.google.gson.reflect.TypeToken; 5166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport com.squareup.okhttp.OkHttpClient; 6166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.InputStream; 7166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.io.InputStreamReader; 8166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.net.HttpURLConnection; 9166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.net.URL; 10166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.util.Collections; 11166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.util.Comparator; 12166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathimport java.util.List; 13166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 14166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpublic class OkHttpContributors { 15166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath private static final String ENDPOINT = "https://api.github.com/repos/square/okhttp/contributors"; 16166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath private static final Gson GSON = new Gson(); 17166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath private static final TypeToken<List<Contributor>> CONTRIBUTORS = 18166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath new TypeToken<List<Contributor>>() { 19166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath }; 20166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 213c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller static class Contributor { 22166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath String login; 23166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath int contributions; 24166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 25166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 26166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public static void main(String... args) throws Exception { 27166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath OkHttpClient client = new OkHttpClient(); 28166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 29166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath // Create request for remote resource. 30166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath HttpURLConnection connection = client.open(new URL(ENDPOINT)); 31166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath InputStream is = connection.getInputStream(); 32166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath InputStreamReader isr = new InputStreamReader(is); 33166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 34166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath // Deserialize HTTP response to concrete type. 35166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath List<Contributor> contributors = GSON.fromJson(isr, CONTRIBUTORS.getType()); 36166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 37166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath // Sort list by the most contributions. 38166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath Collections.sort(contributors, new Comparator<Contributor>() { 39166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath @Override public int compare(Contributor c1, Contributor c2) { 40166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath return c2.contributions - c1.contributions; 41166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 42166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath }); 43166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 44166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath // Output list of contributors. 45166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath for (Contributor contributor : contributors) { 46166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath System.out.println(contributor.login + ": " + contributor.contributions); 47166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 48166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 49166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 50166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath private OkHttpContributors() { 51166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath // No instances. 52166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 53166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath} 54