public interface EventListener {
public void handleEvent(Event event);
}
public class EventHandler {
private HashSet<EventListener> listeners = new HashSet<EventListener>();
public EventHandler() {
}
//向观察者注册
public void addListener(EventListener listener) {
listeners.add(listener);
}
//事件触发,通知所有注册的处理者
public void fireEventListeners(Event event) {
ArrayList<EventListener> listeners =
new ArrayList<EventListener>(this.listeners);
for (EventListener listener : listeners) {
listener.handleEvent(event);
}
}
//取消注册
public void removeListener(EventListener listener) {
listeners.remove(listener);
}
}
public enum Type {
FLOW_STARTED, //一个流启动执行
FLOW_FINISHED, //一个流执行完成
JOB_STARTED, //一个任务开始执行
JOB_FINISHED, //一个任务执行完成
JOB_STATUS_CHANGED, //任务状态变化
EXTERNAL_FLOW_UPDATED, //内部流更新
EXTERNAL_JOB_UPDATED //内部任务更新
}
public class LocalFlowWatcherListener implements EventListener {
@Override
public void handleEvent(Event event) {
if (event.getType() == Type.JOB_FINISHED) {
if (event.getRunner() instanceof FlowRunner) {
// 这里是在job没有执行(被取消或者跳过)的情况下由FlowRunner通知的
Object data = event.getData();
if (data instanceof ExecutableNode) {
ExecutableNode node = (ExecutableNode) data;
handleJobStatusChange(node.getNestedId(), node.getStatus());
}
} else if (event.getRunner() instanceof JobRunner) {
// 这里是在一个job执行完成由jobRunner通知flowRunner,在由FlowRunner通知的。
JobRunner runner = (JobRunner) event.getRunner();
ExecutableNode node = runner.getNode();
System.out.println(node + " looks like " + node.getStatus());
handleJobStatusChange(node.getNestedId(), node.getStatus());
}
} else if (event.getType() == Type.FLOW_FINISHED) {
stopWatcher();
}
}
}
原文地址:http://blog.csdn.net/yu616568/article/details/43736499