// Path: elastic-config-core/src/main/java/com/github/config/exception/ElasticConfigException.java
// public class ElasticConfigException extends RuntimeException {
// 
//     private static final long serialVersionUID = -509739591923183173L;
// 
//     public ElasticConfigException(final String errorMessage, final Object... args) {
//         super(String.format(errorMessage, args));
//     }
// 
//     public ElasticConfigException(final Throwable cause) {
//         super(cause);
//     }
// 
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/group/ZookeeperConfigProfile.java
// @Setter
// @Getter
// @ToString
// @NoArgsConstructor
// public class ZookeeperConfigProfile extends ConfigProfile {
// 
// 	public ZookeeperConfigProfile(String serverlist, String namespaces, String rootNode, String version) {
// 		super(rootNode, version);
// 		this.serverlist = serverlist;
// 		this.namespaces = namespaces;
// 	}
// 
// 	/**
// 	 * zookeeper地址,包括IP地址和端口号. 多个地址用逗号分隔
// 	 */
// 	private String serverlist;
// 
// 	/**
// 	 * Zookeeper项目配置命名空间
// 	 */
// 	private String namespaces;
// 
// 	/**
// 	 * Zookeeper项目配置监控端口
// 	 */
// 	private int monitorPort = -1;
// 
// 	public String getConcurrentRootNodePath() {
// 		return ZKPaths.makePath(rootNode, version, node);
// 	}
// 
// 	public String getVersionRootNodePath(String node) {
// 		return ZKPaths.makePath(rootNode, version, node);
// 	}
// 
// 	public String getFullPath(String key) {
// 		return ZKPaths.makePath(rootNode, version, node, key);
// 	}
// 
// 	public boolean isVersionRootPath(String path) {
// 		return getConcurrentRootNodePath().equals(path);
// 	}
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/register/base/ElasticConfigRegistryCenter.java
// public interface ElasticConfigRegistryCenter extends RegistryCenter {
// 
//     /**
//      * 直接从注册中心而非本地缓存获取数据.
//      * 
//      * @param key 键
//      * @return 值
//      */
//     String getDirectly(String key);
// 
//     /**
//      * 获取子节点名称集合.
//      * 
//      * @param key 键
//      * @return 子节点名称集合
//      */
//     List<String> getChildrenKeys(String key);
// 
//     /**
//      * 持久化临时注册数据.
//      * 
//      * @param key 键
//      * @param value 值
//      */
//     void persistEphemeral(String key, String value);
// 
//     /**
//      * 持久化顺序注册数据.
//      *
//      * @param key 键
//      * @return 包含10位顺序数字的znode名称
//      */
//     String persistSequential(String key);
// 
//     /**
//      * 持久化临时顺序注册数据.
//      * 
//      * @param key 键
//      */
//     void persistEphemeralSequential(String key);
// 
//     /**
//      * 添加本地缓存.
//      * 
//      * @param cachePath 需加入缓存的路径
//      */
//     void addCacheData(String cachePath);
// 
//     /**
//      * 获取注册中心数据缓存对象.
//      * 
//      * @param cachePath 缓存的节点路径
//      * @return 注册中心数据缓存对象
//      */
//     Object getRawCache(String cachePath);
// }


