@Override public boolean hasNext() { if (delegate.hasNext()) { return true; } if (!page.hasNextPage()) { return false; } fetchPage(page.getNextPageRef().getItemsBefore()); return delegate.hasNext(); }
private static <E, X extends Exception> List<E> eagerFetch(PageSupplier<E, X> supplier, int size) throws X { Page<? extends E> page = supplier.getPage(size, 0); ArrayList<E> container = new ArrayList<>(page.hasNextPage() ? page.getItemsCount() * 2 : page.getItemsCount()); while (page.hasNextPage()) { container.addAll(page.getItems()); PageRef next = page.getNextPageRef(); page = supplier.getPage(next.getPageSize(), next.getItemsBefore()); } container.addAll(page.getItems()); return container; }
@VisibleForTesting void removeStackPermissions(String stackId, int pageSize) throws ServerException, NotFoundException { Page<StackPermissionsImpl> stacksPage; do { // skip count always equals to 0 because elements will be shifted after removing previous // items stacksPage = dao.getByInstance(stackId, pageSize, 0); for (StackPermissionsImpl stackPermissions : stacksPage.getItems()) { dao.remove(stackPermissions.getUserId(), stackPermissions.getInstanceId()); } } while (stacksPage.hasNextPage()); } }
/** * Retrieves next permissions page for given stack. * * @param stackId id of stack to which permissions will be obtained * @param permissionsPage previous permissions page * @return next permissions page for given stack or null if next page doesn't exist * @throws ServerException when any error occurs during permissions fetching */ @VisibleForTesting Page<AbstractPermissions> getNextPermissionsPage( String stackId, Page<AbstractPermissions> permissionsPage) throws NotFoundException, ServerException { if (!permissionsPage.hasNextPage()) { return null; } final Page.PageRef nextPageRef = permissionsPage.getNextPageRef(); return permissionsManager.getByInstance( DOMAIN_ID, stackId, nextPageRef.getPageSize(), nextPageRef.getItemsBefore()); } }
@VisibleForTesting void removeWorkers(String workspaceId, int pageSize) throws ServerException { Page<WorkerImpl> workersPage; do { // skip count always equals to 0 because elements will be shifted after removing previous // items workersPage = workerDao.getWorkers(workspaceId, pageSize, 0); for (WorkerImpl worker : workersPage.getItems()) { workerDao.removeWorker(worker.getInstanceId(), worker.getUserId()); } } while (workersPage.hasNextPage()); } }
pageRefs.add(Pair.of("prev", page.getPreviousPageRef())); if (page.hasNextPage()) { pageRefs.add(Pair.of("next", page.getNextPageRef()));