in src/main/java/com/spotify/github/v3/clients/GithubPage.java [70:115]
public CompletableFuture<Pagination> pagination() {
return linkMapAsync()
.thenApply(
linkMap -> {
final Optional<Integer> maybePreviousPageNumber =
Optional.ofNullable(linkMap.get("prev"))
.map(prevLink -> pageNumberFromUri(prevLink.url().toString() + 1).orElse(1));
final Optional<Integer> maybeNextPageNumber =
Optional.ofNullable(linkMap.get("next"))
.map(
prevLink ->
pageNumberFromUri(prevLink.url().toString())
.<RuntimeException>orElseThrow(
() ->
new RuntimeException(
"Could not parse page number from Link header with rel=\"next\"")));
final Integer lastPageNumber =
maybePreviousPageNumber
.map(pageNumber -> pageNumber + 1)
.orElseGet(
() ->
Optional.ofNullable(linkMap.get("last"))
.map(
lastLink ->
pageNumberFromUri(lastLink.url().toString())
.<RuntimeException>orElseThrow(
() ->
new RuntimeException(
"Could not parse page number from Link "
+ "header with rel=\"last\"")))
.orElse(1));
final Integer currentPageNumber =
maybeNextPageNumber.map(pageNumber -> pageNumber - 1).orElse(lastPageNumber);
final ImmutablePagination.Builder builder =
ImmutablePagination.builder().current(currentPageNumber).last(lastPageNumber);
maybePreviousPageNumber.ifPresent(builder::previous);
maybeNextPageNumber.ifPresent(builder::next);
return builder.build();
});
}