diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/RestartHandler.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/RestartHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..34db5c8f2d9fe417a95f4c5863e71acdb22471a2 --- /dev/null +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/RestartHandler.java @@ -0,0 +1,78 @@ +package de.deadlocker8.budgetmasterclient.ui; + +import java.util.Optional; + +import de.deadlocker8.budgetmaster.logic.utils.LanguageType; +import de.deadlocker8.budgetmaster.logic.utils.Strings; +import de.deadlocker8.budgetmasterclient.main.Main; +import de.deadlocker8.budgetmasterclient.ui.controller.Controller; +import de.deadlocker8.budgetmasterclient.ui.controller.SplashScreenController; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonType; +import javafx.scene.control.DialogPane; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.image.Image; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.stage.Stage; +import tools.Localization; + +public class RestartHandler +{ + private Controller controller; + + public RestartHandler(Controller controller) + { + this.controller = controller; + } + + public void handleRestart(LanguageType previousLanguage) + { + controller.refresh(controller.getFilterSettings()); + controller.showNotification(Localization.getString(Strings.NOTIFICATION_SETTINGS_SAVE)); + + if(controller.getSettings().isAutoUpdateCheckEnabled()) + { + controller.checkForUpdates(false); + } + + //restart application if language has changed + if(controller.getSettings().getLanguage() != previousLanguage) + { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle(Localization.getString(Strings.INFO_TITLE_LANGUAGE_CHANGED)); + alert.setHeaderText(""); + alert.setContentText(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED)); + Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); + dialogStage.getIcons().add(controller.getIcon()); + + ButtonType buttonTypeOne = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW)); + ButtonType buttonTypeTwo = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER)); + alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo); + + DialogPane dialogPane = alert.getDialogPane(); + dialogPane.getButtonTypes().stream().map(dialogPane::lookupButton).forEach(button -> button.addEventHandler(KeyEvent.KEY_PRESSED, (event) -> { + if(KeyCode.ENTER.equals(event.getCode()) && event.getTarget() instanceof Button) + { + ((Button)event.getTarget()).fire(); + } + })); + + Optional<ButtonType> result = alert.showAndWait(); + if (result.get() == buttonTypeOne) + { + controller.getStage().close(); + + Localization.loadLanguage(controller.getSettings().getLanguage().getLocale()); + + Image icon = new Image("/de/deadlocker8/budgetmaster/icon.png"); + new SplashScreenController(Main.primaryStage, icon, false); + } + else + { + alert.close(); + } + } + } +} diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/CommandBundle.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/CommandBundle.java index 5bb9bb62f3f7d76f1be52e541a3307444e996740..b200c8edeaae61c2e9dd13f99ad9c458a0e3dcae 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/CommandBundle.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/CommandBundle.java @@ -3,17 +3,17 @@ package de.deadlocker8.budgetmasterclient.ui.commandLine; import java.text.MessageFormat; import java.util.ResourceBundle; -import de.deadlocker8.budgetmaster.logic.Settings; +import de.deadlocker8.budgetmasterclient.ui.controller.Controller; public class CommandBundle { private CommandLineController controller; private ResourceBundle languageBundle; - private Settings settings; + private Controller parentController; - public CommandBundle(Settings settings) + public CommandBundle(Controller parentController) { - this.settings = settings; + this.parentController = parentController; } public CommandLineController getController() @@ -45,9 +45,9 @@ public class CommandBundle { this.languageBundle = languageBundle; } - - public Settings getSettings() + + public Controller getParentController() { - return settings; + return parentController; } } \ No newline at end of file diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandDelete.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandDelete.java index 0b00a1d82376b7ade4426d0564f9bced37869cbc..2417ac83430932ed1d978f2d8aee683f132e5755 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandDelete.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandDelete.java @@ -33,7 +33,7 @@ public class CommandDelete extends Command { try { - ServerConnection connection = new ServerConnection(bundle.getSettings()); + ServerConnection connection = new ServerConnection(bundle.getParentController().getSettings()); connection.deleteLog(); bundle.getController().print(bundle.getString("delete.success", "server logfile")); } diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandInfo.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandInfo.java index 977faa7434dd7b1b66e1b237fc328075fd700464..aca29599f04216fdd9b009162e608ef516247582 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandInfo.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandInfo.java @@ -43,7 +43,7 @@ public class CommandInfo extends Command { try { - ServerConnection connection = new ServerConnection(bundle.getSettings()); + ServerConnection connection = new ServerConnection(bundle.getParentController().getSettings()); ServerInformation serverInfo = connection.getServerInfo(); VersionInformation versionInfo = serverInfo.getVersionInfo(); diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandSwitch.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandSwitch.java new file mode 100644 index 0000000000000000000000000000000000000000..5748203222e2325ba641368c294137d59f200ade --- /dev/null +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandSwitch.java @@ -0,0 +1,70 @@ +package de.deadlocker8.budgetmasterclient.ui.commandLine.commands; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import de.deadlocker8.budgetmaster.logic.utils.FileHelper; +import de.deadlocker8.budgetmaster.logic.utils.LanguageType; +import de.deadlocker8.budgetmaster.logic.utils.Strings; +import de.deadlocker8.budgetmasterclient.ui.RestartHandler; +import de.deadlocker8.budgetmasterclient.ui.commandLine.CommandBundle; +import tools.Localization; +import tools.PathUtils; + +public class CommandSwitch extends Command +{ + public CommandSwitch() + { + super.keyword = "switch"; + super.numberOfParams = 0; + super.helptText = "help.switch"; + } + + @Override + public void execute(String[] command, CommandBundle bundle) + { + if(!isValid(command)) + { + bundle.getController().print(bundle.getString("error.invalid.arguments")); + return; + } + + Path currentSettingsFile = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/settings.json"); + Path secondSettingsFile = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/_settings.json"); + + if(secondSettingsFile.toFile().exists()) + { + try + { + Path temp = Paths.get(PathUtils.getOSindependentPath() + Localization.getString(Strings.FOLDER) + "/__settings.json"); + Files.move(currentSettingsFile, temp); + Files.move(secondSettingsFile, currentSettingsFile); + Files.move(temp, secondSettingsFile); + } + catch(IOException e) + { + bundle.getController().print(bundle.getString("switch.error")); + } + } + else + { + bundle.getController().print(bundle.getString("switch.new")); + try + { + Files.copy(currentSettingsFile, secondSettingsFile); + } + catch(IOException e) + { + bundle.getController().print(bundle.getString("switch.error")); + } + } + + LanguageType previousLanguage = bundle.getParentController().getSettings().getLanguage(); + bundle.getParentController().setSettings(FileHelper.loadSettings()); + RestartHandler restartHandler = new RestartHandler(bundle.getParentController()); + restartHandler.handleRestart(previousLanguage); + bundle.getController().print(bundle.getString("switch.success")); + } +} \ No newline at end of file diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/PossibleCommands.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/PossibleCommands.java index 9e8536214ad9139ac1b130945557fdf29f82b2ce..0ecfd5ea340a49795b9cc2b5f8cdc1fae07505d4 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/PossibleCommands.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/PossibleCommands.java @@ -12,6 +12,7 @@ public class PossibleCommands new CommandShortcuts(), new CommandOpen(), new CommandDelete(), - new CommandInfo() + new CommandInfo(), + new CommandSwitch() )); } \ No newline at end of file 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 ed1bb60f3319bee36f81bcf56dc3ae93143ebf31..40a11fda714a6d30ccbc616942baa2c50e01081d 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 @@ -131,7 +131,7 @@ public class Controller extends BaseController paymentHandler = new PaymentHandler(); updater = new Updater(); - CommandBundle commandBundle = new CommandBundle(settings); + CommandBundle commandBundle = new CommandBundle(this); cmd = new CommandLine(getStage(), icon, ResourceBundle.getBundle("de/deadlocker8/budgetmaster/ui/commandLine/", Locale.ENGLISH), commandBundle); if(settings.isAutoUpdateCheckEnabled()) diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SettingsController.java index 523b1672a4b0a793fe2c5800ad83cde6b27604ea..13a76e2a41f715b79fe167147b8b61e8ddc82527 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SettingsController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/SettingsController.java @@ -15,7 +15,7 @@ import de.deadlocker8.budgetmaster.logic.utils.FileHelper; import de.deadlocker8.budgetmaster.logic.utils.Helpers; import de.deadlocker8.budgetmaster.logic.utils.LanguageType; import de.deadlocker8.budgetmaster.logic.utils.Strings; -import de.deadlocker8.budgetmasterclient.main.Main; +import de.deadlocker8.budgetmasterclient.ui.RestartHandler; import de.deadlocker8.budgetmasterclient.ui.Styleable; import de.deadlocker8.budgetmasterclient.ui.cells.LanguageCell; import de.deadlocker8.budgetmasterclient.utils.UIHelpers; @@ -36,7 +36,6 @@ import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.control.TextInputDialog; import javafx.scene.control.ToggleGroup; -import javafx.scene.image.Image; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; @@ -306,52 +305,9 @@ public class SettingsController implements Styleable textFieldClientSecret.setText("******"); textFieldSecret.setText("******"); - controller.refresh(controller.getFilterSettings()); - controller.showNotification(Localization.getString(Strings.NOTIFICATION_SETTINGS_SAVE)); - - if(controller.getSettings().isAutoUpdateCheckEnabled()) - { - controller.checkForUpdates(false); - refreshLabelsUpdate(); - } - - //restart application if language has changed - if(controller.getSettings().getLanguage() != previousLanguage) - { - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle(Localization.getString(Strings.INFO_TITLE_LANGUAGE_CHANGED)); - alert.setHeaderText(""); - alert.setContentText(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED)); - Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); - dialogStage.getIcons().add(controller.getIcon()); - - ButtonType buttonTypeOne = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW)); - ButtonType buttonTypeTwo = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER)); - alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo); - - DialogPane dialogPane = alert.getDialogPane(); - dialogPane.getButtonTypes().stream().map(dialogPane::lookupButton).forEach(button -> button.addEventHandler(KeyEvent.KEY_PRESSED, (event) -> { - if(KeyCode.ENTER.equals(event.getCode()) && event.getTarget() instanceof Button) - { - ((Button)event.getTarget()).fire(); - } - })); - - Optional<ButtonType> result = alert.showAndWait(); - if (result.get() == buttonTypeOne) - { - controller.getStage().close(); - - Localization.loadLanguage(controller.getSettings().getLanguage().getLocale()); - - Image icon = new Image("/de/deadlocker8/budgetmaster/icon.png"); - new SplashScreenController(Main.primaryStage, icon, false); - } - else - { - alert.close(); - } - } + RestartHandler restartHandler = new RestartHandler(controller); + restartHandler.handleRestart(previousLanguage); + refreshLabelsUpdate(); } public void exportDB() diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/commandLine/_en.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/commandLine/_en.properties index bc2a8acd373c35ec0eb8b684e478e5434222c599..7aee4c0633193d4d979808892e7883975091243c 100644 --- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/commandLine/_en.properties +++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/ui/commandLine/_en.properties @@ -22,4 +22,10 @@ delete.error.connection=An error occurred while establishing the server connecti # info help.info=info - information about client and server \nSYNTAX: info [PARAMETER]\npossible parameters:\client\nserver -info.error.connection=An error occurred while establishing the server connection \ No newline at end of file +info.error.connection=An error occurred while establishing the server connection + +# switch +help.switch=switch - switch betwwen two client settings +switch.new=Second settings file is not present. Copying current settings file... +switch.success=Successfully switched settings +switch.error=An error occurred while switching the settings \ No newline at end of file