package com.plexobject.rbac.repository.bdb; import java.util.Iterator; import org.apache.log4j.Logger; import com.sleepycat.je.DatabaseException; import com.sleepycat.persist.EntityCursor; public class CursorIterator<V> implements Iterator<V> { private static final Logger LOGGER = Logger.getLogger(CursorIterator.class); private EntityCursor<V> cursor; private Iterator<V> iterator; public CursorIterator(final EntityCursor<V> cursor) { this.cursor = cursor; this.iterator = cursor.iterator(); } @Override public boolean hasNext() { if (iterator.hasNext()) { return true; } else { close(); return false; } } public void close() { try { if (cursor != null) { cursor.close(); cursor = null; iterator = null; } } catch (DatabaseException e) { LOGGER.error("failed to close cursor", e); } } @Override public V next() { return iterator.next(); } @Override public void remove() { iterator.remove(); } }