// 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/bus/ElasticConfigEvent.java
// public final class ElasticConfigEvent extends NodeEvent {
// 
//     private ElasticConfigEvent(final String path, final String value, final EvenType eventExecutionType) {
//         super(path, value, eventExecutionType);
//     }
// 
//     public static ElasticConfigEventBuilder builder() {
//         return new ElasticConfigEventBuilder();
//     }
// 
//     @NoArgsConstructor
//     public static class ElasticConfigEventBuilder {
// 
//         /**
//          * 节点路径
//          */
//         private String path;
// 
//         /**
//          * 节点值
//          */
//         private String value;
// 
//         /**
//          * 事件类型
//          */
//         private EvenType eventType;
// 
//         public ElasticConfigEventBuilder path(final String path) {
// 
//             this.path = path;
//             return this;
//         }
// 
//         public ElasticConfigEventBuilder value(final String value) {
// 
//             this.value = value;
//             return this;
//         }
// 
//         public ElasticConfigEventBuilder eventType(EvenType eventType) {
// 
//             this.eventType = eventType;
//             return this;
//         }
// 
//         public ElasticConfigEvent build() {
//             return new ElasticConfigEvent(path, value, eventType);
//         }
//     }
// 
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/bus/ElasticConfigEventBus.java
// @NoArgsConstructor(access = AccessLevel.PRIVATE)
// public final class ElasticConfigEventBus {
// 
//     private static final String NAME = "Config-EventBus";
// 
//     /**
//      * 发布事件.
//      *
//      * @param event ElasticConfig事件
//      */
//     public static void pushEvent(final ElasticConfigEvent event) {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).pushEvent(event);
//     }
// 
//     /**
//      * 注册事件监听器.
//      *
//      * @param listener ElasticConfig事件监听器
//      */
//     public static void register(final ElaticCofnigEventListener listener) {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).register(listener);
//     }
// 
//     /**
//      * 清除监听器.
//      */
//     public static void clearListener() {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).clearListener();
//     }
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/bus/event/EventListener.java
// public interface EventListener {
// 
//     /**
//      * 事件监听器名称
//      *
//      * @return 事件监听器名称
//      */
//     String getName();
// 
//     /**
//      * 监听器注册
//      */
//     void register();
// }


import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.github.config.api.ElasticConfig;
import com.github.config.bus.ElasticConfigEvent;
import com.github.config.bus.ElasticConfigEventBus;
import com.github.config.bus.event.EventListener;
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
package com.github.config.listener;



/**
 * ElaticCofnig事件监听器.
 * 
 * @author ZhangWei
 */
@Slf4j
@RequiredArgsConstructor
public class ElaticCofnigEventListener implements EventListener {

    private final ElasticConfig elasticConfig;

    @Subscribe
    @AllowConcurrentEvents
// 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/bus/ElasticConfigEvent.java
// public final class ElasticConfigEvent extends NodeEvent {
// 
//     private ElasticConfigEvent(final String path, final String value, final EvenType eventExecutionType) {
//         super(path, value, eventExecutionType);
//     }
// 
//     public static ElasticConfigEventBuilder builder() {
//         return new ElasticConfigEventBuilder();
//     }
// 
//     @NoArgsConstructor
//     public static class ElasticConfigEventBuilder {
// 
//         /**
//          * 节点路径
//          */
//         private String path;
// 
//         /**
//          * 节点值
//          */
//         private String value;
// 
//         /**
//          * 事件类型
//          */
//         private EvenType eventType;
// 
//         public ElasticConfigEventBuilder path(final String path) {
// 
//             this.path = path;
//             return this;
//         }
// 
//         public ElasticConfigEventBuilder value(final String value) {
// 
//             this.value = value;
//             return this;
//         }
// 
//         public ElasticConfigEventBuilder eventType(EvenType eventType) {
// 
//             this.eventType = eventType;
//             return this;
//         }
// 
//         public ElasticConfigEvent build() {
//             return new ElasticConfigEvent(path, value, eventType);
//         }
//     }
// 
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/bus/ElasticConfigEventBus.java
// @NoArgsConstructor(access = AccessLevel.PRIVATE)
// public final class ElasticConfigEventBus {
// 
//     private static final String NAME = "Config-EventBus";
// 
//     /**
//      * 发布事件.
//      *
//      * @param event ElasticConfig事件
//      */
//     public static void pushEvent(final ElasticConfigEvent event) {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).pushEvent(event);
//     }
// 
//     /**
//      * 注册事件监听器.
//      *
//      * @param listener ElasticConfig事件监听器
//      */
//     public static void register(final ElaticCofnigEventListener listener) {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).register(listener);
//     }
// 
//     /**
//      * 清除监听器.
//      */
//     public static void clearListener() {
// 
//         ElasticConfigEventBusFactory.getInstance(NAME).clearListener();
//     }
// }
// 
// Path: elastic-config-core/src/main/java/com/github/config/bus/event/EventListener.java
// public interface EventListener {
// 
//     /**
//      * 事件监听器名称
//      *
//      * @return 事件监听器名称
//      */
//     String getName();
// 
//     /**
//      * 监听器注册
//      */
//     void register();
// }


// Path: elastic-config-core/src/main/java/com/github/config/listener/ElaticCofnigEventListener.java
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.github.config.api.ElasticConfig;
import com.github.config.bus.ElasticConfigEvent;
import com.github.config.bus.ElasticConfigEventBus;
import com.github.config.bus.event.EventListener;
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;

package com.github.config.listener;



/**
 * ElaticCofnig事件监听器.
 * 
 * @author ZhangWei
 */
@Slf4j
@RequiredArgsConstructor
public class ElaticCofnigEventListener implements EventListener {

    private final ElasticConfig elasticConfig;

    @Subscribe
    @AllowConcurrentEvents
    public void listen(final ElasticConfigEvent event) {