package org.commoncrawl.util.redis;
import org.commoncrawl.util.redis.RedisCmd.Commands;
/**
* Construct a Redis Command
*
* @author rana
*
*/
public class RedisCmdBuilder {
RedisCmd activeCmd = null;
public RedisCmdBuilder cmd(String commandType,String keyValue,long lValue) {
return cmd(commandType.getBytes(),keyValue,Long.toString(lValue));
}
public RedisCmdBuilder cmd(Commands commandType,String keyValue,long lValue) {
return cmd(commandType.bytes,keyValue,Long.toString(lValue));
}
public RedisCmdBuilder cmd(Commands commandType,String keyValue) {
return cmd(commandType.bytes,keyValue);
}
public RedisCmdBuilder cmd(Commands commandType, String ... args) {
return cmd(commandType.bytes,args);
}
public RedisCmdBuilder cmd(byte[] commandType,String ... args) {
RedisCmd cmd = new RedisCmd(commandType, args);
if (activeCmd == null)
activeCmd = cmd;
else
activeCmd.addChild(cmd);
return this;
}
/**
*
* @return the current command under construction
*/
public RedisCmd build() {
RedisCmd temp = activeCmd;
activeCmd = null;
return temp;
}
/**
* start a multi transaction
*
* @return
*/
public RedisCmdBuilder mutli() {
if (activeCmd != null) {
throw new RuntimeException("Multi Command has to be top level command!");
}
else{
return cmd(Commands.MULTI);
}
}
/************* typed convenience methods *************/
public RedisCmdBuilder incr(String keyValue) {
cmd(Commands.INCR,keyValue);
return this;
}
public RedisCmdBuilder incrBy(String keyValue,long lValue) {
cmd(Commands.INCR,keyValue,lValue);
return this;
}
public RedisCmdBuilder expire(String keyValue,long lSeconds) {
cmd(Commands.EXPIRE,keyValue,lSeconds);
return this;
}
public RedisCmdBuilder expireAt(String keyValue,long lTimestamp) {
cmd(Commands.EXPIRE,keyValue,lTimestamp);
return this;
}
}