@Override public synchronized PaginatedCollection<V> getPage(Page page) { List<V> result = new LinkedList<>(); int offset = page.getOffset(); int limit = page.getLimit(); List<V> values = new ArrayList<>(items.values()); for (int i = offset; i < values.size() && i < offset + limit; i++) { V value = values.get(i); result.add(value); } PaginatedCollection<V> paginatedCollection = new PaginatedCollection<>(result); paginatedCollection.setPage(page); paginatedCollection.setHasMore(offset + limit < items.size() || this.hasMore); return paginatedCollection; }
@Override public PaginatedCollection<Character> getPage(Page page) throws MarvelApiException { int offset = page.getOffset(); int limit = page.getLimit(); Collection<Character> charactersToReturn = new LinkedList<>(); fakeDelay(); if (offset < characters.length) { for (int i = offset; i - offset < limit && i < characters.length; i++) { charactersToReturn.add(characters[i]); } } PaginatedCollection<Character> charactersPage = new PaginatedCollection<>(charactersToReturn); charactersPage.setPage(page); charactersPage.setHasMore(offset + charactersToReturn.size() < characters.length); return charactersPage; }
@Override public PaginatedCollection<ComicSeries> getPage(Page page) { Collection<ComicSeries> comics = new LinkedList<>(); fakeDelay(); int offset = page.getOffset(); int limit = page.getLimit(); if (offset < allComicSeries.length) { for (int i = offset; i - offset < limit && i < allComicSeries.length; i++) { comics.add(getComicSeries(i)); } } PaginatedCollection<ComicSeries> comicsPage = new PaginatedCollection<>(comics); comicsPage.setPage(page); comicsPage.setHasMore(offset + comics.size() < allComicSeries.length); return comicsPage; }
@Test public void shouldReturnTheRequestedOffset() throws Exception { Page page = Page.withOffsetAndLimit(ANY_OFFSET, ANY_LIMIT); Collection<AnyRepositoryValue> values = givenSomeItems(ANY_OFFSET + ANY_LIMIT); PaginatedCacheDataSource<AnyRepositoryKey, AnyRepositoryValue> cache = givenAnInMemoryPaginatedCacheDataSource(); cache.addOrUpdatePage(page, values, ANY_HAS_MORE); PaginatedCollection<AnyRepositoryValue> paginatedCollection = cache.getPage(page); assertEquals(ANY_OFFSET, paginatedCollection.getPage().getOffset()); }
@Override public PaginatedCollection<ComicSeries> getPage(Page page) throws MarvelApiException { int offset = page.getOffset(); int limit = page.getLimit(); MarvelResponse<SeriesCollectionDto> seriesApiResponse = seriesApiClient.getAll(offset, limit); SeriesCollectionDto seriesCollectionDto = seriesApiResponse.getResponse(); Collection<ComicSeries> comicSeries = mapper.reverseMap(seriesCollectionDto.getSeries()); PaginatedCollection<ComicSeries> comicSeriesPage = new PaginatedCollection<>(comicSeries); comicSeriesPage.setPage(page); comicSeriesPage.setHasMore( seriesCollectionDto.getOffset() + seriesCollectionDto.getCount() < seriesCollectionDto.getTotal()); return comicSeriesPage; }
@Override public PaginatedCollection<Character> getPage(Page page) throws MarvelApiException { int offset = page.getOffset(); int limit = page.getLimit(); MarvelResponse<CharactersDto> charactersApiResponse = characterApiClient.getAll(offset, limit); CharactersDto charactersDto = charactersApiResponse.getResponse(); Collection<Character> characters = mapper.reverseMap(charactersDto.getCharacters()); PaginatedCollection<Character> charactersPage = new PaginatedCollection<>(characters); charactersPage.setPage(page); charactersPage.setHasMore( charactersDto.getOffset() + charactersDto.getCount() < charactersDto.getTotal()); return charactersPage; } }