Bugfix: Scheduler-Close-Guard liest Use Case dynamisch
installSchedulerCloseGuard hat den Scheduler-Use-Case bisher nur einmalig aus dem unveraenderlichen GuiStartupContext gelesen. Bei normalem GUI-Start ohne --config war dieser Optional leer; der nach dem Auto-Load verdrahtete Use Case wurde nicht erfasst und der Close-Guard griff nie. Der Close-Handler wird jetzt unabhaengig vom Startup-Context installiert und liest den Aktiv-Status zur Laufzeit ueber den Workspace, der den im GuiSchedulerTab live verdrahteten Use Case kennt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+19
@@ -1174,6 +1174,25 @@ public final class GuiConfigurationEditorWorkspace {
|
||||
.ifPresent(uc -> onSchedulerStatusRefresh(uc.getStatus()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob der aktuell verdrahtete Scheduler-Use-Case in einem aktiven
|
||||
* Zustand (Zustand != {@code STOPPED}) ist.
|
||||
* <p>
|
||||
* Liest den Use Case dynamisch aus dem {@link GuiSchedulerTab}, damit auch
|
||||
* der nach erfolgreichem Datei-Öffnen erst zur Laufzeit verdrahtete Use Case
|
||||
* erfasst wird. Ist kein Use Case verdrahtet, wird {@code false} zurückgegeben.
|
||||
* <p>
|
||||
* Muss auf dem JavaFX Application Thread aufgerufen werden.
|
||||
*
|
||||
* @return {@code true}, wenn ein Use Case verdrahtet ist und sein Zustand
|
||||
* als aktiv gilt; sonst {@code false}
|
||||
*/
|
||||
public boolean isSchedulerActive() {
|
||||
return schedulerTab.currentSchedulerUseCase()
|
||||
.map(uc -> uc.getStatus().state().isActive())
|
||||
.orElse(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Aktualisiert den Sperr-Zustand des Konfig-Tabs anhand des aktuellen Scheduler-Status.
|
||||
* <p>
|
||||
|
||||
+4
-3
@@ -196,10 +196,12 @@ public class PdfUmbenennerGuiApplication extends Application {
|
||||
* @param stage das primäre Fenster; darf nicht {@code null} sein
|
||||
*/
|
||||
private void installSchedulerCloseGuard(Stage stage) {
|
||||
guiStartupContext.schedulerControlUseCase().ifPresent(uc -> {
|
||||
EventHandler<WindowEvent> existingHandler = stage.getOnCloseRequest();
|
||||
stage.setOnCloseRequest(event -> {
|
||||
if (uc.getStatus().state().isActive()) {
|
||||
// Use Case dynamisch über den Workspace lesen, weil der Scheduler erst
|
||||
// nach erfolgreichem Datei-Öffnen (z. B. Auto-Load) verdrahtet wird und
|
||||
// damit nicht zwingend im unveränderlichen GuiStartupContext steht.
|
||||
if (workspace.isSchedulerActive()) {
|
||||
event.consume();
|
||||
Alert alert = new Alert(Alert.AlertType.INFORMATION);
|
||||
alert.setTitle("Anwendung kann nicht beendet werden");
|
||||
@@ -214,7 +216,6 @@ public class PdfUmbenennerGuiApplication extends Application {
|
||||
existingHandler.handle(event);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user