package sagan.support.github; import sagan.support.cache.CachedRestClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.social.github.api.GitHub; import org.springframework.stereotype.Component; import org.springframework.web.util.UriTemplate; @Component public class GitHubClient { public static final String API_URL_BASE = "https://api.github.com"; private final GitHub gitHub; private final CachedRestClient restClient; @Autowired public GitHubClient(GitHub gitHub, CachedRestClient restClient) { this.gitHub = gitHub; this.restClient = restClient; } public String sendRequestForJson(String path, Object... uriVariables) { String url = resolveUrl(path, uriVariables); return restClient.get(gitHub.restOperations(), url, String.class); } public byte[] sendRequestForDownload(String path, Object... uriVariables) { String url = resolveUrl(path, uriVariables); return restClient.get(gitHub.restOperations(), url, byte[].class); } public String sendRequestForHtml(String path, Object... uriVariables) { String url = resolveUrl(path, uriVariables); MarkdownHtml markdownHtml = restClient.get(gitHub.restOperations(), url, MarkdownHtml.class); return markdownHtml.toString(); } public String sendPostRequestForHtml(String path, String body, Object... uriVariables) { String url = resolveUrl(path, uriVariables); return restClient.post(gitHub.restOperations(), url, String.class, body); } private String resolveUrl(String path, Object[] uriVariables) { String expandedPath = new UriTemplate(path).expand(uriVariables).toString(); return API_URL_BASE + expandedPath; } }