From 4b74e9a5c76570d4fccba60ff1c1d295bcd60ba0 Mon Sep 17 00:00:00 2001 From: xzynos Date: Tue, 27 Sep 2022 23:25:02 +0800 Subject: [PATCH] Add code to list tasks that occurs at a specific date --- .../duke/commands/ConsoleCommandDelete.java | 2 +- .../duke/commands/ConsoleCommandList.java | 22 +++++ .../duke/commands/ConsoleCommandMark.java | 2 +- .../duke/commands/ConsoleCommandUnmark.java | 2 +- src/main/java/duke/common/Configurations.java | 1 + src/main/java/duke/common/Messages.java | 7 +- src/main/java/duke/data/task/Task.java | 1 + src/main/java/duke/data/task/TaskManager.java | 80 ++++++++++++------- .../ConsoleInputParserException.java | 22 +++-- .../java/duke/exceptions/DukeException.java | 4 +- .../duke/exceptions/TaskManagerException.java | 8 +- .../userinterface/ConsoleInputParser.java | 34 +++++--- .../duke/userinterface/ConsoleInterface.java | 54 +++++++++---- 13 files changed, 166 insertions(+), 73 deletions(-) diff --git a/src/main/java/duke/commands/ConsoleCommandDelete.java b/src/main/java/duke/commands/ConsoleCommandDelete.java index f7366c46..9e0d8017 100644 --- a/src/main/java/duke/commands/ConsoleCommandDelete.java +++ b/src/main/java/duke/commands/ConsoleCommandDelete.java @@ -10,7 +10,7 @@ public class ConsoleCommandDelete extends ConsoleCommand { /** * Initializes object with arguments for delete command. * - * @param taskNumber Task number of the task as listed by the function {@link duke.data.task.TaskManager#printTasks()}. + * @param taskNumber Task number of the task as listed by the function {@link duke.userinterface.ConsoleInterface#executeCommandList(ConsoleCommandList)}. */ public ConsoleCommandDelete(int taskNumber) { this.taskNumber = taskNumber; diff --git a/src/main/java/duke/commands/ConsoleCommandList.java b/src/main/java/duke/commands/ConsoleCommandList.java index f53718d5..7f193bda 100644 --- a/src/main/java/duke/commands/ConsoleCommandList.java +++ b/src/main/java/duke/commands/ConsoleCommandList.java @@ -1,7 +1,29 @@ package duke.commands; +import java.time.LocalDate; + /** * Stores arguments for list command. */ public class ConsoleCommandList extends ConsoleCommand { + private LocalDate date; + + /** + * Initializes object for list command. + */ + public ConsoleCommandList() { + } + + /** + * Initializes object with arguments for list command. + * + * @param date Date. + */ + public ConsoleCommandList(LocalDate date) { + this.date = date; + } + + public LocalDate getDate() { + return date; + } } diff --git a/src/main/java/duke/commands/ConsoleCommandMark.java b/src/main/java/duke/commands/ConsoleCommandMark.java index 26cbfa76..5ecf03b1 100644 --- a/src/main/java/duke/commands/ConsoleCommandMark.java +++ b/src/main/java/duke/commands/ConsoleCommandMark.java @@ -10,7 +10,7 @@ public class ConsoleCommandMark extends ConsoleCommand { /** * Initializes object with arguments for mark command. * - * @param taskNumber Task number of the task as listed by the function {@link duke.data.task.TaskManager#printTasks()}. + * @param taskNumber Task number of the task as listed by the function {@link duke.userinterface.ConsoleInterface#executeCommandList(ConsoleCommandList)}. */ public ConsoleCommandMark(int taskNumber) { this.taskNumber = taskNumber; diff --git a/src/main/java/duke/commands/ConsoleCommandUnmark.java b/src/main/java/duke/commands/ConsoleCommandUnmark.java index c7f4a5e4..bef54ce1 100644 --- a/src/main/java/duke/commands/ConsoleCommandUnmark.java +++ b/src/main/java/duke/commands/ConsoleCommandUnmark.java @@ -10,7 +10,7 @@ public class ConsoleCommandUnmark extends ConsoleCommand { /** * Initializes object with arguments for unmark command. * - * @param taskNumber Task number of the task as listed by the function {@link duke.data.task.TaskManager#printTasks()}. + * @param taskNumber Task number of the task as listed by the function {@link duke.userinterface.ConsoleInterface#executeCommandList(ConsoleCommandList)}. */ public ConsoleCommandUnmark(int taskNumber) { this.taskNumber = taskNumber; diff --git a/src/main/java/duke/common/Configurations.java b/src/main/java/duke/common/Configurations.java index 24c20d59..47ea2d22 100644 --- a/src/main/java/duke/common/Configurations.java +++ b/src/main/java/duke/common/Configurations.java @@ -6,4 +6,5 @@ public class Configurations { public static final String LOCAL_STORAGE_TASKS_DIRECTORY_PATH = "./data/"; public static final String LOCAL_STORAGE_TASKS_FILENAME = "tasks.txt"; + public static final String CONSOLE_INTERFACE_DATE_FORMAT = "dd MMM yyyy"; } diff --git a/src/main/java/duke/common/Messages.java b/src/main/java/duke/common/Messages.java index 0e1f3e71..882b9d3f 100644 --- a/src/main/java/duke/common/Messages.java +++ b/src/main/java/duke/common/Messages.java @@ -1,5 +1,7 @@ package duke.common; +import duke.data.task.Task; + /** * Defines messages used by program. */ @@ -8,10 +10,11 @@ public class Messages { public static final String CONSOLE_MESSAGE_GOODBYE = "Bye. Hope to see you again soon!"; public static final String CONSOLE_ERROR_ARGUMENT_NOT_INTEGER = "The argument provided is not a valid integer."; public static final String CONSOLE_ERROR_COMMAND_NOT_FOUND = "I'm sorry, but I don't know what that means :-("; + public static final String CONSOLE_ERROR_COMMAND_LIST_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: list [" + Task.DATE_FORMAT + "]"; public static final String CONSOLE_ERROR_COMMAND_TODO_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: todo DESCRIPTION"; public static final String CONSOLE_ERROR_COMMAND_TODO_FORBIDDEN_CHARACTERS = "The arguments provided contain forbidden characters."; + public static final String CONSOLE_ERROR_COMMAND_DEADLINE_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: deadline DESCRIPTION /by " + Task.DATE_TIME_FORMAT; public static final String CONSOLE_ERROR_COMMAND_DEADLINE_FORBIDDEN_CHARACTERS = "The arguments provided contain forbidden characters."; + public static final String CONSOLE_ERROR_COMMAND_EVENT_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: event DESCRIPTION /at " + Task.DATE_TIME_FORMAT + " " + Task.DATE_TIME_FORMAT; public static final String CONSOLE_ERROR_COMMAND_EVENT_FORBIDDEN_CHARACTERS = "The arguments provided contain forbidden characters."; - public static final String CONSOLE_ERROR_COMMAND_DEADLINE_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: deadline DESCRIPTION /by dd/MM/yyyy HHmm"; - public static final String CONSOLE_ERROR_COMMAND_EVENT_INVALID_SYNTAX = "The arguments are invalid. SYNTAX: event DESCRIPTION /at dd/MM/yyyy HHmm dd/MM/yyyy HHmm"; } diff --git a/src/main/java/duke/data/task/Task.java b/src/main/java/duke/data/task/Task.java index 4b62b6a7..3216ad43 100644 --- a/src/main/java/duke/data/task/Task.java +++ b/src/main/java/duke/data/task/Task.java @@ -6,6 +6,7 @@ * Stores tasks. */ public class Task { + public static final String DATE_FORMAT = "dd/MM/yyyy"; public static final String DATE_TIME_FORMAT = "dd/MM/yyyy HHmm"; protected String description; diff --git a/src/main/java/duke/data/task/TaskManager.java b/src/main/java/duke/data/task/TaskManager.java index 72d77f18..2b86553e 100644 --- a/src/main/java/duke/data/task/TaskManager.java +++ b/src/main/java/duke/data/task/TaskManager.java @@ -1,19 +1,18 @@ package duke.data.task; +import duke.common.Configurations; import duke.exceptions.TaskManagerException; import duke.storage.LocalStorage; import java.io.IOException; +import java.time.LocalDate; import java.util.ArrayList; /** * Stores tasks and manages task-list. */ -@SuppressWarnings({"FieldMayBeFinal", "unused"}) +@SuppressWarnings({"FieldMayBeFinal", "unused", "PatternVariableCanBeUsed", "StatementWithEmptyBody"}) public class TaskManager { - public final String DEFAULT_TASKS_PATH = "./data/"; - public final String DEFAULT_TASKS_FILENAME = "tasks.txt"; - private ArrayList tasks; private String tasksPath; private String tasksFilename; @@ -23,8 +22,8 @@ public class TaskManager { */ public TaskManager() { this.tasks = new ArrayList<>(); - this.tasksPath = DEFAULT_TASKS_PATH; - this.tasksFilename = DEFAULT_TASKS_FILENAME; + this.tasksPath = Configurations.LOCAL_STORAGE_TASKS_DIRECTORY_PATH; + this.tasksFilename = Configurations.LOCAL_STORAGE_TASKS_FILENAME; } /** @@ -40,16 +39,45 @@ public TaskManager(String tasksPath, String tasksFilename) { } /** - * Prints all tasks in list to standard out. + * Returns list of task in task manager. + * + * @return List of tasks. */ - public void printTasks() { - for (int i = 0; i < tasks.size(); i++) { - int taskNumber = i + 1; - System.out.print(taskNumber + "."); + public ArrayList getTasks() { + return new ArrayList<>(tasks); + } - Task task = tasks.get(i); - task.print(); + /** + * Returns list of tasks in task manager that occurs at a certain date. + * + * @return List of tasks. + */ + public ArrayList getTasks(LocalDate date) { + if (date == null) { + return getTasks(); } + + ArrayList tasksWithDate = new ArrayList<>(); + for (Task task : tasks) { + if (task instanceof Deadline) { + Deadline deadline = (Deadline) task; + LocalDate byDate = deadline.getBy().toLocalDate(); + if (date.equals(byDate)) { + tasksWithDate.add(deadline); + } + } else if (task instanceof Event) { + Event event = (Event) task; + LocalDate startAtDate = event.getStartAt().toLocalDate(); + LocalDate endAtDate = event.getEndAt().toLocalDate(); + if (!date.isBefore(startAtDate) && !date.isAfter(endAtDate)) { + tasksWithDate.add(event); + } + } else { + // Do nothing if the current task is not an instance of the objects in the clauses above; + } + } + + return tasksWithDate; } /** @@ -73,12 +101,11 @@ public void addTask(Task task) { /** * Gets a task from list of tasks. * - * @param taskNumber Task number of task as shown by the function {@link #printTasks()}. + * @param taskIndex Task index. * @return Task. * @throws TaskManagerException.TaskNotFoundException If task is not the task manager. */ - public Task getTask(int taskNumber) throws TaskManagerException.TaskNotFoundException { - int taskIndex = taskNumber - 1; + public Task getTask(int taskIndex) throws TaskManagerException.TaskNotFoundException { try { return tasks.get(taskIndex); } catch (IndexOutOfBoundsException e) { @@ -90,21 +117,20 @@ public Task getTask(int taskNumber) throws TaskManagerException.TaskNotFoundExce * Gets task number for task in list of tasks. * * @param task Task. - * @return Task number. + * @return Task index. */ - public int getTaskNumber(Task task) { - return tasks.indexOf(task) + 1; + public int getTaskIndex(Task task) { + return tasks.indexOf(task); } /** * Deletes a task from list of tasks. * - * @param taskNumber Task number of task as shown by the function {@link #printTasks()}. + * @param taskIndex Task index. * @return Task. * @throws TaskManagerException.TaskNotFoundException If task is not the task manager. */ - public Task deleteTask(int taskNumber) throws TaskManagerException.TaskNotFoundException { - int taskIndex = taskNumber - 1; + public Task deleteTask(int taskIndex) throws TaskManagerException.TaskNotFoundException { try { Task task = tasks.get(taskIndex); tasks.remove(taskIndex); @@ -136,11 +162,10 @@ public ArrayList findTask(String description) { /** * Marks a task as completed. * - * @param taskNumber Task number of task as shown by the function {@link #printTasks()}. + * @param taskIndex Task index. * @throws TaskManagerException.TaskNotFoundException If task is not the task manager. */ - public void markTaskAsCompleted(int taskNumber) throws TaskManagerException.TaskNotFoundException { - int taskIndex = taskNumber - 1; + public void markTaskAsCompleted(int taskIndex) throws TaskManagerException.TaskNotFoundException { try { Task task = tasks.get(taskIndex); task.setComplete(true); @@ -152,11 +177,10 @@ public void markTaskAsCompleted(int taskNumber) throws TaskManagerException.Task /** * Marks a task as uncompleted. * - * @param taskNumber Task number of task as shown by the function {@link #printTasks()}. + * @param taskIndex Task index. * @throws TaskManagerException.TaskNotFoundException If task is not the task manager. */ - public void markTaskAsUncompleted(int taskNumber) throws TaskManagerException.TaskNotFoundException { - int taskIndex = taskNumber - 1; + public void markTaskAsUncompleted(int taskIndex) throws TaskManagerException.TaskNotFoundException { try { Task task = tasks.get(taskIndex); task.setComplete(false); diff --git a/src/main/java/duke/exceptions/ConsoleInputParserException.java b/src/main/java/duke/exceptions/ConsoleInputParserException.java index 6f103795..9f6ab0d9 100644 --- a/src/main/java/duke/exceptions/ConsoleInputParserException.java +++ b/src/main/java/duke/exceptions/ConsoleInputParserException.java @@ -1,9 +1,7 @@ package duke.exceptions; -import duke.userinterface.ConsoleInputParser; - /** - * Define exceptions thrown by {@link ConsoleInputParser#}. + * Define exceptions thrown by {@link duke.userinterface.ConsoleInputParser#}. */ @SuppressWarnings("unused") public class ConsoleInputParserException { @@ -19,6 +17,18 @@ public CommandNotFoundException(String message) { } } + /** + * Thrown when command list is not valid. + */ + public static class InvalidCommandListException extends DukeException { + public InvalidCommandListException() { + } + + public InvalidCommandListException(String message) { + super(message); + } + } + /** * Thrown when command mark is not valid. */ @@ -105,7 +115,7 @@ public InvalidCommandFindException(String message) { } /** - * Thrown when forbidden characters are found in command todo + * Thrown when forbidden characters are found in command todo. */ public static class ForbiddenCharactersCommandTodoException extends DukeException { public ForbiddenCharactersCommandTodoException() { @@ -118,7 +128,7 @@ public ForbiddenCharactersCommandTodoException(String message) { } /** - * Thrown when forbidden characters are found in command deadline + * Thrown when forbidden characters are found in command deadline. */ public static class ForbiddenCharactersCommandDeadlineException extends DukeException { public ForbiddenCharactersCommandDeadlineException() { @@ -131,7 +141,7 @@ public ForbiddenCharactersCommandDeadlineException(String message) { } /** - * Thrown when forbidden characters are found in command event + * Thrown when forbidden characters are found in command event. */ public static class ForbiddenCharactersCommandEventException extends DukeException { public ForbiddenCharactersCommandEventException() { diff --git a/src/main/java/duke/exceptions/DukeException.java b/src/main/java/duke/exceptions/DukeException.java index d7effc02..918c42d1 100644 --- a/src/main/java/duke/exceptions/DukeException.java +++ b/src/main/java/duke/exceptions/DukeException.java @@ -1,9 +1,7 @@ package duke.exceptions; -import duke.Duke; - /** - * Define exceptions thrown by {@link Duke#}. + * Define exceptions thrown by {@link duke.Duke#}. */ public abstract class DukeException extends Exception { private String message; diff --git a/src/main/java/duke/exceptions/TaskManagerException.java b/src/main/java/duke/exceptions/TaskManagerException.java index eef8f5fe..b2a88e39 100644 --- a/src/main/java/duke/exceptions/TaskManagerException.java +++ b/src/main/java/duke/exceptions/TaskManagerException.java @@ -1,14 +1,12 @@ package duke.exceptions; -import duke.data.task.TaskManager; - /** - * Define exceptions thrown by {@link TaskManager#}. + * Define exceptions thrown by {@link duke.data.task.TaskManager#}. */ @SuppressWarnings("unused") public class TaskManagerException { /** - * Thrown when a task cannot be found in {@link TaskManager#}. + * Thrown when a task cannot be found in {@link duke.data.task.TaskManager#}. */ public static class TaskNotFoundException extends DukeException { public TaskNotFoundException() { @@ -20,7 +18,7 @@ public TaskNotFoundException(String message) { } /** - * Thrown when a task cannot be saved by {@link TaskManager#}. + * Thrown when a task cannot be saved by {@link duke.data.task.TaskManager#}. */ public static class TasksFileIOException extends DukeException { public TasksFileIOException() { diff --git a/src/main/java/duke/userinterface/ConsoleInputParser.java b/src/main/java/duke/userinterface/ConsoleInputParser.java index 596fb6c3..581d0a62 100644 --- a/src/main/java/duke/userinterface/ConsoleInputParser.java +++ b/src/main/java/duke/userinterface/ConsoleInputParser.java @@ -15,6 +15,7 @@ import duke.exceptions.ConsoleInputParserException; import duke.storage.LocalStorage; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -46,8 +47,19 @@ private static ConsoleCommandBye parseCommandBye() { return new ConsoleCommandBye(); } - private static ConsoleCommandList parseCommandList() { - return new ConsoleCommandList(); + private static ConsoleCommandList parseCommandList(String arguments) throws ConsoleInputParserException.InvalidCommandListException { + if (arguments.isEmpty()) { + return new ConsoleCommandList(); + } + + LocalDate date; + try { + date = LocalDate.parse(arguments, DateTimeFormatter.ofPattern(Task.DATE_FORMAT)); + } catch (DateTimeParseException e) { + throw new ConsoleInputParserException.InvalidCommandListException(Messages.CONSOLE_ERROR_COMMAND_LIST_INVALID_SYNTAX); + } + + return new ConsoleCommandList(date); } private static ConsoleCommandMark parseCommandMark(String arguments) throws ConsoleInputParserException.InvalidCommandMarkException { @@ -167,29 +179,31 @@ private static ConsoleCommandFind parseCommandFind(String arguments) throws Cons * @param consoleInput Command and arguments entered by the user. * @return Parsed arguments for the corresponding commands. * @throws ConsoleInputParserException.CommandNotFoundException If the command is not found. + * @throws ConsoleInputParserException.InvalidCommandListException If the format of the lsit command is not valid. * @throws ConsoleInputParserException.InvalidCommandMarkException If the format of the mark command is not valid. * @throws ConsoleInputParserException.InvalidCommandUnmarkException If the format of the unmark command is not valid. * @throws ConsoleInputParserException.InvalidCommandTodoException If the format of the todo command is not valid. + * @throws ConsoleInputParserException.ForbiddenCharactersCommandTodoException If forbidden characters are found in the todo command. * @throws ConsoleInputParserException.InvalidCommandDeadlineException If the format of the deadline command is not valid. + * @throws ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException If forbidden characters are found in the deadline command. * @throws ConsoleInputParserException.InvalidCommandEventException If the format of the event command is not valid. + * @throws ConsoleInputParserException.ForbiddenCharactersCommandEventException If forbidden characters are found in the event command. * @throws ConsoleInputParserException.InvalidCommandDeleteException If the format of the delete command is not valid. * @throws ConsoleInputParserException.InvalidCommandFindException If the format of the find command is not valid. - * @throws ConsoleInputParserException.ForbiddenCharactersCommandTodoException If forbidden characters are found in the todo command. - * @throws ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException If forbidden characters are found in the deadline command. - * @throws ConsoleInputParserException.ForbiddenCharactersCommandEventException If forbidden characters are found in the event command. */ public static ConsoleCommand parseConsoleInput(ConsoleInput consoleInput) throws ConsoleInputParserException.CommandNotFoundException, + ConsoleInputParserException.InvalidCommandListException, ConsoleInputParserException.InvalidCommandMarkException, ConsoleInputParserException.InvalidCommandUnmarkException, ConsoleInputParserException.InvalidCommandTodoException, + ConsoleInputParserException.ForbiddenCharactersCommandTodoException, ConsoleInputParserException.InvalidCommandDeadlineException, + ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException, ConsoleInputParserException.InvalidCommandEventException, + ConsoleInputParserException.ForbiddenCharactersCommandEventException, ConsoleInputParserException.InvalidCommandDeleteException, - ConsoleInputParserException.InvalidCommandFindException, - ConsoleInputParserException.ForbiddenCharactersCommandTodoException, - ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException, - ConsoleInputParserException.ForbiddenCharactersCommandEventException { + ConsoleInputParserException.InvalidCommandFindException { String command = consoleInput.getCommand(); String arguments = consoleInput.getArguments(); @@ -197,7 +211,7 @@ public static ConsoleCommand parseConsoleInput(ConsoleInput consoleInput) throws case COMMAND_BYE: return parseCommandBye(); case COMMAND_LIST: - return parseCommandList(); + return parseCommandList(arguments); case COMMAND_MARK: return parseCommandMark(arguments); case COMMAND_UNMARK: diff --git a/src/main/java/duke/userinterface/ConsoleInterface.java b/src/main/java/duke/userinterface/ConsoleInterface.java index 1c3a814f..ba85d883 100644 --- a/src/main/java/duke/userinterface/ConsoleInterface.java +++ b/src/main/java/duke/userinterface/ConsoleInterface.java @@ -20,7 +20,9 @@ import duke.exceptions.TaskManagerException; import duke.data.task.Todo; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Scanner; @@ -104,10 +106,25 @@ public ConsoleInput getConsoleInput() { /** * Prints all tasks in task manager to standard out. */ - public void executeCommandList() { - System.out.println("Here are the tasks in your list:"); + public void executeCommandList(ConsoleCommandList consoleCommand) { + LocalDate date = consoleCommand.getDate(); + + if (date == null) { + System.out.println("Here are the tasks in your list:"); + } else { + String formattedDate = date.format(DateTimeFormatter.ofPattern(Configurations.CONSOLE_INTERFACE_DATE_FORMAT)); + System.out.println("Here are the tasks in your list occurring on " + formattedDate + ":"); + } + + ArrayList tasks = taskManager.getTasks(date); + + for (int taskIndex = 0; taskIndex < tasks.size(); taskIndex++) { + int taskNumber = taskIndex + 1; + System.out.print(taskNumber + "."); - taskManager.printTasks(); + Task task = tasks.get(taskIndex); + task.print(); + } } /** @@ -117,12 +134,13 @@ public void executeCommandList() { */ public void executeCommandMark(ConsoleCommandMark consoleCommandMark) { int taskNumber = consoleCommandMark.getTaskNumber(); + int taskIndex = taskNumber - 1; try { - taskManager.markTaskAsCompleted(taskNumber); + taskManager.markTaskAsCompleted(taskIndex); System.out.println("Nice! I've marked this task as done:"); - taskManager.getTask(taskNumber).print(); + taskManager.getTask(taskIndex).print(); taskManager.saveTasks(); } catch (TaskManagerException.TaskNotFoundException taskNotFoundException) { @@ -139,12 +157,13 @@ public void executeCommandMark(ConsoleCommandMark consoleCommandMark) { */ public void executeCommandUnmark(ConsoleCommandUnmark consoleCommandUnmark) { int taskNumber = consoleCommandUnmark.getTaskNumber(); + int taskIndex = taskNumber - 1; try { - taskManager.markTaskAsUncompleted(taskNumber); + taskManager.markTaskAsUncompleted(taskIndex); System.out.println("OK, I've marked this task as not done yet:"); - taskManager.getTask(taskNumber).print(); + taskManager.getTask(taskIndex).print(); taskManager.saveTasks(); } catch (TaskManagerException.TaskNotFoundException e) { @@ -230,9 +249,10 @@ public void executeCommandEvent(ConsoleCommandEvent consoleCommandEvent) { */ public void executeCommandDelete(ConsoleCommandDelete consoleCommandDelete) { int taskNumber = consoleCommandDelete.getTaskNumber(); + int taskIndex = taskNumber - 1; try { - Task task = taskManager.deleteTask(taskNumber); + Task task = taskManager.deleteTask(taskIndex); System.out.println("Noted. I've removed this task:"); task.print(); @@ -258,7 +278,8 @@ public void executeCommandFind(ConsoleCommandFind consoleCommandFind) { System.out.println("Here are the matching tasks in your list:"); for (Task task : matchingTasks) { - System.out.print(taskManager.getTaskNumber(task) + "."); + int taskNumber = taskManager.getTaskIndex(task) + 1; + System.out.print(taskNumber + "."); task.print(); } } @@ -282,25 +303,26 @@ public void executeProgram() { consoleCommand = ConsoleInputParser.parseConsoleInput(consoleInput); hasParseError = false; } catch (ConsoleInputParserException.CommandNotFoundException | + ConsoleInputParserException.InvalidCommandListException | ConsoleInputParserException.InvalidCommandMarkException | ConsoleInputParserException.InvalidCommandUnmarkException | ConsoleInputParserException.InvalidCommandTodoException | + ConsoleInputParserException.ForbiddenCharactersCommandTodoException | ConsoleInputParserException.InvalidCommandDeadlineException | + ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException | ConsoleInputParserException.InvalidCommandEventException | + ConsoleInputParserException.ForbiddenCharactersCommandEventException | ConsoleInputParserException.InvalidCommandDeleteException | - ConsoleInputParserException.InvalidCommandFindException | - ConsoleInputParserException.ForbiddenCharactersCommandTodoException | - ConsoleInputParserException.ForbiddenCharactersCommandDeadlineException | - ConsoleInputParserException.ForbiddenCharactersCommandEventException e) { + ConsoleInputParserException.InvalidCommandFindException e) { printErrorMessage(e.getMessage()); } if (hasParseError) { - // Do nothing on parse error + // Do nothing if there is a parse error } else if (consoleCommand instanceof ConsoleCommandBye) { return; } else if (consoleCommand instanceof ConsoleCommandList) { - executeCommandList(); + executeCommandList((ConsoleCommandList) consoleCommand); } else if (consoleCommand instanceof ConsoleCommandMark) { executeCommandMark((ConsoleCommandMark) consoleCommand); } else if (consoleCommand instanceof ConsoleCommandUnmark) { @@ -316,7 +338,7 @@ public void executeProgram() { } else if (consoleCommand instanceof ConsoleCommandFind) { executeCommandFind((ConsoleCommandFind) consoleCommand); } else { - // Do nothing on command not found + // Do nothing if the command is not found } ConsoleInterface.printBlankLine();