diff --git a/src/main/java/application/UPMTApp.java b/src/main/java/application/UPMTApp.java index ec251721..54aa4c18 100644 --- a/src/main/java/application/UPMTApp.java +++ b/src/main/java/application/UPMTApp.java @@ -7,27 +7,33 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; +import javafx.application.Platform; import models.Project; - import java.io.IOException; import java.util.UUID; + public class UPMTApp { private Stage primaryStage; private RootLayoutController rootLayoutController; private ApplicationCommandFactory appCommandFactory; - private Project currentProject; + private static Project currentProject; private String currentProjectPath; private UUID lastSavedCommandId; + private long autoSaveIntervalMillis; + + public UPMTApp(Stage primaryStage) throws IOException { this.primaryStage = primaryStage; this.appCommandFactory = new ApplicationCommandFactory(this); this.rootLayoutController = new RootLayoutController(appCommandFactory); + this.autoSaveIntervalMillis = 10000; + Configuration.loadAppConfiguration(); HistoryManager.init(appCommandFactory); @@ -47,6 +53,7 @@ public UPMTApp(Stage primaryStage) throws IOException { appCommandFactory.openProjectManagerCommand().execute(); } + startAutoSave(); FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("/views/MainView/MainView.fxml")); @@ -56,6 +63,7 @@ public UPMTApp(Stage primaryStage) throws IOException { } + public Stage getPrimaryStage() { return primaryStage; } @@ -65,7 +73,7 @@ public void setCurrentProject(Project project, String path) { currentProjectPath = path; rootLayoutController.setProject(project); } - public Project getCurrentProject() { + public static Project getCurrentProject() { return currentProject; } public String getCurrentProjectPath() { return currentProjectPath; } @@ -79,5 +87,30 @@ public void restartApp() { if(getCurrentProject() != null) setCurrentProject(getCurrentProject(), currentProjectPath); } - + + public void startAutoSave() { + if (currentProject != null) { + // Créez et démarrez un nouveau thread pour la sauvegarde automatique + Thread autoSaveThread = new Thread(() -> { + while (true) { + try { + // Effectuez la sauvegarde automatique + //currentProject.saveAs("auto_save", getCurrentProjectPath()); + + // Utilisez Platform.runLater() pour exécuter l'opération sur le thread de l'interface utilisateur + Platform.runLater(() -> appCommandFactory.saveProject().execute()); + + // Pause pour l'intervalle spécifié + Thread.sleep(autoSaveIntervalMillis); + } catch (InterruptedException e) { + e.printStackTrace(); + // Gérer les exceptions si nécessaire + } + } + }); + autoSaveThread.setDaemon(true); // Le thread s'exécutera en arrière-plan et se terminera lorsque le programme principal se termine + autoSaveThread.start(); + } + } + } \ No newline at end of file diff --git a/src/main/java/application/appCommands/CloseApplicationCommand.java b/src/main/java/application/appCommands/CloseApplicationCommand.java index 0ab6ddb1..e50c0354 100644 --- a/src/main/java/application/appCommands/CloseApplicationCommand.java +++ b/src/main/java/application/appCommands/CloseApplicationCommand.java @@ -26,25 +26,7 @@ public CloseApplicationCommand(ApplicationCommandFactory appCommandFactory, UPMT @Override public Void execute() { - - System.out.println("Test checking project unsaved"); - //TODO check for unsaved work - boolean workUnsaved = false; - String currentTitle = upmtApp.getPrimaryStage().getTitle(); - UUID currentCommandId = HistoryManager.getCurrentCommandId(); - UUID lastSavedCommandId = upmtApp.getLastSavedCommandId(); - if(currentCommandId != null ){ - if(lastSavedCommandId == null){ - workUnsaved = true; - }else { - if (HistoryManager.getCurrentCommandId().equals(lastSavedCommandId)) { - System.out.println("Projet sauvegardé"); - } else { - workUnsaved = true; - } - } - } - if(workUnsaved) { + if (upmtApp.getCurrentProjectPath() == null) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setHeaderText(""); alert.setTitle(Configuration.langBundle.getString("alert_unsaved_project_title")); @@ -57,7 +39,7 @@ public Void execute() { alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeCancel); Optional result = alert.showAndWait(); - if (result.get() == buttonTypeOne){ + if (result.get() == buttonTypeOne) { // ... user chose "Save And Quit" appCommandFactory.saveProject().execute(); System.exit(0); @@ -68,6 +50,8 @@ public Void execute() { // ... user chose CANCEL or closed the dialog event.consume(); } + } else { + appCommandFactory.saveProject().execute(); } return null; } diff --git a/src/main/java/application/appCommands/SaveProjectCommand.java b/src/main/java/application/appCommands/SaveProjectCommand.java index ca7fe7b3..7ab67e94 100644 --- a/src/main/java/application/appCommands/SaveProjectCommand.java +++ b/src/main/java/application/appCommands/SaveProjectCommand.java @@ -21,6 +21,8 @@ public Void execute() { ProjectSaver.save(upmtApp.getCurrentProject(), Configuration.getProjectsPath()[0]); upmtApp.setLastSavedCommandId(HistoryManager.getCurrentCommandId()); new ProjectSavingStatusChangedCommand(upmtApp).execute(); + System.out.println("Projet saved"); + } catch (Exception e) { ProjectDialogBox.projectSavingFailed(); e.printStackTrace(); diff --git a/src/main/java/models/ConcreteCategory.java b/src/main/java/models/ConcreteCategory.java index 952f7efe..4805552a 100644 --- a/src/main/java/models/ConcreteCategory.java +++ b/src/main/java/models/ConcreteCategory.java @@ -1,5 +1,6 @@ package models; +import application.UPMTApp; import components.modelisationSpace.category.controllers.ConcreteCategoryController; import components.modelisationSpace.property.appCommands.AddConcretePropertyCommand; import components.modelisationSpace.property.appCommands.RemoveConcretePropertyCommand; diff --git a/src/main/java/models/Project.java b/src/main/java/models/Project.java index 10846165..5333b7e3 100644 --- a/src/main/java/models/Project.java +++ b/src/main/java/models/Project.java @@ -29,6 +29,7 @@ public Project(String name, SchemaTreeRoot baseScheme) { this.readOnlyInterviews = new ReadOnlyListWrapper<>(this.interviews); this.selectedInterview = new SimpleObjectProperty<>(); + } public String getName() { return this.name.get(); }