package com.alibaba.doris.dataserver.event;
import java.util.List;
/**
* 事件及监听器管理中心,事件的产生和监听都通过本管理中心统一维护并管理。<br>
* <br>
* 注册感兴趣的监听事件:<br>
* <code>
* MyDataServerEventListener myListener = new MyDataServerEventListener();
* EventListenerManager.registEventListener(myListener);
* </code> <br>
* <br>
* 触发一个事件:<br>
* <code>
* EventListenerManager.fireEvent(new StartupEvent());
* </code> <br>
* <br>
* 取消注册过的监听事件:<br>
* <code>
* EventListenerManager.unregistEventListener(myListener);
* </code><br>
* <br>
* 详细使用方法,可以参考本类对应的单元测试代码。
*
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class EventListenerManager {
/**
* 往事件管理中心注册一个监听器,注册中心会自动根据监听器的类型,<br>
* 注册到不同的事件监听通道。
*
* @param eventListener
*/
public void registEventListener(EventListener eventListener) {
registry.registEventListener(eventListener);
}
/**
* 将当前监听器从事件注册管理中心删除掉,一旦删除以后,事件将不会通知到<br>
* 被删除的事件监听对象。
*
* @param eventListener
*/
public void unregistEventListener(EventListener eventListener) {
registry.unregistEventListener(eventListener);
}
/**
* 触发一个事件。<br>
* 当某个关键性的事件发生时,可以通过调用本接口将事件通知到所有关心本事件的监听者。
*
* @param event
*/
public void fireEvent(Event event) {
List<EventListener> eventListenerList = registry.getEventListenerRegistry(event.getType());
if (eventListenerList != null) {
for (EventListener listener : eventListenerList) {
event.notify(listener);
}
} else {
throw new EventListnerException("Unknown event! (Please check you have registed this event.)", event, null);
}
}
private EventRegistry registry = new EventRegistry();
}