package database.odb; import com.sleepycat.bind.EntryBinding; import com.sleepycat.je.Cursor; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.LockMode; import com.sleepycat.je.OperationStatus; public class ODBCursor { private Cursor cursor; private EntryBinding dataBinding; private ObjectDatabase odb; public ODBCursor(Cursor cursor, EntryBinding dataBinding, ObjectDatabase odb) { this.cursor = cursor; this.dataBinding = dataBinding; this.odb = odb; } public Object next() { DatabaseEntry theKey = new DatabaseEntry(); DatabaseEntry theData = new DatabaseEntry(); if(cursor.getNext(theKey, theData, LockMode.DEFAULT) == OperationStatus.SUCCESS) { Object obj = dataBinding.entryToObject(theData); return obj; } else return null; } public void close() { odb.getCursors().remove(cursor); cursor.close(); } public boolean hasNext() { DatabaseEntry theKey = new DatabaseEntry(); DatabaseEntry theData = new DatabaseEntry(); if(cursor.getNext(theKey, theData, LockMode.DEFAULT) == OperationStatus.SUCCESS) { cursor.skipPrev(1, theKey, theData, LockMode.DEFAULT); return true; } else { return false; } } }