From 83f14ed743a7dc7de1c072195da58aa38fc12905 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Mon, 23 Nov 2015 23:13:23 +0100 Subject: Add xml saving and loading --- src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java | 118 ++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) (limited to 'src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java') diff --git a/src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java b/src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java index 9481abe..55e550a 100644 --- a/src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java +++ b/src/de/fhswf/in/inf/se/notepadMinusMinus/Main.java @@ -1,11 +1,21 @@ package de.fhswf.in.inf.se.notepadMinusMinus; +import java.io.File; +import java.util.prefs.Preferences; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + import de.fhswf.in.inf.se.notepadMinusMinus.model.Grade; +import de.fhswf.in.inf.se.notepadMinusMinus.model.Grades; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; @@ -14,13 +24,19 @@ public class Main extends Application private ObservableList gradeList = FXCollections .observableArrayList(); + private Stage primaryStage; + @Override public void start(Stage primaryStage) { + this.primaryStage = primaryStage; + try { - BorderPane root = (BorderPane) FXMLLoader - .load(getClass().getResource("view/mainView.fxml")); + FXMLLoader loader = new FXMLLoader( + getClass().getResource("view/MainView.fxml")); + BorderPane root = (BorderPane) loader.load(); + Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.setMaximized(true); @@ -41,4 +57,102 @@ public class Main extends Application { return gradeList; } + + public File getGradesFilePath() + { + Preferences prefs = Preferences.userNodeForPackage(Main.class); + String filePath = prefs.get("filePath", null); + if (filePath != null) + { + return new File(filePath); + } + else + { + return null; + } + } + + public void setGradesFilePath(File file) + { + Preferences prefs = Preferences.userNodeForPackage(Main.class); + if (file != null) + { + prefs.put("filePath", file.getPath()); + + // Update the stage title. + primaryStage.setTitle("Notepad-- - " + file.getName()); + } + else + { + prefs.remove("filePath"); + + // Update the stage title. + primaryStage.setTitle("Notepad--"); + } + } + + public void loadGradesFromFile(File file) + { + try + { + JAXBContext context = JAXBContext.newInstance(Grades.class); + Unmarshaller um = context.createUnmarshaller(); + + // Reading XML from the file and unmarshalling. + Grades wrapper = (Grades) um.unmarshal(file); + + gradeList.clear(); + gradeList.addAll(wrapper.getGrades()); + + // Save the file path to the registry. + setGradesFilePath(file); + + } + catch (Exception e) + { // catches ANY exception + Alert alert = new Alert(AlertType.ERROR); + alert.initOwner(primaryStage); + alert.setTitle("Fehler"); + alert.setHeaderText("Konnte Noten nicht laden."); + alert.setContentText( + "Konnte Noten nicht aus folgender Datei laden:\n" + + file.getPath()); + + alert.showAndWait(); + } + } + + public void saveGradesToFile(File file) + { + try + { + JAXBContext context = JAXBContext.newInstance(Grades.class); + Marshaller m = context.createMarshaller(); + m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + + // Wrapping our grades data. + Grades wrapper = new Grades(); + wrapper.setGrades(gradeList); + + // Marshalling and saving XML to the file. + m.marshal(wrapper, file); + } + catch (Exception e) + { // catches ANY exception + Alert alert = new Alert(AlertType.ERROR); + alert.initOwner(primaryStage); + alert.setTitle("Fehler"); + alert.setHeaderText("Konnte Noten nicht speichern."); + alert.setContentText( + "Konnte Noten nicht in folgende Datei speichern:\n" + + file.getPath()); + + alert.showAndWait(); + } + } + + public void saveGradesToFile() + { + saveGradesToFile(getGradesFilePath()); + } } -- cgit v1.2.3-70-g09d2