This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch feature/CAMEL-23672-tui-diagram in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3dc0a4a19e17d5a26a07ea1056ec4db6e062936d Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jun 4 10:17:41 2026 +0200 CAMEL-23672: camel-tui - Enrich route nodes with external flag from topology data Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../route-topology/route-topology.camel.yaml | 2 ++ .../jbang/core/commands/tui/DiagramSupport.java | 34 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/examples/route-topology/route-topology.camel.yaml b/dsl/camel-jbang/camel-jbang-core/src/main/resources/examples/route-topology/route-topology.camel.yaml index a89d27b967de..b1338b96b462 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/examples/route-topology/route-topology.camel.yaml +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/examples/route-topology/route-topology.camel.yaml @@ -83,6 +83,7 @@ message: "Fulfilling order: ${body}" - to: uri: kafka:warehouse-shipments + description: Ship to Warehouse # Kafka consumer: sends notifications via external email service - route: @@ -95,3 +96,4 @@ message: "Sending notification for: ${body}" - to: uri: kafka:email-outbox + description: Send Email diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java index 5a8b3b7e4913..d418dd15937b 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java @@ -56,6 +56,7 @@ import org.apache.camel.diagram.TopologyLayoutEngine.TopologyLayoutNode; import org.apache.camel.diagram.TopologyLayoutEngine.TopologyLayoutResult; import org.apache.camel.diagram.TopologyLayoutEngine.TopologyNodeInfo; import org.apache.camel.dsl.jbang.core.common.PathUtils; +import org.apache.camel.util.json.JsonArray; import org.apache.camel.util.json.JsonObject; import static org.apache.camel.dsl.jbang.core.commands.tui.MonitorContext.*; @@ -875,6 +876,25 @@ class DiagramSupport { return descriptions; } + private static Set<String> parseExternalUris(JsonObject topoJson) { + Set<String> uris = new HashSet<>(); + JsonArray arr = topoJson.getJsonArray("externalEndpoints"); + if (arr == null) { + return uris; + } + for (int i = 0; i < arr.size(); i++) { + JsonObject eo = arr.getJsonObject(i); + String uri = eo.getString("uri"); + if (uri != null) { + String base = stripQueryParams(uri); + if (base != null) { + uris.add(base); + } + } + } + return uris; + } + private static String findFromUri(RouteDiagramLayoutEngine.LayoutRoute lr) { for (var node : lr.nodes) { if ("from".equals(node.type) && node.treeNode != null) { @@ -1101,6 +1121,20 @@ class DiagramSupport { if (topoJson != null) { List<RouteDiagramLayoutEngine.RouteInfo> routes = RouteDiagramHelper.parseRoutes(topoJson); if (!routes.isEmpty()) { + // Enrich route nodes with remote flag from topology external endpoints + Set<String> externalUris = parseExternalUris(topoJson); + if (!externalUris.isEmpty()) { + for (RouteDiagramLayoutEngine.RouteInfo r : routes) { + for (RouteDiagramLayoutEngine.NodeInfo ni : r.nodes) { + if (!ni.remote) { + String baseUri = getBaseUri(ni); + if (baseUri != null && externalUris.contains(baseUri)) { + ni.remote = true; + } + } + } + } + } RouteDiagramLayoutEngine.NodeLabelMode labelMode = showDescription ? RouteDiagramLayoutEngine.NodeLabelMode.DESCRIPTION : RouteDiagramLayoutEngine.NodeLabelMode.CODE;
