package com.liveramp.hank.client;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.liveramp.hank.generated.HankBulkResponse;
import com.liveramp.hank.generated.HankException;
import com.liveramp.hank.generated.HankResponse;
public class MockHankSmartClient implements HankSmartClientIface {
private Map<String, Map<ByteBuffer, HankResponse>> storage = new HashMap<String, Map<ByteBuffer, HankResponse>>();
public MockHankSmartClient() {
}
@Override
public HankResponse get(String domainName, ByteBuffer key) {
Map<ByteBuffer, HankResponse> domain;
domain = storage.get(domainName);
if (domain == null) {
return HankResponse.xception(HankException.internal_error("Could not find domain '" + domainName + "'"));
}
HankResponse result = domain.get(key);
if (result == null) {
return HankResponse.not_found(true);
} else {
return result;
}
}
@Override
public HankBulkResponse getBulk(String domainName, List<ByteBuffer> keys) {
List<HankResponse> responses = new ArrayList<HankResponse>(keys.size());
for (ByteBuffer key : keys) {
responses.add(get(domainName, key));
}
return HankBulkResponse.responses(responses);
}
private class GetTaskRunnable implements GetTaskRunnableIface {
private final String domain;
private final ByteBuffer key;
private HankResponse response = null;
private GetTaskRunnable(String domain, ByteBuffer key) {
this.domain = domain;
this.key = key;
}
@Override
public void run() {
response = get(domain, key);
}
@Override
public HankResponse getResponse() {
return response;
}
}
@Override
public FutureGet concurrentGet(String domainName, ByteBuffer key) {
FutureGet futureGet = new FutureGet(new GetTaskRunnable(domainName, key));
futureGet.run();
return futureGet;
}
@Override
public List<FutureGet> concurrentGet(String domainName, List<ByteBuffer> keys) {
List<FutureGet> result = new ArrayList<FutureGet>();
for (ByteBuffer key : keys) {
FutureGet futureGet = new FutureGet(new GetTaskRunnable(domainName, key));
futureGet.run();
result.add(futureGet);
}
return result;
}
@Override
public void stop() {
// No-op
}
public void put(String domain, ByteBuffer key, HankResponse response) {
if (!storage.containsKey(domain)) {
storage.put(domain, new HashMap<ByteBuffer, HankResponse>());
}
storage.get(domain).put(key, response);
}
public void put(String domain, byte[] key, HankResponse response) {
put(domain, ByteBuffer.wrap(key), response);
}
public void put(String domain, ByteBuffer key, ByteBuffer value) {
put(domain, key, HankResponse.value(value));
}
public void put(String domain, ByteBuffer key, byte[] value) {
put(domain, key, HankResponse.value(value));
}
public void put(String domain, byte[] key, ByteBuffer value) {
put(domain, key, HankResponse.value(value));
}
public void put(String domain, byte[] key, byte[] value) {
put(domain, key, HankResponse.value(value));
}
public void empty(String domain) {
storage.put(domain, new HashMap<ByteBuffer, HankResponse>());
}
public void clear() {
storage.clear();
}
}