package com.cxy.redisclient.integration.key;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import com.cxy.redisclient.domain.ContainerKey;
import com.cxy.redisclient.domain.Node;
import com.cxy.redisclient.domain.NodeType;
import com.cxy.redisclient.domain.RedisVersion;
import com.cxy.redisclient.dto.Order;
import com.cxy.redisclient.integration.ConfigFile;
import com.cxy.redisclient.integration.JedisCommand;
public class ListContainers extends JedisCommand {
private int db;
private String key;
private Set<Node> containers = new TreeSet<Node>();
private Order order;
private boolean flat;
private final String separator = ConfigFile.getSeparator();
public ListContainers(int id, int db, String key, boolean flat, Order order) {
super(id);
this.db = db;
this.key = key;
this.order = order;
this.flat = flat;
}
public ListContainers(int id, int db, String key, boolean flat) {
super(id);
this.db = db;
this.key = key;
this.order = Order.Ascend;
this.flat = flat;
}
@Override
public void command() {
jedis.select(db);
Set<String> nodekeys = null;
int length;
if (key != null) {
nodekeys = jedis.keys(key + "*");
length = key.length();
} else {
nodekeys = jedis.keys("*"+separator+"*");
length = 0;
}
if(!flat){
Iterator<String> it = nodekeys.iterator();
while (it.hasNext()) {
String[] ckey = it.next().substring(length).split(separator);
if (ckey.length > 1) {
NodeType nodeType = NodeType.CONTAINER;
Node node = new Node(id, db, ckey[0], nodeType, order);
containers.add(node);
}
}
}else{
Iterator<String> it = nodekeys.iterator();
while (it.hasNext()) {
String ckey = it.next().substring(length);
ContainerKey containerKey = new ContainerKey(ckey);
String container = containerKey.getContainerOnly();
if (container.length() > 0) {
NodeType nodeType = NodeType.CONTAINER;
Node node = new Node(id, db, container, nodeType, order);
containers.add(node);
}
}
}
}
public Set<Node> getContainers() {
return containers;
}
@Override
public RedisVersion getSupportVersion() {
return RedisVersion.REDIS_1_0;
}
}