protected final Context generate()

in spring-ai-alibaba-graph/spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/DiagramGenerator.java [191:270]


	protected final Context generate(StateGraph.Nodes nodes, StateGraph.Edges edges, Context ctx) {

		appendHeader(ctx);

		for (var n : nodes.elements) {

			if (n instanceof SubGraphNode subGraphNode) {

				@SuppressWarnings("unchecked")
				var subGraph = (StateGraph) subGraphNode.subGraph();
				Context subgraphCtx = generate(subGraph.nodes, subGraph.edges,
						Context.builder()
							.title(n.id())
							.printConditionalEdge(ctx.printConditionalEdge)
							.isSubGraph(true)
							.build());
				ctx.sb().append(subgraphCtx);
			}
			else {
				declareNode(ctx, n.id());
			}
		}

		final int[] conditionalEdgeCount = { 0 };

		edges.elements.stream()
			.filter(e -> !Objects.equals(e.sourceId(), START))
			.filter(e -> !e.isParallel())
			.forEach(e -> {
				if (e.target().value() != null) {
					conditionalEdgeCount[0] += 1;
					commentLine(ctx, !ctx.printConditionalEdge());
					declareConditionalEdge(ctx, conditionalEdgeCount[0]);
				}
			});

		var edgeStart = edges.elements.stream()
			.filter(e -> Objects.equals(e.sourceId(), START))
			.findFirst()
			.orElseThrow();
		if (edgeStart.isParallel()) {
			edgeStart.targets().forEach(target -> {
				call(ctx, START, target.id(), CallStyle.START);
			});
		}
		else if (edgeStart.target().id() != null) {
			call(ctx, START, edgeStart.target().id(), CallStyle.START);
		}
		else if (edgeStart.target().value() != null) {
			String conditionName = "startcondition";
			commentLine(ctx, !ctx.printConditionalEdge());
			declareConditionalStart(ctx, conditionName);
			edgeCondition(ctx, edgeStart.target().value(), START, conditionName);
		}

		conditionalEdgeCount[0] = 0; // reset

		edges.elements.stream().filter(e -> !Objects.equals(e.sourceId(), START)).forEach(v -> {

			if (v.isParallel()) {
				v.targets().forEach(target -> {
					call(ctx, v.sourceId(), target.id(), CallStyle.PARALLEL);
				});
			}
			else if (v.target().id() != null) {
				call(ctx, v.sourceId(), v.target().id(), CallStyle.DEFAULT);
			}
			else if (v.target().value() != null) {
				conditionalEdgeCount[0] += 1;
				String conditionName = format("condition%d", conditionalEdgeCount[0]);

				edgeCondition(ctx, v.targets().get(0).value(), v.sourceId(), conditionName);
			}
		});

		appendFooter(ctx);

		return ctx;

	}