package io.teknek.nibiru.client;
import io.teknek.nibiru.Consistency;
import io.teknek.nibiru.TraceTo;
import io.teknek.nibiru.Val;
import io.teknek.nibiru.transport.Response;
import io.teknek.nibiru.transport.columnfamily.DeleteMessage;
import io.teknek.nibiru.transport.columnfamily.GetMessage;
import io.teknek.nibiru.transport.columnfamily.PutMessage;
import io.teknek.nibiru.transport.columnfamily.SliceMessage;
import java.io.IOException;
import java.util.SortedMap;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
public class Session {
private final Client client;
private final String keyspace;
private final String store;
private final Consistency writeConsistency;
private final Consistency readConsistency;
private ObjectMapper MAPPER = new ObjectMapper();
private final TraceTo traceTo;
Session(Client client, String keyspace, String store, Consistency writeConsistency, Consistency readConsistency, TraceTo traceTo){
this.client = client;
this.keyspace = keyspace;
this.store = store;
this.writeConsistency = writeConsistency;
this.readConsistency = readConsistency;
this.traceTo = traceTo;
}
public Val get(String rowkey, String column) throws ClientException {
GetMessage m = new GetMessage();
m.setKeyspace(keyspace);
m.setStore(store);
m.setColumn(column);
m.setRow(rowkey);
m.setConsistency(readConsistency);
m.setTimeout((long)client.getSocketTimeoutMillis());
m.setTraceTo(traceTo);
try {
Response response = client.post(m);
if (response == null){
throw new ClientException("Protocol error: response was null");
}
if (response.containsKey("exception")){
throw new ClientException((String) response.get("exception"));
}
return MAPPER.convertValue(response.get("payload"), Val.class);
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
public SortedMap<String,Val> slice(String rowkey, String start, String end) throws ClientException {
SliceMessage m = new SliceMessage();
m.setKeyspace(keyspace);
m.setStore(store);
m.setRow(rowkey);
m.setStart(start);
m.setEnd(end);
try {
Response response = client.post(m);
if (response == null){
throw new ClientException("Protocol error: response was null");
}
if (response.containsKey("exception")){
throw new ClientException((String) response.get("exception"));
}
TypeReference<SortedMap<String,Val>> tr = new TypeReference<SortedMap<String,Val>>(){};
return MAPPER.convertValue(response.get("payload"), tr);
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
public Response delete(String rowkey, String column, long time) throws ClientException {
DeleteMessage m = new DeleteMessage();
m.setKeyspace(keyspace);
m.setStore(store);
m.setRow(rowkey);
m.setColumn(column);
m.setConsistency(this.writeConsistency);
m.setVersion(time);
m.setTimeout((long) client.getSocketTimeoutMillis());
try {
Response response = client.post(m);
if (response == null){
throw new ClientException("Protocol error: response was null");
}
if (response.containsKey("exception")){
throw new ClientException((String) response.get("exception"));
} else {
return response;
}
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
public Response put(String rowkey, String column, String value, long time, long ttl) throws ClientException{
PutMessage m = new PutMessage();
m.setKeyspace(keyspace);
m.setStore(store);
m.setRow(rowkey);
m.setColumn(column);
m.setValue(value);
m.setTimeout((long) client.getSocketTimeoutMillis());
m.setConsistency(writeConsistency);
m.setTtl(ttl);
m.setVersion(time);
try {
Response response = client.post(m);
if (response == null){
throw new ClientException("Protocol error: response was null");
}
if (response.containsKey("exception")){
throw new ClientException((String) response.get("exception"));
} else {
return response;
}
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
public Response put(String rowkey, String column, String value, long time) throws ClientException{
PutMessage m = new PutMessage();
m.setKeyspace(keyspace);
m.setStore(store);
m.setRow(rowkey);
m.setColumn(column);
m.setValue(value);
m.setTimeout((long) client.getSocketTimeoutMillis());
m.setConsistency(this.writeConsistency);
m.setVersion(time);
try {
Response response = client.post(m);
if (response == null){
throw new ClientException("Protocol error: response was null");
}
if (response.containsKey("exception")){
throw new ClientException((String) response.get("exception"));
} else {
return response;
}
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
}