// 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-spring/src/main/java/com/github/config/spring/datasource/RegistryPropertySource.java
// 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) {
//             return null;
//         }
//     }
// }


import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySources;
import com.github.config.api.ElasticConfig;
import com.github.config.spring.datasource.RegistryPropertySource;
import com.google.common.base.Preconditions;
package com.github.config.spring.datasource.factory;



/**
 * 配置来源工厂
 * 
 * @author ZhangWei
 */
public class ElasticConfigSourceFactory {

    public static PropertySources create(ElasticConfig... elasticConfigs) {
        Preconditions.checkNotNull(elasticConfigs);
        final MutablePropertySources sources = new MutablePropertySources();
        for (ElasticConfig elasticConfig : elasticConfigs) {
// 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-spring/src/main/java/com/github/config/spring/datasource/RegistryPropertySource.java
// 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) {
//             return null;
//         }
//     }
// }


// Path: elastic-config-spring/src/main/java/com/github/config/spring/datasource/factory/ElasticConfigSourceFactory.java
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySources;
import com.github.config.api.ElasticConfig;
import com.github.config.spring.datasource.RegistryPropertySource;
import com.google.common.base.Preconditions;

package com.github.config.spring.datasource.factory;



/**
 * 配置来源工厂
 * 
 * @author ZhangWei
 */
public class ElasticConfigSourceFactory {

    public static PropertySources create(ElasticConfig... elasticConfigs) {
        Preconditions.checkNotNull(elasticConfigs);
        final MutablePropertySources sources = new MutablePropertySources();
        for (ElasticConfig elasticConfig : elasticConfigs) {
            sources.addLast(new RegistryPropertySource(elasticConfig));