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

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

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

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.protobuf.Timestamp;
import io.vanillabp.cockpit.adapter.common.protobuf.DetailsConverter;
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.UserTaskSuspendedEvent;
import io.vanillabp.cockpit.adapter.common.usertask.events.UserTaskUpdatedEvent;
import io.vanillabp.cockpit.bpms.api.protobuf.v1.DetailsMap;
import io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCreatedOrUpdatedEvent;

import java.time.Instant;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.Optional;

@SuppressWarnings("DuplicatedCode")
public class UserTaskProtobufMapper {

    private final String API_VERSION = "1.0";

    private final ObjectMapper objectMapper;

    public UserTaskProtobufMapper(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    public UserTaskCreatedOrUpdatedEvent map(UserTaskCreatedEvent userTaskCreatedEvent){
        UserTaskCreatedOrUpdatedEvent.Builder builder = UserTaskCreatedOrUpdatedEvent.newBuilder();
        this.addUserTaskCreatedInfo(builder, userTaskCreatedEvent);
        builder.setUpdated(false);
        return builder.build();
    }

    public UserTaskCreatedOrUpdatedEvent map(UserTaskUpdatedEvent userTaskUpdatedEvent){
        UserTaskCreatedOrUpdatedEvent.Builder builder = UserTaskCreatedOrUpdatedEvent.newBuilder();
        this.addUserTaskCreatedInfo(builder, userTaskUpdatedEvent);
        builder.setUpdated(true);
        return builder.build();
    }

    private void addUserTaskCreatedInfo(UserTaskCreatedOrUpdatedEvent.Builder builder, UserTaskCreatedEvent userTaskCreatedEvent){
        // required parameters
        builder.setId(userTaskCreatedEvent.getId());
        builder.setApiVersion(API_VERSION);
        builder.setUserTaskId(userTaskCreatedEvent.getUserTaskId());
        builder.setTimestamp(mapTimeStamp(userTaskCreatedEvent.getTimestamp()));
        builder.setBpmnProcessId(userTaskCreatedEvent.getBpmnProcessId());
        builder.setTaskDefinition(userTaskCreatedEvent.getTaskDefinition());
        builder.putAllTitle(userTaskCreatedEvent.getTitle());
        builder.setWorkflowModuleId(userTaskCreatedEvent.getWorkflowModuleId());
        builder.setUiUriPath(userTaskCreatedEvent.getUiUriPath());
        builder.setUiUriType(userTaskCreatedEvent.getUiUriType().getValue());

        // optional parameters
        Optional.ofNullable(userTaskCreatedEvent.getInitiator())
                .ifPresent(builder::setInitiator);
        Optional.ofNullable(userTaskCreatedEvent.getSource())
                .ifPresent(builder::setSource);
        Optional.ofNullable(userTaskCreatedEvent.getWorkflowModuleId())
                .ifPresent(builder::setWorkflowModuleId);
        Optional.ofNullable(userTaskCreatedEvent.getComment())
                .ifPresent(builder::setComment);
        Optional.ofNullable(userTaskCreatedEvent.getBpmnProcessVersion())
                .ifPresent(builder::setBpmnProcessVersion);
        Optional.ofNullable(userTaskCreatedEvent.getWorkflowTitle())
                .ifPresent(builder::putAllWorkflowTitle);
        Optional.ofNullable(userTaskCreatedEvent.getWorkflowId())
                .ifPresent(builder::setWorkflowId);
        Optional.ofNullable(userTaskCreatedEvent.getSubWorkflowId())
                .ifPresent(builder::setSubWorkflowId);
        Optional.ofNullable(userTaskCreatedEvent.getBusinessId())
                .ifPresent(builder::setBusinessId);
        Optional.ofNullable(userTaskCreatedEvent.getBpmnTaskId())
                .ifPresent(builder::setBpmnTaskId);
        Optional.ofNullable(userTaskCreatedEvent.getTaskDefinitionTitle())
                .ifPresent(builder::putAllTaskDefinitionTitle);
        Optional.ofNullable(userTaskCreatedEvent.getAssignee())
                .ifPresent(builder::setAssignee);
        Optional.ofNullable(userTaskCreatedEvent.getCandidateGroups())
                .ifPresent(builder::addAllCandidateGroups);
        Optional.ofNullable(userTaskCreatedEvent.getCandidateUsers())
                .ifPresent(builder::addAllCandidateUsers);
        Optional.ofNullable(userTaskCreatedEvent.getExcludedCandidateUsers())
                .ifPresent(builder::addAllExcludedCandidateUsers);
        Optional.ofNullable(userTaskCreatedEvent.getDueDate())
                .map(this::mapTimeStamp)
                .ifPresent(builder::setDueDate);
        Optional.ofNullable(userTaskCreatedEvent.getFollowUpDate())
                .map(this::mapTimeStamp)
                .ifPresent(builder::setFollowUpDate);
        Optional.ofNullable(userTaskCreatedEvent.getDetails())
                .map(this::mapDetailsToProtobuf)
                .ifPresent(builder::setDetails);
        Optional.ofNullable(userTaskCreatedEvent.getDetailsFulltextSearch())
                .ifPresent(builder::setDetailsFulltextSearch);
    }


    public io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCompletedEvent map(
            UserTaskCompletedEvent userTaskCompletedEvent){

        io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCompletedEvent.Builder builder =
                io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCompletedEvent.newBuilder();

        builder.setId(userTaskCompletedEvent.getEventId());
        builder.setApiVersion(API_VERSION);
        builder.setUserTaskId(userTaskCompletedEvent.getUserTaskId());
        builder.setTimestamp(mapTimeStamp(userTaskCompletedEvent.getTimestamp()));

        // optional parameters
        Optional.ofNullable(userTaskCompletedEvent.getInitiator())
                .ifPresent(builder::setInitiator);
        Optional.ofNullable(userTaskCompletedEvent.getSource())
                .ifPresent(builder::setSource);
        Optional.ofNullable(userTaskCompletedEvent.getComment())
                .ifPresent(builder::setComment);

        return builder.build();
    }

    public io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskActivatedEvent map(UserTaskActivatedEvent userTaskEvent){
        io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskActivatedEvent.Builder builder =
                io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskActivatedEvent.newBuilder();

        builder.setId(userTaskEvent.getEventId());
        builder.setApiVersion(API_VERSION);
        builder.setUserTaskId(userTaskEvent.getUserTaskId());
        builder.setTimestamp(mapTimeStamp(userTaskEvent.getTimestamp()));

        // optional parameters
        Optional.ofNullable(userTaskEvent.getInitiator())
                .ifPresent(builder::setInitiator);
        Optional.ofNullable(userTaskEvent.getSource())
                .ifPresent(builder::setSource);
        Optional.ofNullable(userTaskEvent.getComment())
                .ifPresent(builder::setComment);

        return builder.build();
    }


    public io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskSuspendedEvent map(UserTaskSuspendedEvent userTaskEvent){
        io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskSuspendedEvent.Builder builder =
                io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskSuspendedEvent.newBuilder();

        builder.setId(userTaskEvent.getEventId());
        builder.setApiVersion(API_VERSION);
        builder.setUserTaskId(userTaskEvent.getUserTaskId());
        builder.setTimestamp(mapTimeStamp(userTaskEvent.getTimestamp()));

        // optional parameters
        Optional.ofNullable(userTaskEvent.getInitiator())
                .ifPresent(builder::setInitiator);
        Optional.ofNullable(userTaskEvent.getSource())
                .ifPresent(builder::setSource);
        Optional.ofNullable(userTaskEvent.getComment())
                .ifPresent(builder::setComment);

        return builder.build();
    }


    public io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCancelledEvent map(UserTaskCancelledEvent userTaskEvent){
        io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCancelledEvent.Builder builder =
                io.vanillabp.cockpit.bpms.api.protobuf.v1.UserTaskCancelledEvent.newBuilder();

        builder.setId(userTaskEvent.getEventId());
        builder.setApiVersion(API_VERSION);
        builder.setUserTaskId(userTaskEvent.getUserTaskId());
        builder.setTimestamp(mapTimeStamp(userTaskEvent.getTimestamp()));

        // optional parameters
        Optional.ofNullable(userTaskEvent.getInitiator())
                .ifPresent(builder::setInitiator);
        Optional.ofNullable(userTaskEvent.getSource())
                .ifPresent(builder::setSource);
        Optional.ofNullable(userTaskEvent.getComment())
                .ifPresent(builder::setComment);

        return builder.build();
    }


    public Timestamp mapTimeStamp(OffsetDateTime value) {
        Instant instant = value.toInstant();
        return Timestamp.newBuilder()
                .setNanos(instant.getNano())
                .setSeconds(instant.getEpochSecond())
                .build();
    }

    public DetailsMap mapDetailsToProtobuf(
            final Map details) {

        final var tree = objectMapper.valueToTree(details);
        return DetailsConverter.mapDetailsJsonToProtobuf(tree);

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy