package com.rubiconproject.oss.kv.distributed.impl;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.Callable;
import com.rubiconproject.oss.kv.distributed.AbstractOperation;
import com.rubiconproject.oss.kv.distributed.BulkOperation;
import com.rubiconproject.oss.kv.distributed.Operation;
import com.rubiconproject.oss.kv.distributed.OperationResult;
import com.rubiconproject.oss.kv.distributed.OperationStatus;
import com.rubiconproject.oss.kv.transcoder.Transcoder;
public class GetBulkOperation<V> extends AbstractOperation<V> implements
BulkOperation<V>, Callable<OperationResult<V>> {
private static final long serialVersionUID = -3908847991063100534L;
protected String[] keys;
public GetBulkOperation(Transcoder transcoder, String... keys) {
super(transcoder, null);
this.keys = keys;
}
public String getName() {
return "getBulk";
}
public String[] getKeys() {
return keys;
}
public GetBulkOperation<V> copy() {
return new GetBulkOperation<V>(transcoder, keys);
}
public OperationResult<V> call() throws Exception {
try {
long start = System.currentTimeMillis();
Map<String, V> results;
OperationResult<V> result;
if (transcoder == null)
results = (Map<String, V>)store.getBulk(keys);
else
results = (Map<String, V>)store.getBulk(Arrays.asList(keys), transcoder);
result = new GetBulkOperationResult<V>(this,results,
OperationStatus.Success, System.currentTimeMillis()- start, null);
return result;
}
catch(Exception e)
{
// TODO log something useful here
throw e;
}
finally {
}
}
}