// Path: src/main/java/com/chickling/kmanager/model/BrokerInfo.java
// public class BrokerInfo {
// 	private int bid;
// 	private String host;
// 	private int port;
// 	private int jmxPort;
// 	private long timestamp;
// 	private int version;
// 
// 	public BrokerInfo() {
// 
// 	}
// 
// 	public BrokerInfo(int bid, String host, int port) {
// 		super();
// 		this.bid = bid;
// 		this.host = host;
// 		this.port = port;
// 	}
// 
// 	public int getBid() {
// 		return bid;
// 	}
// 
// 	public void setBid(int bid) {
// 		this.bid = bid;
// 	}
// 
// 	public String getHost() {
// 		return host;
// 	}
// 
// 	public void setHost(String host) {
// 		this.host = host;
// 	}
// 
// 	public int getPort() {
// 		return port;
// 	}
// 
// 	public void setPort(int port) {
// 		this.port = port;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "BrokerInfo [bid=" + bid + ", host=" + host + ", port=" + port + "]";
// 	}
// 
// 	public int getJmxPort() {
// 		return jmxPort;
// 	}
// 
// 	public void setJmxPort(int jmx_port) {
// 		this.jmxPort = jmx_port;
// 	}
// 
// 	public long getTimestamp() {
// 		return timestamp;
// 	}
// 
// 	public void setTimestamp(long timestamp) {
// 		this.timestamp = timestamp;
// 	}
// 
// 	public int getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(int version) {
// 		this.version = version;
// 	}
// 
// }
// 
// Path: src/main/java/com/chickling/kmanager/model/ZkDataAndStat.java
// public class ZkDataAndStat {
// 	private String data;
// 	private Stat stat;
// 
// 	public ZkDataAndStat() {
// 		super();
// 	}
// 
// 	public ZkDataAndStat(String data, Stat stat) {
// 		super();
// 		this.data = data;
// 		this.stat = stat;
// 	}
// 
// 	public String getData() {
// 		return data;
// 	}
// 
// 	public void setData(String data) {
// 		this.data = data;
// 	}
// 
// 	public Stat getStat() {
// 		return stat;
// 	}
// 
// 	public void setStat(Stat stat) {
// 		this.stat = stat;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ZkDataAndState [data=" + data + ", stat=" + stat + "]";
// 	}
// 
// }


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;
import org.I0Itec.zkclient.exception.ZkMarshallingError;
import org.I0Itec.zkclient.serialize.ZkSerializer;
import org.apache.zookeeper.data.Stat;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.chickling.kmanager.model.BrokerInfo;
import com.chickling.kmanager.model.ZkDataAndStat;
import kafka.cluster.Broker;
import kafka.common.TopicAndPartition;
import kafka.utils.ZKStringSerializer;
import kafka.utils.ZkUtils;
import scala.Option;
import scala.collection.JavaConversions;
	public static List<String> parseTopicsData(String jsonData) {
		return JavaConversions.seqAsJavaList(ZkUtils.parseTopicsData(jsonData));
	}

	public static boolean pathExists(String path) {
		return zkUtilsFromKafka.pathExists(path);
	}

	public static List<String> getChildren(String path) {
		List<String> children = null;
		try {
			children = zkClient.getChildren(path);
		} catch (Exception e) { // that should be
								// {org.apache.zookeeper.KeeperException$NoNodeException}
			children = new ArrayList<String>();
		}
		return children;
	}

	public static ZkDataAndStat readDataMaybeNull(String path) {
		Stat stat = new Stat();
		String data = null;
		try {
			data = zkClient.readData(path, stat);
		} catch (Exception e) {
			LOG.warn("Path: " + path + " do not exits in ZK!" + e.getMessage());
		}
		return new ZkDataAndStat(data, stat);
	}

