content: package redis.clients.jedis.params.set;
  
  import java.util.ArrayList;
  
  import redis.clients.jedis.params.Params;
  import redis.clients.util.SafeEncoder;
  
  public class SetParams extends Params {
  
    private static final String XX = "xx";
    private static final String NX = "nx";
    private static final String PX = "px";
    private static final String EX = "ex";
  
    private SetParams() {
    }
  
    public static SetParams setParams() {
      return new SetParams();
    }
  
    /**
     * Set the specified expire time, in seconds.
     * @param secondsToExpire
     * @return SetParams
     */
    public SetParams ex(int secondsToExpire) {
      addParam(EX, secondsToExpire);
      return this;
    }
  
    /**
     * Set the specified expire time, in milliseconds.
     * @param millisecondsToExpire
     * @return SetParams
     */
    public SetParams px(long millisecondsToExpire) {
      addParam(PX, millisecondsToExpire);
      return this;
    }
  
    /**
     * Only set the key if it does not already exist.
     * @return SetParams
     */
    public SetParams nx() {
      addParam(NX);
      return this;
    }
  
    /**
     * Only set the key if it already exist.
     * @return SetParams
     */
    public SetParams xx() {
      addParam(XX);
      return this;
    }
  
    public byte[][] getByteParams(byte[]... args) {
      ArrayList<byte[]> byteParams = new ArrayList<byte[]>();
      for (byte[] arg : args) {
        byteParams.add(arg);
      }
  
      if (contains(NX)) {
        byteParams.add(SafeEncoder.encode(NX));
      }
      if (contains(XX)) {
        byteParams.add(SafeEncoder.encode(XX));
      }
  
      if (contains(EX)) {
        byteParams.add(SafeEncoder.encode(EX));
        byteParams.add(SafeEncoder.encode(String.valueOf(getParam(EX))));
      }
      if (contains(PX)) {
        byteParams.add(SafeEncoder.encode(PX));
        byteParams.add(SafeEncoder.encode(String.valueOf(getParam(PX))));
      }
  
      return byteParams.toArray(new byte[byteParams.size()][]);
    }
  
  }
  