package ninja.ugly.prevail;
import ninja.ugly.prevail.chunk.DefaultChunk;
import ninja.ugly.prevail.chunk.QueryResult;
import ninja.ugly.prevail.exception.DeleteException;
import ninja.ugly.prevail.exception.InsertException;
import ninja.ugly.prevail.exception.QueryException;
import ninja.ugly.prevail.exception.UpdateException;
import java.io.IOException;
public class KeyValueChunk<K, V> extends DefaultChunk<K, V> {
private final Inserter<K, V> mInserter;
private final Updater<K, V> mUpdater;
private final Queryer<K, V> mQueryer;
private final Deleter<K> mDeleter;
public KeyValueChunk(final Inserter<K, V> inserter, final Updater<K, V> updater, final Queryer<K, V> queryer, final Deleter<K> deleter) {
mInserter = inserter;
mUpdater = updater;
mQueryer = queryer;
mDeleter = deleter;
}
@Override
protected K doInsert(final V value, final OnProgressUpdateListener onProgressUpdateListener) throws InsertException {
return mInserter.insert(value, onProgressUpdateListener);
}
@Override
protected QueryResult<V> doQuery(final K key, final OnProgressUpdateListener onProgressUpdateListener) throws QueryException {
return mQueryer.query(key, onProgressUpdateListener);
}
@Override
protected int doUpdate(final K key, final V value, final OnProgressUpdateListener onProgressUpdateListener) throws UpdateException {
return mUpdater.update(key, value, onProgressUpdateListener);
}
@Override
protected int doDelete(final K key, final OnProgressUpdateListener onProgressUpdateListener) throws DeleteException {
return mDeleter.delete(key, onProgressUpdateListener);
}
public interface Inserter<K, V> {
K insert(V value, OnProgressUpdateListener onProgressUpdateListener) throws InsertException;
}
public interface Queryer<K, V> {
QueryResult<V> query(K key, OnProgressUpdateListener onProgressUpdateListener) throws QueryException;
}
public interface Updater<K, V> {
int update(K key, V value, OnProgressUpdateListener onProgressUpdateListener) throws UpdateException;
}
public interface Deleter<K> {
int delete(K key, OnProgressUpdateListener onProgressUpdateListener) throws DeleteException;
}
@Override
public void close() throws IOException {
// Do nothing.
}
}