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

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