OkHttpContributors.java revision 166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3
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
21166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath  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