From ff77649ff59d461b82ae55fb45bdbf520b46e05a Mon Sep 17 00:00:00 2001 From: Irvin Lim Date: Sun, 6 Nov 2016 17:05:46 +0800 Subject: [PATCH 1/2] Add ConfigCenter --- .../seedu/todo/commons/core/ConfigCenter.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/java/seedu/todo/commons/core/ConfigCenter.java diff --git a/src/main/java/seedu/todo/commons/core/ConfigCenter.java b/src/main/java/seedu/todo/commons/core/ConfigCenter.java new file mode 100644 index 000000000000..c87e85db432b --- /dev/null +++ b/src/main/java/seedu/todo/commons/core/ConfigCenter.java @@ -0,0 +1,52 @@ +package seedu.todo.commons.core; + +import java.io.IOException; +import java.util.Optional; +import java.util.logging.Logger; + +import seedu.todo.MainApp; +import seedu.todo.commons.exceptions.DataConversionException; +import seedu.todo.commons.util.ConfigUtil; + +// @@author A0139812A +public class ConfigCenter { + private static final Logger logger = LogsCenter.getLogger(MainApp.class); + + private static ConfigCenter instance; + + private Config config; + private String configFilePath; + + public static ConfigCenter getInstance() { + if (instance == null) { + instance = new ConfigCenter(); + } + + return instance; + } + + public void setConfigFilePath(String path) { + configFilePath = path; + } + + public Config getConfig() { + if (config == null) { + Optional configOptional; + + try { + configOptional = ConfigUtil.readConfig(configFilePath); + config = configOptional.orElse(new Config()); + } catch (DataConversionException e) { + logger.warning("Config file at " + configFilePath + " is not in the correct format. " + + "Using default config properties"); + } + } + + return config; + } + + public void saveConfig(Config config) throws IOException { + ConfigUtil.saveConfig(config, configFilePath); + this.config = config; + } +} From 81b935675cff687a7348e48a785757b0e345edee Mon Sep 17 00:00:00 2001 From: Irvin Lim Date: Sun, 6 Nov 2016 17:20:02 +0800 Subject: [PATCH 2/2] Utilise ConfigCenter, instead of referencing MainApp --- src/main/java/seedu/todo/MainApp.java | 37 +++++-------------- .../todo/controllers/AliasController.java | 8 ++-- .../todo/controllers/ConfigController.java | 7 ++-- .../todo/controllers/UnaliasController.java | 7 ++-- .../java/seedu/todo/storage/JsonStorage.java | 4 +- src/main/java/seedu/todo/ui/InputHandler.java | 4 +- src/main/java/seedu/todo/ui/MainWindow.java | 3 +- .../java/seedu/todo/ui/views/AliasView.java | 4 +- .../java/seedu/todo/ui/views/ConfigView.java | 4 +- 9 files changed, 29 insertions(+), 49 deletions(-) diff --git a/src/main/java/seedu/todo/MainApp.java b/src/main/java/seedu/todo/MainApp.java index 720edb74008d..ebd719c2eb2d 100644 --- a/src/main/java/seedu/todo/MainApp.java +++ b/src/main/java/seedu/todo/MainApp.java @@ -8,8 +8,7 @@ import seedu.todo.ui.UiManager; import seedu.todo.ui.views.IndexView; import seedu.todo.commons.core.Config; -import seedu.todo.commons.exceptions.DataConversionException; -import seedu.todo.commons.util.ConfigUtil; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.util.StringUtil; import seedu.todo.commons.core.LogsCenter; import seedu.todo.commons.core.Version; @@ -18,7 +17,6 @@ import java.io.IOException; import java.util.Map; -import java.util.Optional; import java.util.logging.Logger; /** @@ -32,8 +30,9 @@ public class MainApp extends Application { private static final String MESSAGE_WELCOME = "Welcome! What would like to get done today?"; - protected static Config config; - protected static String configFilePath; + private static final ConfigCenter configCenter = ConfigCenter.getInstance(); + private String configFilePath; + protected Config config; protected UiManager ui; @@ -47,16 +46,16 @@ public void init() throws Exception { configFilePath = getApplicationParameter("config"); // Initialize config from config file, or create a new one. - config = initConfig(); + initConfig(); // Initialize logging - initLogging(getConfig()); + initLogging(configCenter.getConfig()); // Initialize events center initEventsCenter(); // Initialize UI config - UiManager.initialize(getConfig()); + UiManager.initialize(configCenter.getConfig()); ui = UiManager.getInstance(); // Load DB @@ -123,32 +122,16 @@ protected Config initConfig() { } protected Config loadConfigFromFile(String configFilePathUsed) { - Config initializedConfig; - - try { - Optional configOptional = ConfigUtil.readConfig(configFilePathUsed); - initializedConfig = configOptional.orElse(new Config()); - } catch (DataConversionException e) { - logger.warning("Config file at " + configFilePathUsed + " is not in the correct format. " + - "Using default config properties"); - initializedConfig = new Config(); - } + configCenter.setConfigFilePath(configFilePathUsed); + config = configCenter.getConfig(); // Update config file in case it was missing to begin with or there are new/unused fields try { - ConfigUtil.saveConfig(initializedConfig, configFilePathUsed); + configCenter.saveConfig(config); } catch (IOException e) { logger.warning("Failed to save config file : " + StringUtil.getDetails(e)); } - return initializedConfig; - } - - public static String getConfigFilePath() { - return configFilePath; - } - - public static Config getConfig() { return config; } diff --git a/src/main/java/seedu/todo/controllers/AliasController.java b/src/main/java/seedu/todo/controllers/AliasController.java index 352ce04f6d7d..113f1527f5c1 100644 --- a/src/main/java/seedu/todo/controllers/AliasController.java +++ b/src/main/java/seedu/todo/controllers/AliasController.java @@ -3,12 +3,10 @@ import java.io.IOException; import java.util.Map; -import seedu.todo.MainApp; import seedu.todo.commons.core.Config; -import seedu.todo.commons.util.ConfigUtil; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.util.StringUtil; import seedu.todo.controllers.concerns.Renderer; -import seedu.todo.models.TodoListDB; /** * @@author A0093907W @@ -102,10 +100,10 @@ public void process(String input) { * @throws IOException */ private static void saveAlias(String aliasKey, String aliasValue) throws IOException { - Config config = MainApp.getConfig(); + Config config = ConfigCenter.getInstance().getConfig(); Map aliases = config.getAliases(); aliases.put(aliasKey, aliasValue); - ConfigUtil.saveConfig(config, MainApp.getConfigFilePath()); + ConfigCenter.getInstance().saveConfig(config); } diff --git a/src/main/java/seedu/todo/controllers/ConfigController.java b/src/main/java/seedu/todo/controllers/ConfigController.java index ac97a50439e7..e57db4ab3f97 100644 --- a/src/main/java/seedu/todo/controllers/ConfigController.java +++ b/src/main/java/seedu/todo/controllers/ConfigController.java @@ -3,10 +3,9 @@ import java.io.IOException; import java.util.List; -import seedu.todo.MainApp; import seedu.todo.commons.core.Config; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.exceptions.CannotConfigureException; -import seedu.todo.commons.util.ConfigUtil; import seedu.todo.controllers.concerns.Renderer; import seedu.todo.models.TodoListDB; import seedu.todo.ui.UiManager; @@ -68,7 +67,7 @@ public void process(String input) { String configValue = args[1]; // Get current config - Config config = MainApp.getConfig(); + Config config = ConfigCenter.getInstance().getConfig(); // Check name List validConfigDefinitions = config.getDefinitionsNames(); @@ -89,7 +88,7 @@ public void process(String input) { // Save config to file try { - ConfigUtil.saveConfig(config, MainApp.getConfigFilePath()); + ConfigCenter.getInstance().saveConfig(config); } catch (IOException e) { Renderer.renderConfig(String.format(MESSAGE_FAILURE, e.getMessage())); return; diff --git a/src/main/java/seedu/todo/controllers/UnaliasController.java b/src/main/java/seedu/todo/controllers/UnaliasController.java index 33c4114c49f0..df507e5484c7 100644 --- a/src/main/java/seedu/todo/controllers/UnaliasController.java +++ b/src/main/java/seedu/todo/controllers/UnaliasController.java @@ -3,10 +3,9 @@ import java.io.IOException; import java.util.Map; -import seedu.todo.MainApp; import seedu.todo.commons.core.Config; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.exceptions.ParseException; -import seedu.todo.commons.util.ConfigUtil; import seedu.todo.commons.util.StringUtil; import seedu.todo.controllers.concerns.Renderer; @@ -61,12 +60,12 @@ public void process(String input) throws ParseException { } private static boolean destroyAlias(String aliasKey) throws IOException { - Config config = MainApp.getConfig(); + Config config = ConfigCenter.getInstance().getConfig(); Map aliases = config.getAliases(); if (aliases.remove(aliasKey) == null) { return false; } - ConfigUtil.saveConfig(config, MainApp.getConfigFilePath()); + ConfigCenter.getInstance().saveConfig(config); return true; } diff --git a/src/main/java/seedu/todo/storage/JsonStorage.java b/src/main/java/seedu/todo/storage/JsonStorage.java index a465a7bf43d4..73293d8a7661 100644 --- a/src/main/java/seedu/todo/storage/JsonStorage.java +++ b/src/main/java/seedu/todo/storage/JsonStorage.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; -import seedu.todo.MainApp; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.exceptions.CannotRedoException; import seedu.todo.commons.exceptions.CannotUndoException; import seedu.todo.commons.util.FileUtil; @@ -35,7 +35,7 @@ public class JsonStorage implements Storage { private final DiffMatchPatch dmp = new DiffMatchPatch(); private File getStorageFile() { - String filePath = MainApp.getConfig().getDatabaseFilePath(); + String filePath = ConfigCenter.getInstance().getConfig().getDatabaseFilePath(); return new File(filePath); } diff --git a/src/main/java/seedu/todo/ui/InputHandler.java b/src/main/java/seedu/todo/ui/InputHandler.java index 324c69ed98be..47d70ee39388 100644 --- a/src/main/java/seedu/todo/ui/InputHandler.java +++ b/src/main/java/seedu/todo/ui/InputHandler.java @@ -4,7 +4,7 @@ import java.util.ListIterator; import java.util.Map; -import seedu.todo.MainApp; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.exceptions.ParseException; import seedu.todo.commons.util.StringUtil; import seedu.todo.controllers.*; @@ -87,7 +87,7 @@ public String getNextCommandFromHistory() { */ public boolean processInput(String input) { - Map aliases = MainApp.getConfig().getAliases(); + Map aliases = ConfigCenter.getInstance().getConfig().getAliases(); String aliasedInput = StringUtil.replaceAliases(input, aliases); Controller[] controllers = instantiateAllControllers(); diff --git a/src/main/java/seedu/todo/ui/MainWindow.java b/src/main/java/seedu/todo/ui/MainWindow.java index a59c59142f47..1fd77b42e320 100644 --- a/src/main/java/seedu/todo/ui/MainWindow.java +++ b/src/main/java/seedu/todo/ui/MainWindow.java @@ -10,6 +10,7 @@ import javafx.scene.layout.VBox; import seedu.todo.MainApp; import seedu.todo.commons.core.Config; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.core.GuiSettings; import seedu.todo.commons.events.ui.ExitAppRequestEvent; import seedu.todo.commons.exceptions.ParseException; @@ -82,7 +83,7 @@ public void configure(Config config) { protected void loadComponents() { // Load Header Header header = UiPartLoader.loadUiPart(primaryStage, getHeaderPlaceholder(), Header.class); - header.appTitle = MainApp.getConfig().getAppTitle(); + header.appTitle = ConfigCenter.getInstance().getConfig().getAppTitle(); header.versionString = MainApp.VERSION.toString(); header.render(); diff --git a/src/main/java/seedu/todo/ui/views/AliasView.java b/src/main/java/seedu/todo/ui/views/AliasView.java index 3788f4c74955..3405684a2878 100644 --- a/src/main/java/seedu/todo/ui/views/AliasView.java +++ b/src/main/java/seedu/todo/ui/views/AliasView.java @@ -12,8 +12,8 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.scene.text.Text; -import seedu.todo.MainApp; import seedu.todo.commons.core.AliasDefinition; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.util.FxViewUtil; import seedu.todo.ui.components.AliasItem; @@ -53,7 +53,7 @@ public void componentDidMount() { aliasImageView.setImage(new Image(ICON_PATH)); // Get definitions - Map aliasMap = MainApp.getConfig().getAliases(); + Map aliasMap = ConfigCenter.getInstance().getConfig().getAliases(); List> aliasDefinitions = new ArrayList>(aliasMap.entrySet()); diff --git a/src/main/java/seedu/todo/ui/views/ConfigView.java b/src/main/java/seedu/todo/ui/views/ConfigView.java index 6d1e99df3fb1..67c9e1d0fe6f 100644 --- a/src/main/java/seedu/todo/ui/views/ConfigView.java +++ b/src/main/java/seedu/todo/ui/views/ConfigView.java @@ -7,7 +7,7 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.scene.text.Text; -import seedu.todo.MainApp; +import seedu.todo.commons.core.ConfigCenter; import seedu.todo.commons.core.ConfigDefinition; import seedu.todo.commons.util.FxViewUtil; import seedu.todo.ui.components.ConfigItem; @@ -49,7 +49,7 @@ public void componentDidMount() { configImageView.setImage(new Image(ICON_PATH)); // Get definitions - List configDefinitions = MainApp.getConfig().getDefinitions(); + List configDefinitions = ConfigCenter.getInstance().getConfig().getDefinitions(); // Clear items ConfigItem.reset(configsPlaceholder);