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 1d3bef002f2e3bc46be27605a5e5469de2a894f5..79a97e74367fd36aaef2894984b511e4d36d89dd 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 @@ -399,6 +399,12 @@ public class Controller extends BaseController { new DatePickerController(getStage(), this, currentDate); } + + public void forceSettingsTab() + { + toggleAllTabsExceptSettings(true); + tabPane.getSelectionModel().select(tabSettings); + } public void showConnectionErrorAlert(String errorMessage) { @@ -799,18 +805,31 @@ public class Controller extends BaseController VersionInformation serverVersion = connection.getServerVersion(); if(serverVersion.getVersionCode() < Integer.parseInt(Localization.getString(Strings.VERSION_CODE))) { - Platform.runLater(()->{ - AlertGenerator.showAlert(AlertType.WARNING, - Localization.getString(Strings.TITLE_WARNING), - "", - Localization.getString(Strings.WARNING_SERVER_VERSION, serverVersion.getVersionName(), Localization.getString(Strings.VERSION_NAME)), - icon, getStage(), null, false); - - LoadingModal.closeModal(); - categoryHandler = new CategoryHandler(null); - toggleAllTabsExceptSettings(true); - tabPane.getSelectionModel().select(tabSettings); - }); + if(settings.getServerType().equals(ServerType.ONLINE)) + { + Platform.runLater(()->{ + AlertGenerator.showAlert(AlertType.WARNING, + Localization.getString(Strings.TITLE_WARNING), + "", + Localization.getString(Strings.WARNING_SERVER_VERSION, serverVersion.getVersionName(), Localization.getString(Strings.VERSION_NAME)), + icon, getStage(), null, false); + + LoadingModal.closeModal(); + categoryHandler = new CategoryHandler(null); + toggleAllTabsExceptSettings(true); + tabPane.getSelectionModel().select(tabSettings); + }); + } + else + { + Platform.runLater(()->{ + LoadingModal.closeModal(); + categoryHandler = new CategoryHandler(null); + toggleAllTabsExceptSettings(true); + tabPane.getSelectionModel().select(tabSettings); + ((LocalServerSettingsController)settingsController).handleIncompatibleServer(); + }); + } return; } } 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 e6cfa96db17d40a04010d544dafee6dbbe2bba6c..9a4e7bdc7bfc3cc1733ae8e32c7e4401deaa7364 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,11 +3,11 @@ 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.localserver.LocalServerException; +import de.deadlocker8.budgetmaster.logic.localserver.LocalServerHandler; +import de.deadlocker8.budgetmaster.logic.localserver.LocalServerStatus; import de.deadlocker8.budgetmaster.logic.updater.Updater; import de.deadlocker8.budgetmaster.logic.utils.Colors; import de.deadlocker8.budgetmaster.logic.utils.FileHelper; @@ -197,7 +197,7 @@ public class LocalServerSettingsController extends SettingsController Platform.runLater(()->{ LoadingModal.closeModal(); AlertGenerator.showAlert(AlertType.ERROR, Localization.getString(Strings.TITLE_ERROR), "", Localization.getString(Strings.ERROR_LOCAL_SERVER_START, e.getMessage()), controller.getIcon(), controller.getStage(), null, false); - controller.refresh(controller.getFilterSettings()); + controller.forceSettingsTab(); }); return; } @@ -227,6 +227,7 @@ public class LocalServerSettingsController extends SettingsController }); break; case MISSING: + controller.forceSettingsTab(); labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_NOT_PRESENT)); buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_NOT_PRESENT)); buttonLocalServerAction.setVisible(true); @@ -258,6 +259,8 @@ public class LocalServerSettingsController extends SettingsController }); }); break; + default: + break; } } @@ -341,6 +344,43 @@ public class LocalServerSettingsController extends SettingsController restartHandler.handleRestart(previousLanguage); refreshLabelsUpdate(); } + + public void handleIncompatibleServer() + { + labelLocalServerStatus.setText(Localization.getString(Strings.LOCAL_SERVER_STATUS_INCOMPATIBLE)); + buttonLocalServerAction.setText(Localization.getString(Strings.LOCAL_SERVER_ACTION_INCOMPATIBLE)); + buttonLocalServerAction.setVisible(true); + buttonLocalServerAction.setDisable(false); + + buttonLocalServerAction.setOnAction((event) -> { + buttonLocalServerAction.setDisable(true); + LoadingModal.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_DOWNLOAD_LOCAL_SERVER), controller.getStage(), controller.getIcon()); + + Worker.runLater(() -> { + try + { + LocalServerHandler serverHandler = new LocalServerHandler(); + serverHandler.shutdownServer(); + Thread.sleep(3000); + serverHandler.downloadServer(Localization.getString(Strings.VERSION_NAME)); + serverHandler.createServerSettingsIfNotExists(); + Platform.runLater(()->{ + checkServerStatus(); + LoadingModal.closeModal(); + }); + } + catch(Exception e) + { + Logger.error(e); + Platform.runLater(()->{ + LoadingModal.closeModal(); + 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 public void applyStyle() 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 11f0afcddf392cd7654f3b993bde9d1cbcb14509..6e99f11ac9a4510f9c99ccba8c8db403619f1b2e 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties @@ -1,6 +1,6 @@ # DEFAULT app.name=BudgetMaster -version.code=13 +version.code=14 version.name=1.8.0_alpha version.date=07.11.17 author=Robert Goldmann @@ -47,8 +47,8 @@ load.database.import=Die Datenbank wird importiert, bitte warten... load.database.delete=Die Datenbank wird gel�scht, bitte warten... load.update=Update wird heruntergeladen, bitte warten... load.search=Buchungen werden gesucht, bitte warten... -load.local.server=Der lokale Server wird gestartet, bitte warten... -load.download.local.server=Der lokale Server wird heruntergeladen, bitte warten... +load.local.server=Starte lokalen Server, bitte warten... +load.download.local.server=Lade lokalen Server herunter, bitte warten... load.local.server.connect=Verbinde mit lokalem Server, bitte warten... load.local.server.retry=Verbinde mit lokalem Server... (Versuch {0}/{1}) @@ -76,6 +76,8 @@ local.server.status.not.started=Server konnte nicht gestartet werden. local.server.action.not.started=Starten local.server.status.not.present=Server nicht gefunden. local.server.action.not.present=Herunterladen +local.server.status.incompatible=Server nicht kompatibel. +local.server.action.incompatible=Aktualisieren # REPORT report.position=Nr. @@ -164,7 +166,7 @@ info.text.update.available.show.changes.detailed=(detaillierte Infos auf GitHub. info.text.update.available.now=Jetzt updaten info.title.start.after.update=Update erfolgreich info.header.text.start.after.update=BudgetMaster wurde erfolgreich auf Version {0} aktualisiert -info.text.start.after.update=Hinweis: Der BudgetMasterServer muss manuell von dir geupdated werden! +info.text.start.after.update=Hinweis: Der BudgetMasterServer muss manuell von dir geupdated werden, sofern es sich um keinen lokalen Server handelt! info.tags=Es erscheinen Vorschl�ge basierend auf bereits verwendeten Tags sobald du zu tippen beginnst.\n\nEnter - F�gt den Inhalt des Eingabefelds als neuen Tag hinzu.\nPfeil nach unten - �ffnet die Vorschl�ge, wenn das Eingabefeld leer ist. # WARNING 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 188ddef0567129c86f11353b250dc112f8be4a49..40341ea54cbb44a274dd88ca1392151c320e5706 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties @@ -76,6 +76,8 @@ local.server.status.not.started=Server couldn't be started. local.server.action.not.started=Start local.server.status.not.present=Server not found. local.server.action.not.present=Download +local.server.status.incompatible=Server is incompatible. +local.server.action.incompatible=Update # REPORT report.position=No. @@ -164,7 +166,7 @@ info.text.update.available.show.changes.detailed=(detailed information on GitHub info.text.update.available.now=Update Now info.title.start.after.update=Update successfull info.header.text.start.after.update=Successfully updated BudgetMaster to version {0} -info.text.start.after.update=Note: You have to update the BudgetMasterServer manually! +info.text.start.after.update=Note: You have to update the BudgetMasterServer manually, if it's no local server! info.tags=Suggestions based on already used tags will show up once you start typing.\n\nEnter - Appends the current input field content as a new tag.\nArrow Down - Opens the suggestions if the input field is empty. # WARNING diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerException.java similarity index 77% rename from BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java rename to BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerException.java index d1f8712c6762a93410f3f3fc44719eba2f8ebd4c..13c3778cb70c92e56936aa3a834a75ea0920b0a7 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerException.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerException.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.logic; +package de.deadlocker8.budgetmaster.logic.localserver; public class LocalServerException extends Exception { diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerHandler.java similarity index 86% rename from BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java rename to BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerHandler.java index ae0c767ed6a9f15523052b0280a19f3010a74c1b..3e438320b1f83747feeaf48f4650a6eea7b28b75 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerHandler.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerHandler.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.logic; +package de.deadlocker8.budgetmaster.logic.localserver; import java.io.File; import java.io.FileNotFoundException; @@ -12,6 +12,7 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; +import de.deadlocker8.budgetmaster.logic.Settings; import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import de.deadlocker8.budgetmaster.logic.utils.Strings; @@ -57,6 +58,18 @@ public class LocalServerHandler } } + public void shutdownServer() throws Exception + { + Settings settings = new Settings(); + settings.setUrl("https://localhost:9000"); + settings.setSecret(HashUtils.hash("BudgetMaster", Helpers.SALT)); + ArrayList<String> trustedHosts = new ArrayList<>(); + trustedHosts.add("localhost"); + settings.setTrustedHosts(trustedHosts); + ServerConnection connection = new ServerConnection(settings); + connection.shutdownServer(); + } + public void createServerSettingsIfNotExists() throws FileNotFoundException { File settingsFile = new File(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/settings.json"); @@ -88,7 +101,7 @@ public class LocalServerHandler //download into temp directory and file Path target = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/localServer/BudgetMasterServer.jar"); - download(BUILD_FOLDER.replace("{}", "v" + versionName) + "BudgetMasterServer.jar", target); + download(BUILD_FOLDER.replace("{}", "v" + "1.7.0") + "BudgetMasterServer.jar", target); Logger.debug("Successfully downloaded BudgetMasterServer " + versionName); } diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerStatus.java similarity index 52% rename from BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java rename to BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerStatus.java index ec5084a23ec315b64e51ba4f7f00281ec2a006c3..7f36dcd26e0a4cb093f2783293089044c82dd86f 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/LocalServerStatus.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/localserver/LocalServerStatus.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.logic; +package de.deadlocker8.budgetmaster.logic.localserver; public enum LocalServerStatus { 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 706a31d75a1f484e0006917c63b0332e963b2ff1..3ff6304afffd9a13e9da06610fb59fb3aaccfc1a 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 @@ -80,6 +80,8 @@ public class Strings public static final String LOCAL_SERVER_ACTION_NOT_STARTED = "local.server.action.not.started"; public static final String LOCAL_SERVER_STATUS_NOT_PRESENT = "local.server.status.not.present"; public static final String LOCAL_SERVER_ACTION_NOT_PRESENT = "local.server.action.not.present"; + public static final String LOCAL_SERVER_STATUS_INCOMPATIBLE = "local.server.status.incompatible"; + public static final String LOCAL_SERVER_ACTION_INCOMPATIBLE = "local.server.action.incompatible"; //REPORT public static final String REPORT_POSITION = "report.position";