PrefixedKeyArgumentPreProcessor.java
package redis.clients.jedis.util;
import redis.clients.jedis.CommandKeyArgumentPreProcessor;
import redis.clients.jedis.annots.Experimental;
import redis.clients.jedis.args.Rawable;
import redis.clients.jedis.args.RawableFactory;
@Experimental
public class PrefixedKeyArgumentPreProcessor implements CommandKeyArgumentPreProcessor {
private final byte[] prefixBytes;
private final String prefixString;
public PrefixedKeyArgumentPreProcessor(String prefix) {
this(prefix, SafeEncoder.encode(prefix));
}
public PrefixedKeyArgumentPreProcessor(String prefixString, byte[] prefixBytes) {
this.prefixString = prefixString;
this.prefixBytes = prefixBytes;
}
@Override
public Object actualKey(Object paramKey) {
return prefixKey(paramKey, prefixString, prefixBytes);
}
private static Object prefixKey(Object key, String prefixString, byte[] prefixBytes) {
if (key instanceof Rawable) {
byte[] raw = ((Rawable) key).getRaw();
return RawableFactory.from(prefixKeyWithBytes(raw, prefixBytes));
} else if (key instanceof byte[]) {
return prefixKeyWithBytes((byte[]) key, prefixBytes);
} else if (key instanceof String) {
String raw = (String) key;
return prefixString + raw;
}
throw new IllegalArgumentException("\"" + key.toString() + "\" is not a valid argument.");
}
private static byte[] prefixKeyWithBytes(byte[] key, byte[] prefixBytes) {
byte[] namespaced = new byte[prefixBytes.length + key.length];
System.arraycopy(prefixBytes, 0, namespaced, 0, prefixBytes.length);
System.arraycopy(key, 0, namespaced, prefixBytes.length, key.length);
return namespaced;
}
}