This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit d1f6907efc37517cea07432d210f1111edbb27bc Author: Claus Ibsen <[email protected]> AuthorDate: Fri Jul 10 16:31:19 2026 +0200 TUI: Fix selection index mismatch in getSelectionContext/getTableDataAsJson across 8 tabs Apply the same sort order used by the render path so that selectedIndex and row order in MCP/AI JSON responses match what the user sees on screen. - ConfigurationTab: sort via sortedProperties() in both methods - HistoryTab: apply reorderHistoryDepthFirst() in getSelectionContext - MavenDependenciesTab: sort via sortDep in both methods - ConsumersTab: sort via sortConsumer in getTableDataAsJson - SqlTraceTab: sort via sortTrace in getTableDataAsJson - InflightTab: sort via sortExchange in getTableDataAsJson - CircuitBreakerTab: sort via sortCb in getTableDataAsJson - HealthTab: filter via getFilteredHealthChecks and sort via sortHealth in getTableDataAsJson Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java | 4 +++- .../camel/dsl/jbang/core/commands/tui/ConfigurationTab.java | 4 ++-- .../apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java | 4 +++- .../org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java | 4 +++- .../org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java | 2 +- .../apache/camel/dsl/jbang/core/commands/tui/InflightTab.java | 4 +++- .../camel/dsl/jbang/core/commands/tui/MavenDependenciesTab.java | 9 ++++++--- .../apache/camel/dsl/jbang/core/commands/tui/SqlTraceTab.java | 4 +++- 8 files changed, 24 insertions(+), 11 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java index eedf97e70c36..4e210e6c3980 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java @@ -488,7 +488,9 @@ class CircuitBreakerTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "CircuitBreaker"); JsonArray rows = new JsonArray(); - for (CircuitBreakerInfo cb : info.circuitBreakers) { + List<CircuitBreakerInfo> sorted = new ArrayList<>(info.circuitBreakers); + sorted.sort(this::sortCb); + for (CircuitBreakerInfo cb : sorted) { JsonObject row = new JsonObject(); row.put("routeId", cb.routeId); row.put("id", cb.id); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java index 25d85eebbbfd..007a5e7139c5 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java @@ -370,7 +370,7 @@ class ConfigurationTab extends AbstractTableTab { if (info == null || info.configProperties.isEmpty()) { return null; } - List<String> items = info.configProperties.stream().map(p -> p.key).toList(); + List<String> items = sortedProperties(info).stream().map(p -> p.key).toList(); Integer sel = tableState.selected(); return new SelectionContext("table", items, sel != null ? sel : -1, items.size(), "Configuration"); } @@ -455,7 +455,7 @@ class ConfigurationTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "Configuration"); JsonArray rows = new JsonArray(); - for (ConfigProperty cp : info.configProperties) { + for (ConfigProperty cp : sortedProperties(info)) { JsonObject row = new JsonObject(); row.put("key", cp.key); row.put("value", cp.value); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java index c6e326a69a70..c3152dac3e23 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java @@ -385,7 +385,9 @@ class ConsumersTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "Consumers"); JsonArray rows = new JsonArray(); - for (ConsumerInfo ci : info.consumers) { + List<ConsumerInfo> sorted = new ArrayList<>(info.consumers); + sorted.sort(this::sortConsumer); + for (ConsumerInfo ci : sorted) { JsonObject row = new JsonObject(); row.put("id", ci.id); row.put("uri", ci.uri); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java index 4b6a0dcf5b89..3fe734b5bc08 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java @@ -296,7 +296,9 @@ class HealthTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "Health"); JsonArray rows = new JsonArray(); - for (HealthCheckInfo hi : info.healthChecks) { + List<HealthCheckInfo> checks = new ArrayList<>(getFilteredHealthChecks(info)); + checks.sort(this::sortHealth); + for (HealthCheckInfo hi : checks) { JsonObject row = new JsonObject(); row.put("group", hi.group); row.put("name", hi.name); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java index 572b6b4592fa..831dc3b69b1d 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java @@ -2276,7 +2276,7 @@ class HistoryTab extends AbstractTab { if (historyEntries.isEmpty()) { return null; } - List<String> items = historyEntries.stream() + List<String> items = reorderHistoryDepthFirst(historyEntries).stream() .map(h -> h.exchangeId != null ? h.exchangeId : "") .toList(); Integer sel = historyTableState.selected(); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java index 6d5b49859dae..e38f1da51b30 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java @@ -293,7 +293,9 @@ class InflightTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "Inflight"); JsonArray rows = new JsonArray(); - for (InflightInfo ii : info.inflightExchanges) { + List<InflightInfo> sorted = new ArrayList<>(info.inflightExchanges); + sorted.sort(this::sortExchange); + for (InflightInfo ii : sorted) { JsonObject row = new JsonObject(); row.put("exchangeId", ii.exchangeId); row.put("fromRouteId", ii.fromRouteId); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MavenDependenciesTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MavenDependenciesTab.java index ad309649aa5a..b365db6d3f12 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MavenDependenciesTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MavenDependenciesTab.java @@ -464,7 +464,9 @@ class MavenDependenciesTab extends AbstractTableTab { if (filteredEntries.isEmpty()) { return null; } - List<String> items = filteredEntries.stream().map(DependencyLoader.DepEntry::display).toList(); + List<DependencyLoader.DepEntry> sorted = new ArrayList<>(filteredEntries); + sorted.sort(this::sortDep); + List<String> items = sorted.stream().map(DependencyLoader.DepEntry::display).toList(); Integer sel = tableState.selected(); return new SelectionContext("table", items, sel != null ? sel : -1, items.size(), "Maven Dependencies"); } @@ -563,10 +565,11 @@ class MavenDependenciesTab extends AbstractTableTab { @Override public JsonObject getTableDataAsJson() { - List<DependencyLoader.DepEntry> entries = filteredEntries; - if (entries.isEmpty()) { + if (filteredEntries.isEmpty()) { return null; } + List<DependencyLoader.DepEntry> entries = new ArrayList<>(filteredEntries); + entries.sort(this::sortDep); JsonObject result = new JsonObject(); result.put("tab", "Maven Dependencies"); JsonArray rows = new JsonArray(); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SqlTraceTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SqlTraceTab.java index c4ec4d4802a5..55ade2ef52a2 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SqlTraceTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SqlTraceTab.java @@ -495,7 +495,9 @@ class SqlTraceTab extends AbstractTableTab { JsonObject result = new JsonObject(); result.put("tab", "SQL Trace"); JsonArray rows = new JsonArray(); - for (SqlTraceInfo si : info.sqlTraceStatements) { + List<SqlTraceInfo> sorted = new ArrayList<>(info.sqlTraceStatements); + sorted.sort(this::sortTrace); + for (SqlTraceInfo si : sorted) { JsonObject row = new JsonObject(); row.put("timestamp", si.timestamp); row.put("exchangeId", si.exchangeId);
