package com.sleepycat.persist;
import java.util.Map;
import java.util.SortedMap;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.collections.StoredSortedMap;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.LockMode;
import com.sleepycat.db.OperationStatus;
import com.sleepycat.db.Transaction;
class KeysIndex<SK,PK> extends BasicIndex<SK,PK> {
private EntryBinding pkeyBinding;
private SortedMap<SK,PK> map;
KeysIndex(Database db,
Class<SK> keyClass,
EntryBinding keyBinding,
Class<PK> pkeyClass,
EntryBinding pkeyBinding)
throws DatabaseException {
super(db, keyClass, keyBinding,
new DataValueAdapter<PK>(pkeyClass, pkeyBinding));
this.pkeyBinding = pkeyBinding;
}
public PK get(SK key)
throws DatabaseException {
return get(null, key, null);
}
public PK get(Transaction txn, SK key, LockMode lockMode)
throws DatabaseException {
DatabaseEntry keyEntry = new DatabaseEntry();
DatabaseEntry pkeyEntry = new DatabaseEntry();
keyBinding.objectToEntry(key, keyEntry);
OperationStatus status = db.get(txn, keyEntry, pkeyEntry, lockMode);
if (status == OperationStatus.SUCCESS) {
return (PK) pkeyBinding.entryToObject(pkeyEntry);
} else {
return null;
}
}
public Map<SK,PK> map() {
return sortedMap();
}
public synchronized SortedMap<SK,PK> sortedMap() {
if (map == null) {
map = new StoredSortedMap(db, keyBinding, pkeyBinding, true);
}
return map;
}
boolean isUpdateAllowed() {
return false;
}
}