diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/FilterGUI.fxml index e7585bb45b61c1d4a5826ebcf2bcf6b289e67fbf..8e1cf6c9545e5a2762a081ef2df94a83450d3e1a 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 977bc2ace288c4f49f96761aef1b2d81132f34ff..96a79db8b3d4701dc36bfe49f283756f068c808f 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 9067c035793e6f9eaf43a4bc60ca79d4d64bba2d..562e2b20fe13dd7e71fc4f734e65d498e587b0a9 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 dd5613c6cc9a9391b2f74b424f2544c76f6ee17c..9f676c0e8252312921ce688c2fb8ee95f2625dbb 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 505ad6cb479a254d73b4d4bc7b7fe0582c7eae58..ab0e5a1c6fbac0c1eb5e2265513f2ee62fd93baf 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 0000000000000000000000000000000000000000..1263871aee24650744f3cf742506dbf93505bca9 --- /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