![JAR search and dependency download from the Maven repository](/logo.png)
brainslug.flow.execution.node.ChoiceNodeExecutor Maven / Gradle / Ivy
The newest version!
package brainslug.flow.execution.node;
import brainslug.flow.context.ExecutionContext;
import brainslug.flow.execution.expression.ExpressionEvaluator;
import brainslug.flow.node.ChoiceDefinition;
import brainslug.flow.path.ThenDefinition;
public class ChoiceNodeExecutor extends DefaultNodeExecutor {
private ExpressionEvaluator expressionEvaluator;
public ChoiceNodeExecutor(ExpressionEvaluator expressionEvaluator) {
this.expressionEvaluator = expressionEvaluator;
}
@Override
public FlowNodeExecutionResult execute(ChoiceDefinition choiceDefinition, ExecutionContext execution) {
for (ThenDefinition thenPath : choiceDefinition.getThenPaths()) {
if (expressionEvaluator.evaluate(thenPath.getExpression(), execution, Boolean.class)) {
return new FlowNodeExecutionResult(choiceDefinition).withNext(thenPath.getFirstPathNode());
}
}
return tryOtherwise(choiceDefinition, execution);
}
FlowNodeExecutionResult tryOtherwise(ChoiceDefinition choiceDefinition, ExecutionContext execution) {
if (choiceDefinition.getOtherwisePath().isPresent()) {
return new FlowNodeExecutionResult(choiceDefinition).withNext(choiceDefinition.getOtherwisePath().get().getFirstPathNode());
} else {
throw new IllegalStateException("no choice path was eligible for execution and no default path was set. " + choiceDefinition + ", content: " + execution);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy