// Path: elastic-config-core/src/main/java/com/github/config/api/ElasticConfig.java
// public interface ElasticConfig extends Closeable {
// 
// 	/**
// 	 * 根据配置组中key获取对应的值
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @return key对应的值
// 	 */
// 	String getValue(String key);
// 
// 	/**
// 	 * 添加key,value到配置组中
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @param value
// 	 *            配置组中value
// 	 * @return 配置组中key原来的值
// 	 */
// 	String putValue(String key, String value);
// 
// 	/**
// 	 * 删除配置组中的key
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @return 配置组中key原来的值
// 	 */
// 	String removeValue(String key);
// 
// 	/**
// 	 * 配置刷新
// 	 */
// 	void refresh();
// 
// }
// 
// 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);
//     }
// 
// }


import java.util.UUID;
import org.springframework.core.env.PropertySource;
import com.github.config.api.ElasticConfig;
import com.github.config.exception.ElasticConfigException;
package com.github.config.spring.datasource;




/**
 * 将注册中心的配置数据转化为属性源.
 * 
 * @author ZhangWei
 */
public class RegistryPropertySource extends PropertySource<ElasticConfig> {

    private final ElasticConfig source;

    public RegistryPropertySource(final ElasticConfig source) {
        super(UUID.randomUUID().toString(), source);
        this.source = source;
    }

    @Override
    public Object getProperty(final String name) {
        try {
            return source.getValue(name);
        }
// Path: elastic-config-core/src/main/java/com/github/config/api/ElasticConfig.java
// public interface ElasticConfig extends Closeable {
// 
// 	/**
// 	 * 根据配置组中key获取对应的值
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @return key对应的值
// 	 */
// 	String getValue(String key);
// 
// 	/**
// 	 * 添加key,value到配置组中
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @param value
// 	 *            配置组中value
// 	 * @return 配置组中key原来的值
// 	 */
// 	String putValue(String key, String value);
// 
// 	/**
// 	 * 删除配置组中的key
// 	 * 
// 	 * @param key
// 	 *            配置组中key
// 	 * @return 配置组中key原来的值
// 	 */
// 	String removeValue(String key);
// 
// 	/**
// 	 * 配置刷新
// 	 */
// 	void refresh();
// 
// }
// 
// 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-spring/src/main/java/com/github/config/spring/datasource/RegistryPropertySource.java
import java.util.UUID;
import org.springframework.core.env.PropertySource;
import com.github.config.api.ElasticConfig;
import com.github.config.exception.ElasticConfigException;

package com.github.config.spring.datasource;




/**
 * 将注册中心的配置数据转化为属性源.
 * 
 * @author ZhangWei
 */
public class RegistryPropertySource extends PropertySource<ElasticConfig> {

    private final ElasticConfig source;

    public RegistryPropertySource(final ElasticConfig source) {
        super(UUID.randomUUID().toString(), source);
        this.source = source;
    }

    @Override
    public Object getProperty(final String name) {
        try {
            return source.getValue(name);
        }
        catch (final ElasticConfigException ex) {