We need to create validators for each status. The validator will check if transition from current state is allowed or not. All validators are injected into WorkflowExecutionValidator. private List<Validator> validators WorkflowExecutionValidator will pick up an appropriate validator from a list and check if transition is allowed. Validators are implemented for each workflow execution status Validators are applied in production code
@Override public boolean canTransitionTo(WorkflowExecutionStatus status) { return validators.stream().filter(validator -> validator.getStatus() == status).findAny().get().validate(this); } public class WorkflowExecutionValidator extends Validator<WorkflowExecution> { @Override public boolean validate(WorkflowExecution workflowExecution) { return workflowExecution.getStatus() == WorkflowExecutionStatus.PAUSED; } }