From e310324ebff14f74a426aca38454ef839619625c Mon Sep 17 00:00:00 2001
From: tobias <tobias@thecodedev.de>
Date: Fri, 6 Sep 2019 22:21:00 +0200
Subject: [PATCH] Add playout log delete function

---
 .../plugin/playout/PlayoutLogPlugin.java      |  2 +-
 .../plugin/playout/log/LogSeasons.java        |  4 +++
 .../log/storage/LogSeasonStorageHandler.java  | 10 ++-----
 .../SqlLiteLogSeasonStorageHandler.java       | 29 +++++++++++++++----
 .../PlayoutLogViewController.java             |  5 +++-
 5 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java
index 88fb53dc..2b4baeef 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/PlayoutLogPlugin.java
@@ -38,7 +38,7 @@ public class PlayoutLogPlugin implements PlayPadPluginStub, PluginArtifact {
 
 		try {
 			LogSeasons.getStorageHandler().close();
-		} catch (RuntimeException e) {
+		} catch (Exception e) {
 			Logger.log(LogLevel.ERROR, "Cannot close LogSeasonStorageHandler (" + e.getLocalizedMessage() + ")");
 		}
 	}
diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java
index a3c8c8a3..45a07844 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/LogSeasons.java
@@ -41,6 +41,10 @@ public class LogSeasons {
 		return getStorageHandler().getAllLogSeasonsLazy();
 	}
 
+	public static void deleteSession(int id) {
+		getStorageHandler().deleteSession(id);
+	};
+
 	public static LogSeason getLogSeason(int id) {
 		return getStorageHandler().getLogSeason(id);
 	}
diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/storage/LogSeasonStorageHandler.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/storage/LogSeasonStorageHandler.java
index 639071c9..b03378b9 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/storage/LogSeasonStorageHandler.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/log/storage/LogSeasonStorageHandler.java
@@ -6,7 +6,8 @@ import de.tobias.playpad.plugin.playout.log.PlayOutItem;
 
 import java.util.List;
 
-public interface LogSeasonStorageHandler {
+public interface LogSeasonStorageHandler extends AutoCloseable {
+
 	void addLogSeason(LogSeason season);
 
 	void addLogItem(LogItem item);
@@ -17,10 +18,5 @@ public interface LogSeasonStorageHandler {
 
 	List<LogSeason> getAllLogSeasonsLazy();
 
-	/**
-	 * Close the storage handler.
-	 *
-	 * @throws RuntimeException fail to close handler (e.g. sql error)
-	 */
-	void close();
+	void deleteSession(int id);
 }
diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/storage/SqlLiteLogSeasonStorageHandler.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/storage/SqlLiteLogSeasonStorageHandler.java
index 49390921..b1659620 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/storage/SqlLiteLogSeasonStorageHandler.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/storage/SqlLiteLogSeasonStorageHandler.java
@@ -1,6 +1,5 @@
 package de.tobias.playpad.plugin.playout.storage;
 
-import de.thecodelabs.logger.LogLevel;
 import de.thecodelabs.logger.Logger;
 import de.tobias.playpad.plugin.playout.log.LogItem;
 import de.tobias.playpad.plugin.playout.log.LogSeason;
@@ -51,7 +50,7 @@ public class SqlLiteLogSeasonStorageHandler implements LogSeasonStorageHandler {
 				}
 			}
 		} catch (SQLException e) {
-			Logger.log(LogLevel.ERROR, e.getLocalizedMessage());
+			Logger.error(e);
 		}
 	}
 
@@ -124,7 +123,7 @@ public class SqlLiteLogSeasonStorageHandler implements LogSeasonStorageHandler {
 				}
 			}
 		} catch (SQLException e) {
-			Logger.log(LogLevel.ERROR, e.getLocalizedMessage());
+			Logger.error(e);
 		}
 		return null;
 	}
@@ -149,7 +148,7 @@ public class SqlLiteLogSeasonStorageHandler implements LogSeasonStorageHandler {
 				}
 			}
 		} catch (SQLException e) {
-			Logger.log(LogLevel.ERROR, e.getLocalizedMessage());
+			Logger.error(e);
 		}
 		return logItems;
 	}
@@ -172,11 +171,31 @@ public class SqlLiteLogSeasonStorageHandler implements LogSeasonStorageHandler {
 				}
 			}
 		} catch (SQLException e) {
-			Logger.log(LogLevel.ERROR, e.getLocalizedMessage());
+			Logger.error(e);
 		}
 		return playOutItems;
 	}
 
+	@Override
+	public void deleteSession(int id) {
+		try (PreparedStatement deletePlayoutItems = connection.prepareStatement("DELETE FROM PlayOutItem WHERE uuid IN (SELECT uuid FROM LogItem l WHERE l.logSeason = ?)")) {
+			deletePlayoutItems.setInt(1, id);
+			deletePlayoutItems.execute();
+
+			try (PreparedStatement deleteLogItems = connection.prepareStatement("DELETE FROM LogItem WHERE logSeason = ?")) {
+				deleteLogItems.setInt(1, id);
+				deleteLogItems.execute();
+			}
+
+			try (PreparedStatement deleteLogSeason = connection.prepareStatement("DELETE FROM LogSeason WHERE id = ?")) {
+				deleteLogSeason.setInt(1, id);
+				deleteLogSeason.execute();
+			}
+		} catch (SQLException e) {
+			Logger.error(e);
+		}
+	}
+
 	@Override
 	public void close() throws RuntimeException {
 		if (connection != null) {
diff --git a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java
index 1d0e1ee4..1c48c973 100644
--- a/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java
+++ b/PlayWallPlugins/PlayWallPluginPlayoutLog/src/main/java/de/tobias/playpad/plugin/playout/viewcontroller/PlayoutLogViewController.java
@@ -140,7 +140,10 @@ public class PlayoutLogViewController extends NVC {
 
 	@FXML
 	private void deleteButtonHandler(ActionEvent event) {
-
+		getSelectedLogSeason().ifPresent(season -> { // Lazy Season
+			LogSeasons.deleteSession(season.getId());
+			logList.getItems().remove(season);
+		});
 	}
 
 	@FXML
-- 
GitLab