using Serein.Library.Api;
using Serein.Library.Entity;
using Serein.Library.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Serein.Library.Base
{
///
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
///
public abstract partial class NodeModelBase : IDynamicFlowNode
{
public NodeControlType ControlType { get; set; }
///
/// 方法描述,对应DLL的方法
///
public MethodDetails MethodDetails { get; set; }
///
/// 节点guid
///
public string Guid { get; set; }
///
/// 显示名称
///
public string DisplayName { get; set; }
///
/// 是否为起点控件
///
public bool IsStart { get; set; }
///
/// 运行时的上一节点
///
public NodeModelBase PreviousNode { get; set; }
///
/// 上一节点集合
///
public List PreviousNodes { get; set; } = new List();
///
/// 下一节点集合(真分支)
///
public List SucceedBranch { get; set; } = new List();
///
/// 下一节点集合(假分支)
///
public List FailBranch { get; set; } = new List();
///
/// 异常分支
///
public List ErrorBranch { get; set; } = new List();
///
/// 上游分支
///
public List UpstreamBranch { get; set; } = new List();
///
/// 当前执行状态(进入真分支还是假分支,异常分支在异常中确定)
///
public FlowStateType FlowState { get; set; } = FlowStateType.None;
///
/// 运行时的异常信息(仅在 FlowState 为 Error 时存在对应值)
///
public Exception RuningException { get; set; } = null;
///
/// 当前传递数据(执行了节点对应的方法,才会存在值)
///
public object FlowData { get; set; } = null;
public abstract Parameterdata[] GetParameterdatas();
public virtual NodeInfo ToInfo()
{
if (MethodDetails == null) return null;
var trueNodes = SucceedBranch.Select(item => item.Guid); // 真分支
var falseNodes = FailBranch.Select(item => item.Guid);// 假分支
var upstreamNodes = UpstreamBranch.Select(item => item.Guid);// 上游分支
var errorNodes = ErrorBranch.Select(item => item.Guid);// 异常分支
// 生成参数列表
Parameterdata[] parameterData = GetParameterdatas();
return new NodeInfo
{
Guid = Guid,
MethodName = MethodDetails?.MethodName,
Label = DisplayName ?? "",
Type = this.GetType().ToString(),
TrueNodes = trueNodes.ToArray(),
FalseNodes = falseNodes.ToArray(),
UpstreamNodes = upstreamNodes.ToArray(),
ParameterData = parameterData.ToArray(),
ErrorNodes = errorNodes.ToArray(),
};
}
}
}