package org.kohsuke.github; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import javax.annotation.Nonnull; /** * {@link Iterable} that returns {@link PagedIterator} * * @param * the type parameter * @author Kohsuke Kawaguchi */ public abstract class PagedIterable implements Iterable { /** * Page size. 0 is default. */ private int size = 0; /** * Sets the pagination size. * *

* When set to non-zero, each API call will retrieve this many entries. * * @param size * the size * @return the paged iterable */ public PagedIterable withPageSize(int size) { this.size = size; return this; } /** * Returns an iterator over elements of type {@code T}. * * @return an Iterator. */ @Nonnull public final PagedIterator iterator() { return _iterator(size); } /** * Iterator paged iterator. * * @param pageSize * the page size * @return the paged iterator */ @Nonnull public abstract PagedIterator _iterator(int pageSize); /** * Eagerly walk {@link Iterable} and return the result in a list. * * @return the list */ public List asList() { ArrayList r = new ArrayList<>(); for (PagedIterator i = iterator(); i.hasNext();) { r.addAll(i.nextPage()); } return r; } /** * Eagerly walk {@link Iterable} and return the result in a set. * * @return the set */ public Set asSet() { LinkedHashSet r = new LinkedHashSet<>(); for (PagedIterator i = iterator(); i.hasNext();) { r.addAll(i.nextPage()); } return r; } }