From 1f63348d33d792bc94e69194e520f10ee5959282 Mon Sep 17 00:00:00 2001 From: Kobot7 Date: Fri, 23 Feb 2024 22:04:21 +0800 Subject: [PATCH] Add find task feature --- src/main/java/kobot/command/Command.java | 2 +- src/main/java/kobot/command/FindCommand.java | 39 ++++++++++++++++++++ src/main/java/kobot/command/Parser.java | 3 ++ src/main/java/kobot/task/TaskList.java | 15 +++++++- src/main/java/kobot/ui/Ui.java | 6 +++ 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/main/java/kobot/command/FindCommand.java diff --git a/src/main/java/kobot/command/Command.java b/src/main/java/kobot/command/Command.java index b671e75de..2391383c0 100644 --- a/src/main/java/kobot/command/Command.java +++ b/src/main/java/kobot/command/Command.java @@ -8,7 +8,7 @@ public abstract class Command { protected TaskList taskList; Command(TaskList taskList) { - canExecute = false; + this.canExecute = false; this.taskList = taskList; } public abstract void execute(); diff --git a/src/main/java/kobot/command/FindCommand.java b/src/main/java/kobot/command/FindCommand.java new file mode 100644 index 000000000..9266ed98c --- /dev/null +++ b/src/main/java/kobot/command/FindCommand.java @@ -0,0 +1,39 @@ +package kobot.command; + +import kobot.task.TaskList; +import kobot.task.Task; +import kobot.ui.Ui; + +public class FindCommand extends Command { + private String keyword; + + public FindCommand(TaskList tasklist, String keyword) { + super(tasklist); + parseArguments(keyword); + } + + public void parseArguments(String keyword) { + try { + this.keyword = keyword.trim(); + } catch (NullPointerException exception) { + Ui.printMissingArgumentErrorMessage(); + Ui.printFindCommandUsage(); + return; + } + + if (this.keyword.isEmpty()) { + Ui.printEmptyArgumentErrorMessage(); + Ui.printFindCommandUsage(); + return; + } + + this.canExecute = true; + } + public void execute() { + if (!canExecute) { + return; + } + + taskList.findTasks(keyword); + } +} diff --git a/src/main/java/kobot/command/Parser.java b/src/main/java/kobot/command/Parser.java index f2d657160..77893e2c4 100644 --- a/src/main/java/kobot/command/Parser.java +++ b/src/main/java/kobot/command/Parser.java @@ -7,6 +7,7 @@ public class Parser { private static final String EXIT_COMMAND = "exit"; private static final String BYE_COMMAND = "bye"; private static final String LIST_COMMAND = "list"; + private static final String FIND_COMMAND = "find"; private static final String TODO_COMMAND = "todo"; private static final String DEADLINE_COMMAND = "deadline"; private static final String EVENT_COMMAND = "event"; @@ -65,6 +66,8 @@ public Command prepareCommand(TaskList taskList) { case BYE_COMMAND: exit(); return null; + case FIND_COMMAND: + return new FindCommand(taskList, this.arguments); case LIST_COMMAND: return new ListCommand(taskList); case TODO_COMMAND: diff --git a/src/main/java/kobot/task/TaskList.java b/src/main/java/kobot/task/TaskList.java index 493597c80..b54bff8c3 100644 --- a/src/main/java/kobot/task/TaskList.java +++ b/src/main/java/kobot/task/TaskList.java @@ -70,7 +70,7 @@ public void printTaskList() { index++; } } - + /** * Marks a specified task as done. * @@ -148,4 +148,17 @@ public String toStorageFormat() { return String.valueOf(storage); } + + public void findTasks(String keyword) { + System.out.println("Tasks containing \"" + keyword + "\":"); + + int index = 1; + for (Task task:taskList) { + if (task.getDescription().contains(keyword)) { + System.out.print(index + ". "); + System.out.println(task); + index++; + } + } + } } diff --git a/src/main/java/kobot/ui/Ui.java b/src/main/java/kobot/ui/Ui.java index 93f1737e4..73eb6a59f 100644 --- a/src/main/java/kobot/ui/Ui.java +++ b/src/main/java/kobot/ui/Ui.java @@ -26,6 +26,7 @@ public class Ui { private static final String MARK_TASK_COMMAND_FORMAT = "mark "; private static final String UNMARK_TASK_COMMAND_FORMAT = "unmark "; private static final String DELETE_TASK_COMMAND_FORMAT = "delete "; + private static final String FIND_TASK_COMMAND_FORMAT = "find "; private static final String INVALID_COMMAND_ERROR = "Invalid command. Please try again."; private static final String EMPTY_ARGUMENT_ERROR = "Empty or whitespace-only fields are not allowed."; @@ -124,4 +125,9 @@ public static void printDeleteCommandUsage() { System.out.println("Command to delete task:"); System.out.println(DELETE_TASK_COMMAND_FORMAT); } + + public static void printFindCommandUsage() { + System.out.println("Command to find tasks:"); + System.out.println(FIND_TASK_COMMAND_FORMAT); + } } \ No newline at end of file