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; + } + }
