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

driven-adapter.async-event-bus.reactive-events-gateway.mustache Maven / Gradle / Ivy

Go to download

Gradle plugin to create a clean application in Java that already works, It follows our best practices!

There is a newer version: 3.20.10
Show newest version
package {{package}}.events;

import {{package}}.model.events.gateways.EventsGateway;
{{#lombok}}
import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log;
{{/lombok}}
{{#eda}}
import org.reactivecommons.api.domain.DomainEvent;
import org.reactivecommons.api.domain.DomainEventBus;
import org.reactivecommons.async.impl.config.annotations.EnableDomainEventBus;
import reactor.core.publisher.Mono;
import io.cloudevents.CloudEvent;
import io.cloudevents.core.builder.CloudEventBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

import java.util.UUID;
import java.net.URI;
import java.time.OffsetDateTime;
{{/eda}}
{{^eda}}
import org.reactivecommons.api.domain.DomainEvent;
import org.reactivecommons.api.domain.DomainEventBus;
import org.reactivecommons.async.impl.config.annotations.EnableDomainEventBus;
import reactor.core.publisher.Mono;

import java.util.UUID;
{{/eda}}
{{#lombok}}
import java.util.logging.Level;
{{/lombok}}

import static reactor.core.publisher.Mono.from;

{{#lombok}}
@Log
@RequiredArgsConstructor
{{/lombok}}
@EnableDomainEventBus
public class ReactiveEventsGateway implements EventsGateway {
    public static final String SOME_EVENT_NAME = "some.event.name";
    private final DomainEventBus domainEventBus;
    {{#eda}}
    private ObjectMapper om = new ObjectMapper();
    {{/eda}}
    {{^lombok}}

    public ReactiveEventsGateway(DomainEventBus domainEventBus) {
        this.domainEventBus = domainEventBus;
    }
    {{/lombok}}

    @Override
    public Mono emit(Object event) {
        {{#lombok}}
        log.log(Level.INFO, "Sending domain event: {0}: {1}", new String[]{SOME_EVENT_NAME, event.toString()});
        {{/lombok}}
        {{#eda}}
        CloudEvent  eventCloudEvent = null;
        try {
            eventCloudEvent = CloudEventBuilder.v1() //
                       .withId(UUID.randomUUID().toString()) //
                       .withSource(URI.create("https://spring.io/foos"))//
                       .withType(SOME_EVENT_NAME) //
                       .withDataContentType("application/json")
                       .withTime(OffsetDateTime.now())
                       .withData("application/json", om.writeValueAsBytes(event))
                       .build();
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }

         return from(domainEventBus.emit(new DomainEvent(SOME_EVENT_NAME, UUID.randomUUID().toString(), eventCloudEvent)));
        {{/eda}}
        {{^eda}}
         return from(domainEventBus.emit(new DomainEvent<>(SOME_EVENT_NAME, UUID.randomUUID().toString(), event)));
        {{/eda}}
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy