Files
SQLLint/SQLLinter/Infrastructure/Diagram/Models/BpmnDiagramExtensions.cs

35 lines
1.4 KiB
C#

namespace SQLLinter.Infrastructure.Diagram;
/// <summary>
/// Расширения для диаграммы BPMN
/// </summary>
public static class BpmnDiagramExtensions
{
/// <summary>
/// Добавления отсутсвующих связей между процессами и их подпроцессами
/// </summary>
/// <param name="diagram"></param>
public static void AddMissingProcessEdges(this BpmnDiagram diagram)
{
foreach (var subprocess in diagram.Processes
.SelectMany(p => p.Nodes.Select(n => new { node = n, procId = p.Id }))
.Where(n => n.node.Type == BpmnNodeType.Subprocess && !string.IsNullOrEmpty(n.node.SubprocessId) && n.node.SubprocessId != n.procId)
.Select(n => n.node)
)
{
if (diagram.Processes.Any(p => p.Id == subprocess.SubprocessId)
&& !diagram.GlobalEdges.Any(t => t.From == subprocess.Id && t.To == subprocess.SubprocessId)
)
{
// Добавить пунктирный край от узла подпроцесса к началу подпроцесса
diagram.GlobalEdges.Add(new BpmnEdge
{
From = subprocess.Id,
To = subprocess.SubprocessId + "_start",
ArrowType = BpmnArrowType.Dashed,
});
}
}
}
}