package com.lambdaworks.redis.protocol; import com.lambdaworks.redis.RedisException; import com.lambdaworks.redis.ScriptOutputType; import com.lambdaworks.redis.codec.RedisCodec; import com.lambdaworks.redis.output.*; /** * @author Mark Paluch * @since 3.0 */ public class BaseRedisCommandBuilder<K, V> { protected RedisCodec<K, V> codec; public BaseRedisCommandBuilder(RedisCodec<K, V> codec) { this.codec = codec; } protected <T> Command<K, V, T> createCommand(CommandType type, CommandOutput<K, V, T> output) { return createCommand(type, output, (CommandArgs<K, V>) null); } protected <T> Command<K, V, T> createCommand(CommandType type, CommandOutput<K, V, T> output, K key) { CommandArgs<K, V> args = new CommandArgs<K, V>(codec).addKey(key); return createCommand(type, output, args); } protected <T> Command<K, V, T> createCommand(CommandType type, CommandOutput<K, V, T> output, K key, V value) { CommandArgs<K, V> args = new CommandArgs<K, V>(codec).addKey(key).addValue(value); return createCommand(type, output, args); } protected <T> Command<K, V, T> createCommand(CommandType type, CommandOutput<K, V, T> output, K key, V[] values) { CommandArgs<K, V> args = new CommandArgs<K, V>(codec).addKey(key).addValues(values); return createCommand(type, output, args); } protected <T> Command<K, V, T> createCommand(CommandType type, CommandOutput<K, V, T> output, CommandArgs<K, V> args) { return new Command<K, V, T>(type, output, args); } @SuppressWarnings("unchecked") protected <T> CommandOutput<K, V, T> newScriptOutput(RedisCodec<K, V> codec, ScriptOutputType type) { switch (type) { case BOOLEAN: return (CommandOutput<K, V, T>) new BooleanOutput<K, V>(codec); case INTEGER: return (CommandOutput<K, V, T>) new IntegerOutput<K, V>(codec); case STATUS: return (CommandOutput<K, V, T>) new StatusOutput<K, V>(codec); case MULTI: return (CommandOutput<K, V, T>) new NestedMultiOutput<K, V>(codec); case VALUE: return (CommandOutput<K, V, T>) new ValueOutput<K, V>(codec); default: throw new RedisException("Unsupported script output type"); } } }