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/05/14 08:31:00 UTC

(camel) 02/03: CAMEL-23514: Fix counter color positions after empty line removal

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

davsclaus pushed a commit to branch CAMEL-23514-ascii-diagram-metrics
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 645ed05340142aaf5dcad6174486dd848915c36c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu May 14 10:18:27 2026 +0200

    CAMEL-23514: Fix counter color positions after empty line removal
    
    Counter positions from the ASCII renderer use original grid row
    numbers, but empty lines are filtered out when building diagramLines.
    Remap the row indices to account for removed lines so counter
    coloring matches the correct positions in the TUI.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <no...@anthropic.com>
    Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
 .../dsl/jbang/core/commands/tui/CamelMonitor.java  | 23 ++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
index fe6d9cc64e20..f32c018f21a4 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
@@ -1407,11 +1407,26 @@ public class CamelMonitor extends CamelCommand {
             RouteDiagramAsciiRenderer asciiRenderer = new RouteDiagramAsciiRenderer(
                     RouteDiagramLayoutEngine.DEFAULT_BOX_WIDTH * RouteDiagramLayoutEngine.SCALE, true, metrics);
             String ascii = asciiRenderer.renderDiagram(layoutRoutes, currentY);
-            List<RouteDiagramAsciiRenderer.CounterPos> positions = new ArrayList<>(asciiRenderer.getCounterPositions());
+            List<RouteDiagramAsciiRenderer.CounterPos> origPositions = asciiRenderer.getCounterPositions();
+
+            // Build result lines, remapping counter positions to account for removed empty lines
+            String[] rawLines = ascii.split("\n", -1);
             List<String> result = new ArrayList<>();
-            for (String line : ascii.split("\n", -1)) {
-                if (!line.isEmpty()) {
-                    result.add(line);
+            int[] rowMapping = new int[rawLines.length];
+            int newRow = 0;
+            for (int i = 0; i < rawLines.length; i++) {
+                if (!rawLines[i].isEmpty()) {
+                    rowMapping[i] = newRow++;
+                    result.add(rawLines[i]);
+                } else {
+                    rowMapping[i] = -1;
+                }
+            }
+            List<RouteDiagramAsciiRenderer.CounterPos> positions = new ArrayList<>();
+            for (RouteDiagramAsciiRenderer.CounterPos cp : origPositions) {
+                if (cp.row() >= 0 && cp.row() < rowMapping.length && rowMapping[cp.row()] >= 0) {
+                    positions.add(new RouteDiagramAsciiRenderer.CounterPos(
+                            rowMapping[cp.row()], cp.col(), cp.length(), cp.type()));
                 }
             }
             applyDiagramResult(routeId, result, null, null, null, positions);