From b14d16987084dfb7989d52aaf0263c88a0e24299 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Wed, 19 Oct 2022 18:12:33 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20Prepare=20persistence?= =?UTF-8?q?=20layer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/Loadable.java | 5 +++++ src/data/Loader.java | 17 +++++++++++++++++ src/data/Savable.java | 9 +++++++++ src/data/Saver.java | 16 ++++++++++++++++ src/data/Stub.java | 15 +++++++++++++++ src/launcher/Launcher.java | 32 +++++++++++++++++++++++++++----- src/view/MainWindow.java | 7 +++++++ src/viewmodel/PromotionVM.java | 20 ++++++++++++++++++++ 8 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 src/data/Loader.java create mode 100644 src/data/Savable.java create mode 100644 src/data/Saver.java create mode 100644 src/data/Stub.java create mode 100644 src/viewmodel/PromotionVM.java diff --git a/src/data/Loadable.java b/src/data/Loadable.java index 5b1683a..818ec29 100644 --- a/src/data/Loadable.java +++ b/src/data/Loadable.java @@ -1,4 +1,9 @@ package data; +import viewmodel.PromotionVM; + +import java.io.IOException; + public interface Loadable { + PromotionVM load() throws IOException, ClassNotFoundException; } diff --git a/src/data/Loader.java b/src/data/Loader.java new file mode 100644 index 0000000..fa70153 --- /dev/null +++ b/src/data/Loader.java @@ -0,0 +1,17 @@ +package data; + +import model.Promotion; +import viewmodel.PromotionVM; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; + +public class Loader implements Loadable { + @Override + public PromotionVM load() throws IOException, ClassNotFoundException { + try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("save.bin"))) { + return new PromotionVM(ois.readObject()); + } + } +} diff --git a/src/data/Savable.java b/src/data/Savable.java new file mode 100644 index 0000000..a40c746 --- /dev/null +++ b/src/data/Savable.java @@ -0,0 +1,9 @@ +package data; + +import viewmodel.PromotionVM; + +import java.io.IOException; + +public interface Savable { + void save(PromotionVM VM) throws IOException; +} diff --git a/src/data/Saver.java b/src/data/Saver.java new file mode 100644 index 0000000..36b1688 --- /dev/null +++ b/src/data/Saver.java @@ -0,0 +1,16 @@ +package data; + +import viewmodel.PromotionVM; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; + +public class Saver implements Savable { + @Override + public void save(PromotionVM VM) throws IOException { + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("save.bin"))) { + oos.writeObject(VM.getModel()); + } + } +} diff --git a/src/data/Stub.java b/src/data/Stub.java new file mode 100644 index 0000000..d9887f3 --- /dev/null +++ b/src/data/Stub.java @@ -0,0 +1,15 @@ +package data; + +import viewmodel.PromotionVM; + +public class Stub implements Loadable { + + @Override + public PromotionVM load(){ + PromotionVM VM = new PromotionVM(); + + //... add studentVMs + + return VM; + } +} diff --git a/src/launcher/Launcher.java b/src/launcher/Launcher.java index 8c69ea5..0e0caed 100644 --- a/src/launcher/Launcher.java +++ b/src/launcher/Launcher.java @@ -1,22 +1,39 @@ package launcher; +import data.Loadable; +import data.Loader; +import data.Saver; +import data.Stub; import javafx.application.Application; -import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import view.MainWindow; +import viewmodel.PromotionVM; + +import java.io.IOException; public class Launcher extends Application { - //vm + private PromotionVM VM = null; @Override public void start(Stage primaryStage) throws Exception { - //load + Loadable loader; + + try { + loader = new Loader(); + VM = loader.load(); + } catch (IOException | ClassNotFoundException __) { + System.err.println("could not load..."); + loader = new Stub(); + VM = loader.load(); + } + if (VM == null) VM = new PromotionVM(); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/MainWindow.fxml")); - fxmlLoader.setController(new MainWindow(/*VM goes here*/)); + fxmlLoader.setController(new MainWindow(VM)); Parent root = fxmlLoader.load(); Scene scene = new Scene(root); primaryStage.setScene(scene); @@ -25,7 +42,12 @@ public class Launcher extends Application { @Override public void stop() throws Exception { - //save + try { + new Saver().save(VM); + } catch (IOException __) { + System.err.println("couls not save..."); + } + super.stop(); } } diff --git a/src/view/MainWindow.java b/src/view/MainWindow.java index d8b616c..e8c6704 100644 --- a/src/view/MainWindow.java +++ b/src/view/MainWindow.java @@ -1,4 +1,11 @@ package view; +import viewmodel.PromotionVM; + public class MainWindow { + private final PromotionVM VM; + + public MainWindow(PromotionVM VM) { + this.VM = VM; + } } diff --git a/src/viewmodel/PromotionVM.java b/src/viewmodel/PromotionVM.java new file mode 100644 index 0000000..19743c6 --- /dev/null +++ b/src/viewmodel/PromotionVM.java @@ -0,0 +1,20 @@ +package viewmodel; + +import model.Promotion; + +public class PromotionVM { + + private Promotion model; + + public PromotionVM(Object o) { + + } + + public PromotionVM() { + + } + + public Promotion getModel() { + return model; + } +}