From 5c80d6cd7611efe24234f9f27a5b3751b21113a7 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Wed, 13 Jan 2016 00:28:55 +0100 Subject: Persist organisation --- .../fhswf/in/inf/se/projektthemenvergabe/Main.java | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java') diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java index 4caaa35..15d13c1 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java @@ -5,6 +5,7 @@ package de.fhswf.in.inf.se.projektthemenvergabe; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; @@ -19,7 +20,9 @@ import de.fhswf.in.inf.se.projektthemenvergabe.view.ProjektthemenverwaltungsCont import de.fhswf.in.inf.se.projektthemenvergabe.view.StudentenverwaltungsController; import javafx.application.Application; import javafx.application.Platform; +import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; @@ -66,6 +69,7 @@ public class Main extends Application public void start(Stage primaryStage) throws Exception { loadData(); + registerSaveHandler(); this.primaryStage = primaryStage; @@ -398,4 +402,78 @@ public class Main extends Application } } + + /** + * Registers {@link ChangeListener} on the {@link ObservableList}s and + * persists the changes to the database. + * + */ + private void registerSaveHandler() + { + try + { + PreparedStatement deleteOrganisation = dbConnection + .prepareStatement("DELETE FROM organisation WHERE name=?"); + PreparedStatement addOrganisation = dbConnection.prepareStatement( + "INSERT INTO organisation (name) VALUES (?)"); + PreparedStatement updateOrganisation = dbConnection.prepareStatement( + "UPDATE organisation SET name=? WHERE name=?"); + + organisation.addListener(( + ListChangeListener.Change listener) -> { + while (listener.next()) + { + if (listener.wasUpdated()) + { + for (int i = listener.getFrom(); i < listener.getTo(); i++) + { + try + { + Organisation tmpOrg = listener.getList().get(i); + + updateOrganisation.setString(1, tmpOrg.getName()); + updateOrganisation.setString(2, tmpOrg.getOldName()); + updateOrganisation.execute(); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + else + { + for (Organisation removed : listener.getRemoved()) + { + try + { + deleteOrganisation.setString(1, removed.getName()); + deleteOrganisation.execute(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + for (Organisation added : listener.getAddedSubList()) + { + try + { + addOrganisation.setString(1, added.getName()); + addOrganisation.execute(); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } + } + } + }); + } + catch (SQLException e) + { + e.printStackTrace(); + } + } } -- cgit v1.2.3-70-g09d2