package cn.axzo.workflow.core.service.support.forecast;

import org.flowable.bpmn.model.FlowElement;

import java.util.List;

/**
 * 流程节点顺序预测接口
 *
 * @author wangli
 * @since 2023/10/10 10:29
 */
public interface Forecast<T extends FlowElement> {

    /**
     * 用于判断是否支持处理指定节点类型
     *
     * @param t Flowable 的子类
     * @return
     */
    Boolean support(FlowElement flowElement);

    /**
     * 通过给定的源 FlowElement 结合 Flowable 的条件评估器去计算符合条件的下一级节点
     * <p>
     * 由于标准的 BPMN 协议中很多节点都是允许多条路并行走的, 所以接口返回模型定义为 List 集合,
     * 但实际上, 按照现在的业务定义, 只允许存在 0 或 1 个下一级节点.
     *
     * @param sourceFlowElement 当前节点, 实现类中该方法则是通过 getOutgoing 获取出口节点集合, 并调用对应类型中的 calcRealOutgoingNodes 查找真正的下级节点
     * @param instance          流程运行实例
     * @return
     */
    List<FlowElement> nextFlowElement(FlowElement sourceFlowElement, String processInstanceId);
}
