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 8556db812c0b7f3c72a3c5aed818db6eb136d966 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jun 4 11:46:20 2026 +0200 CAMEL-23672: camel-tui - Preload diagram data in background on integration select Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../dsl/jbang/core/commands/tui/CamelMonitor.java | 3 +++ .../jbang/core/commands/tui/DiagramSupport.java | 26 +++++++++++++++++++++- .../dsl/jbang/core/commands/tui/DiagramTab.java | 6 +++++ .../dsl/jbang/core/commands/tui/RoutesTab.java | 6 +++++ 4 files changed, 40 insertions(+), 1 deletion(-) 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 8d9b4c401823..8dd977adef0a 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 @@ -934,6 +934,9 @@ public class CamelMonitor extends CamelCommand { consumersTab.onIntegrationChanged(); circuitBreakerTab.onIntegrationChanged(); inflightTab.onIntegrationChanged(); + + // Preload diagram data in background so it's ready when the user switches tabs + routesTab.preloadDiagram(); } private void navigateUp() { 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 904266b1568a..b6cd417462f2 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 @@ -87,6 +87,7 @@ class DiagramSupport { private int topologyNodeWidth; private java.util.Map<String, RouteDiagramLayoutEngine.LayoutRoute> routeLayouts = Collections.emptyMap(); private String cachedPid; + private volatile boolean preloading; List<String> getLines() { return lines; @@ -311,6 +312,28 @@ class DiagramSupport { pendingSelectionRouteId = null; } + void preload(MonitorContext ctx, String pid) { + if (hasCachedData(pid)) { + return; + } + if (!beginLoad()) { + return; + } + preloading = true; + if (ctx.runner != null) { + ctx.runner.scheduler().execute(() -> { + try { + setTopologyMode(true); + loadAllDiagramsInBackground(ctx, pid, false, false); + } finally { + endLoad(); + } + }); + } else { + endLoad(); + } + } + void renderFooterHints(List<Span> spans) { hint(spans, "Esc", "close"); hint(spans, "↑↓←→", "scroll"); @@ -1191,9 +1214,10 @@ class DiagramSupport { return; } ctx.runner.runOnRenderThread(() -> { - if (!showDiagram) { + if (!showDiagram && !preloading) { return; } + preloading = false; cachedPid = pid; topologyLayout = finalTopoResult; topologyNodeWidth = finalNodeW; diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java index c293f444f309..bc9a88f79486 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java @@ -292,6 +292,12 @@ class DiagramTab implements MonitorTab { diagram.setTopologyMode(true); } + void preloadDiagram() { + if (ctx.selectedPid != null) { + diagram.preload(ctx, ctx.selectedPid); + } + } + @Override public void render(Frame frame, Rect area) { IntegrationInfo info = ctx.findSelectedIntegration(); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java index a4c129f0606a..12221cf9bd6d 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java @@ -403,6 +403,12 @@ class RoutesTab implements MonitorTab { routeTableState.select(0); } + void preloadDiagram() { + if (ctx.selectedPid != null) { + diagram.preload(ctx, ctx.selectedPid); + } + } + @Override public void render(Frame frame, Rect area) { IntegrationInfo info = ctx.findSelectedIntegration();
