Skip to content

Commit

Permalink
Merge pull request #177 from CS2103AUG2016-F11-C1/decouple-config-mai…
Browse files Browse the repository at this point in the history
…napp

Decouple Config from MainApp
  • Loading branch information
louietyj committed Nov 6, 2016
2 parents 7a432d1 + 81b9356 commit 5b87fa1
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 49 deletions.
37 changes: 10 additions & 27 deletions src/main/java/seedu/todo/MainApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -18,7 +17,6 @@

import java.io.IOException;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Logger;

/**
Expand All @@ -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;

Expand All @@ -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
Expand Down Expand Up @@ -123,32 +122,16 @@ protected Config initConfig() {
}

protected Config loadConfigFromFile(String configFilePathUsed) {
Config initializedConfig;

try {
Optional<Config> 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;
}

Expand Down
52 changes: 52 additions & 0 deletions src/main/java/seedu/todo/commons/core/ConfigCenter.java
Original file line number Diff line number Diff line change
@@ -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<Config> 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;
}
}
8 changes: 3 additions & 5 deletions src/main/java/seedu/todo/controllers/AliasController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<String, String> aliases = config.getAliases();
aliases.put(aliasKey, aliasValue);
ConfigUtil.saveConfig(config, MainApp.getConfigFilePath());
ConfigCenter.getInstance().saveConfig(config);

}

Expand Down
7 changes: 3 additions & 4 deletions src/main/java/seedu/todo/controllers/ConfigController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String> validConfigDefinitions = config.getDefinitionsNames();
Expand All @@ -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;
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/seedu/todo/controllers/UnaliasController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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<String, String> aliases = config.getAliases();
if (aliases.remove(aliasKey) == null) {
return false;
}
ConfigUtil.saveConfig(config, MainApp.getConfigFilePath());
ConfigCenter.getInstance().saveConfig(config);
return true;
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/seedu/todo/storage/JsonStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/seedu/todo/ui/InputHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -87,7 +87,7 @@ public String getNextCommandFromHistory() {
*/
public boolean processInput(String input) {

Map<String, String> aliases = MainApp.getConfig().getAliases();
Map<String, String> aliases = ConfigCenter.getInstance().getConfig().getAliases();
String aliasedInput = StringUtil.replaceAliases(input, aliases);

Controller[] controllers = instantiateAllControllers();
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/seedu/todo/ui/MainWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/seedu/todo/ui/views/AliasView.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -53,7 +53,7 @@ public void componentDidMount() {
aliasImageView.setImage(new Image(ICON_PATH));

// Get definitions
Map<String, String> aliasMap = MainApp.getConfig().getAliases();
Map<String, String> aliasMap = ConfigCenter.getInstance().getConfig().getAliases();
List<Map.Entry<String, String>> aliasDefinitions =
new ArrayList<Map.Entry<String, String>>(aliasMap.entrySet());

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/seedu/todo/ui/views/ConfigView.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -49,7 +49,7 @@ public void componentDidMount() {
configImageView.setImage(new Image(ICON_PATH));

// Get definitions
List<ConfigDefinition> configDefinitions = MainApp.getConfig().getDefinitions();
List<ConfigDefinition> configDefinitions = ConfigCenter.getInstance().getConfig().getDefinitions();

// Clear items
ConfigItem.reset(configsPlaceholder);
Expand Down

0 comments on commit 5b87fa1

Please sign in to comment.