package org.kohsuke.github; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * {@link Iterable} that returns {@link PagedIterator} * * @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. */ public PagedIterable withPageSize(int size) { this.size = size; return this; } public final PagedIterator iterator() { return _iterator(size); } public abstract PagedIterator _iterator(int pageSize); /** * Eagerly walk {@link Iterable} and return the result in a list. */ public List asList() { List 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. */ public Set asSet() { LinkedHashSet r = new LinkedHashSet(); for(PagedIterator i = iterator(); i.hasNext();) { r.addAll(i.nextPage()); } return r; } }