diff --git a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java index 2c344b77a50cac186397578b6ed840166b7da6e6..831183ddebbb2de68afe98701bbc5522366193f4 100644 --- a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java +++ b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java @@ -233,7 +233,7 @@ public class ServerConnection } } - public void addNormalPayment(NormalPayment payment) throws Exception + public Integer addNormalPayment(NormalPayment payment) throws Exception { URL url = new URL(settings.getUrl() + "/payment?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&amount=" + payment.getAmount() + "&date=" + payment.getDate() + "&categoryID=" + payment.getCategoryID() + "&name=" + Helpers.getURLEncodedString(payment.getName()) + "&description=" + Helpers.getURLEncodedString(payment.getDescription())); @@ -242,9 +242,8 @@ public class ServerConnection httpsCon.setDoInput(true); if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) { - InputStream stream = httpsCon.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - reader.close(); + String result = Read.getStringFromInputStream(httpsCon.getInputStream()); + return gson.fromJson(result, Integer.class); } else { @@ -271,7 +270,7 @@ public class ServerConnection } } - public void addRepeatingPayment(RepeatingPayment payment) throws Exception + public Integer addRepeatingPayment(RepeatingPayment payment) throws Exception { String repeatEndDate = payment.getRepeatEndDate(); if(repeatEndDate == null || repeatEndDate.equals("")) @@ -287,9 +286,8 @@ public class ServerConnection httpsCon.setDoInput(true); if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) { - InputStream stream = httpsCon.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - reader.close(); + String result = Read.getStringFromInputStream(httpsCon.getInputStream()); + return gson.fromJson(result, Integer.class); } else { diff --git a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerTagConnection.java b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerTagConnection.java index 80bb67a649515c3fda5b6f30bf6d9e94073ac326..858de8646b233295b714d2117a919c65caf4088d 100644 --- a/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerTagConnection.java +++ b/src/de/deadlocker8/budgetmaster/logic/serverconnection/ServerTagConnection.java @@ -19,7 +19,6 @@ import com.google.gson.reflect.TypeToken; import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.payment.NormalPayment; import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment; -import de.deadlocker8.budgetmaster.logic.payment.RepeatingPaymentEntry; import de.deadlocker8.budgetmaster.logic.tag.Tag; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import tools.Read; @@ -98,6 +97,24 @@ public class ServerTagConnection return null; } } + + public Tag getTag(String name) throws Exception + { + URL url = new URL(settings.getUrl() + "/tag/single/byName?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&name=" + Helpers.getURLEncodedString(name)); + HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); + httpsCon.setDoOutput(true); + httpsCon.setRequestMethod("GET"); + + if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) + { + String result = Read.getStringFromInputStream(httpsCon.getInputStream()); + return gson.fromJson(result, Tag.class); + } + else + { + return null; + } + } public void addTag(Tag tag) throws Exception { @@ -268,9 +285,9 @@ public class ServerTagConnection } } - public ArrayList<Tag> getAllTagsForRepeatingPayment(RepeatingPaymentEntry repeatingPayment) throws Exception + public ArrayList<Tag> getAllTagsForRepeatingPayment(int repeatingPaymentID) throws Exception { - URL url = new URL(settings.getUrl() + "/tag/match/all/normal?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&repeatingPaymentID=" + repeatingPayment.getID()); + URL url = new URL(settings.getUrl() + "/tag/match/all/repeating?secret=" + Helpers.getURLEncodedString(settings.getSecret()) + "&repeatingPaymentID=" + repeatingPaymentID); HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); httpsCon.setDoOutput(true); httpsCon.setRequestMethod("GET"); diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java index da9d6161628f4fb97f76008167c3c90edd16665e..cea51ffa04b925973a9d40ee80398f4036d9720d 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java @@ -77,6 +77,7 @@ public class NewPaymentController extends BaseController implements Styleable private Payment payment; private ButtonCategoryCell buttonCategoryCell; private TagField tagField; + private ArrayList<Tag> previousTags; public NewPaymentController(Stage parentStage, Controller controller, PaymentController paymentController, boolean isPayment, boolean edit, Payment payment) { @@ -125,6 +126,8 @@ public class NewPaymentController extends BaseController implements Styleable tagField.maxWidthProperty().bind(hboxTags.widthProperty()); HBox.setHgrow(tagField, Priority.ALWAYS); + previousTags = new ArrayList<>(); + initRepeatingArea(); if(edit) @@ -281,7 +284,8 @@ public class NewPaymentController extends BaseController implements Styleable try { RepeatingPaymentEntry currentPayment = (RepeatingPaymentEntry)payment; - tagField.setTags(serverTagConnection.getAllTagsForRepeatingPayment(currentPayment)); + previousTags = serverTagConnection.getAllTagsForRepeatingPayment(currentPayment.getRepeatingPaymentID()); + tagField.setTags(new ArrayList<>(previousTags)); ServerConnection connection = new ServerConnection(controller.getSettings()); RepeatingPayment repeatingPayment = connection.getRepeatingPayment(currentPayment.getRepeatingPaymentID()); @@ -316,7 +320,8 @@ public class NewPaymentController extends BaseController implements Styleable } else { - tagField.setTags(serverTagConnection.getAllTagsForPayment((NormalPayment)payment)); + previousTags = serverTagConnection.getAllTagsForPayment((NormalPayment)payment); + tagField.setTags(new ArrayList<>(previousTags)); checkBoxRepeat.setSelected(false); radioButtonPeriod.setSelected(true); toggleRepeatingArea(false); @@ -341,6 +346,7 @@ public class NewPaymentController extends BaseController implements Styleable false); } + @FXML public void save() { String name = textFieldName.getText(); @@ -390,6 +396,8 @@ public class NewPaymentController extends BaseController implements Styleable { description = ""; } + + Payment finalPayment; int repeatingInterval = 0; int repeatingDay = 0; @@ -431,12 +439,16 @@ public class NewPaymentController extends BaseController implements Styleable { connection.deleteRepeatingPayment((RepeatingPaymentEntry)payment); } - connection.addRepeatingPayment(newPayment); + int id = connection.addRepeatingPayment(newPayment); + finalPayment = newPayment; + finalPayment.setID(id); } catch(Exception e) { Logger.error(e); controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e)); + getStage().close(); + return; } } else @@ -445,12 +457,16 @@ public class NewPaymentController extends BaseController implements Styleable try { ServerConnection connection = new ServerConnection(controller.getSettings()); - connection.addRepeatingPayment(newPayment); + int id = connection.addRepeatingPayment(newPayment); + finalPayment = newPayment; + finalPayment.setID(id); } catch(Exception e) { Logger.error(e); controller.showConnectionErrorAlert(e.getMessage()); + getStage().close(); + return; } } } @@ -459,24 +475,29 @@ public class NewPaymentController extends BaseController implements Styleable if(edit) { NormalPayment newPayment = new NormalPayment(payment.getID(), amount, Helpers.getDateString(date), comboBoxCategory.getValue().getID(), name, description); + int id = payment.getID(); try { ServerConnection connection = new ServerConnection(controller.getSettings()); if(payment instanceof RepeatingPaymentEntry) { //if old one was repeating it should be deleted - connection.deleteRepeatingPayment((RepeatingPaymentEntry)payment); - connection.addNormalPayment(newPayment); + connection.deleteRepeatingPayment((RepeatingPaymentEntry)payment); + id = connection.addNormalPayment(newPayment); } else { connection.updateNormalPayment(newPayment); - } + } + finalPayment = newPayment; + finalPayment.setID(id); } catch(Exception e) { Logger.error(e); controller.showConnectionErrorAlert(e.getMessage()); + getStage().close(); + return; } } else @@ -485,15 +506,29 @@ public class NewPaymentController extends BaseController implements Styleable try { ServerConnection connection = new ServerConnection(controller.getSettings()); - connection.addNormalPayment(newPayment); + int id = connection.addNormalPayment(newPayment); + finalPayment = newPayment; + finalPayment.setID(id); } catch(Exception e) { Logger.error(e); controller.showConnectionErrorAlert(e.getMessage()); + getStage().close(); + return; } } } + + try + { + saveTags(tagField.getTags(), finalPayment); + } + catch(Exception e) + { + Logger.error(e); + controller.showConnectionErrorAlert(e.getMessage()); + } getStage().close(); paymentController.getController().refresh(controller.getFilterSettings()); @@ -541,6 +576,67 @@ public class NewPaymentController extends BaseController implements Styleable labelText3.setDisable(selected); } + private boolean tagListContainsTag(ArrayList<Tag> tags, String name) + { + for(Tag paymentTag: tags) + { + if(name.equals(paymentTag.getName())) + { + return true; + } + } + return false; + } + + private void saveTags(ArrayList<Tag> tags, Payment payment) throws Exception + { + ServerTagConnection serverTagConnection = new ServerTagConnection(controller.getSettings()); + + //check for deleted tags + for(Tag currentTag : previousTags) + { + if(!tagListContainsTag(tags, currentTag.getName())) + { + if(payment instanceof RepeatingPayment) + { + RepeatingPayment repeatingPayment = (RepeatingPayment)payment; + serverTagConnection.deleteTagMatchForRepeatingPayment(currentTag.getID(), repeatingPayment); + } + else + { + NormalPayment normalPayment = (NormalPayment)payment; + serverTagConnection.deleteTagMatchForPayment(currentTag.getID(), normalPayment); + } + } + } + + //check for new tags + for(Tag paymentTag : tags) + { + if(!tagListContainsTag(previousTags, payment.getName())) + { + String name = paymentTag.getName(); + Tag existingTag = serverTagConnection.getTag(name); + if(existingTag == null) + { + serverTagConnection.addTag(new Tag(-1, name)); + existingTag = serverTagConnection.getTag(name); + } + + if(payment instanceof RepeatingPayment) + { + RepeatingPayment repeatingPayment = (RepeatingPayment)payment; + serverTagConnection.addTagMatchForRepeatingPayment(existingTag.getID(), repeatingPayment); + } + else + { + NormalPayment normalPayment = (NormalPayment)payment; + serverTagConnection.addTagMatchForPayment(existingTag.getID(), normalPayment); + } + } + } + } + @Override public void applyStyle() { diff --git a/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java b/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java index d0fcef1083d25a5a9687ed65a4ae88b59b04d528..439460fa7b01c5939845f9d026b54621eb32196f 100644 --- a/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java +++ b/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java @@ -1,7 +1,9 @@ package de.deadlocker8.budgetmaster.ui.tagField; import java.util.ArrayList; +import java.util.Collection; +import org.controlsfx.control.textfield.AutoCompletionBinding; import org.controlsfx.control.textfield.TextFields; import de.deadlocker8.budgetmaster.logic.tag.Tag; @@ -18,6 +20,7 @@ import javafx.scene.input.KeyCode; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; +import javafx.util.Callback; import tools.ConvertTo; import tools.Localization; @@ -46,7 +49,26 @@ public class TagField extends VBox addTag(textField.getText().trim()); } }); - TextFields.bindAutoCompletion(textField, param -> getCompletions(allTags)); + + TextFields.bindAutoCompletion(textField, new Callback<AutoCompletionBinding.ISuggestionRequest, Collection<String>>() + { + + @Override + public Collection<String> call(org.controlsfx.control.textfield.AutoCompletionBinding.ISuggestionRequest param) + { + ArrayList<String> completions = getCompletions(allTags); + ArrayList<String> remainingCompletions = new ArrayList<>(); + for(String currentCompletion : completions) + { + if(currentCompletion.toLowerCase().contains(param.getUserText().toLowerCase())) + { + remainingCompletions.add(currentCompletion); + } + } + + return remainingCompletions; + } + }); this.getChildren().add(textField); this.setStyle("-fx-background-color: #FFFFFF; -fx-border-color: #000000; -fx-background-radius: 5px; -fx-border-radius: 5px"); @@ -59,7 +81,7 @@ public class TagField extends VBox { FlowPane flowPane = new FlowPane(); flowPane.setVgap(5); - flowPane.setMinHeight(20); + flowPane.setMinHeight(30); flowPane.setHgap(5); flowPane.setPadding(new Insets(5)); return flowPane; @@ -107,10 +129,11 @@ public class TagField extends VBox public void addTag(String tagName) { + //TODO max length = 45 chars if(tagName.equals("")) { return; - } + } for(Tag currentTag : tags) { @@ -120,7 +143,7 @@ public class TagField extends VBox } } - tags.add(new Tag(-1, tagName)); + tags.add(new Tag(-1, tagName)); refresh(true); } diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseHandler.java index 2101468241bb5577953a13c38b2dbab2df16c109..f2ddf9ca7bef7706de22d6993522a6cc5bc69911 100644 --- a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseHandler.java +++ b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseHandler.java @@ -792,18 +792,25 @@ public class DatabaseHandler } } - public void addNormalPayment(int amount, String date, int categoryID, String name, String description) + public Integer addNormalPayment(int amount, String date, int categoryID, String name, String description) { PreparedStatement stmt = null; try { - stmt = connection.prepareStatement("INSERT INTO payment (Amount, Date, CategoryID, Name, Description) VALUES(?, ?, ?, ?, ?);"); + stmt = connection.prepareStatement("INSERT INTO payment (Amount, Date, CategoryID, Name, Description) VALUES(?, ?, ?, ?, ?);", + Statement.RETURN_GENERATED_KEYS); stmt.setInt(1, amount); stmt.setString(2, date); stmt.setInt(3, categoryID); stmt.setString(4, name); stmt.setString(5, description); stmt.execute(); + + ResultSet rs = stmt.getGeneratedKeys(); + if(rs.next()) + { + return rs.getInt(1); + } } catch(SQLException e) { @@ -813,9 +820,11 @@ public class DatabaseHandler { closeConnection(stmt); } + + return -1; } - public void addRepeatingPayment(int amount, String date, int categoryID, String name, String description, int repeatInterval, String repeatEndDate, int repeatMonthDay) + public Integer addRepeatingPayment(int amount, String date, int categoryID, String name, String description, int repeatInterval, String repeatEndDate, int repeatMonthDay) { PreparedStatement stmt = null; String correctRepeatEndDate = repeatEndDate; @@ -826,7 +835,8 @@ public class DatabaseHandler try { - stmt = connection.prepareStatement("INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES(?, ?, ?, ?, ?, ?, ?, ?);"); + stmt = connection.prepareStatement("INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES(?, ?, ?, ?, ?, ?, ?, ?);", + Statement.RETURN_GENERATED_KEYS); stmt.setInt(1, amount); stmt.setString(2, date); stmt.setInt(3, categoryID); @@ -836,16 +846,23 @@ public class DatabaseHandler stmt.setInt(7, repeatMonthDay); stmt.setString(8, description); stmt.execute(); + + ResultSet rs = stmt.getGeneratedKeys(); + if(rs.next()) + { + return rs.getInt(1); + } } catch(SQLException e) - { - e.printStackTrace(); + { Logger.error(e); } finally { closeConnection(stmt); } + + return -1; } public void addRepeatingPaymentEntry(int repeatingPaymentID, String date) diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java index 8df044b57441a007ee784d144976c58dcc75aa39..9da524b4e953093228d1516fb1dcfc15d9673ab3 100644 --- a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java +++ b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseTagHandler.java @@ -98,6 +98,36 @@ public class DatabaseTagHandler closeConnection(stmt); } + return tag; + } + + public Tag getTagByName(String name) + { + PreparedStatement stmt = null; + Tag tag = null; + try + { + stmt = connection.prepareStatement("SELECT * FROM tag WHERE tag.Name= ?;"); + stmt.setString(1, name); + ResultSet rs = stmt.executeQuery(); + + while(rs.next()) + { + int id = rs.getInt("ID"); + String newName = rs.getString("Name"); + + tag = new Tag(id, newName); + } + } + catch(SQLException e) + { + Logger.error(e); + } + finally + { + closeConnection(stmt); + } + return tag; } diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index fb778a5e80875cb8b6c0f6f5e87a72332c8de63e..86d6552d3328f59b96df0dca4fe69c8dfe6bcb34 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -55,6 +55,7 @@ import de.deadlocker8.budgetmasterserver.server.tag.tag.TagAdd; import de.deadlocker8.budgetmasterserver.server.tag.tag.TagDelete; import de.deadlocker8.budgetmasterserver.server.tag.tag.TagGet; import de.deadlocker8.budgetmasterserver.server.tag.tag.TagGetAll; +import de.deadlocker8.budgetmasterserver.server.tag.tag.TagGetByName; import de.deadlocker8.budgetmasterserver.server.updater.RepeatingPaymentUpdater; import de.deadlocker8.budgetmasterserver.server.version.VersionGet; import logger.Logger; @@ -66,6 +67,7 @@ public class SparkServer { private Gson gson; private DatabaseHandler handler; + private DatabaseTagHandler tagHandler; public SparkServer(Settings settings, VersionInformation versionInfo) { @@ -95,6 +97,7 @@ public class SparkServer RouteOverview.enableRouteOverview(); handler = new DatabaseHandler(settings); + tagHandler = new DatabaseTagHandler(settings); before((request, response) -> { @@ -119,15 +122,15 @@ public class SparkServer get("/payment/search", new PaymentSearch(handler)); // Normal get("/payment", new PaymentGet(handler, gson)); - post("/payment", new PaymentAdd(handler)); + post("/payment", new PaymentAdd(handler, gson)); put("/payment", new PaymentUpdate(handler)); - delete("/payment", new PaymentDelete(handler)); + delete("/payment", new PaymentDelete(handler, tagHandler)); // Repeating get("/repeatingpayment/single", new RepeatingPaymentGet(handler, gson)); get("/repeatingpayment", new RepeatingPaymentGetAll(handler, gson)); - post("/repeatingpayment", new RepeatingPaymentAdd(handler)); - delete("/repeatingpayment", new RepeatingPaymentDelete(handler)); + post("/repeatingpayment", new RepeatingPaymentAdd(handler, gson)); + delete("/repeatingpayment", new RepeatingPaymentDelete(handler, tagHandler)); // CategoryBudget get("/categorybudget", new CategoryBudgetGet(handler, gson)); @@ -140,20 +143,21 @@ public class SparkServer get("/charts/monthInOutSum", new MonthInOutSum(handler, gson)); // tag - get("/tag/single", new TagGet(new DatabaseTagHandler(settings), gson)); - get("/tag", new TagGetAll(new DatabaseTagHandler(settings), gson)); - post("/tag", new TagAdd(new DatabaseTagHandler(settings))); - delete("/tag", new TagDelete(new DatabaseTagHandler(settings))); + get("/tag/single", new TagGet(tagHandler, gson)); + get("/tag/single/byName", new TagGetByName(tagHandler, gson)); + get("/tag", new TagGetAll(tagHandler, gson)); + post("/tag", new TagAdd(tagHandler)); + delete("/tag", new TagDelete(tagHandler)); // tag match - get("/tag/match/all/normal", new TagMatchGetAllForPayment(new DatabaseTagHandler(settings), gson)); - get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(new DatabaseTagHandler(settings), gson)); - get("/tag/match/normal", new TagMatchExistingForPayment(new DatabaseTagHandler(settings), gson)); - get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(new DatabaseTagHandler(settings), gson)); - post("/tag/match/normal", new TagMatchAddForPayment(new DatabaseTagHandler(settings))); - post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(new DatabaseTagHandler(settings))); - delete("/tag/match/normal", new TagMatchDeleteForPayment(new DatabaseTagHandler(settings))); - delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(new DatabaseTagHandler(settings))); + get("/tag/match/all/normal", new TagMatchGetAllForPayment(tagHandler, gson)); + get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(tagHandler, gson)); + get("/tag/match/normal", new TagMatchExistingForPayment(tagHandler, gson)); + get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(tagHandler, gson)); + post("/tag/match/normal", new TagMatchAddForPayment(tagHandler)); + post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(tagHandler)); + delete("/tag/match/normal", new TagMatchDeleteForPayment(tagHandler)); + delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(tagHandler)); // Database get("/database", new DatabaseExport(settings, gson)); diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentAdd.java b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentAdd.java index 53580d8b925d12db336c1a649dff3c51d6975748..86a78819e0481f958bd4eaaef065f52b53519d11 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentAdd.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentAdd.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmasterserver.server.payment.normal; import static spark.Spark.halt; +import com.google.gson.Gson; + import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; import spark.Request; import spark.Response; @@ -10,10 +12,12 @@ import spark.Route; public class PaymentAdd implements Route { private DatabaseHandler handler; + private Gson gson; - public PaymentAdd(DatabaseHandler handler) + public PaymentAdd(DatabaseHandler handler, Gson gson) { this.handler = handler; + this.gson = gson; } @Override @@ -38,13 +42,13 @@ public class PaymentAdd implements Route try { - handler.addNormalPayment(amount, - req.queryMap("date").value(), - categoryID, - req.queryMap("name").value(), - req.queryMap("description").value()); + Integer id = handler.addNormalPayment(amount, + req.queryMap("date").value(), + categoryID, + req.queryMap("name").value(), + req.queryMap("description").value()); - return ""; + return gson.toJson(id); } catch(IllegalStateException ex) { @@ -52,8 +56,7 @@ public class PaymentAdd implements Route } } catch(Exception e) - { - e.printStackTrace(); + { halt(400, "Bad Request"); } diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentDelete.java b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentDelete.java index ff7b6a5ae53c0b42c2cd91e04212545cf0a698f9..f0a059d1cb7fb0f628006ca844a2bdbb679ebde2 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentDelete.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/normal/PaymentDelete.java @@ -2,7 +2,10 @@ package de.deadlocker8.budgetmasterserver.server.payment.normal; import static spark.Spark.halt; +import java.util.ArrayList; + import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; +import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; import spark.Request; import spark.Response; import spark.Route; @@ -10,10 +13,12 @@ import spark.Route; public class PaymentDelete implements Route { private DatabaseHandler handler; + private DatabaseTagHandler tagHandler; - public PaymentDelete(DatabaseHandler handler) + public PaymentDelete(DatabaseHandler handler, DatabaseTagHandler tagHandler) { this.handler = handler; + this.tagHandler = tagHandler; } @Override @@ -37,7 +42,12 @@ public class PaymentDelete implements Route try { - handler.deletePayment(id); + handler.deletePayment(id); + ArrayList<Integer> tagIDs = tagHandler.getAllTagsForPayment(id); + for(Integer currentTagID : tagIDs) + { + tagHandler.deleteTagMatchForPayment(currentTagID, id); + } return ""; } diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentAdd.java b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentAdd.java index 0c711c30f0f6e1c5ea8baf7c7ff721c61c2a0221..72111cbffa878a2a8a1be9f6db7a03d4c8132cb8 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentAdd.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentAdd.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmasterserver.server.payment.repeating; import static spark.Spark.halt; +import com.google.gson.Gson; + import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; import spark.Request; import spark.Response; @@ -10,10 +12,12 @@ import spark.Route; public class RepeatingPaymentAdd implements Route { private DatabaseHandler handler; + private Gson gson; - public RepeatingPaymentAdd(DatabaseHandler handler) + public RepeatingPaymentAdd(DatabaseHandler handler, Gson gson) { this.handler = handler; + this.gson = gson; } @Override @@ -45,16 +49,16 @@ public class RepeatingPaymentAdd implements Route try { - handler.addRepeatingPayment(amount, - req.queryMap("date").value(), - categoryID, - req.queryMap("name").value(), - req.queryMap("description").value(), - repeatInterval, - req.queryMap("repeatEndDate").value(), - repeatMonthDay); + Integer id = handler.addRepeatingPayment(amount, + req.queryMap("date").value(), + categoryID, + req.queryMap("name").value(), + req.queryMap("description").value(), + repeatInterval, + req.queryMap("repeatEndDate").value(), + repeatMonthDay); - return ""; + return gson.toJson(id); } catch(IllegalStateException ex) { diff --git a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentDelete.java b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentDelete.java index 89d2c121929fd5198eb0fd67e93fb1c54240d101..0df80498598d4b81e4736201d11a44ba34f5481d 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentDelete.java +++ b/src/de/deadlocker8/budgetmasterserver/server/payment/repeating/RepeatingPaymentDelete.java @@ -2,7 +2,10 @@ package de.deadlocker8.budgetmasterserver.server.payment.repeating; import static spark.Spark.halt; +import java.util.ArrayList; + import de.deadlocker8.budgetmasterserver.logic.database.DatabaseHandler; +import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; import spark.Request; import spark.Response; import spark.Route; @@ -10,10 +13,12 @@ import spark.Route; public class RepeatingPaymentDelete implements Route { private DatabaseHandler handler; + private DatabaseTagHandler tagHandler; - public RepeatingPaymentDelete(DatabaseHandler handler) + public RepeatingPaymentDelete(DatabaseHandler handler, DatabaseTagHandler tagHandler) { this.handler = handler; + this.tagHandler = tagHandler; } @Override @@ -37,7 +42,12 @@ public class RepeatingPaymentDelete implements Route try { - handler.deleteRepeatingPayment(id); + handler.deleteRepeatingPayment(id); + ArrayList<Integer> tagIDs = tagHandler.getAllTagsForRepeatingPayment(id); + for(Integer currentTagID : tagIDs) + { + tagHandler.deleteTagMatchForRepeatingPayment(currentTagID, id); + } return ""; } diff --git a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchGetAllForPayment.java b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchGetAllForPayment.java index 8617a15d2138ad424e758cf61fe3a614d84862cd..08a93ad9b39d992c4fd7d3efce79529266e37c9a 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchGetAllForPayment.java +++ b/src/de/deadlocker8/budgetmasterserver/server/tag/match/TagMatchGetAllForPayment.java @@ -49,7 +49,7 @@ public class TagMatchGetAllForPayment implements Route { tags.add(currentTag); } - } + } return gson.toJson(tags); } diff --git a/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGet.java b/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGet.java index b804ef4b646cfdae165732a7f4dac1ca41fb0ffd..782df0b96bd7b4ba78fc064aa3eced912a45cf58 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGet.java +++ b/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGet.java @@ -47,8 +47,7 @@ public class TagGet implements Route return gson.toJson(tag); } catch(IllegalStateException e) - { - e.printStackTrace(); + { halt(500, "Internal Server Error"); } } diff --git a/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGetByName.java b/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGetByName.java new file mode 100644 index 0000000000000000000000000000000000000000..a4e7a898978ff76953b2d73bb199d7653e3a0059 --- /dev/null +++ b/src/de/deadlocker8/budgetmasterserver/server/tag/tag/TagGetByName.java @@ -0,0 +1,44 @@ +package de.deadlocker8.budgetmasterserver.server.tag.tag; + +import static spark.Spark.halt; + +import com.google.gson.Gson; + +import de.deadlocker8.budgetmaster.logic.tag.Tag; +import de.deadlocker8.budgetmasterserver.logic.database.DatabaseTagHandler; +import spark.Request; +import spark.Response; +import spark.Route; + +public class TagGetByName implements Route +{ + private DatabaseTagHandler tagHandler; + private Gson gson; + + public TagGetByName(DatabaseTagHandler tagHandler, Gson gson) + { + this.tagHandler = tagHandler; + this.gson = gson; + } + + @Override + public Object handle(Request req, Response res) throws Exception + { + if(!req.queryParams().contains("name")) + { + halt(400, "Bad Request"); + } + + try + { + Tag tag = tagHandler.getTagByName(req.queryMap("name").value()); + return gson.toJson(tag); + } + catch(Exception e) + { + halt(500, "Internal Server Error"); + } + + return null; + } +} \ No newline at end of file