// Path: src/main/java/com/chickling/kmanager/model/BrokerInfo.java
// public class BrokerInfo {
// 	private int bid;
// 	private String host;
// 	private int port;
// 	private int jmxPort;
// 	private long timestamp;
// 	private int version;
// 
// 	public BrokerInfo() {
// 
// 	}
// 
// 	public BrokerInfo(int bid, String host, int port) {
// 		super();
// 		this.bid = bid;
// 		this.host = host;
// 		this.port = port;
// 	}
// 
// 	public int getBid() {
// 		return bid;
// 	}
// 
// 	public void setBid(int bid) {
// 		this.bid = bid;
// 	}
// 
// 	public String getHost() {
// 		return host;
// 	}
// 
// 	public void setHost(String host) {
// 		this.host = host;
// 	}
// 
// 	public int getPort() {
// 		return port;
// 	}
// 
// 	public void setPort(int port) {
// 		this.port = port;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "BrokerInfo [bid=" + bid + ", host=" + host + ", port=" + port + "]";
// 	}
// 
// 	public int getJmxPort() {
// 		return jmxPort;
// 	}
// 
// 	public void setJmxPort(int jmx_port) {
// 		this.jmxPort = jmx_port;
// 	}
// 
// 	public long getTimestamp() {
// 		return timestamp;
// 	}
// 
// 	public void setTimestamp(long timestamp) {
// 		this.timestamp = timestamp;
// 	}
// 
// 	public int getVersion() {
// 		return version;
// 	}
// 
// 	public void setVersion(int version) {
// 		this.version = version;
// 	}
// 
// }
// 
// Path: src/main/java/com/chickling/kmanager/model/ZkDataAndStat.java
// public class ZkDataAndStat {
// 	private String data;
// 	private Stat stat;
// 
// 	public ZkDataAndStat() {
// 		super();
// 	}
// 
// 	public ZkDataAndStat(String data, Stat stat) {
// 		super();
// 		this.data = data;
// 		this.stat = stat;
// 	}
// 
// 	public String getData() {
// 		return data;
// 	}
// 
// 	public void setData(String data) {
// 		this.data = data;
// 	}
// 
// 	public Stat getStat() {
// 		return stat;
// 	}
// 
// 	public void setStat(Stat stat) {
// 		this.stat = stat;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "ZkDataAndState [data=" + data + ", stat=" + stat + "]";
// 	}
// 
// }


// Path: src/main/java/com/chickling/kmanager/utils/ZKUtils.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;
import org.I0Itec.zkclient.exception.ZkMarshallingError;
import org.I0Itec.zkclient.serialize.ZkSerializer;
import org.apache.zookeeper.data.Stat;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.chickling.kmanager.model.BrokerInfo;
import com.chickling.kmanager.model.ZkDataAndStat;
import kafka.cluster.Broker;
import kafka.common.TopicAndPartition;
import kafka.utils.ZKStringSerializer;
import kafka.utils.ZkUtils;
import scala.Option;
import scala.collection.JavaConversions;

	public static List<String> parseTopicsData(String jsonData) {
		return JavaConversions.seqAsJavaList(ZkUtils.parseTopicsData(jsonData));
	}

	public static boolean pathExists(String path) {
		return zkUtilsFromKafka.pathExists(path);
	}

	public static List<String> getChildren(String path) {
		List<String> children = null;
		try {
			children = zkClient.getChildren(path);
		} catch (Exception e) { // that should be
								// {org.apache.zookeeper.KeeperException$NoNodeException}
			children = new ArrayList<String>();
		}
		return children;
	}

	public static ZkDataAndStat readDataMaybeNull(String path) {
		Stat stat = new Stat();
		String data = null;
		try {
			data = zkClient.readData(path, stat);
		} catch (Exception e) {
			LOG.warn("Path: " + path + " do not exits in ZK!" + e.getMessage());
		}
		return new ZkDataAndStat(data, stat);
	}

	public static List<BrokerInfo> getBrokers() throws Exception {