package ring.persistence; import java.util.Iterator; import org.xmldb.api.base.Collection; import org.xmldb.api.base.Resource; import org.xmldb.api.base.ResourceIterator; import org.xmldb.api.base.ResourceSet; import org.xmldb.api.base.XMLDBException; /** * Class that encapsulates a ResourceSet and gives it a more friendly API. * This ResourceList can be iterated over with a foreach loop, unlike a ResourceSet. * Also provides a close() method to close the parent collection of this ResourceList. * @author projectmoon * */ public class ResourceList implements Iterable<Resource> { private Collection parentCollection; private ResourceSet resources; private ResourceIterator iter; public ResourceList(Collection parentCollection, ResourceSet resources) throws XMLDBException { this.parentCollection = parentCollection; this.resources = resources; iter = resources.getIterator(); } @Override public Iterator<Resource> iterator() { return new IteratorImpl(iter); } public int size() throws XMLDBException { return (int) resources.getSize(); } public boolean hasMoreResources() throws XMLDBException { return iter.hasMoreResources(); } public Resource nextResource() throws XMLDBException { return iter.nextResource(); } public void close() throws XMLDBException { parentCollection.close(); } } class IteratorImpl implements Iterator<Resource> { private ResourceIterator iter; public IteratorImpl(ResourceIterator iter) { this.iter = iter; } @Override public boolean hasNext() { try { return iter.hasMoreResources(); } catch (XMLDBException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } @Override public Resource next() { try { return iter.nextResource(); } catch (XMLDBException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public void remove() { throw new UnsupportedOperationException("this iterator does not support removal"); } }