From 1f746d1cf759bb55fc04c0aa385c4bc90e01f873 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Mon, 27 Nov 2017 16:46:24 +0100 Subject: [PATCH] #235 - added shutdown hook; added auto start for local server; --- .../ui/controller/Controller.java | 11 +- .../LocalServerSettingsController.java | 190 ++++++++---------- .../budgetmaster/languages/_de.properties | 5 +- .../budgetmaster/languages/_en.properties | 3 +- .../logic/LocalServerException.java | 11 + .../logic/LocalServerHandler.java | 40 +++- .../budgetmaster/logic/LocalServerStatus.java | 6 + .../budgetmaster/logic/utils/Strings.java | 1 - .../budgetmasterserver/logic/Utils.java | 8 +- .../server/SparkServer.java | 121 +++++------ 10 files changed, 221 insertions(+), 175 deletions(-) create mode 100644 BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java create mode 100644 BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java index 6c6824cac..83594f13c 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java @@ -146,6 +146,15 @@ public class Controller extends BaseController System.exit(0); }); + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + Logger.debug("Received shutdown hook"); + if(localServerProcess != null) + { + Logger.debug("Stopping local BudgetMasterServer..."); + localServerProcess.destroy(); + } + })); + if(settings.getServerType() == null) { settings.setServerType(ServerType.ONLINE); @@ -278,7 +287,7 @@ public class Controller extends BaseController } else { - refresh(filterSettings); + refresh(filterSettings); } } diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java index d15e8952c..75c5d8541 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java @@ -3,7 +3,9 @@ package de.deadlocker8.budgetmasterclient.ui.controller; import java.io.IOException; import java.util.ArrayList; +import de.deadlocker8.budgetmaster.logic.LocalServerException; import de.deadlocker8.budgetmaster.logic.LocalServerHandler; +import de.deadlocker8.budgetmaster.logic.LocalServerStatus; import de.deadlocker8.budgetmaster.logic.ServerType; import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.updater.Updater; @@ -65,29 +67,29 @@ public class LocalServerSettingsController extends SettingsController public void init(Controller controller) { super.controller = controller; - + ToggleGroup toggleGroupServerType = new ToggleGroup(); toggleButtonOnline.setToggleGroup(toggleGroupServerType); toggleButtonLocal.setToggleGroup(toggleGroupServerType); - toggleButtonOnline.setOnAction((event)->{ + toggleButtonOnline.setOnAction((event) -> { controller.getSettings().setServerType(ServerType.ONLINE); controller.loadSettingsTab(); }); - - textFieldClientSecret.setText("******"); - + + textFieldClientSecret.setText("******"); + comboBoxLanguage.setCellFactory((view) -> { return new LanguageCell(true); - }); - - comboBoxLanguage.getItems().addAll(LanguageType.values()); + }); + + comboBoxLanguage.getItems().addAll(LanguageType.values()); comboBoxLanguage.setButtonCell(new LanguageCell(false)); comboBoxLanguage.setValue(LanguageType.ENGLISH); previousLanguage = LanguageType.ENGLISH; checkboxEnableAutoUpdate.setSelected(true); - + prefill(); - + applyStyle(); textFieldCurrency.setPromptText(Localization.getString(Strings.CURRENCY_PLACEHOLDER)); @@ -95,21 +97,21 @@ public class LocalServerSettingsController extends SettingsController ToggleGroup toggleGroup = new ToggleGroup(); radioButtonRestActivated.setToggleGroup(toggleGroup); radioButtonRestDeactivated.setToggleGroup(toggleGroup); - + hboxSettings.prefWidthProperty().bind(scrollPane.widthProperty().subtract(25)); - + refreshLabelsUpdate(); - + save(); } - + @Override public void prefill() { checkServerStatus(); - + textFieldCurrency.setText(controller.getSettings().getCurrency()); - + if(controller.getSettings().isRestActivated()) { radioButtonRestActivated.setSelected(true); @@ -118,93 +120,92 @@ public class LocalServerSettingsController extends SettingsController { radioButtonRestDeactivated.setSelected(true); } - + if(controller.getSettings().getLanguage() != null) { LanguageType language = controller.getSettings().getLanguage(); comboBoxLanguage.setValue(language); previousLanguage = language; } - + checkboxEnableAutoUpdate.setSelected(controller.getSettings().isAutoUpdateCheckEnabled()); } - + private void checkServerStatus() { LocalServerHandler serverHandler = new LocalServerHandler(); - if(serverHandler.isServerPresent()) + switch(serverHandler.getServerStatus()) { - if(serverHandler.isServerRunning()) - { + case ACTIVE: labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_OK)); buttonLocalServerAction.setVisible(false); - } - else - { + + RestartHandler restartHandler = new RestartHandler(controller); + restartHandler.handleRestart(controller.getSettings().getLanguage()); + refreshLabelsUpdate(); + break; + case INACTIVE: labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_STARTED)); - buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_STARTED)); + buttonLocalServerAction.setVisible(false); + try + { + Logger.debug("Starting local Server..."); + serverHandler.createServerSettingsIfNotExists(); + controller.setLocalServerProcess(serverHandler.startServer()); + try + { + Thread.sleep(2000); + } + catch(InterruptedException e) + { + } + + if(!serverHandler.getServerStatus().equals(LocalServerStatus.ACTIVE)) + { + throw new LocalServerException(""); + } + + // TODO modals for download and start of server + // TODO what happens after update of client? + // --> TODO check compatibility of server and client + } + catch(IOException e) + { + Logger.debug("Error while starting local server"); + Logger.error(e); + AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false); + } + catch(LocalServerException ex) + { + Logger.debug("Error while starting local server"); + AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, ""), controller.getIcon(), controller.getStage(), null, false); + } + break; + case MISSING: + labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT)); + buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT)); buttonLocalServerAction.setVisible(true); buttonLocalServerAction.setDisable(false); - buttonLocalServerAction.setOnAction((event)->{ - buttonLocalServerAction.setDisable(true); + + buttonLocalServerAction.setOnAction((event) -> { try { - controller.setLocalServerProcess(serverHandler.startServer()); - try - { - Thread.sleep(2000); - } - catch(InterruptedException e) - { - } + buttonLocalServerAction.setDisable(true); + serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME)); + serverHandler.createServerSettingsIfNotExists(); checkServerStatus(); - - //TODO refresh all data - //TODO modals for download and start of server - //TODO autostart server on startup if serverType = local and server is present } - catch(IOException e) + catch(Exception e) { Logger.error(e); - AlertGenerator.showAlert(AlertType.ERROR, - Localization.getString(Strings.TITLE_ERROR), - "", - Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), - controller.getIcon(), controller.getStage(), null, false); + AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()), controller.getIcon(), controller.getStage(), null, false); buttonLocalServerAction.setDisable(false); } }); - } + break; } - else - { - labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT)); - buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT)); - buttonLocalServerAction.setVisible(true); - buttonLocalServerAction.setDisable(false); - - buttonLocalServerAction.setOnAction((event)->{ - try - { - buttonLocalServerAction.setDisable(true); - serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME)); - serverHandler.createServerSettings(); - checkServerStatus(); - } - catch(Exception e) - { - Logger.error(e); - AlertGenerator.showAlert(AlertType.ERROR, - Localization.getString(Strings.TITLE_ERROR), - "", - Localization.getString(Strings.ERROR_LOCAL_SERVER_DOWNLOAD, e.getMessage()), - controller.getIcon(), controller.getStage(), null, false); - buttonLocalServerAction.setDisable(false); - } - }); - } } - + @Override void refreshLabelsUpdate() { @@ -218,30 +219,16 @@ public class LocalServerSettingsController extends SettingsController { String clientSecret = textFieldClientSecret.getText().trim(); String currency = textFieldCurrency.getText().trim(); - + if(clientSecret == null || clientSecret.equals("")) { - AlertGenerator.showAlert(AlertType.WARNING, - Localization.getString(Strings.TITLE_WARNING), - "", - Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT), - controller.getIcon(), - controller.getStage(), - null, - false); + AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_SECRET_CLIENT), controller.getIcon(), controller.getStage(), null, false); return; } if(currency == null || currency.equals("")) { - AlertGenerator.showAlert(AlertType.WARNING, - Localization.getString(Strings.TITLE_WARNING), - "", - Localization.getString(Strings.WARNING_EMPTY_CURRENCY), - controller.getIcon(), - controller.getStage(), - null, - false); + AlertGenerator.showAlert(AlertType.WARNING, Localization.getString(Strings.TITLE_WARNING), "", Localization.getString(Strings.WARNING_EMPTY_CURRENCY), controller.getIcon(), controller.getStage(), null, false); return; } @@ -251,7 +238,7 @@ public class LocalServerSettingsController extends SettingsController { controller.getSettings().setClientSecret(HashUtils.hash(clientSecret, Helpers.SALT)); } - + controller.getSettings().setCurrency(currency); controller.getSettings().setRestActivated(radioButtonRestActivated.isSelected()); controller.getSettings().setLanguage(comboBoxLanguage.getValue()); @@ -260,7 +247,7 @@ public class LocalServerSettingsController extends SettingsController else { Settings settings = new Settings(); - + if(!clientSecret.equals("******")) { settings.setClientSecret(HashUtils.hash(clientSecret, Helpers.SALT)); @@ -268,15 +255,15 @@ public class LocalServerSettingsController extends SettingsController else { settings.setClientSecret(controller.getSettings().getClientSecret()); - } - + } + settings.setCurrency(currency); settings.setRestActivated(radioButtonRestActivated.isSelected()); settings.setLanguage(comboBoxLanguage.getValue()); settings.setAutoUpdateCheckEnabled(checkboxEnableAutoUpdate.isSelected()); controller.setSettings(settings); } - + controller.getSettings().setSecret(HashUtils.hash("BudgetMaster", Helpers.SALT)); controller.getSettings().setUrl("https://localhost:9000"); ArrayList<String> trustedHosts = new ArrayList<>(); @@ -290,14 +277,7 @@ public class LocalServerSettingsController extends SettingsController catch(IOException e) { Logger.error(e); - AlertGenerator.showAlert(AlertType.ERROR, - Localization.getString(Strings.TITLE_ERROR), - "", - Localization.getString(Strings.ERROR_SETTINGS_SAVE), - controller.getIcon(), - controller.getStage(), - null, - false); + AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_SETTINGS_SAVE), controller.getIcon(), controller.getStage(), null, false); } textFieldClientSecret.setText("******"); diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties index 7441d6681..fc68d4ae1 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties @@ -1,7 +1,7 @@ # DEFAULT app.name=BudgetMaster version.code=13 -version.name=1.7.0 +version.name=1.6.0 version.date=07.11.17 author=Robert Goldmann credits=L�nderflaggen von Freepik auf https://www.flaticon.com\nVerwendete Schriftarten: OpenSans\nVerwendete Bibliotheken:\ngson 2.8.1\njoda-time 2.9.7\nitextpdf 5.0.6\nlaunch4j-maven-plugin 1.7.21\nspark-core 2.5.4\nslf4j 1.7.21\nmysql-connector 6.0.5\njunit 4.12\nsqlite-jdbc 3.21.0 @@ -68,8 +68,7 @@ undefined=unbekannt tagfield.placeholder=Neuen Tag hier eingeben shortcut.dev.console=F12 local.server.status.ok=Server ist gestartet. -local.server.status.not.started=Server is nicht gestartet. -local.server.action.not.started=Starten +local.server.status.not.started=Server konnte nicht gestartet werden. local.server.status.not.present=Server nicht gefunden. local.server.action.not.present=Herunterladen diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties index 9f40fe8fa..2601c54fa 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties @@ -68,8 +68,7 @@ undefined=undefined tagfield.placeholder=Enter new Tag here shortcut.dev.console=F12 local.server.status.ok=Server is running. -local.server.status.not.started=Server is not running. -local.server.action.not.started=Start +local.server.status.not.started=Server couldn't be started. local.server.status.not.present=Server not found. local.server.action.not.present=Download diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java new file mode 100644 index 000000000..d1f8712c6 --- /dev/null +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java @@ -0,0 +1,11 @@ +package de.deadlocker8.budgetmaster.logic; + +public class LocalServerException extends Exception +{ + private static final long serialVersionUID = 3925464782915168752L; + + public LocalServerException(String message) + { + super(message); + } +} \ No newline at end of file diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java index ca9fb5f6d..ae0c767ed 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java @@ -52,16 +52,23 @@ public class LocalServerHandler } catch(Exception e) { - Logger.error(e); + Logger.debug(e); return false; } } - public void createServerSettings() throws FileNotFoundException + public void createServerSettingsIfNotExists() throws FileNotFoundException { + File settingsFile = new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json"); + if(settingsFile.exists()) + { + return; + } + Logger.debug("Creating settings file for local server..."); + String databasePath = PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMaster.db"; String settings = "{\"databaseType\": \"sqlite\"," + - "\"databaseUrl\": \"" + databasePath + "\"," + + "\"databaseUrl\": \"" + databasePath.replace("\\", "/") + "\"," + "\"databaseName\": \"budgetmaster\"," + "\"databaseUsername\": \"root\"," + "\"databasePassword\": \"\"," + @@ -69,13 +76,14 @@ public class LocalServerHandler "\"serverSecret\": \"BudgetMaster\"," + "\"keystorePath\": \"default\"," + "\"keystorePassword\": \"BudgetMaster\"}"; - PrintWriter writer = new PrintWriter(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json"); + PrintWriter writer = new PrintWriter(settingsFile); writer.println(settings); writer.close(); } public void downloadServer(String versionName) throws Exception { + Logger.debug("Downloading BudgetMasterServer from " + BUILD_FOLDER.replace("{}", "v" + versionName)); PathUtils.checkFolder(new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer")); //download into temp directory and file @@ -96,4 +104,28 @@ public class LocalServerHandler ProcessBuilder pb = new ProcessBuilder("java", "-jar", Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMasterServer.jar").toString()); return pb.start(); } + + public LocalServerStatus getServerStatus() + { + LocalServerHandler serverHandler = new LocalServerHandler(); + if(serverHandler.isServerPresent()) + { + Logger.debug("Local server found"); + if(serverHandler.isServerRunning()) + { + Logger.debug("Local server is running"); + return LocalServerStatus.ACTIVE; + } + else + { + Logger.debug("Local server is NOT running"); + return LocalServerStatus.INACTIVE; + } + } + else + { + Logger.debug("Local server NOT found"); + return LocalServerStatus.MISSING; + } + } } \ No newline at end of file diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java new file mode 100644 index 000000000..ec5084a23 --- /dev/null +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java @@ -0,0 +1,6 @@ +package de.deadlocker8.budgetmaster.logic; + +public enum LocalServerStatus +{ + ACTIVE, INACTIVE, MISSING; +} \ No newline at end of file diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java index 9fdf6543d..4f8cd1db2 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -73,7 +73,6 @@ public class Strings public static final String LOCAL_SERVER_STATUS_OK = "local.server.status.ok"; public static final String LOCAL_SERVER_STATUS_NOT_STARTED = "local.server.status.not.started"; public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present"; - public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started"; public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present"; //REPORT diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java index 4d4fd5d39..0a0b2adab 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/logic/Utils.java @@ -71,8 +71,10 @@ public class Utils } } - public static DatabaseHandler getDatabaseHandler(Settings settings) + public static DatabaseHandler getDatabaseHandler(Settings settings) throws ClassNotFoundException { + Class.forName("org.sqlite.JDBC"); + if(settings.getDatabaseType().equals("mysql")) { return new MysqlDatabaseHandler(settings); @@ -83,8 +85,10 @@ public class Utils } } - public static DatabaseTagHandler getDatabaseTagHandler(Settings settings) + public static DatabaseTagHandler getDatabaseTagHandler(Settings settings) throws ClassNotFoundException { + Class.forName("org.sqlite.JDBC"); + if(settings.getDatabaseType().equals("mysql")) { return new MysqlDatabaseTagHandler(settings); diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java index 900e3b54e..b60309e10 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -138,64 +138,71 @@ public class SparkServer paymentUpdater.updateRepeatingPayments(DateTime.now()); handler.closeConnection(); }); - - // Category - get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson)); - get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson)); - post("/category", new CategoryAdd(Utils.getDatabaseHandler(settings))); - put("/category", new CategoryUpdate(Utils.getDatabaseHandler(settings))); - delete("/category", new CategoryDelete(Utils.getDatabaseHandler(settings))); - - // Payment - get("/payment/search", new PaymentSearch(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); - get("/payment/search/maxAmount", new PaymentMaxAmount(Utils.getDatabaseHandler(settings), gson)); - // Normal - get("/payment", new PaymentGet(Utils.getDatabaseHandler(settings), gson)); - post("/payment", new PaymentAdd(Utils.getDatabaseHandler(settings), gson)); - put("/payment", new PaymentUpdate(Utils.getDatabaseHandler(settings))); - delete("/payment", new PaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); - - // Repeating - get("/repeatingpayment/single", new RepeatingPaymentGet(Utils.getDatabaseHandler(settings), gson)); - get("/repeatingpayment", new RepeatingPaymentGetAll(Utils.getDatabaseHandler(settings), gson)); - post("/repeatingpayment", new RepeatingPaymentAdd(Utils.getDatabaseHandler(settings), gson)); - delete("/repeatingpayment", new RepeatingPaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); - - // CategoryBudget - get("/categorybudget", new CategoryBudgetGet(Utils.getDatabaseHandler(settings), gson)); - - // Rest - get("/rest", new RestGet(Utils.getDatabaseHandler(settings), gson)); - - // charts - get("/charts/categoryInOutSum", new CategoryInOutSumForMonth(Utils.getDatabaseHandler(settings), gson)); - get("/charts/monthInOutSum", new MonthInOutSum(Utils.getDatabaseHandler(settings), gson)); - - // tag - get("/tag/single", new TagGet(Utils.getDatabaseTagHandler(settings), gson)); - get("/tag/single/byName", new TagGetByName(Utils.getDatabaseTagHandler(settings), gson)); - get("/tag", new TagGetAll(Utils.getDatabaseTagHandler(settings), gson)); - post("/tag", new TagAdd(Utils.getDatabaseTagHandler(settings))); - delete("/tag", new TagDelete(Utils.getDatabaseTagHandler(settings))); - - // tag match - get("/tag/match/all/normal", new TagMatchGetAllForPayment(Utils.getDatabaseTagHandler(settings), gson)); - get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson)); - get("/tag/match/normal", new TagMatchExistingForPayment(Utils.getDatabaseTagHandler(settings), gson)); - get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson)); - post("/tag/match/normal", new TagMatchAddForPayment(Utils.getDatabaseTagHandler(settings))); - post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(Utils.getDatabaseTagHandler(settings))); - delete("/tag/match/normal", new TagMatchDeleteForPayment(Utils.getDatabaseTagHandler(settings))); - delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(Utils.getDatabaseTagHandler(settings))); - - // Database - get("/database", new DatabaseExport(settings, gson)); - post("/database", new DatabaseImport(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings), gson)); - delete("/database", new DatabaseDelete(Utils.getDatabaseHandler(settings), settings)); - get("/info", new InformationGet(gson, versionInfo, settings)); - get("/version", new VersionGet(gson, versionInfo)); - delete("/log", new LogDelete()); + try + { + // Category + get("/category", new CategoryGetAll(Utils.getDatabaseHandler(settings), gson)); + get("/category/single", new CategoryGet(Utils.getDatabaseHandler(settings), gson)); + post("/category", new CategoryAdd(Utils.getDatabaseHandler(settings))); + put("/category", new CategoryUpdate(Utils.getDatabaseHandler(settings))); + delete("/category", new CategoryDelete(Utils.getDatabaseHandler(settings))); + + // Payment + get("/payment/search", new PaymentSearch(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); + get("/payment/search/maxAmount", new PaymentMaxAmount(Utils.getDatabaseHandler(settings), gson)); + // Normal + get("/payment", new PaymentGet(Utils.getDatabaseHandler(settings), gson)); + post("/payment", new PaymentAdd(Utils.getDatabaseHandler(settings), gson)); + put("/payment", new PaymentUpdate(Utils.getDatabaseHandler(settings))); + delete("/payment", new PaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); + + // Repeating + get("/repeatingpayment/single", new RepeatingPaymentGet(Utils.getDatabaseHandler(settings), gson)); + get("/repeatingpayment", new RepeatingPaymentGetAll(Utils.getDatabaseHandler(settings), gson)); + post("/repeatingpayment", new RepeatingPaymentAdd(Utils.getDatabaseHandler(settings), gson)); + delete("/repeatingpayment", new RepeatingPaymentDelete(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings))); + + // CategoryBudget + get("/categorybudget", new CategoryBudgetGet(Utils.getDatabaseHandler(settings), gson)); + + // Rest + get("/rest", new RestGet(Utils.getDatabaseHandler(settings), gson)); + + // charts + get("/charts/categoryInOutSum", new CategoryInOutSumForMonth(Utils.getDatabaseHandler(settings), gson)); + get("/charts/monthInOutSum", new MonthInOutSum(Utils.getDatabaseHandler(settings), gson)); + + // tag + get("/tag/single", new TagGet(Utils.getDatabaseTagHandler(settings), gson)); + get("/tag/single/byName", new TagGetByName(Utils.getDatabaseTagHandler(settings), gson)); + get("/tag", new TagGetAll(Utils.getDatabaseTagHandler(settings), gson)); + post("/tag", new TagAdd(Utils.getDatabaseTagHandler(settings))); + delete("/tag", new TagDelete(Utils.getDatabaseTagHandler(settings))); + + // tag match + get("/tag/match/all/normal", new TagMatchGetAllForPayment(Utils.getDatabaseTagHandler(settings), gson)); + get("/tag/match/all/repeating", new TagMatchGetAllForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson)); + get("/tag/match/normal", new TagMatchExistingForPayment(Utils.getDatabaseTagHandler(settings), gson)); + get("/tag/match/repeating", new TagMatchExistingForRepeatingPayment(Utils.getDatabaseTagHandler(settings), gson)); + post("/tag/match/normal", new TagMatchAddForPayment(Utils.getDatabaseTagHandler(settings))); + post("/tag/match/repeating", new TagMatchAddForRepeatingPayment(Utils.getDatabaseTagHandler(settings))); + delete("/tag/match/normal", new TagMatchDeleteForPayment(Utils.getDatabaseTagHandler(settings))); + delete("/tag/match/repeating", new TagMatchDeleteForRepeatingPayment(Utils.getDatabaseTagHandler(settings))); + + // Database + get("/database", new DatabaseExport(settings, gson)); + post("/database", new DatabaseImport(Utils.getDatabaseHandler(settings), Utils.getDatabaseTagHandler(settings), gson)); + delete("/database", new DatabaseDelete(Utils.getDatabaseHandler(settings), settings)); + + get("/info", new InformationGet(gson, versionInfo, settings)); + get("/version", new VersionGet(gson, versionInfo)); + delete("/log", new LogDelete()); + } + catch(ClassNotFoundException e) + { + Logger.error(e); + } after((request, response) -> { DatabaseHandler handler = Utils.getDatabaseHandler(settings); -- GitLab