/** * Returns a specific release from the specified repository. * * @param owner the repository's owner * @param repo the repository's name * @param id the id of the release to retrieve * @return An {@link Optional} that contains the specified release if it could be found. * @throws IOException if an IO error occurs while communicating with GitHub. * @throws URISyntaxException if the crafted URI is incorrect. */ public Optional<GithubRelease> getRelease(String owner, String repo, String id) throws IOException, URISyntaxException { URIBuilder requestUrl = new URIBuilder() .setScheme(URL_PROTOCOL) .setHost(GITHUB_API_HOSTNAME) .setPath("/repos/" + owner + "/" + repo + "/releases/" + id); logger.debug(() -> "requestUrl = " + requestUrl); HttpGet httpget = new HttpGet(requestUrl.build()); return Optional.ofNullable(httpClient.execute(httpget, new AbstractResponseHandler<GithubRelease>() { @Override public GithubRelease handleEntity(HttpEntity entity) throws IOException { return gson.fromJson(EntityUtils.toString(entity), GithubRelease.class); } })); }
/** * Returns a list of all release from the specified repository. * * @param owner the repository's owner * @param repo the repository's name * @return a list of all release from the specified repository. * @throws IOException if an IO error occurs while communicating with GitHub. * @throws URISyntaxException if the crafted URI is incorrect. */ public List<GithubRelease> getAllReleases(String owner, String repo) throws IOException, URISyntaxException { URIBuilder requestUrl = new URIBuilder() .setScheme(URL_PROTOCOL) .setHost(GITHUB_API_HOSTNAME) .setPath("/repos/" + owner + "/" + repo + "/releases"); logger.debug(() -> "requestUrl = " + requestUrl); HttpGet httpget = new HttpGet(requestUrl.build()); return httpClient.execute(httpget, new AbstractResponseHandler<List<GithubRelease>>() { @Override public List<GithubRelease> handleEntity(HttpEntity entity) throws IOException { return gson.fromJson(EntityUtils.toString(entity), new TypeToken<ArrayList<GithubRelease>>() { }.getType()); } }); }
@Override public boolean ping() { try { return doHttpGet(craftRequestUri(""), new AbstractResponseHandler<Boolean>() { @Override public Boolean handleEntity(HttpEntity entity) throws IOException { String entityString = EntityUtils.toString(entity); logger.trace(entityString); return true; } }); } catch (Exception e) { logger.debug(() -> "Ping failed", e); return false; } }
@Override public byte[] onCacheMiss(String path, Instant begin, Instant end) throws DataAdapterException { return doHttpGet(craftFetchUri(path, begin, end), new AbstractResponseHandler<byte[]>() { @Override public byte[] handleEntity(HttpEntity entity) throws IOException { return EntityUtils.toByteArray(entity); } }); }
/** * Returns an entity to function result response handler. * * @param <R> the function return type, not null * @param function the function to apply to the response entity, not null * @return an entity to function result response handler, not null */ public static <R> ResponseHandler<R> of(IOFunction<InputStream, R> function) { Objects.requireNonNull(function); return new AbstractResponseHandler<R>() { @Override public R handleEntity(HttpEntity entity) throws IOException { try (InputStream inputStream = entity.getContent()) { return function.apply(inputStream); } } }; }
/** * Returns an entity to byte array response handler. * * @return an entity to byte array response handler, not null */ public static ResponseHandler<byte[]> toByteArray() { return new AbstractResponseHandler<byte[]>() { @Override public byte[] handleEntity(HttpEntity entity) throws IOException { return EntityUtils.toByteArray(entity); } }; }