You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2026/06/04 10:36:54 UTC
(camel) 23/33: CAMEL-23672: camel-tui - Enrich route nodes with external flag from topology data
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 <cl...@gmail.com>
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 <no...@anthropic.com>
Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
.../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;