import java.util.List;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.framework.state.ConnectionStateListener;
import com.github.config.exception.ElasticConfigException;
import com.github.config.group.ZookeeperConfigProfile;
import com.github.config.register.base.ElasticConfigRegistryCenter;
				value.toString());
	}

	/**
	 * 替换节点数据.
	 * 
	 * @param node
	 *            节点名称
	 * @param value
	 *            待替换的数据
	 */
	public void replaceConfigNode(final String node, final Object value) {
		elasticConfigRegistryCenter.persist(configProfile.getFullPath(node),
				value.toString());
	}

	/**
	 * 添加本地缓存.
	 * 
	 * @param cachePath
	 *            需加入缓存的路径
	 */
	public void addDataCache(final String cachePath) {
		elasticConfigRegistryCenter.addCacheData(cachePath);
	}

	private void handleException(final Exception ex) {
		if (ex instanceof InterruptedException) {
			Thread.currentThread().interrupt();
		} else {
// Path: elastic-config-core/src/main/java/com/github/config/exception/ElasticConfigException.java
// public class ElasticConfigException extends RuntimeException {
// 
//     private static final long serialVersionUID = -509739591923183173L;
// 
//     public ElasticConfigException(final String errorMessage, final Object... args) {
//         super(String.format(errorMessage, args));
//     }
// 
//     public ElasticConfigException(final Throwable cause) {
//         super(cause);
//     }
// 
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/group/ZookeeperConfigProfile.java
// @Setter
// @Getter
// @ToString
// @NoArgsConstructor
// public class ZookeeperConfigProfile extends ConfigProfile {
// 
// 	public ZookeeperConfigProfile(String serverlist, String namespaces, String rootNode, String version) {
// 		super(rootNode, version);
// 		this.serverlist = serverlist;
// 		this.namespaces = namespaces;
// 	}
// 
// 	/**
// 	 * zookeeper地址,包括IP地址和端口号. 多个地址用逗号分隔
// 	 */
// 	private String serverlist;
// 
// 	/**
// 	 * Zookeeper项目配置命名空间
// 	 */
// 	private String namespaces;
// 
// 	/**
// 	 * Zookeeper项目配置监控端口
// 	 */
// 	private int monitorPort = -1;
// 
// 	public String getConcurrentRootNodePath() {
// 		return ZKPaths.makePath(rootNode, version, node);
// 	}
// 
// 	public String getVersionRootNodePath(String node) {
// 		return ZKPaths.makePath(rootNode, version, node);
// 	}
// 
// 	public String getFullPath(String key) {
// 		return ZKPaths.makePath(rootNode, version, node, key);
// 	}
// 
// 	public boolean isVersionRootPath(String path) {
// 		return getConcurrentRootNodePath().equals(path);
// 	}
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/register/base/ElasticConfigRegistryCenter.java
// public interface ElasticConfigRegistryCenter extends RegistryCenter {
// 
//     /**
//      * 直接从注册中心而非本地缓存获取数据.
//      * 
//      * @param key 键
//      * @return 值
//      */
//     String getDirectly(String key);
// 
//     /**
//      * 获取子节点名称集合.
//      * 
//      * @param key 键
//      * @return 子节点名称集合
//      */
//     List<String> getChildrenKeys(String key);
// 
//     /**
//      * 持久化临时注册数据.
//      * 
//      * @param key 键
//      * @param value 值
//      */
//     void persistEphemeral(String key, String value);
// 
//     /**
//      * 持久化顺序注册数据.
//      *
//      * @param key 键
//      * @return 包含10位顺序数字的znode名称
//      */
//     String persistSequential(String key);
// 
//     /**
//      * 持久化临时顺序注册数据.
//      * 
//      * @param key 键
//      */
//     void persistEphemeralSequential(String key);
// 
//     /**
//      * 添加本地缓存.
//      * 
//      * @param cachePath 需加入缓存的路径
//      */
//     void addCacheData(String cachePath);
// 
//     /**
//      * 获取注册中心数据缓存对象.
//      * 
//      * @param cachePath 缓存的节点路径
//      * @return 注册中心数据缓存对象
//      */
//     Object getRawCache(String cachePath);
// }


// Path: elastic-config-core/src/main/java/com/github/config/storage/ConfigNodeStorage.java
import java.util.List;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.framework.state.ConnectionStateListener;
import com.github.config.exception.ElasticConfigException;
import com.github.config.group.ZookeeperConfigProfile;
import com.github.config.register.base.ElasticConfigRegistryCenter;

				value.toString());
	}

	/**
	 * 替换节点数据.
	 * 
	 * @param node
	 *            节点名称
	 * @param value
	 *            待替换的数据
	 */
	public void replaceConfigNode(final String node, final Object value) {
		elasticConfigRegistryCenter.persist(configProfile.getFullPath(node),
				value.toString());
	}

	/**
	 * 添加本地缓存.
	 * 
	 * @param cachePath
	 *            需加入缓存的路径
	 */
	public void addDataCache(final String cachePath) {
		elasticConfigRegistryCenter.addCacheData(cachePath);
	}

	private void handleException(final Exception ex) {
		if (ex instanceof InterruptedException) {
			Thread.currentThread().interrupt();
		} else {
			throw new ElasticConfigException(ex);