示例#1
0
        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);
        }
示例#2
0
        private FlowDiagramNode AddFlowDiagramNode(int stepIndex, IFlowDefinition flowDefinition,
                                                   FlowDiagramNode previousNode, FlowDiagram flowDiagram, ref int endCount)
        {
            var flowStep = flowDefinition.Steps[stepIndex];

            switch (flowStep)
            {
            case ActivityFlowStep _:
                var activityNode = AddFlowDiagramActivityNode(stepIndex, flowDefinition, flowDiagram, flowStep, ref endCount);
                previousNode = activityNode;
                break;

            case LabelFlowStep _:
                var labelNode = AddFlowDiagramLabelNode(stepIndex, flowDefinition, flowDiagram, flowStep, ref endCount);
                previousNode = labelNode;
                break;

            case EndFlowStep _:
                var endFlowNode = AddFlowDiagramEndNode(flowDiagram, ref endCount);
                previousNode.Links.Add(new FlowDiagramLink {
                    TargetNodeName = endFlowNode.Name
                });
                break;

            case GotoFlowStep gotoFlowStep:
                previousNode.Links.Add(new FlowDiagramLink {
                    TargetNodeName = gotoFlowStep.NextStepName
                });
                break;

            case DecisionFlowStepBase decisionFlowStep:
                var decisionNode = AddFlowDiagramDecisionNode(stepIndex, flowDefinition, flowDiagram, flowStep, decisionFlowStep, ref endCount);
                previousNode = decisionNode;
                break;

            default:
                throw new FlowException($"Unhandled flow step type: {flowStep.GetType().FullName}");
            }

            return(previousNode);
        }
示例#3
0
        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);
        }