package com.google.sitebricks.persist.redis;
import com.google.sitebricks.persist.EntityQuery;
import com.google.sitebricks.persist.EntityStore;
import redis.clients.jedis.Jedis;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
class JedisEntityStore extends EntityStore {
private final Jedis jedis;
JedisEntityStore(Jedis jedis) {
this.jedis = jedis;
}
@Override
public <T> void remove(Class<T> type, Serializable key) {
if (type != Parameter.class)
throw new RuntimeException("Can only persist objects of type Parameter into Redis store");
jedis.del(key.toString());
}
@Override
public <T> Serializable save(T t) {
// Jedis store only works with Parameter types for now.
if (!(t instanceof Parameter))
throw new RuntimeException("Can only persist objects of type Parameter into Redis store");
Parameter parameter = (Parameter) t;
jedis.set(parameter.name, parameter.value);
return parameter.name;
}
@Override
@SuppressWarnings("unchecked")
public <T> T find(Class<T> clazz, Serializable key) {
if (clazz != Parameter.class)
throw new RuntimeException("Can only persist objects of type Parameter into Redis store");
String keyString = key.toString();
String value = jedis.get(keyString);
if (value == null)
return null;
return (T) new Parameter(keyString, value);
}
@Override public <T> List<T> all(Class<T> type) {
throw new UnsupportedOperationException("Bulk query of all values is not supported by this datastore");
}
@Override
protected <T> List<T> execute(Class<T> type, Map<String, EntityQuery.FieldMatcher<?>> query,
int offset, int limit) {
throw new UnsupportedOperationException("EntityStore query-API is not supported by this datastore");
}
@Override
protected <T> void executeDelete(Class<T> type, Map<String, EntityQuery.FieldMatcher<?>> matcherMap) {
throw new UnsupportedOperationException("Bulk deletion is not supported by this datastore");
}
@Override
public Object delegate() {
return jedis;
}
}