content: /*
   * Copyright 2023-2025 Licensed under the Dual Licensing
   * website: https://aizuda.com
   */
  package com.aizuda.bpm.engine.handler;
  
  import com.aizuda.bpm.engine.core.Execution;
  import com.aizuda.bpm.engine.core.FlowLongContext;
  import com.aizuda.bpm.engine.model.ConditionNode;
  import com.aizuda.bpm.engine.model.NodeModel;
  
  import java.util.List;
  import java.util.Optional;
  
  /**
   * 流程执行条件节点处理器
   *
   * <p>
   * <a href="https://aizuda.com">官网</a>尊重知识产权，不允许非法使用，后果自负
   * </p>
   *
   * @author hubin
   * @since 1.0
   */
  public interface ConditionNodeHandler {
  
      /**
       * <p>
       * 获取满足条件的条件节点
       * </p>
       * <p>
       * 子类需要实现的方法，来处理具体的操作
       * </p>
       *
       * @param flowLongContext 流程引擎上下文
       * @param execution       执行对象
       * @param nodeModel       节点模型
       * @return true 成功 false 失败
       */
      Optional<ConditionNode> getConditionNode(FlowLongContext flowLongContext, Execution execution, NodeModel nodeModel);
  
      /**
       * <p>
       * 获取满足条件的路由节点
       * </p>
       * <p>
       * 子类需要实现的方法，来处理具体的操作
       * </p>
       *
       * @param flowLongContext 流程引擎上下文
       * @param execution       执行对象
       * @param nodeModel       节点模型
       * @return true 成功 false 失败
       */
      Optional<ConditionNode> getRouteNode(FlowLongContext flowLongContext, Execution execution, NodeModel nodeModel);
  
      /**
       * <p>
       * 获取满足条件的所有包容分支节点
       * </p>
       * <p>
       * 子类需要实现的方法，来处理具体的操作
       * </p>
       *
       * @param flowLongContext 流程引擎上下文
       * @param execution       执行对象
       * @param nodeModel       节点模型
       * @return true 成功 false 失败
       */
      Optional<List<ConditionNode>> getInclusiveNodes(FlowLongContext flowLongContext, Execution execution, NodeModel nodeModel);
  }
  