diff --git a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java index 831183ddebbb2de68afe98701bbc5522366193f4..40d93c169d199eb92297d94c1cf6af0de74b8575 100644 --- a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java +++ b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java @@ -331,7 +331,7 @@ public class ServerConnection } } - public ArrayList<Payment> getPaymentForSearch(String query, boolean searchName, boolean searchDescription, boolean searchCategoryName) throws Exception + public ArrayList<Payment> getPaymentForSearch(String query, boolean searchName, boolean searchDescription, boolean searchCategoryName, boolean searchTags) throws Exception { String urlString = settings.getUrl() + "/payment/search?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&query=" + query; if(searchName) @@ -349,6 +349,11 @@ public class ServerConnection urlString += "&categoryName=" + 1; } + if(searchTags) + { + urlString += "&tags=" + 1; + } + URL url = new URL(urlString); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); httpsCon.setDoOutput(true); diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties index 155447b83f6e0030c20793342ba8e83b97173dd2..398678928caab9286d336a1129c2ac3433185c7c 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties @@ -237,6 +237,7 @@ search.by=Suchen in: search.by.name=Name search.by.description=Notiz search.by.category.name=Kategoriename +search.by.tags=Tags search.button.search=Suchen gui.tab.home=Startseite diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties index 57af4d2e68259627b30eded33316958f70c2c07f..6952c2ab55d970ced5e0d04754c864f1e431276f 100644 --- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties +++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties @@ -236,6 +236,7 @@ search.headline=Search for payments search.by=Search in: search.by.name=Name search.by.description=Description +search.by.tags=Tags search.by.category.name=Category Name search.button.search=Search diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java index 74c66a59c1212396ba3aaf9eb294a8ac24bd3017..4823a09651d8fb2a616506ac4ea29e7f497acb6b 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java @@ -284,10 +284,26 @@ public class NewPaymentController extends BaseController implements Styleable try { ServerTagConnection serverTagConnection = new ServerTagConnection(controller.getSettings()); - tagField.setAllTags(serverTagConnection.getTags()); + tagField.setAllTags(serverTagConnection.getTags()); + if(payment instanceof RepeatingPayment) + { + //search gets RepeatingPayments instead of RepeatingPaymenEntries --> convert it to RepeatingPaymentEntry to maintain compatibility + RepeatingPayment tempPayment = (RepeatingPayment)payment; + payment = new RepeatingPaymentEntry(-1, + tempPayment.getID(), + tempPayment.getDate(), + tempPayment.getAmount(), + tempPayment.getCategoryID(), + tempPayment.getName(), + tempPayment.getDescription(), + tempPayment.getRepeatInterval(), + tempPayment.getRepeatEndDate(), + tempPayment.getRepeatMonthDay()); + } + if(payment instanceof RepeatingPaymentEntry) - { + { try { RepeatingPaymentEntry currentPayment = (RepeatingPaymentEntry)payment; diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java index 43758db12977e21fb8e39a99ffb7eafcad7d0e6f..fb45e4248282c72bcdbb43145393ddd27a4ecf8c 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SearchController.java @@ -36,6 +36,7 @@ public class SearchController extends BaseController implements Styleable @FXML private CheckBox checkBoxName; @FXML private CheckBox checkBoxDescription; @FXML private CheckBox checkBoxCategoryName; + @FXML private CheckBox checkBoxTags; @FXML private TextField textFieldSearch; @FXML private Button buttonCancel; @FXML private Button buttonSearch; @@ -128,7 +129,8 @@ public class SearchController extends BaseController implements Styleable ArrayList<Payment> payments = connection.getPaymentForSearch(query, checkBoxName.isSelected(), checkBoxDescription.isSelected(), - checkBoxCategoryName.isSelected()); + checkBoxCategoryName.isSelected(), + checkBoxTags.isSelected()); Platform.runLater(() -> { listView.getItems().clear(); if(payments != null) diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java index 0ccced5ad2754989ec239424971349c11c80bf8e..caefa9ba69cd9f897787bed5145048325f058fa8 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java @@ -414,11 +414,12 @@ public class SettingsController implements Styleable try { database = FileHelper.loadDatabaseJSON(file); + System.out.println(database); if(database.getCategories() == null - || database.getNormalPayments() == null - || database.getRepeatingPayments() == null - || database.getTags() == null - || database.getTagMatches() == null) + || database.getNormalPayments() == null + || database.getRepeatingPayments() == null + || database.getTags() == null + || database.getTagMatches() == null) { AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml index 654d4181e82a33604e0b36676de501ad77096a29..16a1809763ebfb26eca024f4742f447b068026fc 100644 --- a/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/fxml/SearchGUI.fxml @@ -43,6 +43,11 @@ <Font size="14.0" /> </font> </CheckBox> + <CheckBox fx:id="checkBoxTags" mnemonicParsing="false" text="%search.by.tags"> + <font> + <Font size="14.0" /> + </font> + </CheckBox> </children> </HBox> <ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" /> diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java index b631d73467f5653d028e5a3d095a5aad153b2a37..c5ff53d88f52e447bd42769901e7c2a94913eccf 100644 --- a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java +++ b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java @@ -24,7 +24,7 @@ public class Database @SuppressWarnings("unused") private final String TYPE = SaveFileType.BUDGETMASTER_DATABASE.toString(); private final int VERSION = 2; - private ArrayList<Category> categoriesX; + private ArrayList<Category> categories; private ArrayList<NormalPayment> normalPayments; private ArrayList<RepeatingPayment> repeatingPayments; private ArrayList<Tag> tags; @@ -37,7 +37,7 @@ public class Database public Database(ArrayList<Category> categories, ArrayList<NormalPayment> normalPayments, ArrayList<RepeatingPayment> repeatingPayments, ArrayList<Tag> tags, ArrayList<TagMatch> tagMatches) { - this.categoriesX = categories; + this.categories = categories; this.normalPayments = normalPayments; this.repeatingPayments = repeatingPayments; this.tags = tags; @@ -46,7 +46,7 @@ public class Database public ArrayList<Category> getCategories() { - return categoriesX; + return categories; } public ArrayList<NormalPayment> getNormalPayments() @@ -77,6 +77,6 @@ public class Database @Override public String toString() { - return "Database [VERSION=" + VERSION + ", categories=" + categoriesX + ", normalPayments=" + normalPayments + ", repeatingPayments=" + repeatingPayments + ", tags=" + tags + ", tagMatches=" + tagMatches + "]"; + return "Database [VERSION=" + VERSION + ", categories=" + categories + ", normalPayments=" + normalPayments + ", repeatingPayments=" + repeatingPayments + ", tags=" + tags + ", tagMatches=" + tagMatches + "]"; } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index 3d2ac6bba7caae97964b8b2f0adf8546e10b17f0..00a21bba4a9d3270aaa91d0e52ff84355ee941a4 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -119,7 +119,7 @@ public class SparkServer delete("/category", new CategoryDelete(handler)); // Payment - get("/payment/search", new PaymentSearch(handler)); + get("/payment/search", new PaymentSearch(handler, tagHandler)); // Normal get("/payment", new PaymentGet(handler, gson)); post("/payment", new PaymentAdd(handler, gson)); diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java b/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java index 88731a76f288b8c2c974b66d3075934d0132cfd6..42e718dfffea4165b62267f1c71f4c5d2af1edff 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/search/PaymentSearch.java @@ -11,7 +11,9 @@ import de.deadlocker8.budgetmaster.logic.payment.NormalPayment; import de.deadlocker8.budgetmaster.logic.payment.Payment; import de.deadlocker8.budgetmaster.logic.payment.PaymentJSONSerializer; import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment; +import de.deadlocker8.budgetmaster.logic.tag.Tag; import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; +import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; import spark.Request; import spark.Response; import spark.Route; @@ -19,10 +21,12 @@ import spark.Route; public class PaymentSearch implements Route { private DatabaseHandler handler; + private DatabaseTagHandler tagHandler; - public PaymentSearch(DatabaseHandler handler) + public PaymentSearch(DatabaseHandler handler, DatabaseTagHandler tagHandler) { this.handler = handler; + this.tagHandler = tagHandler; } @Override @@ -73,7 +77,7 @@ public class PaymentSearch implements Route if(req.queryMap("query").value().toLowerCase().equals("")) return false; - if(!req.queryParams().contains("name") && !req.queryParams().contains("description") && !req.queryParams().contains("categoryName")) + if(!req.queryParams().contains("name") && !req.queryParams().contains("description") && !req.queryParams().contains("categoryName") && !req.queryParams().contains("tags")) return false; if(req.queryParams().contains("name")) @@ -104,6 +108,34 @@ public class PaymentSearch implements Route return true; } } + + if(req.queryParams().contains("tags")) + { + ArrayList<Integer> tagIDs = new ArrayList<>(); + if(payment instanceof NormalPayment) + { + tagIDs = tagHandler.getAllTagsForPayment(payment.getID()); + } + else + { + tagIDs = tagHandler.getAllTagsForRepeatingPayment(payment.getID()); + } + + if(tagIDs.size() > 0) + { + for(Integer currentTagID : tagIDs) + { + Tag currentTag = tagHandler.getTagByID(currentTagID); + if(currentTag != null) + { + if(currentTag.getName().toLowerCase().contains(req.queryMap("query").value().toLowerCase())) + { + return true; + } + } + } + } + } return false; }