package org.peerbox.filerecovery; import java.io.IOException; import java.nio.file.Path; import java.util.Collection; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.image.Image; import javafx.stage.Stage; import javafx.stage.WindowEvent; import org.peerbox.ResultStatus; import org.peerbox.utils.DialogUtils; import org.peerbox.utils.IconUtils; import org.peerbox.view.ViewNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Inject; /** * Initializes and loads the recover file view in a window. * * @author albrecht * */ public class FileRecoveryUILoader { private static final Logger logger = LoggerFactory.getLogger(FileRecoveryUILoader.class); private Path fileToRecover; private Stage stage; private RecoverFileController controller; @Inject public FileRecoveryUILoader(RecoverFileController controller) { this.controller = controller; } public void loadUi() { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource(ViewNames.RECOVER_FILE_VIEW)); // we set the controller manually because GuiceFxmlLoader would use parent injector loader.setController(controller); Parent root = loader.load(); controller.setFileToRecover(fileToRecover); controller.loadVersions(); // load UI on Application thread and show Platform.runLater(() -> { Scene scene = new Scene(root); stage = new Stage(); stage.setTitle("File Recovery"); stage.setScene(scene); Collection<Image> icons = IconUtils.createWindowIcons(); stage.getIcons().addAll(icons); stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { controller.cancel(); stage = null; controller = null; } }); stage.show(); }); } catch (IOException e) { logger.error("Could not load settings stage: {}", e.getMessage()); e.printStackTrace(); } } public static void showError(ResultStatus res) { showError(res.getErrorMessage()); } private static void showError(final String message) { Runnable dialog = new Runnable() { @Override public void run() { Alert dlg = DialogUtils.createAlert(AlertType.ERROR); dlg.setTitle("Error Recovering File."); dlg.setHeaderText("Could not recover file."); dlg.setContentText(message); dlg.showAndWait(); } }; if (Platform.isFxApplicationThread()) { dialog.run(); } else { Platform.runLater(dialog); } } public void setFileToRecover(Path fileToRecover) { this.fileToRecover = fileToRecover; } }