All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opencredo.concursus.spring.events.EventSystemBeans Maven / Gradle / Ivy

The newest version!
package com.opencredo.concursus.spring.events;

import com.opencredo.concursus.domain.events.batching.EventBatch;
import com.opencredo.concursus.domain.events.dispatching.EventBus;
import com.opencredo.concursus.domain.events.logging.EventLog;
import com.opencredo.concursus.domain.events.processing.EventBatchProcessor;
import com.opencredo.concursus.domain.events.processing.PublishingEventBatchProcessor;
import com.opencredo.concursus.domain.events.publishing.EventPublisher;
import com.opencredo.concursus.domain.events.publishing.EventSubscribable;
import com.opencredo.concursus.domain.events.publishing.SubscribableEventPublisher;
import com.opencredo.concursus.domain.events.sourcing.EventRetriever;
import com.opencredo.concursus.domain.events.sourcing.EventSource;
import com.opencredo.concursus.domain.events.persisting.EventPersister;
import com.opencredo.concursus.domain.events.storage.EventStore;
import com.opencredo.concursus.domain.events.storage.InMemoryEventStore;
import com.opencredo.concursus.mapping.events.methods.dispatching.DispatchingEventSourceFactory;
import com.opencredo.concursus.mapping.events.methods.dispatching.DispatchingSubscriber;
import com.opencredo.concursus.mapping.events.methods.proxying.ProxyingEventBus;
import com.opencredo.concursus.spring.events.filtering.scanning.ComponentScanningEventBatchFilter;
import com.opencredo.concursus.spring.events.filtering.scanning.ComponentScanningEventBusFilter;
import com.opencredo.concursus.spring.events.filtering.scanning.ComponentScanningEventLogFilter;
import com.opencredo.concursus.spring.events.filtering.scanning.ComponentScanningEventPublisherFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
public class EventSystemBeans {

    private final SubscribableEventPublisher subscribableEventPublisher = new SubscribableEventPublisher();

    @Bean
    public EventStore eventStore() {
        return InMemoryEventStore.empty();
    }

    @Bean
    public EventSource eventSource(EventRetriever eventRetriever) {
        return EventSource.retrievingWith(eventRetriever);
    }

    @Bean
    public EventLog eventLog(ComponentScanningEventLogFilter filter, EventPersister eventPersister) {
        return filter.apply(EventLog.loggingTo(eventPersister));
    }

    @Bean
    public DispatchingEventSourceFactory dispatchingEventSourceFactory(EventSource eventSource) {
        return DispatchingEventSourceFactory.dispatching(eventSource);
    }

    @Bean
    public EventSubscribable subscribable() {
        return subscribableEventPublisher;
    }

    @Bean
    public EventPublisher eventPublisher(ComponentScanningEventPublisherFilter filter) { return filter.apply(subscribableEventPublisher); }

    @Bean
    public EventBatchProcessor eventWriter(EventLog eventLog, EventPublisher eventPublisher) {
        return PublishingEventBatchProcessor.using(eventLog, eventPublisher);
    }

    @Bean
    public EventBus eventBus(EventBatchProcessor eventBatchProcessor, ComponentScanningEventBusFilter eventBusFilter, ComponentScanningEventBatchFilter eventBatchFilter) {
        return eventBusFilter.apply(() -> eventBatchFilter.apply(EventBatch.processingWith(eventBatchProcessor)));
    }

    @Bean
    public ProxyingEventBus proxyingEventBus(EventBus eventBus) {
        return ProxyingEventBus.proxying(eventBus);
    }

    @Bean
    public DispatchingSubscriber dispatchingSubscriber(EventSubscribable subscribable) {
        return DispatchingSubscriber.subscribingTo(subscribable);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy