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

io.vanillabp.cockpit.adapter.common.usertask.kafka.UserTaskKafkaPublishing Maven / Gradle / Ivy

package io.vanillabp.cockpit.adapter.common.usertask.kafka;

import io.vanillabp.cockpit.adapter.common.properties.VanillaBpCockpitProperties;
import io.vanillabp.cockpit.adapter.common.usertask.UserTaskPublishing;
import io.vanillabp.cockpit.adapter.common.usertask.UserTaskPublishingBase;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskActivatedEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskCancelledEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskCompletedEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskCreatedEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskSuspendedEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskUpdatedEvent;
import io.vanillabp.cockpit.bpms.api.protobuf.v1.BcEvent;
import java.util.function.Consumer;
import org.springframework.kafka.core.KafkaTemplate;

public class UserTaskKafkaPublishing extends UserTaskPublishingBase implements UserTaskPublishing {

    private final UserTaskProtobufMapper userTaskMapper;

    private final KafkaTemplate kafkaTemplate;

    public UserTaskKafkaPublishing(
            String workerId,
            VanillaBpCockpitProperties properties,
            UserTaskProtobufMapper userTaskMapper,
            KafkaTemplate kafkaTemplate
    ) {
        super(workerId, properties);
        this.userTaskMapper = userTaskMapper;
        this.kafkaTemplate = kafkaTemplate;
    }

    @Override
    public void publish(UserTaskEvent eventObject) {

        if (eventObject instanceof UserTaskUpdatedEvent userTaskUpdatedEvent){

            editUserTaskCreatedOrUpdatedEvent(userTaskUpdatedEvent);
            var event = this.userTaskMapper.map(userTaskUpdatedEvent);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskCreatedOrUpdated(event));

        } else if (eventObject instanceof UserTaskCreatedEvent userTaskCreatedEvent){

            editUserTaskCreatedOrUpdatedEvent(userTaskCreatedEvent);
            var event = this.userTaskMapper.map(userTaskCreatedEvent);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskCreatedOrUpdated(event));

        } else if (eventObject instanceof UserTaskCompletedEvent userTaskCompletedEvent) {

            var event = userTaskMapper.map(userTaskCompletedEvent);
            BcEvent.newBuilder().setUserTaskCompleted(event);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskCompleted(event));

        } else if (eventObject instanceof UserTaskCancelledEvent userTaskCancelledEvent) {

            var event = userTaskMapper.map(userTaskCancelledEvent);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskCancelled(event));

        } else if (eventObject instanceof UserTaskActivatedEvent userTaskActivatedEvent) {

            var event = userTaskMapper.map(userTaskActivatedEvent);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskActivated(event));

        } else if (eventObject instanceof UserTaskSuspendedEvent userTaskSuspendedEvent) {

            var event = userTaskMapper.map(userTaskSuspendedEvent);
            sendUserTaskEvent(
                    event.getUserTaskId(),
                    builder -> builder.setUserTaskSuspended(event));

        } else {

            throw new RuntimeException(
                    "Unsupported event type '"
                            + eventObject.getClass().getName()
                            + "'!");

        }
    }

    private void sendUserTaskEvent(final String userTaskId,
                                   final Consumer eventSupplier) {

        final var event = BcEvent.newBuilder();
        eventSupplier.accept(event);

        kafkaTemplate.send(
                properties.getCockpit().getKafka().getTopics().getUserTask(),
                userTaskId,
                event.build().toByteArray());

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy