package cz.senslog.analyzer.analysis; import cz.senslog.analyzer.analysis.module.FilterHandler; import cz.senslog.analyzer.analysis.module.HandlersModule; import cz.senslog.analyzer.analysis.module.ThresholdHandler; import cz.senslog.analyzer.core.EventBusModule; import cz.senslog.analyzer.core.api.BlockingHandler; import cz.senslog.analyzer.core.EventBus; import cz.senslog.analyzer.core.api.HandlerInvoker; import cz.senslog.analyzer.domain.DoubleStatistics; import cz.senslog.analyzer.domain.Observation; import dagger.Module; import dagger.Provides; import javax.inject.Named; import java.util.List; import static cz.senslog.analyzer.core.api.HandlerInvoker.cancelInvoker; @Module(includes = { HandlersModule.class, EventBusModule.class }) public class AnalyzerModule { @Provides @Named("advancedAnalyzer") Analyzer provideAdvancedAnalyzer ( @Named("sensorFilterHandler") FilterHandler sensorFilterHandler, @Named("sensorThresholdHandler") ThresholdHandler thresholdHandler, @Named("observationCollector") BlockingHandler observationCollector, @Named("groupFilterHandler") FilterHandler groupFilterHandler, @Named("groupThresholdHandler") ThresholdHandler groupThresholdHandler, @Named("statisticsCollector") BlockingHandler statisticsCollector, EventBus eventBus ) { HandlerInvoker invoker = HandlerInvoker.create() .handler(sensorFilterHandler) .nextHandlerInvoker(HandlerInvoker.create() .handler(thresholdHandler) .nextHandlerInvoker(HandlerInvoker.create() .blockingHandler(observationCollector, eventBus::save) .nextHandlerInvoker(HandlerInvoker.create() .handler(groupFilterHandler) .nextHandlerInvoker(HandlerInvoker.create() .handler(groupThresholdHandler) .nextHandlerInvoker(HandlerInvoker.create() .blockingHandler(statisticsCollector, eventBus::save) .nextHandlerInvoker(cancelInvoker()) .eventBus(eventBus) .build() ).eventBus(eventBus) .build() ).eventBus(eventBus) .build() ).eventBus(eventBus) .build() ).eventBus(eventBus) .build() ).eventBus(eventBus) .build(); return new ObservationAnalyzer(invoker); } @Provides @Named("simpleAnalyzer") Analyzer provideSimpleAnalyzer ( @Named("sensorFilterHandler") FilterHandler sensorFilterHandler, @Named("sensorThresholdHandler") ThresholdHandler thresholdHandler, @Named("observationCollector") BlockingHandler observationCollector, EventBus eventBus ) { HandlerInvoker obsColl = HandlerInvoker.create() .blockingHandler(observationCollector, eventBus::save) .nextHandlerInvoker(cancelInvoker()).eventBus(eventBus) .build(); HandlerInvoker obsThs = HandlerInvoker.create().handler(thresholdHandler) .nextHandlerInvoker(obsColl).eventBus(eventBus).build(); HandlerInvoker obsFlt = HandlerInvoker.create().handler(sensorFilterHandler) .nextHandlerInvoker(obsThs).eventBus(eventBus).build(); return new ObservationAnalyzer(obsFlt); } }