com.braintreegateway.ResourceCollection Maven / Gradle / Ivy
package com.braintreegateway;
import com.braintreegateway.util.NodeWrapper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* A collection used to page through query or search results.
*
* @param
* type of object being paged, e.g. {@link Transaction} or
* {@link Customer}.
*/
public class ResourceCollection implements Iterable {
private class PagedIterator implements Iterator {
private ResourceCollection resourceCollection;
private List ids;
private int pageSize;
private int index;
private int nextIndexToFetch;
private List items;
public PagedIterator(ResourceCollection resourceCollection) {
this.resourceCollection = resourceCollection;
this.ids = resourceCollection.ids;
this.pageSize = resourceCollection.pageSize;
this.index = 0;
this.nextIndexToFetch = 0;
this.items = new ArrayList();
}
private List nextBatchOfIds() {
int lastIdIndex = nextIndexToFetch + pageSize;
if (lastIdIndex > ids.size()) {
lastIdIndex = ids.size();
}
List nextIds = ids.subList(nextIndexToFetch, lastIdIndex);
nextIndexToFetch = lastIdIndex;
return nextIds;
}
public boolean hasNext() {
if (nextIndexToFetch < ids.size() && index == items.size()) {
this.items = resourceCollection.pager.getPage(nextBatchOfIds());
this.index = 0;
}
if (index < items.size()) {
return true;
}
return false;
}
public E next() {
E item = items.get(index);
index++;
return item;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
private List ids;
private Pager pager;
private int pageSize;
public ResourceCollection(Pager pager, NodeWrapper response) {
this.pager = pager;
pageSize = response.findInteger("page-size");
ids = response.findAllStrings("ids/*");
}
/**
* Returns the approximate total size of the collection.
*
* @return Approximate size of collection
*/
public int getMaximumSize() {
return ids.size();
}
public Iterator iterator() {
return new PagedIterator(this);
}
public T getFirst() {
return pager.getPage(ids.subList(0, 1)).get(0);
}
public List getIds() {
return ids;
}
}