
package org.jeecg.modules.workFlow.flowlong.engine.handler;

import org.jeecg.modules.workFlow.flowlong.engine.core.Execution;
import org.jeecg.modules.workFlow.flowlong.engine.core.FlowLongContext;
import org.jeecg.modules.workFlow.flowlong.engine.model.ConditionNode;
import org.jeecg.modules.workFlow.flowlong.engine.model.NodeModel;

import java.util.List;
import java.util.Optional;

/**
 * 流程执行条件节点处理器
 *

 */
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);
}
