summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/fhswf')
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java78
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java15
2 files changed, 93 insertions, 0 deletions
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<? extends Organisation> 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();
+ }
+ }
}
diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java
index 63bbc96..8336baf 100644
--- a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java
+++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java
@@ -20,6 +20,8 @@ public class Organisation
{
private StringProperty name = new SimpleStringProperty("");
+ private String oldName = "";
+
private List<Ansprechpartner> ansprechpartner = new ArrayList<>();
/**
@@ -52,6 +54,7 @@ public class Organisation
}
this.name.set(name);
+ oldName = name;
}
/**
@@ -155,4 +158,16 @@ public class Organisation
return ((Organisation) obj).name.get().equals(name.get());
}
+
+ /**
+ * Get the previous name of this Organisation.
+ *
+ */
+ public String getOldName()
+ {
+ String tmp = oldName;
+ oldName = name.get();
+
+ return tmp;
+ }
} \ No newline at end of file