// Path: server/src/main/java/org/opencloudb/mycat/config/server/model/ZkNode.java
// public class ZkNode {
// 
//     // 节点ID
//     private String id;
// 
//     // 节点名称
//     private String name;
// 
//     // 节点路径
//     private String path;
// 
//     // 节点内容
//     private String data;
// 
//     // 节点状态
//     private Stat stat;
// 
//     // 节点创建时间
//     private String ctime;
// 
//     // 节点修改时间
//     private String mtime;
// 
//     /**
//      * @return the id
//      */
//     public String getId() {
//         return id;
//     }
// 
//     /**
//      * @param id
//      *            the id to set
//      */
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     /**
//      * @return the name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name
//      *            the name to set
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * @return the path
//      */
//     public String getPath() {
//         return path;
//     }
// 
//     /**
//      * @param path
//      *            the path to set
//      */
//     public void setPath(String path) {
//         this.path = path;
//     }
// 
//     /**
//      * @return the stat
//      */
//     public Stat getStat() {
//         return stat;
//     }
// 
//     /**
//      * @param stat
//      *            the stat to set
//      */
//     public void setStat(Stat stat) {
//         this.stat = stat;
//     }
// 
//     /**
//      * @return the data
//      */
//     public String getData() {
//         return data;
//     }
// 
//     /**
//      * @param data
//      *            the data to set
//      */
//     public void setData(String data) {
//         this.data = data;
//     }
// 
//     /**
//      * @return the ctime
//      */
//     public String getCtime() {
//         return ctime;
//     }
// 
//     /**
//      * @param ctime
//      *            the ctime to set
//      */
//     public void setCtime(String ctime) {
//         this.ctime = ctime;
//     }
// 
//     /**
//      * @return the mtime
//      */
//     public String getMtime() {
//         return mtime;
//     }
// 
//     /**
//      * @param mtime
//      *            the mtime to set
//      */
//     public void setMtime(String mtime) {
//         this.mtime = mtime;
//     }
// 
//     @Override
//     public String toString() {
//     	return ToStringBuilder.reflectionToString(this);
//     }
// }


import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Stack;
import org.I0Itec.zkclient.ZkClient;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.opencloudb.mycat.config.server.model.ZkNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
			String nodeId = StringUtils.replace(path, "/", "△");
			nodeId = StringUtils.replace(nodeId, ".", "☆");
			
			
			znode.setId(nodeId);
			znode.setCtime(DateFormatUtils.format(stat.getCtime(),"yyyy-MM-dd HH:mm:ss"));
			znode.setMtime(DateFormatUtils.format(stat.getMtime(),
					"yyyy-MM-dd HH:mm:ss"));

			return znode;
		}
	}

	/**
	 * 取得子节点信息
	 * 
	 * @param path
	 * @return
	 * @throws InterruptedException
	 * @throws KeeperException
	 */
	public List<ZkNode> getChildZNodes(String path) throws KeeperException,
			InterruptedException {
		List<String> nameList = zk.getChildren(path, false);
		if (nameList == null || nameList.size() == 0) {
			return null;
		} else {
			List<ZkNode> znodeList = new ArrayList<ZkNode>();
			path = StringUtils.endsWith(path, "/") ? path : (path + "/");
			for (String name : nameList) {
// Path: server/src/main/java/org/opencloudb/mycat/config/server/model/ZkNode.java
// public class ZkNode {
// 
//     // 节点ID
//     private String id;
// 
//     // 节点名称
//     private String name;
// 
//     // 节点路径
//     private String path;
// 
//     // 节点内容
//     private String data;
// 
//     // 节点状态
//     private Stat stat;
// 
//     // 节点创建时间
//     private String ctime;
// 
//     // 节点修改时间
//     private String mtime;
// 
//     /**
//      * @return the id
//      */
//     public String getId() {
//         return id;
//     }
// 
//     /**
//      * @param id
//      *            the id to set
//      */
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     /**
//      * @return the name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name
//      *            the name to set
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * @return the path
//      */
//     public String getPath() {
//         return path;
//     }
// 
//     /**
//      * @param path
//      *            the path to set
//      */
//     public void setPath(String path) {
//         this.path = path;
//     }
// 
//     /**
//      * @return the stat
//      */
//     public Stat getStat() {
//         return stat;
//     }
// 
//     /**
//      * @param stat
//      *            the stat to set
//      */
//     public void setStat(Stat stat) {
//         this.stat = stat;
//     }
// 
//     /**
//      * @return the data
//      */
//     public String getData() {
//         return data;
//     }
// 
//     /**
//      * @param data
//      *            the data to set
//      */
//     public void setData(String data) {
//         this.data = data;
//     }
// 
//     /**
//      * @return the ctime
//      */
//     public String getCtime() {
//         return ctime;
//     }
// 
//     /**
//      * @param ctime
//      *            the ctime to set
//      */
//     public void setCtime(String ctime) {
//         this.ctime = ctime;
//     }
// 
//     /**
//      * @return the mtime
//      */
//     public String getMtime() {
//         return mtime;
//     }
// 
//     /**
//      * @param mtime
//      *            the mtime to set
//      */
//     public void setMtime(String mtime) {
//         this.mtime = mtime;
//     }
// 
//     @Override
//     public String toString() {
//     	return ToStringBuilder.reflectionToString(this);
//     }
// }


// Path: server/src/main/java/org/opencloudb/mycat/config/server/services/ZkBaseService.java
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Stack;
import org.I0Itec.zkclient.ZkClient;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.opencloudb.mycat.config.server.model.ZkNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

			String nodeId = StringUtils.replace(path, "/", "△");
			nodeId = StringUtils.replace(nodeId, ".", "☆");
			
			
			znode.setId(nodeId);
			znode.setCtime(DateFormatUtils.format(stat.getCtime(),"yyyy-MM-dd HH:mm:ss"));
			znode.setMtime(DateFormatUtils.format(stat.getMtime(),
					"yyyy-MM-dd HH:mm:ss"));

			return znode;
		}
	}

	/**
	 * 取得子节点信息
	 * 
	 * @param path
	 * @return
	 * @throws InterruptedException
	 * @throws KeeperException
	 */
	public List<ZkNode> getChildZNodes(String path) throws KeeperException,
			InterruptedException {
		List<String> nameList = zk.getChildren(path, false);
		if (nameList == null || nameList.size() == 0) {
			return null;
		} else {
			List<ZkNode> znodeList = new ArrayList<ZkNode>();
			path = StringUtils.endsWith(path, "/") ? path : (path + "/");
			for (String name : nameList) {
				if(path.startsWith(this.rootPath) || this.rootPath.endsWith(name)) {