From 7c915981c542ce86188c531ecbdaaa6ba420e922 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 27 Sep 2017 17:35:23 +0200 Subject: [PATCH] #96 - delete tags that are not referenced --- .../budgetmaster/ui/fxml/FilterGUI.fxml | 10 +++++-- .../logic/database/DatabaseImportExport.java | 7 +++++ .../logic/database/DatabaseTagHandler.java | 26 +++++++++++++++++ .../tag/match/TagMatchDeleteForPayment.java | 4 +++ .../TagMatchDeleteForRepeatingPayment.java | 4 +++ .../server/updater/TagUpdater.java | 28 +++++++++++++++++++ 6 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/de/deadlocker8/budgetmasterserver/server/updater/TagUpdater.java diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml index e7585bb45..8e1cf6c95 100644 --- a/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml @@ -83,7 +83,10 @@ </HBox> <ScrollPane prefHeight="183.0" prefWidth="297.0" VBox.vgrow="ALWAYS"> <content> - <VBox fx:id="vboxCategories" spacing="5.0" /> + <VBox fx:id="vboxCategories" spacing="5.0"> + <padding> + <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> + </padding></VBox> </content> </ScrollPane> </children> @@ -155,7 +158,10 @@ </HBox> <ScrollPane prefHeight="85.0" prefWidth="409.0" VBox.vgrow="ALWAYS"> <content> - <VBox fx:id="vboxTags" spacing="5.0" /> + <VBox fx:id="vboxTags" spacing="5.0"> + <padding> + <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> + </padding></VBox> </content> </ScrollPane> </children> diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseImportExport.java b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseImportExport.java index 977bc2ace..96a79db8b 100644 --- a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseImportExport.java +++ b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseImportExport.java @@ -1,7 +1,14 @@ package de.deadlocker8.budgetmasterserver.logic.database; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + /** * Used to mark model classes that only exists in order to allow gson to import and export the database * */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.SOURCE) public @interface DatabaseImportExport {} \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java index 9067c0357..562e2b20f 100644 --- a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java +++ b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java @@ -386,4 +386,30 @@ public class DatabaseTagHandler closeConnection(stmt); } } + + public boolean isTagUsedInMatches(int tagID) + { + PreparedStatement stmt = null; + try + { + stmt = connection.prepareStatement("SELECT * FROM tag_match WHERE tag_match.Tag_ID = ?;"); + stmt.setInt(1, tagID); + ResultSet rs = stmt.executeQuery(); + + while(rs.next()) + { + return true; + } + } + catch(SQLException e) + { + Logger.error(e); + } + finally + { + closeConnection(stmt); + } + + return false; + } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForPayment.java b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForPayment.java index dd5613c6c..9f676c0e8 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForPayment.java +++ b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForPayment.java @@ -3,6 +3,7 @@ package de.deadlocker8.budgetmasterserver.server.tag.match; import static spark.Spark.halt; import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; +import de.deadlocker8.budgetmasterserver.server.updater.TagUpdater; import spark.Request; import spark.Response; import spark.Route; @@ -35,6 +36,9 @@ public class TagMatchDeleteForPayment implements Route } tagHandler.deleteTagMatchForPayment(tagID, paymentID); + + TagUpdater tagUpdater = new TagUpdater(tagHandler); + tagUpdater.deleteTagsIfNotReferenced(); return ""; } diff --git a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForRepeatingPayment.java b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForRepeatingPayment.java index 505ad6cb4..ab0e5a1c6 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForRepeatingPayment.java +++ b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchDeleteForRepeatingPayment.java @@ -3,6 +3,7 @@ package de.deadlocker8.budgetmasterserver.server.tag.match; import static spark.Spark.halt; import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; +import de.deadlocker8.budgetmasterserver.server.updater.TagUpdater; import spark.Request; import spark.Response; import spark.Route; @@ -35,6 +36,9 @@ public class TagMatchDeleteForRepeatingPayment implements Route } tagHandler.deleteTagMatchForRepeatingPayment(tagID, repeatingPaymentID); + + TagUpdater tagUpdater = new TagUpdater(tagHandler); + tagUpdater.deleteTagsIfNotReferenced(); return ""; } diff --git a/src/de/deadlocker8/budgetmasterserver/server/updater/TagUpdater.java b/src/de/deadlocker8/budgetmasterserver/server/updater/TagUpdater.java new file mode 100644 index 000000000..1263871ae --- /dev/null +++ b/src/de/deadlocker8/budgetmasterserver/server/updater/TagUpdater.java @@ -0,0 +1,28 @@ +package de.deadlocker8.budgetmasterserver.server.updater; + +import java.util.ArrayList; + +import de.deadlocker8.budgetmaster.logic.tag.Tag; +import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; + +public class TagUpdater +{ + private DatabaseTagHandler tagHandler; + + public TagUpdater(DatabaseTagHandler tagHandler) + { + this.tagHandler = tagHandler; + } + + public void deleteTagsIfNotReferenced() + { + ArrayList<Tag> tags = tagHandler.getAllTags(); + for(Tag currentTag : tags) + { + if(!tagHandler.isTagUsedInMatches(currentTag.getID())) + { + tagHandler.deleteTag(currentTag.getID()); + } + } + } +} \ No newline at end of file -- GitLab