package com.lambdaworks.redis; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.lambdaworks.redis.internal.LettuceAssert; import com.lambdaworks.redis.protocol.CommandArgs; import com.lambdaworks.redis.protocol.CommandKeyword; import com.lambdaworks.redis.protocol.CommandType; /** * Argument list builder for the new redis <a href="http://redis.io/commands/migrate">MIGRATE</a> command. Static import * the methods from {@link Builder} and chain the method calls: {@code ex(10).nx()}. * * @author Mark Paluch */ public class MigrateArgs<K> { private boolean copy = false; private boolean replace = false; List<K> keys = new ArrayList<>(); public static class Builder { /** * Utility constructor. */ private Builder() { } public static <K> MigrateArgs<K> copy() { return new MigrateArgs<K>().copy(); } public static <K> MigrateArgs<K> replace() { return new MigrateArgs<K>().replace(); } public static <K> MigrateArgs<K> key(K key) { return new MigrateArgs<K>().key(key); } @SafeVarargs public static <K> MigrateArgs<K> keys(K... keys) { return new MigrateArgs<K>().keys(keys); } public static <K> MigrateArgs<K> keys(Iterable<K> keys) { return new MigrateArgs<K>().keys(keys); } } public MigrateArgs<K> copy() { this.copy = true; return this; } public MigrateArgs<K> replace() { this.replace = true; return this; } public MigrateArgs<K> key(K key) { LettuceAssert.notNull(key, "Key must not be null"); this.keys.add(key); return this; } @SafeVarargs public final MigrateArgs<K> keys(K... keys) { LettuceAssert.notEmpty(keys, "Keys must not be empty"); for (K key : keys) { this.keys.add(key); } return this; } public MigrateArgs<K> keys(Iterable<K> keys) { LettuceAssert.notNull(keys, "Keys must not be null"); Iterator<K> iterator = keys.iterator(); while (iterator.hasNext()) { this.keys.add(iterator.next()); } return this; } @SuppressWarnings("unchecked") public <K, V> void build(CommandArgs<K, V> args) { if (copy) { args.add(CommandKeyword.COPY); } if (replace) { args.add(CommandKeyword.REPLACE); } if (keys.size() > 1) { args.add(CommandType.KEYS); args.addKeys((Iterable<K>) keys); } } }