diff --git a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspace.java b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspace.java index 588b3ae..47b4e90 100644 --- a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspace.java +++ b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspace.java @@ -1157,6 +1157,23 @@ public final class GuiConfigurationEditorWorkspace { updateLockState(status); } + /** + * Liest den aktuellen Scheduler-Status vom verdrahteten Use Case und reicht ihn an + * alle betroffenen Tabs weiter. + *

+ * Im Gegensatz zu einem direkten Lesen am unveränderlichen + * {@code GuiStartupContext} berücksichtigt diese Methode den nach einem + * erfolgreichen Datei-Öffnen erst zur Laufzeit verdrahteten Use Case + * (Auto-Load der zuletzt geladenen Konfiguration oder manuelles Öffnen). + * Ist kein Use Case verdrahtet, ist der Aufruf ein No-op. + *

+ * Muss auf dem JavaFX Application Thread aufgerufen werden. + */ + public void refreshSchedulerStatus() { + schedulerTab.currentSchedulerUseCase() + .ifPresent(uc -> onSchedulerStatusRefresh(uc.getStatus())); + } + /** * Aktualisiert den Sperr-Zustand des Konfig-Tabs anhand des aktuellen Scheduler-Status. *

diff --git a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiSchedulerTab.java b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiSchedulerTab.java index 9651bfe..d544507 100644 --- a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiSchedulerTab.java +++ b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiSchedulerTab.java @@ -146,6 +146,20 @@ public final class GuiSchedulerTab { startButton.setTooltip(null); } + /** + * Gibt den aktuell verdrahteten Scheduler-Use-Case zurück. + *

+ * Wird von der zentralen Status-Refresh-Timeline benötigt, weil der Use Case + * erst nach erfolgreichem Datei-Öffnen verfügbar wird (z. B. durch Auto-Load + * der zuletzt geladenen Konfiguration) und damit nicht im + * unveränderlichen {@code GuiStartupContext} steht. + * + * @return aktueller Use Case oder {@code Optional.empty()} wenn keiner verdrahtet ist + */ + public Optional currentSchedulerUseCase() { + return schedulerUseCase; + } + /** * Aktualisiert alle Tab-Elemente anhand des aktuellen Scheduler-Status. *

diff --git a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/PdfUmbenennerGuiApplication.java b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/PdfUmbenennerGuiApplication.java index df11ba0..b8103d4 100644 --- a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/PdfUmbenennerGuiApplication.java +++ b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/PdfUmbenennerGuiApplication.java @@ -3,7 +3,6 @@ package de.gecheckt.pdf.umbenenner.adapter.in.gui; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import de.gecheckt.pdf.umbenenner.application.port.in.SchedulerStatus; import javafx.application.Application; import javafx.application.Platform; import javafx.event.EventHandler; @@ -153,10 +152,11 @@ public class PdfUmbenennerGuiApplication extends Application { * ist, wird der Aufruf ohne Fehler übersprungen. */ private void refreshAllTabStates() { - guiStartupContext.schedulerControlUseCase().ifPresent(uc -> { - SchedulerStatus status = uc.getStatus(); - workspace.onSchedulerStatusRefresh(status); - }); + // Den Use Case nicht aus dem unveränderlichen GuiStartupContext lesen, sondern + // den zur Laufzeit (z. B. durch Auto-Load) verdrahteten Use Case verwenden. + // Andernfalls bliebe der Stop-Button dauerhaft deaktiviert, weil updateStatus + // nie aufgerufen würde. + workspace.refreshSchedulerStatus(); } /**