From b3b4ba942e9a67ce36eaed1e141af51143c7a1a0 Mon Sep 17 00:00:00 2001 From: szelongq <72333104+szelongq@users.noreply.github.com> Date: Thu, 9 Sep 2021 17:58:14 +0800 Subject: [PATCH] Add ability for the user to change the target save file Add two new commands: showpath and setpath. --- .gitignore | 1 + src/main/java/duke/CommandType.java | 3 ++- src/main/java/duke/Duke.java | 28 ++++++++++++++++++++++------ src/main/java/duke/Parser.java | 10 ++++++++++ src/main/java/duke/Storage.java | 4 ++++ src/main/java/duke/Ui.java | 9 +++++++++ 6 files changed, 48 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 862d164975..10dbbfdeb9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT data/duke.txt +*.txt diff --git a/src/main/java/duke/CommandType.java b/src/main/java/duke/CommandType.java index cc0f737b32..fa51332e67 100644 --- a/src/main/java/duke/CommandType.java +++ b/src/main/java/duke/CommandType.java @@ -1,5 +1,6 @@ package duke; public enum CommandType { - EXIT, LIST, ADD_TASK, COMPLETE_TASK, DELETE_TASK, FIND_TASK + EXIT, LIST, ADD_TASK, COMPLETE_TASK, DELETE_TASK, FIND_TASK, + SHOW_PATH, SET_PATH, } diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index f2a022da52..7294600960 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -21,15 +21,10 @@ public Duke() { */ public Duke(String filepath) { ui = new Ui(); - storage = new Storage(filepath); try { - tasks = new TaskList(storage.load()); - if (tasks.getSize() > 0) { - ui.printLoadTasks(tasks); - } + setStoragePath(filepath); } catch (DukeException e) { - ui.printErrorMessage(e.getMessage()); tasks = new TaskList(); } } @@ -93,6 +88,10 @@ private String executeCommand(String userInput) throws DukeException { return deleteTask(Parser.parseTaskNum(userInput)); case FIND_TASK: return findTask(Parser.parseSearchSubject(userInput)); + case SHOW_PATH: + return ui.printCurrentStoragePath(storage); + case SET_PATH: + return setNewStoragePath(Parser.parseNewPath(userInput)); default: throw new UnsupportedOperationException(); // Error } @@ -126,4 +125,21 @@ private String deleteTask(int taskNum) { private String findTask(String subject) { return ui.printTasksWithSubject(tasks, subject); } + + private void setStoragePath(String newPath) throws LoadingException { + Storage newStorage = new Storage(newPath); + TaskList newTasks = new TaskList(newStorage.load()); + + storage = newStorage; + tasks = newTasks; + } + + private String setNewStoragePath(String newPath) { + try { + setStoragePath(newPath); + return ui.printNewStoragePath(storage, tasks); + } catch (DukeException e) { + return ui.printErrorMessage(e.getMessage()); + } + } } diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index cf8e85a008..7f83f44cdc 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -39,6 +39,10 @@ public static CommandType parseCommandType(String userInput) return CommandType.DELETE_TASK; case "find": return CommandType.FIND_TASK; + case "showpath": + return CommandType.SHOW_PATH; + case "setpath": + return CommandType.SET_PATH; default: throw new UnsupportedOperationException(); } @@ -111,4 +115,10 @@ public static String parseSearchSubject(String userInput) { userInputScanner.next(); return userInputScanner.nextLine().trim(); } + + public static String parseNewPath(String userInput) { + Scanner userInputScanner = new Scanner(userInput); + userInputScanner.next(); + return userInputScanner.nextLine().trim(); + } } diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 0d37bb082a..8702e7f6a4 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -111,4 +111,8 @@ public void saveTasks(TaskList tasks) { ex.printStackTrace(); } } + + public String getPath() { + return savePath.toString(); + } } diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index e1ab7f5eb1..66caa9a227 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -116,4 +116,13 @@ public String printLoadTasks(TaskList tasks) { public String printErrorMessage(String message) { return "Error: " + message + "."; } + + public String printCurrentStoragePath(Storage storage) { + return "Current path is:\n" + storage.getPath(); + } + + public String printNewStoragePath(Storage storage, TaskList tasks) { + return "New path set:\n" + storage.getPath() + "\n\n" + + printLoadTasks(tasks); + } }