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();

Reply via email to