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

org.cloudfoundry.multiapps.controller.process.util.HookProcessGetter Maven / Gradle / Ivy

There is a newer version: 1.183.0
Show newest version
package org.cloudfoundry.multiapps.controller.process.util;

import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.Date;

import jakarta.inject.Inject;
import jakarta.inject.Named;

import org.cloudfoundry.multiapps.common.util.JsonUtil;
import org.cloudfoundry.multiapps.controller.persistence.model.ImmutableProgressMessage;
import org.cloudfoundry.multiapps.controller.persistence.model.ProgressMessage.ProgressMessageType;
import org.cloudfoundry.multiapps.controller.persistence.services.ProgressMessageService;
import org.cloudfoundry.multiapps.controller.process.Constants;
import org.cloudfoundry.multiapps.controller.process.flowable.FlowableFacade;
import org.cloudfoundry.multiapps.mta.model.Hook;
import org.flowable.engine.delegate.DelegateExecution;

@Named("hookProcessGetter")
public class HookProcessGetter {

    private final ProgressMessageService progressMessageService;
    private final FlowableFacade flowableFacade;

    @Inject
    public HookProcessGetter(ProgressMessageService progressMessageService, FlowableFacade flowableFacade) {
        this.progressMessageService = progressMessageService;
        this.flowableFacade = flowableFacade;
    }

    public String get(String hookForExecutionString, DelegateExecution execution) {
        Hook hookForExecution = JsonUtil.fromJson(hookForExecutionString, Hook.class);
        if (TaskHookParser.HOOK_TYPE_TASK.equals(hookForExecution.getType())) {
            return Constants.EXECUTE_HOOK_TASKS_SUB_PROCESS_ID;
        }

        String errorMessage = MessageFormat.format("Unsupported hook type \"{0}\"", hookForExecution.getType());
        preserveErrorMessage(execution, errorMessage);

        throw new IllegalStateException(errorMessage);
    }

    private void preserveErrorMessage(DelegateExecution execution, String errorMessage) {
        progressMessageService.add(ImmutableProgressMessage.builder()
                                                           .processId(flowableFacade.getProcessInstanceId(execution.getId()))
                                                           .taskId(execution.getCurrentActivityId())
                                                           .type(ProgressMessageType.ERROR)
                                                           .text(errorMessage)
                                                           .timestamp(getCurrentTime())
                                                           .build());
    }

    protected Date getCurrentTime() {
        return new Timestamp(System.currentTimeMillis());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy