public FlowDiagram BuildDiagram(Type requestType, Type responseType, IFlowDefinition flowDefinition, bool isOverride = false) { var requestInfo = new FlowRequestInfo { RequestType = requestType, Description = GetDescriptionAttributeValue(requestType), Properties = GetFlowPropertyInfos(requestType), }; var responseInfo = new FlowResponseInfo { ResponseType = responseType, Description = GetDescriptionAttributeValue(responseType), Properties = GetFlowPropertyInfos(responseType), }; var flowDiagram = new FlowDiagram(flowDefinition.Criteria, requestInfo, responseInfo, isOverride); var startNode = flowDiagram.AddNode(new FlowDiagramNode { NodeType = FlowDiagramNodeType.Start, Name = "Start" }); var endCount = AddFlowDiagramDefaultLink(startNode, -1, flowDefinition, flowDiagram, 0); var previousNode = startNode; for (var stepIndex = 0; stepIndex < flowDefinition.Steps.Count; stepIndex++) { previousNode = AddFlowDiagramNode(stepIndex, flowDefinition, previousNode, flowDiagram, ref endCount); } return(flowDiagram); }
private FlowDiagramNode AddFlowDiagramDecisionNode(int stepIndex, IFlowDefinition flowDefinition, FlowDiagram flowDiagram, FlowStep flowStep, DecisionFlowStepBase decisionFlowStep, ref int endCount) { var decisionRequest = GetFlowStepRequest(flowStep.Definition); var decisionNode = flowDiagram.AddNode(new FlowDiagramNode { NodeType = FlowDiagramNodeType.Decision, Name = flowStep.Name, Text = GetFlowDiagramNodeText(flowStep, decisionRequest), OverrideKey = flowStep.OverrideKey?.Value, OverrideDescription = flowStep.OverrideKey?.Description, }); SetFlowDiagramNodeInputSummaries(flowStep, decisionRequest, decisionNode); foreach (var branch in decisionFlowStep.Branches) { if (branch.IsUnhandled) { continue; } var linkCriteria = branch.Targets?.ToList().ConvertAll(c => c?.ToString()); if (branch.IsEnd) { var endNode = AddFlowDiagramEndNode(flowDiagram, ref endCount); decisionNode.Links.Add(new FlowDiagramLink { TargetNodeName = endNode.Name, Criteria = linkCriteria }); } else { if (string.IsNullOrEmpty(branch.NextStepName)) { endCount = AddFlowDiagramDefaultLink(decisionNode, stepIndex, flowDefinition, flowDiagram, endCount); } else { decisionNode.Links.Add(new FlowDiagramLink { TargetNodeName = branch.NextStepName, Criteria = linkCriteria }); } } } return(decisionNode); }
private static FlowDiagramNode AddFlowDiagramEndNode(FlowDiagram flowDiagram, ref int endCount) { endCount += 1; var endNode = flowDiagram.AddNode(new FlowDiagramNode { NodeType = FlowDiagramNodeType.End, Name = "End_" + endCount }); return(endNode); }
private FlowDiagramNode AddFlowDiagramLabelNode(int stepIndex, IFlowDefinition flowDefinition, FlowDiagram flowDiagram, FlowStep flowStep, ref int endCount) { var labelNode = flowDiagram.AddNode(new FlowDiagramNode { NodeType = FlowDiagramNodeType.Label, Name = flowStep.Name, Text = flowStep.Text ?? flowStep.Name }); endCount = AddFlowDiagramDefaultLink(labelNode, stepIndex, flowDefinition, flowDiagram, endCount); return(labelNode); }
private FlowDiagramNode AddFlowDiagramActivityNode(int stepIndex, IFlowDefinition flowDefinition, FlowDiagram flowDiagram, FlowStep flowStep, ref int endCount) { var activityRequest = GetFlowStepRequest(flowStep.Definition); var activityNode = flowDiagram.AddNode(new FlowDiagramNode { NodeType = FlowDiagramNodeType.Activity, Name = flowStep.Name, Text = GetFlowDiagramNodeText(flowStep, activityRequest), OverrideKey = flowStep.OverrideKey?.Value, OverrideDescription = flowStep.OverrideKey?.Description, }); SetFlowDiagramNodeInputSummaries(flowStep, activityRequest, activityNode); activityNode.OutputBindings = GetBoundOutputSummary(flowStep, activityRequest); endCount = AddFlowDiagramDefaultLink(activityNode, stepIndex, flowDefinition, flowDiagram, endCount); return(activityNode); }