use of io.automatiko.engine.api.workflow.workitem.LifeCyclePhase 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);
}
use of io.automatiko.engine.api.workflow.workitem.LifeCyclePhase in project automatiko-engine by automatiko-io.
the class HumanTaskLifeCycleWithEmail method transitionTo.
@Override
public Map<String, Object> transitionTo(WorkItem workItem, WorkItemManager manager, Transition<Map<String, Object>> transition) {
Map<String, Object> data = super.transitionTo(workItem, manager, transition);
LifeCyclePhase targetPhase = phaseById(transition.phase());
if (targetPhase.id().equals(Active.ID)) {
sendEmail(workItem);
}
return data;
}
use of io.automatiko.engine.api.workflow.workitem.LifeCyclePhase in project automatiko-engine by automatiko-io.
the class PredictionAwareHumanTaskLifeCycle method transitionTo.
@Override
public Map<String, Object> transitionTo(WorkItem workItem, WorkItemManager manager, Transition<Map<String, Object>> transition) {
LifeCyclePhase targetPhase = phaseById(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());
}
HumanTaskWorkItemImpl humanTaskWorkItem = (HumanTaskWorkItemImpl) workItem;
if (targetPhase.id().equals(Active.ID)) {
PredictionOutcome outcome = predictionService.predict(workItem, workItem.getParameters());
logger.debug("Prediction service returned confidence level {} for work item {}", outcome.getConfidenceLevel(), humanTaskWorkItem.getId());
if (outcome.isCertain()) {
humanTaskWorkItem.getResults().putAll(outcome.getData());
logger.debug("Prediction service is certain (confidence level {}) on the outputs, completing work item {}", outcome.getConfidenceLevel(), humanTaskWorkItem.getId());
((DefaultWorkItemManager) manager).internalCompleteWorkItem(humanTaskWorkItem);
return outcome.getData();
} else if (outcome.isPresent()) {
logger.debug("Prediction service is NOT certain (confidence level {}) on the outputs, setting recommended outputs on work item {}", outcome.getConfidenceLevel(), humanTaskWorkItem.getId());
humanTaskWorkItem.getResults().putAll(outcome.getData());
}
}
// prediction service does work only on activating tasks
Map<String, Object> data = super.transitionTo(workItem, manager, transition);
if (targetPhase.id().equals(Complete.ID)) {
// upon actual transition train the data if it's completion phase
predictionService.train(humanTaskWorkItem, workItem.getParameters(), data);
}
return data;
}
Aggregations