This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch topology-external-endpoints
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5a778582da6566f5e6d5a815dc8e60ab85e81eae
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jun 2 11:47:38 2026 +0200

    Use dashed boxes for external nodes and fix URI matching
    
    External endpoint nodes now render with dashed borders (both ASCII
    and image) to visually distinguish them from route nodes.
    
    Fixed endpoint metric URI matching to use simple :// stripping
    instead of URISupport.normalizeUri which can throw exceptions and
    silently skip endpoints.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../apache/camel/diagram/TopologyAsciiRenderer.java    |  5 +++--
 .../apache/camel/diagram/TopologyImageRenderer.java    |  9 ++++++++-
 .../camel/impl/console/RouteTopologyDevConsole.java    | 18 +++++++++++++++---
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyAsciiRenderer.java
 
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyAsciiRenderer.java
index 398e08725d61..5f49104308c1 100644
--- 
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyAsciiRenderer.java
+++ 
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyAsciiRenderer.java
@@ -182,8 +182,9 @@ public class TopologyAsciiRenderer {
             return;
         }
 
-        char h = unicode ? UNI_H : '-';
-        char v = unicode ? UNI_V : '|';
+        boolean ext = isExternalNode(node);
+        char h = ext ? (unicode ? UNI_DASH_H : '-') : (unicode ? UNI_H : '-');
+        char v = ext ? (unicode ? UNI_DASH_V : ':') : (unicode ? UNI_V : '|');
 
         // Top border
         setChar(grid, row, col, unicode ? UNI_TL : '+');
diff --git 
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyImageRenderer.java
 
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyImageRenderer.java
index 414e884e2fe2..9a04390863d1 100644
--- 
a/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyImageRenderer.java
+++ 
b/components/camel-diagram/src/main/java/org/apache/camel/diagram/TopologyImageRenderer.java
@@ -141,11 +141,18 @@ public class TopologyImageRenderer {
 
             // Node box
             g.setColor(nodeColor);
-            g.setStroke(new BasicStroke(strokeWidth));
+            if (isExternalNode(node)) {
+                float[] dash = { 6 * strokeWidth, 4 * strokeWidth };
+                g.setStroke(
+                        new BasicStroke(strokeWidth, BasicStroke.CAP_BUTT, 
BasicStroke.JOIN_MITER, 10f, dash, 0f));
+            } else {
+                g.setStroke(new BasicStroke(strokeWidth));
+            }
             g.fillRoundRect(node.x, node.y, nw, node.height, arc, arc);
 
             g.setColor(nodeColor.brighter());
             g.drawRoundRect(node.x, node.y, nw, node.height, arc, arc);
+            g.setStroke(new BasicStroke(strokeWidth));
 
             // Text
             g.setColor(colors.getText());
diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteTopologyDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteTopologyDevConsole.java
index 38b6e36a74b4..cce9071f9b24 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteTopologyDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteTopologyDevConsole.java
@@ -183,7 +183,7 @@ public class RouteTopologyDevConsole extends 
AbstractDevConsole {
                 continue;
             }
             try {
-                String epUri = URISupport.normalizeUri(ep.uri());
+                String epUri = URISupport.stripQuery(ep.uri());
                 ManagedRouteMBean mrb = mcc.getManagedRoute(ep.routeId());
                 if (mrb == null) {
                     continue;
@@ -194,8 +194,8 @@ public class RouteTopologyDevConsole extends 
AbstractDevConsole {
                     if (sp == null) {
                         continue;
                     }
-                    String dest = 
URISupport.normalizeUri(URISupport.stripQuery(sp.getDestination()));
-                    if (epUri.equals(dest)) {
+                    String dest = URISupport.stripQuery(sp.getDestination());
+                    if (matchEndpointUri(epUri, dest)) {
                         String key = ep.routeId() + "|" + ep.uri();
                         long[] existing = metrics.get(key);
                         if (existing != null) {
@@ -213,4 +213,16 @@ public class RouteTopologyDevConsole extends 
AbstractDevConsole {
         return metrics;
     }
 
+    private static boolean matchEndpointUri(String uri1, String uri2) {
+        return stripDoubleSlash(uri1).equals(stripDoubleSlash(uri2));
+    }
+
+    private static String stripDoubleSlash(String uri) {
+        int idx = uri.indexOf("://");
+        if (idx > 0) {
+            return uri.substring(0, idx + 1) + uri.substring(idx + 3);
+        }
+        return uri;
+    }
+
 }

Reply via email to