package com.janrain.backplane.server.redisdao;
import com.janrain.backplane.common.BackplaneServerException;
import com.janrain.backplane.server.BusConfig1;
import com.janrain.backplane.dao.DAOLegacy;
import com.janrain.redis.Redis;
import org.apache.commons.lang.SerializationUtils;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import java.util.ArrayList;
import java.util.List;
/**
* @author Tom Raney
*/
public class RedisBusConfig1DAO implements DAOLegacy<BusConfig1> {
public static byte[] getKey(String busId) {
return ("v1_bus_" + busId).getBytes();
}
private static final Logger logger = Logger.getLogger(RedisBusConfig1DAO.class);
@Override
public void persist(BusConfig1 busConfig1) throws BackplaneServerException {
logger.info("writing key to redis: " + new String(getKey(busConfig1.getIdValue())));
byte[] bytes = SerializationUtils.serialize(busConfig1);
Redis.getInstance().set(getKey(busConfig1.getIdValue()), bytes);
Redis.getInstance().rpush(getKey("list"), bytes);
}
@Override
public void delete(String id) throws BackplaneServerException {
Jedis jedis = null;
try {
jedis = Redis.getInstance().getWriteJedis();
byte[] bytes = jedis.get(getKey(id));
if (bytes != null) {
Transaction t = jedis.multi();
Response<Long> del1 = t.lrem(getKey("list"), 0, bytes);
Response<Long> del2 = t.del(getKey(id));
t.exec();
if (del1.get() == 0) {
logger.warn("could not delete v1 bus " + new String(getKey(id)) + " from list " + new String(getKey("list")));
}
if (del2.get() == 0) {
logger.warn("could not delete v1 bus " + new String(getKey(id)));
}
}
logger.info("removed v1 bus " + id);
} finally {
Redis.getInstance().releaseToPool(jedis);
}
}
@Override
public BusConfig1 get(String bus) {
byte[] bytes = Redis.getInstance().get(getKey(bus));
if (bytes != null) {
return (BusConfig1) SerializationUtils.deserialize(bytes);
} else {
return null;
}
}
@Override
public List<BusConfig1> getAll() throws BackplaneServerException {
List<BusConfig1> users = new ArrayList<BusConfig1>();
List<byte[]> bytesList = Redis.getInstance().lrange(getKey("list"), 0, -1);
for (byte[] bytes : bytesList) {
if (bytes != null) {
users.add((BusConfig1) SerializationUtils.deserialize(bytes));
}
}
return users;
}
}