|
|
|
@ -1,22 +1,22 @@
|
|
|
|
|
package org.xbib.event.common;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.ServiceLoader;
|
|
|
|
|
|
|
|
|
|
import org.xbib.event.EventConsumer;
|
|
|
|
|
import org.xbib.event.bus.AsyncEventBus;
|
|
|
|
|
import org.xbib.event.bus.SubscriberExceptionContext;
|
|
|
|
|
import org.xbib.event.bus.SubscriberExceptionHandler;
|
|
|
|
|
import org.xbib.event.clock.ClockEventManager;
|
|
|
|
|
import org.xbib.event.generic.GenericEventManager;
|
|
|
|
|
import org.xbib.event.path.FileFollowEventManager;
|
|
|
|
|
import org.xbib.event.path.PathEventManager;
|
|
|
|
|
import org.xbib.event.syslog.SyslogEventManager;
|
|
|
|
|
import org.xbib.event.timer.TimerEventManager;
|
|
|
|
|
import org.xbib.event.clock.ClockEventManagerService;
|
|
|
|
|
import org.xbib.event.generic.GenericEventManagerService;
|
|
|
|
|
import org.xbib.event.path.FileFollowEventManagerService;
|
|
|
|
|
import org.xbib.event.path.PathEventManagerService;
|
|
|
|
|
import org.xbib.event.timer.TimerEventManagerService;
|
|
|
|
|
import org.xbib.settings.Settings;
|
|
|
|
|
|
|
|
|
|
import java.io.Closeable;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.time.ZoneId;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
@ -31,54 +31,53 @@ public final class EventManager {
|
|
|
|
|
|
|
|
|
|
private final Builder builder;
|
|
|
|
|
|
|
|
|
|
private final GenericEventManager genericEventManager;
|
|
|
|
|
|
|
|
|
|
private final ClockEventManager clockEventManager;
|
|
|
|
|
|
|
|
|
|
private final TimerEventManager timerEventManager;
|
|
|
|
|
|
|
|
|
|
private final FileFollowEventManager fileFollowEventManager;
|
|
|
|
|
|
|
|
|
|
private final PathEventManager pathEventManager;
|
|
|
|
|
|
|
|
|
|
private final SyslogEventManager syslogEventManager;
|
|
|
|
|
private final Map<Class<? extends EventManagerService>, EventManagerService> services;
|
|
|
|
|
|
|
|
|
|
private EventManager(Builder builder) {
|
|
|
|
|
this.builder = builder;
|
|
|
|
|
this.genericEventManager = new GenericEventManager(builder.eventBus);
|
|
|
|
|
this.clockEventManager = new ClockEventManager(builder.settings, builder.eventBus, builder.classLoader);
|
|
|
|
|
this.timerEventManager = new TimerEventManager(builder.settings, builder.eventBus, builder.classLoader, ZoneId.systemDefault());
|
|
|
|
|
this.fileFollowEventManager = new FileFollowEventManager(builder.settings, builder.eventBus, builder.executorService, builder.classLoader);
|
|
|
|
|
this.pathEventManager = new PathEventManager(builder.settings, builder.eventBus, builder.executorService, builder.classLoader);
|
|
|
|
|
this.syslogEventManager = new SyslogEventManager(builder.settings, builder.eventBus);
|
|
|
|
|
this.services = new HashMap<>();
|
|
|
|
|
services.put(GenericEventManagerService.class, new GenericEventManagerService()
|
|
|
|
|
.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
services.put(ClockEventManagerService.class, new ClockEventManagerService()
|
|
|
|
|
.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
services.put(TimerEventManagerService.class, new TimerEventManagerService()
|
|
|
|
|
.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
services.put(FileFollowEventManagerService.class, new FileFollowEventManagerService()
|
|
|
|
|
.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
services.put(PathEventManagerService.class, new PathEventManagerService()
|
|
|
|
|
.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
for (EventManagerService service : ServiceLoader.load(EventManagerService.class)) {
|
|
|
|
|
services.put(service.getClass(), service.init(builder.settings, builder.eventBus, builder.classLoader, builder.executorService));
|
|
|
|
|
}
|
|
|
|
|
logger.log(Level.INFO, "installed event service managers = " + services.keySet());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Builder builder(Settings settings) {
|
|
|
|
|
return new Builder(settings);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public GenericEventManager getGenericEventManager() {
|
|
|
|
|
return genericEventManager;
|
|
|
|
|
public EventManagerService getEventManagerService(Class<? extends EventManagerService> cl) {
|
|
|
|
|
return services.get(cl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ClockEventManager getClockEventManager() {
|
|
|
|
|
return clockEventManager;
|
|
|
|
|
public GenericEventManagerService getGenericEventManagerService() {
|
|
|
|
|
return (GenericEventManagerService) services.get(GenericEventManagerService.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public TimerEventManager getTimerEventManager() {
|
|
|
|
|
return timerEventManager;
|
|
|
|
|
public ClockEventManagerService getClockEventManagerService() {
|
|
|
|
|
return (ClockEventManagerService) services.get(ClockEventManagerService.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public FileFollowEventManager getFileFollowEventManager() {
|
|
|
|
|
return fileFollowEventManager;
|
|
|
|
|
public TimerEventManagerService getTimerEventManagerService() {
|
|
|
|
|
return (TimerEventManagerService) services.get(TimerEventManagerService.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PathEventManager getPathEventManager() {
|
|
|
|
|
return pathEventManager;
|
|
|
|
|
public FileFollowEventManagerService getFileFollowEventManagerService() {
|
|
|
|
|
return (FileFollowEventManagerService) services.get(FileFollowEventManagerService.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public SyslogEventManager getSyslogEventManager() {
|
|
|
|
|
return syslogEventManager;
|
|
|
|
|
public PathEventManagerService getPathEventManagerService() {
|
|
|
|
|
return (PathEventManagerService) services.get(PathEventManagerService.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void close() throws IOException {
|
|
|
|
@ -87,11 +86,11 @@ public final class EventManager {
|
|
|
|
|
closeable.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
clockEventManager.close();
|
|
|
|
|
timerEventManager.close();
|
|
|
|
|
fileFollowEventManager.close();
|
|
|
|
|
pathEventManager.close();
|
|
|
|
|
syslogEventManager.close();
|
|
|
|
|
for (EventManagerService service : services.values()) {
|
|
|
|
|
if (service instanceof Closeable closeable) {
|
|
|
|
|
closeable.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class Builder {
|
|
|
|
|