From 40b0044fe768ff2dc9f1ce8f9450035ec428c4d2 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 8 Oct 2017 14:49:45 +0200 Subject: [PATCH] Fixed #200 - implemented comamnd "switch client settings" --- .../budgetmasterclient/ui/RestartHandler.java | 78 +++++++++++++++++++ .../ui/commandLine/CommandBundle.java | 14 ++-- .../commandLine/commands/CommandDelete.java | 2 +- .../ui/commandLine/commands/CommandInfo.java | 2 +- .../commandLine/commands/CommandSwitch.java | 70 +++++++++++++++++ .../commands/PossibleCommands.java | 3 +- .../ui/controller/Controller.java | 2 +- .../ui/controller/SettingsController.java | 52 +------------ .../ui/commandLine/_en.properties | 8 +- 9 files changed, 171 insertions(+), 60 deletions(-) create mode 100644 BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/RestartHandler.java create mode 100644 BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/commandLine/commands/CommandSwitch.java 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 000000000..34db5c8f2 --- /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 5bb9bb62f..b200c8ede 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 0b00a1d82..2417ac834 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 977faa743..aca29599f 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 000000000..574820322 --- /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 9e8536214..0ecfd5ea3 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 ed1bb60f3..40a11fda7 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 523b1672a..13a76e2a4 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 bc2a8acd3..7aee4c063 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 -- GitLab