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 de.fhswf.in.inf.se.notepadMinusMinus.view.MainViewController; 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; public class Main extends Application { private ObservableList gradeList = FXCollections .observableArrayList(); private Stage primaryStage; private File openFile; @Override public void start(Stage primaryStage) { this.primaryStage = primaryStage; try { FXMLLoader loader = new FXMLLoader( getClass().getResource("view/MainView.fxml")); BorderPane root = (BorderPane) loader.load(); Scene scene = new Scene(root); primaryStage.setScene(scene); MainViewController controller = loader.getController(); controller.setMain(this); primaryStage.setMaximized(true); primaryStage.show(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } public ObservableList getGradeList() { return gradeList; } public Stage getPrimaryStage() { return primaryStage; } public File getOpenFile() { return openFile; } public void setOpenFile(File openFile) { this.openFile = openFile; } 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); // Save file in use. setOpenFile(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); // 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 speichern."); alert.setContentText( "Konnte Noten nicht in folgende Datei speichern:\n" + file.getPath()); alert.showAndWait(); } } }