Search in sources :

Example 1 with InvalidTransitionException

use of io.automatiko.engine.api.workflow.workitem.InvalidTransitionException in project automatiko-engine by automatiko-io.

the class BaseHumanTaskLifeCycle method transitionTo.

@Override
public Map<String, Object> transitionTo(WorkItem workItem, WorkItemManager manager, Transition<Map<String, Object>> transition) {
    logger.debug("Transition method invoked for work item {} to transition to {}, currently in phase {} and status {}", workItem.getId(), transition.phase(), workItem.getPhaseId(), workItem.getPhaseStatus());
    HumanTaskWorkItemImpl humanTaskWorkItem = (HumanTaskWorkItemImpl) workItem;
    LifeCyclePhase targetPhase = phases.get(transition.phase());
    if (targetPhase == null) {
        logger.debug("Target life cycle phase '{}' does not exist in {}", transition.phase(), this.getClass().getSimpleName());
        throw new InvalidLifeCyclePhaseException(transition.phase());
    }
    LifeCyclePhase currentPhase = phases.get(humanTaskWorkItem.getPhaseId());
    if (!targetPhase.canTransition(currentPhase)) {
        logger.debug("Target life cycle phase '{}' cannot transition from current state '{}'", targetPhase.id(), currentPhase.id());
        throw new InvalidTransitionException("Cannot transition from " + humanTaskWorkItem.getPhaseId() + " to " + targetPhase.id());
    }
    if (!targetPhase.id().equals(Active.ID) && !targetPhase.id().equals(Abort.ID) && !humanTaskWorkItem.enforce(transition.policies().toArray(new Policy[transition.policies().size()]))) {
        throw new NotAuthorizedException("User is not authorized to access task instance with id " + humanTaskWorkItem.getId());
    }
    humanTaskWorkItem.setPhaseId(targetPhase.id());
    humanTaskWorkItem.setPhaseStatus(targetPhase.status());
    targetPhase.apply(humanTaskWorkItem, transition);
    if (transition.data() != null) {
        logger.debug("Updating data for work item {}", targetPhase.id(), humanTaskWorkItem.getId());
        humanTaskWorkItem.getResults().putAll(transition.data());
    }
    logger.debug("Transition for work item {} to {} done, currently in phase {} and status {}", workItem.getId(), transition.phase(), workItem.getPhaseId(), workItem.getPhaseStatus());
    if (targetPhase.isCompleting()) {
        logger.debug("Target life cycle phase '{}' is completing, completing work item {}", targetPhase.id(), humanTaskWorkItem.getId());
        // since target life cycle phase is terminating completing work item
        ((DefaultWorkItemManager) manager).internalCompleteWorkItem(humanTaskWorkItem);
    } else if (targetPhase.isTerminating()) {
        logger.debug("Target life cycle phase '{}' is terminating, aborting work item {}", targetPhase.id(), humanTaskWorkItem.getId());
        ((DefaultWorkItemManager) manager).internalAbortWorkItem(humanTaskWorkItem);
    }
    return data(humanTaskWorkItem);
}
Also used : InvalidTransitionException(io.automatiko.engine.api.workflow.workitem.InvalidTransitionException) Policy(io.automatiko.engine.api.workflow.workitem.Policy) DefaultWorkItemManager(io.automatiko.engine.workflow.base.instance.impl.workitem.DefaultWorkItemManager) InvalidLifeCyclePhaseException(io.automatiko.engine.api.workflow.workitem.InvalidLifeCyclePhaseException) NotAuthorizedException(io.automatiko.engine.api.workflow.workitem.NotAuthorizedException) LifeCyclePhase(io.automatiko.engine.api.workflow.workitem.LifeCyclePhase)

Example 2 with InvalidTransitionException

use of io.automatiko.engine.api.workflow.workitem.InvalidTransitionException in project automatiko-engine by automatiko-io.

the class BaseExceptionHandlerTest method testMapInvalidTransitionException.

@Test
void testMapInvalidTransitionException() {
    Object response = tested.mapException(new InvalidTransitionException("message"));
    assertThat(response).isEqualTo(badRequestResponse);
}
Also used : InvalidTransitionException(io.automatiko.engine.api.workflow.workitem.InvalidTransitionException) Test(org.junit.jupiter.api.Test)

Aggregations

InvalidTransitionException (io.automatiko.engine.api.workflow.workitem.InvalidTransitionException)2 InvalidLifeCyclePhaseException (io.automatiko.engine.api.workflow.workitem.InvalidLifeCyclePhaseException)1 LifeCyclePhase (io.automatiko.engine.api.workflow.workitem.LifeCyclePhase)1 NotAuthorizedException (io.automatiko.engine.api.workflow.workitem.NotAuthorizedException)1 Policy (io.automatiko.engine.api.workflow.workitem.Policy)1 DefaultWorkItemManager (io.automatiko.engine.workflow.base.instance.impl.workitem.DefaultWorkItemManager)1 Test (org.junit.jupiter.api.Test)1