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;

Reply via email to