StoredEntrySet.java [plain text]
package com.sleepycat.collections;
import java.util.Map;
import java.util.Set;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.OperationStatus;
import com.sleepycat.util.RuntimeExceptionWrapper;
public class StoredEntrySet extends StoredCollection implements Set {
StoredEntrySet(DataView mapView) {
super(mapView);
}
public boolean add(Object mapEntry) {
Map.Entry entry = (Map.Entry) mapEntry; return add(entry.getKey(), entry.getValue());
}
public boolean remove(Object mapEntry) {
if (!(mapEntry instanceof Map.Entry)) {
return false;
}
Map.Entry entry = (Map.Entry) mapEntry;
DataCursor cursor = null;
boolean doAutoCommit = beginAutoCommit();
try {
cursor = new DataCursor(view, true);
OperationStatus status =
cursor.findBoth(entry.getKey(), entry.getValue(), true);
if (status == OperationStatus.SUCCESS) {
cursor.delete();
}
closeCursor(cursor);
commitAutoCommit(doAutoCommit);
return (status == OperationStatus.SUCCESS);
} catch (Exception e) {
closeCursor(cursor);
throw handleException(e, doAutoCommit);
}
}
public boolean contains(Object mapEntry) {
if (!(mapEntry instanceof Map.Entry)) {
return false;
}
Map.Entry entry = (Map.Entry) mapEntry;
DataCursor cursor = null;
try {
cursor = new DataCursor(view, false);
OperationStatus status =
cursor.findBoth(entry.getKey(), entry.getValue(), false);
return (status == OperationStatus.SUCCESS);
} catch (Exception e) {
throw StoredContainer.convertException(e);
} finally {
closeCursor(cursor);
}
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("[");
StoredIterator i = storedIterator();
try {
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
if (buf.length() > 1) buf.append(',');
Object key = entry.getKey();
Object val = entry.getValue();
if (key != null) buf.append(key.toString());
buf.append('=');
if (val != null) buf.append(val.toString());
}
buf.append(']');
return buf.toString();
}
finally {
i.close();
}
}
Object makeIteratorData(BaseIterator iterator,
DatabaseEntry keyEntry,
DatabaseEntry priKeyEntry,
DatabaseEntry valueEntry) {
return new StoredMapEntry(view.makeKey(keyEntry, priKeyEntry),
view.makeValue(priKeyEntry, valueEntry),
this, iterator);
}
boolean hasValues() {
return true;
}
}