🗃️ Prepare persistence layer

main
Alexis Drai 3 years ago
parent 31f674cfcb
commit b14d169870

@ -1,4 +1,9 @@
package data; package data;
import viewmodel.PromotionVM;
import java.io.IOException;
public interface Loadable { public interface Loadable {
PromotionVM load() throws IOException, ClassNotFoundException;
} }

@ -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());
}
}
}

@ -0,0 +1,9 @@
package data;
import viewmodel.PromotionVM;
import java.io.IOException;
public interface Savable {
void save(PromotionVM VM) throws IOException;
}

@ -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());
}
}
}

@ -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;
}
}

@ -1,22 +1,39 @@
package launcher; package launcher;
import data.Loadable;
import data.Loader;
import data.Saver;
import data.Stub;
import javafx.application.Application; import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
import view.MainWindow; import view.MainWindow;
import viewmodel.PromotionVM;
import java.io.IOException;
public class Launcher extends Application { public class Launcher extends Application {
//vm private PromotionVM VM = null;
@Override @Override
public void start(Stage primaryStage) throws Exception { 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 fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/MainWindow.fxml"));
fxmlLoader.setController(new MainWindow(/*VM goes here*/)); fxmlLoader.setController(new MainWindow(VM));
Parent root = fxmlLoader.load(); Parent root = fxmlLoader.load();
Scene scene = new Scene(root); Scene scene = new Scene(root);
primaryStage.setScene(scene); primaryStage.setScene(scene);
@ -25,7 +42,12 @@ public class Launcher extends Application {
@Override @Override
public void stop() throws Exception { public void stop() throws Exception {
//save try {
new Saver().save(VM);
} catch (IOException __) {
System.err.println("couls not save...");
}
super.stop(); super.stop();
} }
} }

@ -1,4 +1,11 @@
package view; package view;
import viewmodel.PromotionVM;
public class MainWindow { public class MainWindow {
private final PromotionVM VM;
public MainWindow(PromotionVM VM) {
this.VM = VM;
}
} }

@ -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;
}
}
Loading…
Cancel
Save