From 4dfe0fb6b36d6d5d3b4c267c0163d1791dcf04ab Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 22 Aug 2024 15:40:41 +0800 Subject: [PATCH 01/88] Rename Chatbot from Duke to Jarvis --- src/main/java/Duke.java | 10 ---------- src/main/java/Jarvis.java | 13 +++++++++++++ 2 files changed, 13 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/Duke.java create mode 100644 src/main/java/Jarvis.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 5d313334c..000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,10 +0,0 @@ -public class Duke { - public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - } -} diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java new file mode 100644 index 000000000..044e793e5 --- /dev/null +++ b/src/main/java/Jarvis.java @@ -0,0 +1,13 @@ +public class Jarvis { + public static void main(String[] args) { + String logo = """ + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ + ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ + ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ + """; + System.out.println("Hello from\n" + logo); + } +} From 24dd1c834a1b8b3fdb67dba59351ee08df07b51b Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 22 Aug 2024 15:56:21 +0800 Subject: [PATCH 02/88] Add method to print breakline and exit --- src/main/java/Jarvis.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 044e793e5..1b152518b 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,4 +1,14 @@ public class Jarvis { + static String chatBotName = "Jarvis"; // Name of the chatbot + + public static void printBreakLine() { + System.out.println("____________________________________________________________"); + } + + public static void exit(int status) { + System.exit(status); + } + public static void main(String[] args) { String logo = """ ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ From 07de1ac22482791088b0ffcd461778ed11236941 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 22 Aug 2024 16:14:51 +0800 Subject: [PATCH 03/88] :tada: Level-0 - Completed Level-0 Assignment - Rename README info --- README.md | 15 ++++++++------- src/main/java/Jarvis.java | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 90aa7f092..55154b5d8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Duke project template -This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. +This is a project template for a greenfield Java project. It's named after the Java mascot _Jarvis_. Given below are instructions on how to use it. ## Setting up in Intellij @@ -13,12 +13,13 @@ Prerequisites: JDK 17, update Intellij to the most recent version. 1. If there are any further prompts, accept the defaults. 1. Configure the project to use **JDK 17** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
In the same dialog, set the **Project language level** field to the `SDK default` option. -3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: +3. After that, locate the `src/main/java/Jarvis.java` file, right-click it, and choose `Run Jarvis.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: ``` Hello from - ____ _ - | _ \ _ _| | _____ - | | | | | | | |/ / _ \ - | |_| | |_| | < __/ - |____/ \__,_|_|\_\___| + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ + ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ + ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ ``` diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 1b152518b..67fcdcc7b 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -2,13 +2,25 @@ public class Jarvis { static String chatBotName = "Jarvis"; // Name of the chatbot public static void printBreakLine() { - System.out.println("____________________________________________________________"); + System.out.println("────────────────────────────────────────────────────────────"); } public static void exit(int status) { System.exit(status); } + public static void printGreetingMsgs() { + String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?", + "Bye. Hope to see you again soon!",}; + + for (String greeting : greetings) { + printBreakLine(); + System.out.println(greeting); + } + printBreakLine(); + exit(0); + } + public static void main(String[] args) { String logo = """ ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ @@ -19,5 +31,6 @@ public static void main(String[] args) { ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ """; System.out.println("Hello from\n" + logo); + printGreetingMsgs(); } } From 84ac32400f99939163f4389167b704dd8a55e1d0 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 22 Aug 2024 16:32:12 +0800 Subject: [PATCH 04/88] :memo: Level-0 - Add comments to methods - Improve access modifiers and methods --- src/main/java/Jarvis.java | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 67fcdcc7b..631fe05c0 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,21 +1,33 @@ public class Jarvis { - static String chatBotName = "Jarvis"; // Name of the chatbot + private static final String chatBotName = "Jarvis"; // Name of the chatbot - public static void printBreakLine() { + /** + * Prints a break line to the console. + */ + private static void printBreakLine() { System.out.println("────────────────────────────────────────────────────────────"); } - public static void exit(int status) { + /** + * Gracefully exits the program. + * + * @param status + */ + private static void exit(int status) { System.exit(status); } - public static void printGreetingMsgs() { + /** + * Prints the greeting messages to the console. + */ + private static void printGreetingMsgs() { String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?", - "Bye. Hope to see you again soon!",}; + "Bye. Hope to see you again soon!"}; // List of greetings + // Print the greetings for (String greeting : greetings) { - printBreakLine(); - System.out.println(greeting); + printBreakLine(); // Print a break line before each greeting + System.out.println(greeting); // Print the greeting } printBreakLine(); exit(0); From 8e1d4962a7e96e88ece65e816b22c56e3eabfac5 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 22 Aug 2024 17:01:29 +0800 Subject: [PATCH 05/88] :art: Level-0 - Improve logo --- src/main/java/Jarvis.java | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 631fe05c0..f21259e7f 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -26,8 +26,8 @@ private static void printGreetingMsgs() { // Print the greetings for (String greeting : greetings) { - printBreakLine(); // Print a break line before each greeting - System.out.println(greeting); // Print the greeting + printBreakLine(); // Print a break line before each greeting + System.out.println(greeting); // Print the greeting } printBreakLine(); exit(0); @@ -35,13 +35,36 @@ private static void printGreetingMsgs() { public static void main(String[] args) { String logo = """ + @@@@@@@@@@@@@@@@@@@@@@@ + @@% @@ @@ @@@ + @@ @@ @@ @@ + @@ @@ @@ @@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @ *@ + @@@ @@@ + @ @@@ @@@ @ + @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ + @ @@@ @@ @@ @@@ @ + @ *@@ @@ @( @@( @ + @ ,@@@@ @@ @@ @@@@ @ + @ @@@@@ %@@ @@ @ @@& @@@@@ @ + @@@@ @@@ /@ @@ @@@ *@@@@/ + @@ @@@ @@ @@@ @@ + @@ @@& (@@ @@ + @ @@@@@@@@ @@@@@@@ @ + @@ @@@@* @@, @@ @@@@ @& + @@ @@@ @@@ @@ + @@@ @@ @@ @@# + @@@@ @@@ @@@ @@@@ + @@@@@@@@@@@@@ + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - """; + """; System.out.println("Hello from\n" + logo); printGreetingMsgs(); } From 833c4405f4010154e4838343a506687cbb84695c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 12:29:45 +0800 Subject: [PATCH 06/88] Reformat code --- src/main/java/Jarvis.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index f21259e7f..e702614c0 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -21,8 +21,7 @@ private static void exit(int status) { * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?", - "Bye. Hope to see you again soon!"}; // List of greetings + String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?", "Bye. Hope to see you again soon!"}; // List of greetings // Print the greetings for (String greeting : greetings) { From 0209dec4d82d6253601e3a57b94d8dbda44ad520 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 12:43:37 +0800 Subject: [PATCH 07/88] Add Scanner - Level 1: Echo Task --- src/main/java/Jarvis.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index e702614c0..8bf22f59b 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,6 +1,11 @@ +import java.util.Scanner; + public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot + String lineBufferString; // Buffer to store the input from the user + Scanner in = new Scanner(System.in); + /** * Prints a break line to the console. */ @@ -66,5 +71,6 @@ public static void main(String[] args) { """; System.out.println("Hello from\n" + logo); printGreetingMsgs(); + } } From bd7745e662ad602ee6c07bb4b3b0bcdbb2069828 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 13:13:36 +0800 Subject: [PATCH 08/88] Add method to echo user input - Cleanup messages - Add Scanner to read user input --- src/main/java/Jarvis.java | 43 +++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 8bf22f59b..302aa9896 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -3,14 +3,12 @@ public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot - String lineBufferString; // Buffer to store the input from the user - Scanner in = new Scanner(System.in); /** * Prints a break line to the console. */ private static void printBreakLine() { - System.out.println("────────────────────────────────────────────────────────────"); + System.out.println(" ────────────────────────────────────────────────────────────"); } /** @@ -26,7 +24,7 @@ private static void exit(int status) { * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?", "Bye. Hope to see you again soon!"}; // List of greetings + String[] greetings = {" Hello! I'm " + chatBotName + "\n What can I do for you?"}; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -34,9 +32,41 @@ private static void printGreetingMsgs() { System.out.println(greeting); // Print the greeting } printBreakLine(); + } + + private static void printGoodbyeMsgs() { + String[] goodbyes = {" Bye. Hope to see you again soon!"}; // List of goodbye messages + + // Print the goodbye messages + for (String goodbye : goodbyes) { + printBreakLine(); + System.out.println(goodbye); // Print the goodbye message + } + printBreakLine(); exit(0); } + public static void echoUserInput(Scanner in, String lineBufferString) { + + try (in) { + lineBufferString = in.nextLine(); + + if (lineBufferString.isEmpty()) { + System.out.println("You did not enter anything. Please try again."); + return; + } else if (lineBufferString.equalsIgnoreCase("bye")) { + printGoodbyeMsgs(); + } else { + printBreakLine(); + System.out.println(" " + lineBufferString); + printBreakLine(); + echoUserInput(in, lineBufferString); + } + } catch (Exception e) { + System.err.println("An error occurred. Please try again."); + } + } + public static void main(String[] args) { String logo = """ @@@@@@@@@@@@@@@@@@@@@@@ @@ -69,8 +99,13 @@ public static void main(String[] args) { ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ """; + + String lineBufferString = ""; // Buffer to store the input from the user + Scanner in = new Scanner(System.in); // Scanner object to read input from the user + System.out.println("Hello from\n" + logo); printGreetingMsgs(); + echoUserInput(in, lineBufferString); } } From e9fe9bd5b80fdad4027f08553fdab486994d1acf Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 13:40:41 +0800 Subject: [PATCH 09/88] Revert from using indention - Add print promt as arrow --- src/main/java/Jarvis.java | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 302aa9896..b818f269d 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,14 +1,20 @@ import java.util.Scanner; + public class Jarvis { + // Constants + static final int MAX_STRING_LENGTH = 100; // Maximum length of a string + private static final String chatBotName = "Jarvis"; // Name of the chatbot + private String[] itemList = new String[MAX_STRING_LENGTH]; // List of items + private int itemCount; // Number of items in the list /** * Prints a break line to the console. */ private static void printBreakLine() { - System.out.println(" ────────────────────────────────────────────────────────────"); + System.out.println("────────────────────────────────────────────────────────────"); } /** @@ -20,11 +26,18 @@ private static void exit(int status) { System.exit(status); } + /** + * + */ + private static void printPrompt() { + System.out.print(" "); + } + /** * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = {" Hello! I'm " + chatBotName + "\n What can I do for you?"}; // List of greetings + String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?"}; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -35,7 +48,7 @@ private static void printGreetingMsgs() { } private static void printGoodbyeMsgs() { - String[] goodbyes = {" Bye. Hope to see you again soon!"}; // List of goodbye messages + String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages // Print the goodbye messages for (String goodbye : goodbyes) { @@ -49,6 +62,7 @@ private static void printGoodbyeMsgs() { public static void echoUserInput(Scanner in, String lineBufferString) { try (in) { + printPrompt(); lineBufferString = in.nextLine(); if (lineBufferString.isEmpty()) { @@ -56,9 +70,11 @@ public static void echoUserInput(Scanner in, String lineBufferString) { return; } else if (lineBufferString.equalsIgnoreCase("bye")) { printGoodbyeMsgs(); + } else if (lineBufferString.equalsIgnoreCase("list")) { + } else { printBreakLine(); - System.out.println(" " + lineBufferString); + System.out.println("Added:" + lineBufferString); printBreakLine(); echoUserInput(in, lineBufferString); } From 9acfbc980e9c609500b89ca8fbdad2669fca14b9 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 13:55:44 +0800 Subject: [PATCH 10/88] Support adding and showing list - Task: Level-2 Add,List --- src/main/java/Jarvis.java | 40 +++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index b818f269d..8d00e4131 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -6,8 +6,8 @@ public class Jarvis { static final int MAX_STRING_LENGTH = 100; // Maximum length of a string private static final String chatBotName = "Jarvis"; // Name of the chatbot - private String[] itemList = new String[MAX_STRING_LENGTH]; // List of items - private int itemCount; // Number of items in the list + private static String[] itemLists = new String[MAX_STRING_LENGTH]; // List of items + private static int itemCount; // Number of items in the list /** @@ -59,6 +59,33 @@ private static void printGoodbyeMsgs() { exit(0); } + public static void printUserList() { + printBreakLine(); + if (itemCount == 0) { + System.out.println("The list is empty."); + } else { + + for (int i = 0; i < itemCount; i++) { + System.out.println((i + 1) + ". " + itemLists[i]); + } + } + printBreakLine(); + } + + public static void addUserItem(String item) { + printBreakLine(); + System.out.println("Added: " + item); + if (itemCount < MAX_STRING_LENGTH) { + itemLists[itemCount] = item; + itemCount++; + } else { + System.out.println("The list is full. Please remove some items before adding more."); + } + + printBreakLine(); + + } + public static void echoUserInput(Scanner in, String lineBufferString) { try (in) { @@ -71,12 +98,13 @@ public static void echoUserInput(Scanner in, String lineBufferString) { } else if (lineBufferString.equalsIgnoreCase("bye")) { printGoodbyeMsgs(); } else if (lineBufferString.equalsIgnoreCase("list")) { - + printUserList(); + echoUserInput(in, lineBufferString); } else { - printBreakLine(); - System.out.println("Added:" + lineBufferString); - printBreakLine(); + + addUserItem(lineBufferString); echoUserInput(in, lineBufferString); + } } catch (Exception e) { System.err.println("An error occurred. Please try again."); From ab1fe401a312262416cb1f4284a6bcfeb168e28a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 14:28:40 +0800 Subject: [PATCH 11/88] :sparkles: Add Task Class - simple task that has description and done flag --- src/main/java/Task.java | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..623c2afdc --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,42 @@ +public class Task { + protected String description; + protected boolean isDone; + + private static int numberOfTasks = 0; + + public Task(String description) { + this.description = description; + this.isDone = false; + + numberOfTasks++; + } + + public String getDescription() { + return this.description; + } + + public void changeDescription(String newDescription) { + this.description = newDescription; + } + + public String getStatusIcon() { + return (isDone ? "X" : " "); + } + + public void markAsDone() { + this.isDone = true; + } + + public void markAsUndone() { + this.isDone = false; + } + + public static int getNumberOfTasks() { + return numberOfTasks; + } + + public void printTask() { + System.out.println("[" + this.getStatusIcon() + "] " + this.description); + } + +} From 0fa95146cf83c8d80db32d81e6ab86cc1ee3666e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 14:30:35 +0800 Subject: [PATCH 12/88] Rename items to tasks and cleanup - Remove names from previous tasks --- src/main/java/Jarvis.java | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 8d00e4131..8136e9562 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -3,11 +3,12 @@ public class Jarvis { // Constants - static final int MAX_STRING_LENGTH = 100; // Maximum length of a string + static final int MAX_TASK_LENGTH = 100; // Maximum length of a string private static final String chatBotName = "Jarvis"; // Name of the chatbot - private static String[] itemLists = new String[MAX_STRING_LENGTH]; // List of items - private static int itemCount; // Number of items in the list + + private static Task[] taskList = new Task[100]; // Array to store tasks + // private static int taskCount = 0; // Number of tasks in the list /** @@ -59,25 +60,25 @@ private static void printGoodbyeMsgs() { exit(0); } - public static void printUserList() { + public static void printTasks() { printBreakLine(); - if (itemCount == 0) { + if (Task.getNumberOfTasks() == 0) { System.out.println("The list is empty."); } else { - for (int i = 0; i < itemCount; i++) { - System.out.println((i + 1) + ". " + itemLists[i]); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + System.out.print((i + 1) + ". "); + taskList[i].printTask(); } } printBreakLine(); } - public static void addUserItem(String item) { + public static void addTask(String item) { printBreakLine(); System.out.println("Added: " + item); - if (itemCount < MAX_STRING_LENGTH) { - itemLists[itemCount] = item; - itemCount++; + if (Task.getNumberOfTasks() < MAX_TASK_LENGTH) { + taskList[Task.getNumberOfTasks()] = new Task(item); } else { System.out.println("The list is full. Please remove some items before adding more."); } @@ -86,7 +87,7 @@ public static void addUserItem(String item) { } - public static void echoUserInput(Scanner in, String lineBufferString) { + public static void readInput(Scanner in, String lineBufferString) { try (in) { printPrompt(); @@ -98,13 +99,11 @@ public static void echoUserInput(Scanner in, String lineBufferString) { } else if (lineBufferString.equalsIgnoreCase("bye")) { printGoodbyeMsgs(); } else if (lineBufferString.equalsIgnoreCase("list")) { - printUserList(); - echoUserInput(in, lineBufferString); + printTasks(); + readInput(in, lineBufferString); } else { - - addUserItem(lineBufferString); - echoUserInput(in, lineBufferString); - + addTask(lineBufferString); + readInput(in, lineBufferString); } } catch (Exception e) { System.err.println("An error occurred. Please try again."); @@ -149,7 +148,7 @@ public static void main(String[] args) { System.out.println("Hello from\n" + logo); printGreetingMsgs(); - echoUserInput(in, lineBufferString); + readInput(in, lineBufferString); } } From c9e9cb711a0fe448afc9541828270b7583db505f Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 15:07:58 +0800 Subject: [PATCH 13/88] Add more methods to Task --- src/main/java/Task.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 623c2afdc..5cc74c0b6 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -25,10 +25,16 @@ public String getStatusIcon() { public void markAsDone() { this.isDone = true; + + System.out.print("Nice! I've marked this task as done: \n "); + printTask(); } public void markAsUndone() { this.isDone = false; + + System.out.print("OK, I've marked this task as not done yet: \n "); + printTask(); } public static int getNumberOfTasks() { From cd600a1d12c913f0bf71fe72b15c9cc78e636143 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 15:10:03 +0800 Subject: [PATCH 14/88] Switch to switch to support more commands - Task Level-3: Add support to mark & unmark --- src/main/java/Jarvis.java | 57 +++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 8136e9562..0226fe68a 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -8,7 +8,6 @@ public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot private static Task[] taskList = new Task[100]; // Array to store tasks - // private static int taskCount = 0; // Number of tasks in the list /** @@ -65,9 +64,9 @@ public static void printTasks() { if (Task.getNumberOfTasks() == 0) { System.out.println("The list is empty."); } else { - + System.out.println("Here are the tasks in your list:"); for (int i = 0; i < Task.getNumberOfTasks(); i++) { - System.out.print((i + 1) + ". "); + System.out.print((i + 1) + "."); taskList[i].printTask(); } } @@ -92,19 +91,55 @@ public static void readInput(Scanner in, String lineBufferString) { try (in) { printPrompt(); lineBufferString = in.nextLine(); + String command; + int dividerPosition = 0; - if (lineBufferString.isEmpty()) { - System.out.println("You did not enter anything. Please try again."); - return; - } else if (lineBufferString.equalsIgnoreCase("bye")) { + if (lineBufferString.contains(" ")) { + dividerPosition = lineBufferString.indexOf(" "); + command = lineBufferString.substring(0, dividerPosition); + } else { + command = lineBufferString; + } + + switch (command) { + case "bye": printGoodbyeMsgs(); - } else if (lineBufferString.equalsIgnoreCase("list")) { + break; + case "list": printTasks(); - readInput(in, lineBufferString); - } else { + + break; + case "mark": + int taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); + taskList[taskNumber - 1].markAsDone(); + break; + case "unmark": + taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); + taskList[taskNumber - 1].markAsUndone(); + break; + case "": + System.out.println("You did not enter anything. Please try again."); + break; + default: addTask(lineBufferString); - readInput(in, lineBufferString); + + break; } + + readInput(in, lineBufferString); + + // if (lineBufferString.isEmpty()) { + // System.out.println("You did not enter anything. Please try again."); + // return; + // } else if (lineBufferString.equalsIgnoreCase("bye")) { + // printGoodbyeMsgs(); + // } else if (lineBufferString.equalsIgnoreCase("list")) { + // printTasks(); + // readInput(in, lineBufferString); + // } else { + // addTask(lineBufferString); + // readInput(in, lineBufferString); + // } } catch (Exception e) { System.err.println("An error occurred. Please try again."); } From 55ed565aaba885106c56424bd8ce45714444f3c4 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 15:20:41 +0800 Subject: [PATCH 15/88] :bulb: Add comments and cleanup --- src/main/java/Jarvis.java | 59 ++++++++++++++++++++------------------- src/main/java/Task.java | 43 ++++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 33 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 0226fe68a..9d452c6c9 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -27,7 +27,7 @@ private static void exit(int status) { } /** - * + * Prints the prompt to the console for visual marker for user to type. */ private static void printPrompt() { System.out.print(" "); @@ -47,6 +47,9 @@ private static void printGreetingMsgs() { printBreakLine(); } + /** + * Prints the goodbye messages to the console. + */ private static void printGoodbyeMsgs() { String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages @@ -59,6 +62,9 @@ private static void printGoodbyeMsgs() { exit(0); } + /** + * Prints the tasks to the console. + */ public static void printTasks() { printBreakLine(); if (Task.getNumberOfTasks() == 0) { @@ -73,6 +79,11 @@ public static void printTasks() { printBreakLine(); } + /** + * Adds a task to the task list. + * + * @param item + */ public static void addTask(String item) { printBreakLine(); System.out.println("Added: " + item); @@ -83,18 +94,25 @@ public static void addTask(String item) { } printBreakLine(); - } + /** + * Reads the input from the user and processes it. + * + * @param in + * @param lineBufferString + */ public static void readInput(Scanner in, String lineBufferString) { try (in) { - printPrompt(); + printPrompt(); // Print the prompt to the console lineBufferString = in.nextLine(); - String command; - int dividerPosition = 0; + String command; // Variable to store the command + int dividerPosition = 0; // Variable to store the position of the divider + // Check if the input contains a space if (lineBufferString.contains(" ")) { + // Suppose the input is "mark 1" or "unmark 1" dividerPosition = lineBufferString.indexOf(" "); command = lineBufferString.substring(0, dividerPosition); } else { @@ -107,15 +125,14 @@ public static void readInput(Scanner in, String lineBufferString) { break; case "list": printTasks(); - break; case "mark": - int taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); - taskList[taskNumber - 1].markAsDone(); + int taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number + taskList[taskNumber - 1].markAsDone(); // Mark the task as done break; case "unmark": - taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); - taskList[taskNumber - 1].markAsUndone(); + taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number + taskList[taskNumber - 1].markAsUndone(); // Mark the task as undone break; case "": System.out.println("You did not enter anything. Please try again."); @@ -126,20 +143,7 @@ public static void readInput(Scanner in, String lineBufferString) { break; } - readInput(in, lineBufferString); - - // if (lineBufferString.isEmpty()) { - // System.out.println("You did not enter anything. Please try again."); - // return; - // } else if (lineBufferString.equalsIgnoreCase("bye")) { - // printGoodbyeMsgs(); - // } else if (lineBufferString.equalsIgnoreCase("list")) { - // printTasks(); - // readInput(in, lineBufferString); - // } else { - // addTask(lineBufferString); - // readInput(in, lineBufferString); - // } + readInput(in, lineBufferString); // Recursively call the function to read the next input } catch (Exception e) { System.err.println("An error occurred. Please try again."); } @@ -178,12 +182,11 @@ public static void main(String[] args) { ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ """; - String lineBufferString = ""; // Buffer to store the input from the user - Scanner in = new Scanner(System.in); // Scanner object to read input from the user + String lineBufferString = ""; // Buffer to store the input from the user + Scanner in = new Scanner(System.in); // Scanner object to read input from the user System.out.println("Hello from\n" + logo); printGreetingMsgs(); - readInput(in, lineBufferString); - + readInput(in, lineBufferString); // Read the input from the user } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 5cc74c0b6..73fdc3765 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,9 +1,14 @@ public class Task { - protected String description; - protected boolean isDone; + protected String description; // Description of the task + protected boolean isDone; // Status of the task - private static int numberOfTasks = 0; + private static int numberOfTasks = 0; // Number of tasks in the list + /** + * Constructor for the Task class. + * + * @param description + */ public Task(String description) { this.description = description; this.isDone = false; @@ -11,18 +16,36 @@ public Task(String description) { numberOfTasks++; } + /** + * Returns the description of the task. + * + * @return description of the task + */ public String getDescription() { return this.description; } + /** + * Changes the description of the task. + * + * @param newDescription + */ public void changeDescription(String newDescription) { this.description = newDescription; } + /** + * Returns the status icon of the task. + * + * @return status icon of the task + */ public String getStatusIcon() { - return (isDone ? "X" : " "); + return (isDone ? "✓" : " "); } + /** + * Marks the task as done. + */ public void markAsDone() { this.isDone = true; @@ -30,6 +53,9 @@ public void markAsDone() { printTask(); } + /** + * Marks the task as not done. + */ public void markAsUndone() { this.isDone = false; @@ -37,12 +63,19 @@ public void markAsUndone() { printTask(); } + /** + * Returns the number of tasks in the list. + * + * @return number of tasks in the list + */ public static int getNumberOfTasks() { return numberOfTasks; } + /** + * Prints the task to the console. + */ public void printTask() { System.out.println("[" + this.getStatusIcon() + "] " + this.description); } - } From 6cc1c395f024fbcdafaf1c872306afddbe190d7d Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 15:29:19 +0800 Subject: [PATCH 16/88] Cleanup variable inconsistancy --- src/main/java/Jarvis.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 9d452c6c9..456b720cb 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -82,13 +82,13 @@ public static void printTasks() { /** * Adds a task to the task list. * - * @param item + * @param task */ - public static void addTask(String item) { + public static void addTask(String task) { printBreakLine(); - System.out.println("Added: " + item); + System.out.println("Added: " + task); if (Task.getNumberOfTasks() < MAX_TASK_LENGTH) { - taskList[Task.getNumberOfTasks()] = new Task(item); + taskList[Task.getNumberOfTasks()] = new Task(task); } else { System.out.println("The list is full. Please remove some items before adding more."); } @@ -127,12 +127,12 @@ public static void readInput(Scanner in, String lineBufferString) { printTasks(); break; case "mark": - int taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number - taskList[taskNumber - 1].markAsDone(); // Mark the task as done + int taskNumberMark = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number + taskList[taskNumberMark - 1].markAsDone(); // Mark the task as done break; case "unmark": - taskNumber = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number - taskList[taskNumber - 1].markAsUndone(); // Mark the task as undone + int taskNumberUnmark = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number + taskList[taskNumberUnmark - 1].markAsUndone(); // Mark the task as undone break; case "": System.out.println("You did not enter anything. Please try again."); @@ -180,7 +180,7 @@ public static void main(String[] args) { ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - """; + """; String lineBufferString = ""; // Buffer to store the input from the user Scanner in = new Scanner(System.in); // Scanner object to read input from the user From 61a974efe63120860cd2f18f19240e4c71e1c78a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 30 Aug 2024 15:41:43 +0800 Subject: [PATCH 17/88] Formate Code --- src/main/java/Jarvis.java | 2 +- src/main/java/Task.java | 134 +++++++++++++++++++------------------- 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 456b720cb..03dd47bfb 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -173,7 +173,7 @@ public static void main(String[] args) { @@@ @@ @@ @@# @@@@ @@@ @@@ @@@@ @@@@@@@@@@@@@ - + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 73fdc3765..c592fe993 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,81 +1,81 @@ public class Task { - protected String description; // Description of the task - protected boolean isDone; // Status of the task + protected String description; // Description of the task + protected boolean isDone; // Status of the task - private static int numberOfTasks = 0; // Number of tasks in the list + private static int numberOfTasks = 0; // Number of tasks in the list - /** - * Constructor for the Task class. - * - * @param description - */ - public Task(String description) { - this.description = description; - this.isDone = false; + /** + * Constructor for the Task class. + * + * @param description + */ + public Task(String description) { + this.description = description; + this.isDone = false; - numberOfTasks++; - } + numberOfTasks++; + } - /** - * Returns the description of the task. - * - * @return description of the task - */ - public String getDescription() { - return this.description; - } + /** + * Returns the description of the task. + * + * @return description of the task + */ + public String getDescription() { + return this.description; + } - /** - * Changes the description of the task. - * - * @param newDescription - */ - public void changeDescription(String newDescription) { - this.description = newDescription; - } + /** + * Changes the description of the task. + * + * @param newDescription + */ + public void changeDescription(String newDescription) { + this.description = newDescription; + } - /** - * Returns the status icon of the task. - * - * @return status icon of the task - */ - public String getStatusIcon() { - return (isDone ? "✓" : " "); - } + /** + * Returns the status icon of the task. + * + * @return status icon of the task + */ + public String getStatusIcon() { + return (isDone ? "✓" : " "); + } - /** - * Marks the task as done. - */ - public void markAsDone() { - this.isDone = true; + /** + * Marks the task as done. + */ + public void markAsDone() { + this.isDone = true; - System.out.print("Nice! I've marked this task as done: \n "); - printTask(); - } + System.out.print("Nice! I've marked this task as done: \n "); + printTask(); + } - /** - * Marks the task as not done. - */ - public void markAsUndone() { - this.isDone = false; + /** + * Marks the task as not done. + */ + public void markAsUndone() { + this.isDone = false; - System.out.print("OK, I've marked this task as not done yet: \n "); - printTask(); - } + System.out.print("OK, I've marked this task as not done yet: \n "); + printTask(); + } - /** - * Returns the number of tasks in the list. - * - * @return number of tasks in the list - */ - public static int getNumberOfTasks() { - return numberOfTasks; - } + /** + * Returns the number of tasks in the list. + * + * @return number of tasks in the list + */ + public static int getNumberOfTasks() { + return numberOfTasks; + } - /** - * Prints the task to the console. - */ - public void printTask() { - System.out.println("[" + this.getStatusIcon() + "] " + this.description); - } + /** + * Prints the task to the console. + */ + public void printTask() { + System.out.println("[" + this.getStatusIcon() + "] " + this.description); + } } From 20c08763a7ec3afe5c63a2ffd4e1279e3c57201c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:38:52 +0800 Subject: [PATCH 18/88] Update Task - Level 4 requirement --- src/main/java/Task.java | 50 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/src/main/java/Task.java b/src/main/java/Task.java index c592fe993..d88191fcd 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,6 +1,10 @@ public class Task { + final static String MARK_COMMAND_STRING = "mark"; + final static String UNMARK_COMMAND_STRING = "unmark"; + final static String LIST_COMMAND_STRING = "list"; + protected String description; // Description of the task - protected boolean isDone; // Status of the task + private boolean isDone; // Status of the task private static int numberOfTasks = 0; // Number of tasks in the list @@ -34,6 +38,14 @@ public void changeDescription(String newDescription) { this.description = newDescription; } + public void setDoneState(boolean bool) { + this.isDone = bool; + } + + public boolean getDoneState() { + return this.isDone; + } + /** * Returns the status icon of the task. * @@ -49,8 +61,12 @@ public String getStatusIcon() { public void markAsDone() { this.isDone = true; - System.out.print("Nice! I've marked this task as done: \n "); - printTask(); + System.out.println("Nice! I've marked this task as done: \n " + toString()); + + } + + public static void markAsDone(Task[] taskList, int taskNumber) { + taskList[taskNumber - 1].markAsDone(); // Mark the task as done } /** @@ -60,7 +76,11 @@ public void markAsUndone() { this.isDone = false; System.out.print("OK, I've marked this task as not done yet: \n "); - printTask(); + this.toString(); + } + + public static void markAsUndone(Task[] taskList, int taskNumber) { + taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done } /** @@ -72,10 +92,28 @@ public static int getNumberOfTasks() { return numberOfTasks; } + public static void printNumberOfTasks() { + System.out.println("Now you have " + numberOfTasks + " tasks in the list."); + } + /** * Prints the task to the console. + * + * @return task to be printed */ - public void printTask() { - System.out.println("[" + this.getStatusIcon() + "] " + this.description); + @Override + public String toString() { + return ("[" + this.getStatusIcon() + "] " + this.description); + } + + public static void printAllTasks(Task[] taskList) { + if (getNumberOfTasks() == 0) { + System.out.println("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + System.out.println((i + 1) + "." + taskList[i].toString()); + } + } } } From ef26b1dc6c1edca44976a7d82c22a5ada049ba46 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:39:35 +0800 Subject: [PATCH 19/88] Add Todo Class --- src/main/java/Todo.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 000000000..0a654991c --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,16 @@ +public class Todo extends Task { + final static String COMMAND_STRING = "todo"; + + + public Todo(String description) { + super(description); + System.out.println("Got it. I've added this task:"); + System.out.println(" " + this.toString()); + Task.printNumberOfTasks(); + } + + @Override + public String toString() { + return "[T]" + super.toString(); + } +} From 92e35d814172baedc292445f31918201257e8f6a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:39:55 +0800 Subject: [PATCH 20/88] Add Dealine Class --- src/main/java/Deadline.java | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/main/java/Deadline.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 000000000..b5e13a17d --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,63 @@ +public class Deadline extends Task { + final static String COMMAND_STRING = "deadline"; + final static String BY_KEYWORD_STRING = "/by"; + protected String by; + + public Deadline(String description) { + super(getDescriptionFromString(description)); + setBy(getDayFromString(description)); + + System.out.println("Got it. I've added this task:"); + System.out.println(" " + this.toString()); + Task.printNumberOfTasks(); + } + + public Deadline(String description, String by) { + super(description); + setBy(by); + + System.out.println("Got it. I've added this task:"); + System.out.println(" " + this.toString()); + Task.printNumberOfTasks(); + } + + public String getBy() { + return by; + } + + public void setBy(String by) { + this.by = by; + } + + public static String getDayFromString(String input) { + // String[] split = input.split(" "); + // for (int i = 0; i < split.length; i++) { + // if (split[i].equals(BY_KEYWORD_STRING)) { + // return split[i + 1]; + // } + // } + + if (input == null) { + return null; + } + int indexOfBy = input.indexOf(BY_KEYWORD_STRING); + + return input.substring(indexOfBy + BY_KEYWORD_STRING.length()).trim(); + + // input = input.substring(input.indexOf(BY_KEYWORD_STRING), input.); + // return input.trim(); + + // String[] splitSentences = input.split(BY_KEYWORD_STRING); + // return splitSentences[0].trim(); + } + + public static String getDescriptionFromString(String input) { + input = input.substring(0, input.indexOf(BY_KEYWORD_STRING)); + return input.trim(); + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")"; + } +} From c1df0a45f0ef84139335d0440fb275318177a462 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:40:34 +0800 Subject: [PATCH 21/88] Add Event --- src/main/java/Event.java | 92 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/main/java/Event.java diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..dbc8e47c5 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,92 @@ +public class Event extends Task { + + final static String COMMAND_STRING = "event"; + final static String FROM_KEYWORD_STRING = "/from"; + final static String TO_KEYWORD_STRING = "/to"; + + protected String from; + protected String to; + + public Event(String description) { + super(getDescriptionFromString(description)); + setFrom(getFromFromString(description)); + setTo(getToFromString(description)); + + System.out.println("Got it. I've added this task:"); + System.out.println(" " + this.toString()); + Task.printNumberOfTasks(); + + } + + public Event(String description, String from, String to) { + super(description); + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public static String getDescriptionFromString(String input) { + int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); + input = input.substring(0, indexOfFrom); + return input.trim(); + } + + public static String getFromFromString(String input) { + + if (input == null) { + return null; + } + + int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); + int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + + return input.substring(indexOfFrom + FROM_KEYWORD_STRING.length(), indexOfTo).trim(); + + // String[] split = input.split(" "); + // for (int i = 0; i < split.length; i++) { + // if (split[i].equals(FROM_KEYWORD_STRING) && split[i + 2].equals(TO_KEYWORD_STRING)) { + // return split[i + 1]; + // } else if (split[i].equals(FROM_KEYWORD_STRING)) { + // return split[i + 1] + ' ' + split[i + 2]; + // } + // } + + } + + public static String getToFromString(String input) { + + // String[] split = input.split(" "); + // for (int i = 0; i < split.length; i++) { + // if (split[i].equals(TO_KEYWORD_STRING)) { + // return split[i + 1]; + // } + // } + // return null; + + if (input == null) { + return null; + } + + int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + + return input.substring(indexOfTo + TO_KEYWORD_STRING.length()).trim(); + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; + } +} From 51852f1f95dcd7fde7e91542e3813f3678ff3f7e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:42:01 +0800 Subject: [PATCH 22/88] Update Javis - Move non-related methods - Clean up switch case --- src/main/java/Jarvis.java | 90 ++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 49 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 03dd47bfb..111b79f9d 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,6 +1,5 @@ import java.util.Scanner; - public class Jarvis { // Constants static final int MAX_TASK_LENGTH = 100; // Maximum length of a string @@ -9,6 +8,8 @@ public class Jarvis { private static Task[] taskList = new Task[100]; // Array to store tasks + static String command; // Variable to store the command + static String task; // Variable to store the task /** * Prints a break line to the console. @@ -67,33 +68,20 @@ private static void printGoodbyeMsgs() { */ public static void printTasks() { printBreakLine(); - if (Task.getNumberOfTasks() == 0) { - System.out.println("The list is empty."); - } else { - System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { - System.out.print((i + 1) + "."); - taskList[i].printTask(); - } - } + Task.printAllTasks(taskList); printBreakLine(); } - /** - * Adds a task to the task list. - * - * @param task - */ - public static void addTask(String task) { - printBreakLine(); - System.out.println("Added: " + task); - if (Task.getNumberOfTasks() < MAX_TASK_LENGTH) { - taskList[Task.getNumberOfTasks()] = new Task(task); + + public static void splitCommandAndTask(String lineBufferString) { + + if (lineBufferString.contains(" ")) { + command = lineBufferString.split(" ")[0]; + task = lineBufferString.substring(command.length() + 1); } else { - System.out.println("The list is full. Please remove some items before adding more."); + command = lineBufferString; + task = null; } - - printBreakLine(); } /** @@ -105,45 +93,49 @@ public static void addTask(String task) { public static void readInput(Scanner in, String lineBufferString) { try (in) { - printPrompt(); // Print the prompt to the console + printPrompt(); // Print the prompt to the console lineBufferString = in.nextLine(); - String command; // Variable to store the command - int dividerPosition = 0; // Variable to store the position of the divider - - // Check if the input contains a space - if (lineBufferString.contains(" ")) { - // Suppose the input is "mark 1" or "unmark 1" - dividerPosition = lineBufferString.indexOf(" "); - command = lineBufferString.substring(0, dividerPosition); - } else { - command = lineBufferString; - } + splitCommandAndTask(lineBufferString); switch (command) { case "bye": printGoodbyeMsgs(); break; - case "list": + case "exit": + // Habit of typing exit to exit the program + printGoodbyeMsgs(); + break; + case Task.LIST_COMMAND_STRING: printTasks(); break; - case "mark": - int taskNumberMark = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number - taskList[taskNumberMark - 1].markAsDone(); // Mark the task as done + case Todo.COMMAND_STRING: + taskList[Task.getNumberOfTasks()] = new Todo(task); + printBreakLine(); break; - case "unmark": - int taskNumberUnmark = Integer.parseInt(lineBufferString.substring(dividerPosition + 1)); // Get the task number - taskList[taskNumberUnmark - 1].markAsUndone(); // Mark the task as undone + case Deadline.COMMAND_STRING: + taskList[Task.getNumberOfTasks()] = new Deadline(task); + printBreakLine(); + break; + case Event.COMMAND_STRING: + taskList[Task.getNumberOfTasks()] = new Event(task); + printBreakLine(); + break; + case Task.MARK_COMMAND_STRING: + int taskNumberMark = Integer.parseInt(task); // Get the task number + Task.markAsDone(taskList, taskNumberMark); // Mark the task as done + break; + case Task.UNMARK_COMMAND_STRING: + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone break; case "": System.out.println("You did not enter anything. Please try again."); break; default: - addTask(lineBufferString); - break; } - readInput(in, lineBufferString); // Recursively call the function to read the next input + readInput(in, lineBufferString); // Recursively call the function to read the next input } catch (Exception e) { System.err.println("An error occurred. Please try again."); } @@ -173,7 +165,7 @@ public static void main(String[] args) { @@@ @@ @@ @@# @@@@ @@@ @@@ @@@@ @@@@@@@@@@@@@ - + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ @@ -182,11 +174,11 @@ public static void main(String[] args) { ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ """; - String lineBufferString = ""; // Buffer to store the input from the user - Scanner in = new Scanner(System.in); // Scanner object to read input from the user + String lineBufferString = ""; // Buffer to store the input from the user + Scanner in = new Scanner(System.in); // Scanner object to read input from the user System.out.println("Hello from\n" + logo); printGreetingMsgs(); - readInput(in, lineBufferString); // Read the input from the user + readInput(in, lineBufferString); // Read the input from the user } } From 96dc8446295af5d62fdb0ae9c23d427dad5b5070 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:44:12 +0800 Subject: [PATCH 23/88] Improve readability - Remove commented code --- src/main/java/Deadline.java | 12 ------------ src/main/java/Event.java | 18 ------------------ 2 files changed, 30 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index b5e13a17d..8a3587690 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -30,12 +30,6 @@ public void setBy(String by) { } public static String getDayFromString(String input) { - // String[] split = input.split(" "); - // for (int i = 0; i < split.length; i++) { - // if (split[i].equals(BY_KEYWORD_STRING)) { - // return split[i + 1]; - // } - // } if (input == null) { return null; @@ -43,12 +37,6 @@ public static String getDayFromString(String input) { int indexOfBy = input.indexOf(BY_KEYWORD_STRING); return input.substring(indexOfBy + BY_KEYWORD_STRING.length()).trim(); - - // input = input.substring(input.indexOf(BY_KEYWORD_STRING), input.); - // return input.trim(); - - // String[] splitSentences = input.split(BY_KEYWORD_STRING); - // return splitSentences[0].trim(); } public static String getDescriptionFromString(String input) { diff --git a/src/main/java/Event.java b/src/main/java/Event.java index dbc8e47c5..ac9fcba1d 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -54,28 +54,10 @@ public static String getFromFromString(String input) { int indexOfTo = input.indexOf(TO_KEYWORD_STRING); return input.substring(indexOfFrom + FROM_KEYWORD_STRING.length(), indexOfTo).trim(); - - // String[] split = input.split(" "); - // for (int i = 0; i < split.length; i++) { - // if (split[i].equals(FROM_KEYWORD_STRING) && split[i + 2].equals(TO_KEYWORD_STRING)) { - // return split[i + 1]; - // } else if (split[i].equals(FROM_KEYWORD_STRING)) { - // return split[i + 1] + ' ' + split[i + 2]; - // } - // } - } public static String getToFromString(String input) { - // String[] split = input.split(" "); - // for (int i = 0; i < split.length; i++) { - // if (split[i].equals(TO_KEYWORD_STRING)) { - // return split[i + 1]; - // } - // } - // return null; - if (input == null) { return null; } From a26b212df2e5f8d56d28e57fe08114c27ed95dc2 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 13:54:05 +0800 Subject: [PATCH 24/88] Update `runtest.sh` with correct chatbot name --- text-ui-test/runtest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 text-ui-test/runtest.sh diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh old mode 100644 new mode 100755 index c9ec87003..0fd7aaf86 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -20,7 +20,7 @@ then fi # run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ../bin Duke < input.txt > ACTUAL.TXT +java -classpath ../bin Jarvis < input.txt > ACTUAL.TXT # convert to UNIX format cp EXPECTED.TXT EXPECTED-UNIX.TXT @@ -35,4 +35,4 @@ then else echo "Test result: FAILED" exit 1 -fi \ No newline at end of file +fi From 6b610c3fbea991225844533542b19ee2df0dba6a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 14:05:56 +0800 Subject: [PATCH 25/88] Add Input Test Cases --- text-ui-test/input.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb..255d1935e 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1,6 @@ +todo Answer CS2113 tutorial questions +deadline weekly CS2113 quiz /by Monday 9pm +list +event CS2113 lecture /from Friday 4 /to 6 pm +mark 1 +list From 8698da083479279e1298faad0f4ffc64ad3df604 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 6 Sep 2024 14:06:38 +0800 Subject: [PATCH 26/88] Update Expected output --- text-ui-test/EXPECTED.TXT | 64 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e..e7d032eb2 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,61 @@ Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| + @@@@@@@@@@@@@@@@@@@@@@@ + @@% @@ @@ @@@ + @@ @@ @@ @@ + @@ @@ @@ @@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @ *@ + @@@ @@@ + @ @@@ @@@ @ + @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ + @ @@@ @@ @@ @@@ @ + @ *@@ @@ @( @@( @ + @ ,@@@@ @@ @@ @@@@ @ + @ @@@@@ %@@ @@ @ @@& @@@@@ @ + @@@@ @@@ /@ @@ @@@ *@@@@/ + @@ @@@ @@ @@@ @@ + @@ @@& (@@ @@ + @ @@@@@@@@ @@@@@@@ @ + @@ @@@@* @@, @@ @@@@ @& + @@ @@@ @@@ @@ + @@@ @@ @@ @@# + @@@@ @@@ @@@ @@@@ + @@@@@@@@@@@@@ + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ +██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ +╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ + +──────────────────────────────────────────────────────────── +Hello! I'm Jarvis +What can I do for you? +──────────────────────────────────────────────────────────── + Got it. I've added this task: + [T][ ] Answer CS2113 tutorial questions +Now you have 1 tasks in the list. +──────────────────────────────────────────────────────────── + Got it. I've added this task: + [D][ ] weekly CS2113 quiz (by: Monday 9pm) +Now you have 2 tasks in the list. +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Here are the tasks in your list: +1.[T][ ] Answer CS2113 tutorial questions +2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) +──────────────────────────────────────────────────────────── + Got it. I've added this task: + [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +Now you have 3 tasks in the list. +──────────────────────────────────────────────────────────── + Nice! I've marked this task as done: + [T][✓] Answer CS2113 tutorial questions + ──────────────────────────────────────────────────────────── +Here are the tasks in your list: +1.[T][✓] Answer CS2113 tutorial questions +2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) +3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +──────────────────────────────────────────────────────────── + \ No newline at end of file From 2d1dfa9ea97c9418bf52fa36d4d27dd535f3bd28 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sun, 8 Sep 2024 16:37:21 +0800 Subject: [PATCH 27/88] Add comments and improve code quality --- src/main/java/Deadline.java | 48 ++++++++++++++++++++++-- src/main/java/Event.java | 74 +++++++++++++++++++++++++++++++++---- src/main/java/Jarvis.java | 24 ++++++------ src/main/java/Task.java | 30 +++++++++++++++ src/main/java/Todo.java | 8 +++- 5 files changed, 160 insertions(+), 24 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index 8a3587690..f5cadd59f 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -3,6 +3,11 @@ public class Deadline extends Task { final static String BY_KEYWORD_STRING = "/by"; protected String by; + /** + * Constructor for the Deadline class. + * + * @param description description of the deadline + */ public Deadline(String description) { super(getDescriptionFromString(description)); setBy(getDayFromString(description)); @@ -12,6 +17,12 @@ public Deadline(String description) { Task.printNumberOfTasks(); } + /** + * Constructor for the Deadline class. + * + * @param description description of the deadline + * @param by by date + */ public Deadline(String description, String by) { super(description); setBy(by); @@ -21,26 +32,57 @@ public Deadline(String description, String by) { Task.printNumberOfTasks(); } + /** + * Returns the by date. + * + * @return + */ public String getBy() { return by; } + /** + * Changes the by date. + * + * @param by + */ public void setBy(String by) { this.by = by; } + /** + * Returns the by date from the input string. + * + * @param input + * + * @return + */ public static String getDayFromString(String input) { if (input == null) { return null; } - int indexOfBy = input.indexOf(BY_KEYWORD_STRING); - return input.substring(indexOfBy + BY_KEYWORD_STRING.length()).trim(); + int indexAfterBy = input.indexOf(BY_KEYWORD_STRING) + BY_KEYWORD_STRING.length(); + + return input.substring(indexAfterBy).trim(); } + /** + * Returns the description from the input string. + * + * @param input + * + * @return + */ public static String getDescriptionFromString(String input) { - input = input.substring(0, input.indexOf(BY_KEYWORD_STRING)); + if (input == null) { + return null; + } + + int indexOfBy = input.indexOf(BY_KEYWORD_STRING); + input = input.substring(0, indexOfBy); + return input.trim(); } diff --git a/src/main/java/Event.java b/src/main/java/Event.java index ac9fcba1d..128d52055 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -1,12 +1,16 @@ public class Event extends Task { - - final static String COMMAND_STRING = "event"; - final static String FROM_KEYWORD_STRING = "/from"; - final static String TO_KEYWORD_STRING = "/to"; + final static String COMMAND_STRING = "event"; // Command string for the Event class + final static String FROM_KEYWORD_STRING = "/from"; // Keyword string for the from date + final static String TO_KEYWORD_STRING = "/to"; // Keyword string for the to date protected String from; protected String to; + /** + * Constructor for the Event class. + * + * @param description description of the event + */ public Event(String description) { super(getDescriptionFromString(description)); setFrom(getFromFromString(description)); @@ -18,53 +22,107 @@ public Event(String description) { } + /** + * Constructor for the Event class. + * + * @param description description of the event + * @param from from date + * @param to to date + */ public Event(String description, String from, String to) { super(description); } + /** + * Returns the from date. + * + * @return from date + */ public String getFrom() { return from; } + /** + * Changes the from date. + * + * @param from + */ public void setFrom(String from) { this.from = from; } + /** + * Returns the to date. + * + * @return + */ public String getTo() { return to; } + /** + * Changes the to date. + * + * @param to + */ public void setTo(String to) { this.to = to; } + /** + * Returns the description from the input string. + * + * @param input input string + * + * @return description + */ public static String getDescriptionFromString(String input) { + + if (input == null) { + return null; + } + int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); input = input.substring(0, indexOfFrom); + return input.trim(); } + /** + * Returns the from date from the input string. + * + * @param input input string + * + * @return + */ public static String getFromFromString(String input) { if (input == null) { return null; } - int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); + int indexAfterFrom = input.indexOf(FROM_KEYWORD_STRING) + FROM_KEYWORD_STRING.length(); int indexOfTo = input.indexOf(TO_KEYWORD_STRING); - return input.substring(indexOfFrom + FROM_KEYWORD_STRING.length(), indexOfTo).trim(); + return input.substring(indexAfterFrom, indexOfTo).trim(); } + /** + * Returns the to date from the input string. + * + * @param input input string + * + * @return + */ public static String getToFromString(String input) { if (input == null) { return null; } - int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + int indexAfterTo = input.indexOf(TO_KEYWORD_STRING) + TO_KEYWORD_STRING.length(); - return input.substring(indexOfTo + TO_KEYWORD_STRING.length()).trim(); + return input.substring(indexAfterTo).trim(); } @Override diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 111b79f9d..40ad70ce6 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -6,7 +6,7 @@ public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot - private static Task[] taskList = new Task[100]; // Array to store tasks + private static Task[] taskList = new Task[MAX_TASK_LENGTH]; // Array to store tasks static String command; // Variable to store the command static String task; // Variable to store the task @@ -73,8 +73,12 @@ public static void printTasks() { } + /** + * Splits the command and task from the input. + * + * @param lineBufferString + */ public static void splitCommandAndTask(String lineBufferString) { - if (lineBufferString.contains(" ")) { command = lineBufferString.split(" ")[0]; task = lineBufferString.substring(command.length() + 1); @@ -91,7 +95,6 @@ public static void splitCommandAndTask(String lineBufferString) { * @param lineBufferString */ public static void readInput(Scanner in, String lineBufferString) { - try (in) { printPrompt(); // Print the prompt to the console lineBufferString = in.nextLine(); @@ -101,30 +104,29 @@ public static void readInput(Scanner in, String lineBufferString) { case "bye": printGoodbyeMsgs(); break; - case "exit": - // Habit of typing exit to exit the program + case "exit": // Habit of typing exit to exit the program printGoodbyeMsgs(); break; - case Task.LIST_COMMAND_STRING: + case Task.LIST_COMMAND_STRING: // List all the tasks printTasks(); break; - case Todo.COMMAND_STRING: + case Todo.COMMAND_STRING: // Add a todo task taskList[Task.getNumberOfTasks()] = new Todo(task); printBreakLine(); break; - case Deadline.COMMAND_STRING: + case Deadline.COMMAND_STRING: // Add a deadline task taskList[Task.getNumberOfTasks()] = new Deadline(task); printBreakLine(); break; - case Event.COMMAND_STRING: + case Event.COMMAND_STRING: // Add an event task taskList[Task.getNumberOfTasks()] = new Event(task); printBreakLine(); break; - case Task.MARK_COMMAND_STRING: + case Task.MARK_COMMAND_STRING: // Mark the task as done int taskNumberMark = Integer.parseInt(task); // Get the task number Task.markAsDone(taskList, taskNumberMark); // Mark the task as done break; - case Task.UNMARK_COMMAND_STRING: + case Task.UNMARK_COMMAND_STRING: // Mark the task as undone int taskNumberUnmark = Integer.parseInt(task); // Get the task number Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone break; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index d88191fcd..b093eb803 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -38,10 +38,20 @@ public void changeDescription(String newDescription) { this.description = newDescription; } + /** + * Changes the done state of the task. + * + * @param bool + */ public void setDoneState(boolean bool) { this.isDone = bool; } + /** + * Returns the done state of the task. + * + * @return done state of the task + */ public boolean getDoneState() { return this.isDone; } @@ -65,6 +75,12 @@ public void markAsDone() { } + /** + * Marks the task as done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as done + */ public static void markAsDone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsDone(); // Mark the task as done } @@ -79,6 +95,12 @@ public void markAsUndone() { this.toString(); } + /** + * Marks the task as not done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as not done + */ public static void markAsUndone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done } @@ -92,6 +114,9 @@ public static int getNumberOfTasks() { return numberOfTasks; } + /** + * Prints the number of tasks in the list. + */ public static void printNumberOfTasks() { System.out.println("Now you have " + numberOfTasks + " tasks in the list."); } @@ -106,6 +131,11 @@ public String toString() { return ("[" + this.getStatusIcon() + "] " + this.description); } + /** + * Prints all the tasks in the list. + * + * @param taskList list of tasks + */ public static void printAllTasks(Task[] taskList) { if (getNumberOfTasks() == 0) { System.out.println("The list is empty."); diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 0a654991c..345379a6a 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -1,7 +1,11 @@ public class Todo extends Task { - final static String COMMAND_STRING = "todo"; - + final static String COMMAND_STRING = "todo"; // Command string for the Todo class + /** + * Constructor for the Todo class. + * + * @param description + */ public Todo(String description) { super(description); System.out.println("Got it. I've added this task:"); From 3e6aeaf03e5984230968eff4fbceecfa005e8eb2 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 18:33:35 +0800 Subject: [PATCH 28/88] Create JarvisException --- src/main/java/JarvisException.java | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/JarvisException.java diff --git a/src/main/java/JarvisException.java b/src/main/java/JarvisException.java new file mode 100644 index 000000000..dda7df15b --- /dev/null +++ b/src/main/java/JarvisException.java @@ -0,0 +1,3 @@ +public class JarvisException extends Exception { + +} From 243666033e95ed5dbc759c70c940c7d15b4f6c5c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 20:36:51 +0800 Subject: [PATCH 29/88] Add class to handle errors --- src/main/java/EmptyArgumentException.java | 5 +++++ src/main/java/IllegalCommandException.java | 5 +++++ src/main/java/InvalidCommandFormatException.java | 5 +++++ src/main/java/JarvisException.java | 4 +++- 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/main/java/EmptyArgumentException.java create mode 100644 src/main/java/IllegalCommandException.java create mode 100644 src/main/java/InvalidCommandFormatException.java diff --git a/src/main/java/EmptyArgumentException.java b/src/main/java/EmptyArgumentException.java new file mode 100644 index 000000000..a945a85da --- /dev/null +++ b/src/main/java/EmptyArgumentException.java @@ -0,0 +1,5 @@ +public class EmptyArgumentException extends JarvisException { + public EmptyArgumentException(String msg) { + super(msg); + } +} diff --git a/src/main/java/IllegalCommandException.java b/src/main/java/IllegalCommandException.java new file mode 100644 index 000000000..603de075c --- /dev/null +++ b/src/main/java/IllegalCommandException.java @@ -0,0 +1,5 @@ +public class IllegalCommandException extends JarvisException { + public IllegalCommandException(String msg) { + super(msg); + } +} diff --git a/src/main/java/InvalidCommandFormatException.java b/src/main/java/InvalidCommandFormatException.java new file mode 100644 index 000000000..0c4331800 --- /dev/null +++ b/src/main/java/InvalidCommandFormatException.java @@ -0,0 +1,5 @@ +public class InvalidCommandFormatException extends JarvisException { + public InvalidCommandFormatException(String msg) { + super(msg); + } +} diff --git a/src/main/java/JarvisException.java b/src/main/java/JarvisException.java index dda7df15b..57c88533b 100644 --- a/src/main/java/JarvisException.java +++ b/src/main/java/JarvisException.java @@ -1,3 +1,5 @@ public class JarvisException extends Exception { - + public JarvisException(String msg) { + super(msg); + } } From 4d30f12f6cfd0df5268259ca82a45c190102344c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 20:41:26 +0800 Subject: [PATCH 30/88] Add task catch expection - Check if description is empty --- src/main/java/Task.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/Task.java b/src/main/java/Task.java index b093eb803..c924ee2b1 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -13,7 +13,12 @@ public class Task { * * @param description */ - public Task(String description) { + public Task(String description) throws EmptyArgumentException { + + if (description == null || description.isEmpty()) { + throw new EmptyArgumentException("Description cannot be empty. " + Error.EMPTY_ARG.toString()); + } + this.description = description; this.isDone = false; From cf51eb5f131786abaf672b805125ec8e4f0c49d6 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 20:45:24 +0800 Subject: [PATCH 31/88] Add Todo, Event and Deadline to catch expections - Check if description is empty - Check if Event and Deadline with invalid command --- src/main/java/Deadline.java | 10 ++++++---- src/main/java/Event.java | 21 ++++++++++++--------- src/main/java/Todo.java | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index f5cadd59f..fad2ab624 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -7,8 +7,10 @@ public class Deadline extends Task { * Constructor for the Deadline class. * * @param description description of the deadline + * + * @throws InvalidCommandFormatException */ - public Deadline(String description) { + public Deadline(String description) throws EmptyArgumentException, InvalidCommandFormatException { super(getDescriptionFromString(description)); setBy(getDayFromString(description)); @@ -23,7 +25,7 @@ public Deadline(String description) { * @param description description of the deadline * @param by by date */ - public Deadline(String description, String by) { + public Deadline(String description, String by) throws EmptyArgumentException { super(description); setBy(by); @@ -57,10 +59,10 @@ public void setBy(String by) { * * @return */ - public static String getDayFromString(String input) { + public static String getDayFromString(String input) throws InvalidCommandFormatException { if (input == null) { - return null; + throw new InvalidCommandFormatException("Invalid command format. Please include the by date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterBy = input.indexOf(BY_KEYWORD_STRING) + BY_KEYWORD_STRING.length(); diff --git a/src/main/java/Event.java b/src/main/java/Event.java index 128d52055..62342246f 100644 --- a/src/main/java/Event.java +++ b/src/main/java/Event.java @@ -10,8 +10,11 @@ public class Event extends Task { * Constructor for the Event class. * * @param description description of the event + * + * @throws EmptyArgumentException + * @throws InvalidCommandFormatException */ - public Event(String description) { + public Event(String description) throws EmptyArgumentException, InvalidCommandFormatException { super(getDescriptionFromString(description)); setFrom(getFromFromString(description)); setTo(getToFromString(description)); @@ -29,7 +32,7 @@ public Event(String description) { * @param from from date * @param to to date */ - public Event(String description, String from, String to) { + public Event(String description, String from, String to) throws EmptyArgumentException { super(description); } @@ -76,7 +79,7 @@ public void setTo(String to) { * * @return description */ - public static String getDescriptionFromString(String input) { + public static String getDescriptionFromString(String input) throws InvalidCommandFormatException { if (input == null) { return null; @@ -95,10 +98,10 @@ public static String getDescriptionFromString(String input) { * * @return */ - public static String getFromFromString(String input) { + public static String getFromFromString(String input) throws InvalidCommandFormatException { - if (input == null) { - return null; + if (input == null || !input.contains(FROM_KEYWORD_STRING)) { + throw new InvalidCommandFormatException("Invalid command format. Please include the from date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterFrom = input.indexOf(FROM_KEYWORD_STRING) + FROM_KEYWORD_STRING.length(); @@ -114,10 +117,10 @@ public static String getFromFromString(String input) { * * @return */ - public static String getToFromString(String input) { + public static String getToFromString(String input) throws InvalidCommandFormatException { - if (input == null) { - return null; + if (input == null || !input.contains(TO_KEYWORD_STRING)) { + throw new InvalidCommandFormatException("Invalid command format. Please include the to date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterTo = input.indexOf(TO_KEYWORD_STRING) + TO_KEYWORD_STRING.length(); diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java index 345379a6a..211918b29 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/Todo.java @@ -6,7 +6,7 @@ public class Todo extends Task { * * @param description */ - public Todo(String description) { + public Todo(String description) throws EmptyArgumentException { super(description); System.out.println("Got it. I've added this task:"); System.out.println(" " + this.toString()); From bccee11dcd06a85ba1c69ca10be4c2cea93c12c2 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 20:46:54 +0800 Subject: [PATCH 32/88] Add Error class to handle error messages and code --- src/main/java/Error.java | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/Error.java diff --git a/src/main/java/Error.java b/src/main/java/Error.java new file mode 100644 index 000000000..cd5565c89 --- /dev/null +++ b/src/main/java/Error.java @@ -0,0 +1,33 @@ + + +// NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java +public enum Error { + + EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."); + + private final int code; + private final String description; + + private Error(int code, String description) { + this.code = code; + this.description = description; + } + + public String getDescription() { + return description; + } + + public int getCode() { + return code; + } + + @Override + public String toString() { + return description + " (Error Code: " + code + ")"; + } +} + +// public enum ErrorLevel { +// SUCCESS, WARN, ERROR, INFO, + +// } From 7a5b75091dea20aaac1af2e528f0bfa11c54043a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 20:48:58 +0800 Subject: [PATCH 33/88] Catch exceptions --- src/main/java/Jarvis.java | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/Jarvis.java b/src/main/java/Jarvis.java index 40ad70ce6..6972d78dc 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/Jarvis.java @@ -1,3 +1,4 @@ +import java.util.NoSuchElementException; import java.util.Scanner; public class Jarvis { @@ -78,7 +79,12 @@ public static void printTasks() { * * @param lineBufferString */ - public static void splitCommandAndTask(String lineBufferString) { + public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { + + if (lineBufferString.isEmpty()) { + throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); + } + if (lineBufferString.contains(" ")) { command = lineBufferString.split(" ")[0]; task = lineBufferString.substring(command.length() + 1); @@ -95,7 +101,7 @@ public static void splitCommandAndTask(String lineBufferString) { * @param lineBufferString */ public static void readInput(Scanner in, String lineBufferString) { - try (in) { + try { printPrompt(); // Print the prompt to the console lineBufferString = in.nextLine(); splitCommandAndTask(lineBufferString); @@ -130,17 +136,21 @@ public static void readInput(Scanner in, String lineBufferString) { int taskNumberUnmark = Integer.parseInt(task); // Get the task number Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone break; - case "": - System.out.println("You did not enter anything. Please try again."); - break; default: - break; + throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); } readInput(in, lineBufferString); // Recursively call the function to read the next input - } catch (Exception e) { - System.err.println("An error occurred. Please try again."); + } catch (NoSuchElementException e) { + // printGoodbyeMsgs(); + } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException e) { + printBreakLine(); + System.out.println(e); + printBreakLine(); + readInput(in, lineBufferString); // Let user try again } + + } public static void main(String[] args) { From a0483b2605c7a6c5add3496c58e886c7bb0235f9 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 22:03:32 +0800 Subject: [PATCH 34/88] Divide task classes --- src/main/java/{ => org/ajay}/Jarvis.java | 5 +++++ src/main/java/{ => org/ajay/task}/Deadline.java | 8 +++++++- src/main/java/{ => org/ajay/task}/Event.java | 8 +++++++- src/main/java/{ => org/ajay/task}/Task.java | 11 ++++++++--- src/main/java/{ => org/ajay/task}/Todo.java | 6 +++++- 5 files changed, 32 insertions(+), 6 deletions(-) rename src/main/java/{ => org/ajay}/Jarvis.java (98%) rename src/main/java/{ => org/ajay/task}/Deadline.java (91%) rename src/main/java/{ => org/ajay/task}/Event.java (93%) rename src/main/java/{ => org/ajay/task}/Task.java (92%) rename src/main/java/{ => org/ajay/task}/Todo.java (73%) diff --git a/src/main/java/Jarvis.java b/src/main/java/org/ajay/Jarvis.java similarity index 98% rename from src/main/java/Jarvis.java rename to src/main/java/org/ajay/Jarvis.java index 6972d78dc..272883e36 100644 --- a/src/main/java/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -1,5 +1,10 @@ +package org.ajay; + import java.util.NoSuchElementException; import java.util.Scanner; +import org.ajay.exceptions.*; +import org.ajay.exceptions.Error; +import org.ajay.task.*; public class Jarvis { // Constants diff --git a/src/main/java/Deadline.java b/src/main/java/org/ajay/task/Deadline.java similarity index 91% rename from src/main/java/Deadline.java rename to src/main/java/org/ajay/task/Deadline.java index fad2ab624..d9836da7f 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/org/ajay/task/Deadline.java @@ -1,5 +1,11 @@ +package org.ajay.task; + +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.Error; +import org.ajay.exceptions.InvalidCommandFormatException; + public class Deadline extends Task { - final static String COMMAND_STRING = "deadline"; + public final static String COMMAND_STRING = "deadline"; final static String BY_KEYWORD_STRING = "/by"; protected String by; diff --git a/src/main/java/Event.java b/src/main/java/org/ajay/task/Event.java similarity index 93% rename from src/main/java/Event.java rename to src/main/java/org/ajay/task/Event.java index 62342246f..aa198190a 100644 --- a/src/main/java/Event.java +++ b/src/main/java/org/ajay/task/Event.java @@ -1,5 +1,11 @@ +package org.ajay.task; + +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.Error; +import org.ajay.exceptions.InvalidCommandFormatException; + public class Event extends Task { - final static String COMMAND_STRING = "event"; // Command string for the Event class + public final static String COMMAND_STRING = "event"; // Command string for the Event class final static String FROM_KEYWORD_STRING = "/from"; // Keyword string for the from date final static String TO_KEYWORD_STRING = "/to"; // Keyword string for the to date diff --git a/src/main/java/Task.java b/src/main/java/org/ajay/task/Task.java similarity index 92% rename from src/main/java/Task.java rename to src/main/java/org/ajay/task/Task.java index c924ee2b1..5d4acf377 100644 --- a/src/main/java/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -1,7 +1,12 @@ +package org.ajay.task; + +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.Error; + public class Task { - final static String MARK_COMMAND_STRING = "mark"; - final static String UNMARK_COMMAND_STRING = "unmark"; - final static String LIST_COMMAND_STRING = "list"; + public final static String MARK_COMMAND_STRING = "mark"; + public final static String UNMARK_COMMAND_STRING = "unmark"; + public final static String LIST_COMMAND_STRING = "list"; protected String description; // Description of the task private boolean isDone; // Status of the task diff --git a/src/main/java/Todo.java b/src/main/java/org/ajay/task/Todo.java similarity index 73% rename from src/main/java/Todo.java rename to src/main/java/org/ajay/task/Todo.java index 211918b29..40d43c7a7 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/org/ajay/task/Todo.java @@ -1,5 +1,9 @@ +package org.ajay.task; + +import org.ajay.exceptions.EmptyArgumentException; + public class Todo extends Task { - final static String COMMAND_STRING = "todo"; // Command string for the Todo class + public final static String COMMAND_STRING = "todo"; // Command string for the Todo class /** * Constructor for the Todo class. From 9ad849fe456d0e3793134fa0a101a6316113a473 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 22:04:53 +0800 Subject: [PATCH 35/88] Divide expection classes --- .../java/{ => org/ajay/exceptions}/EmptyArgumentException.java | 2 ++ src/main/java/{ => org/ajay/exceptions}/Error.java | 1 + .../{ => org/ajay/exceptions}/IllegalCommandException.java | 3 +++ .../ajay/exceptions}/InvalidCommandFormatException.java | 3 +++ src/main/java/{ => org/ajay/exceptions}/JarvisException.java | 2 ++ 5 files changed, 11 insertions(+) rename src/main/java/{ => org/ajay/exceptions}/EmptyArgumentException.java (82%) rename src/main/java/{ => org/ajay/exceptions}/Error.java (96%) rename src/main/java/{ => org/ajay/exceptions}/IllegalCommandException.java (81%) rename src/main/java/{ => org/ajay/exceptions}/InvalidCommandFormatException.java (83%) rename src/main/java/{ => org/ajay/exceptions}/JarvisException.java (79%) diff --git a/src/main/java/EmptyArgumentException.java b/src/main/java/org/ajay/exceptions/EmptyArgumentException.java similarity index 82% rename from src/main/java/EmptyArgumentException.java rename to src/main/java/org/ajay/exceptions/EmptyArgumentException.java index a945a85da..6c7b4a96e 100644 --- a/src/main/java/EmptyArgumentException.java +++ b/src/main/java/org/ajay/exceptions/EmptyArgumentException.java @@ -1,3 +1,5 @@ +package org.ajay.exceptions; + public class EmptyArgumentException extends JarvisException { public EmptyArgumentException(String msg) { super(msg); diff --git a/src/main/java/Error.java b/src/main/java/org/ajay/exceptions/Error.java similarity index 96% rename from src/main/java/Error.java rename to src/main/java/org/ajay/exceptions/Error.java index cd5565c89..0285883e3 100644 --- a/src/main/java/Error.java +++ b/src/main/java/org/ajay/exceptions/Error.java @@ -1,3 +1,4 @@ +package org.ajay.exceptions; // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java diff --git a/src/main/java/IllegalCommandException.java b/src/main/java/org/ajay/exceptions/IllegalCommandException.java similarity index 81% rename from src/main/java/IllegalCommandException.java rename to src/main/java/org/ajay/exceptions/IllegalCommandException.java index 603de075c..f14be8c70 100644 --- a/src/main/java/IllegalCommandException.java +++ b/src/main/java/org/ajay/exceptions/IllegalCommandException.java @@ -1,3 +1,6 @@ +package org.ajay.exceptions; + + public class IllegalCommandException extends JarvisException { public IllegalCommandException(String msg) { super(msg); diff --git a/src/main/java/InvalidCommandFormatException.java b/src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java similarity index 83% rename from src/main/java/InvalidCommandFormatException.java rename to src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java index 0c4331800..31ba55881 100644 --- a/src/main/java/InvalidCommandFormatException.java +++ b/src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java @@ -1,3 +1,6 @@ +package org.ajay.exceptions; + + public class InvalidCommandFormatException extends JarvisException { public InvalidCommandFormatException(String msg) { super(msg); diff --git a/src/main/java/JarvisException.java b/src/main/java/org/ajay/exceptions/JarvisException.java similarity index 79% rename from src/main/java/JarvisException.java rename to src/main/java/org/ajay/exceptions/JarvisException.java index 57c88533b..b5502eba9 100644 --- a/src/main/java/JarvisException.java +++ b/src/main/java/org/ajay/exceptions/JarvisException.java @@ -1,3 +1,5 @@ +package org.ajay.exceptions; + public class JarvisException extends Exception { public JarvisException(String msg) { super(msg); From 13a9539c48641baf0d3ccca7c380c83cf9179cfa Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 11 Sep 2024 22:05:09 +0800 Subject: [PATCH 36/88] Update runtest script --- text-ui-test/runtest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 0fd7aaf86..5a344b895 100755 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -13,7 +13,7 @@ then fi # compile the code into the bin folder, terminates if error occurred -if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java +if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/**/**/**.java then echo "********** BUILD FAILURE **********" exit 1 From 71efd91e57bc95bfe0e8e7ad632d92ad3c54211e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 12 Sep 2024 11:31:06 +0800 Subject: [PATCH 37/88] Clean up catching exceptions --- src/main/java/org/ajay/Jarvis.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 272883e36..b6716605a 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -146,13 +146,13 @@ public static void readInput(Scanner in, String lineBufferString) { } readInput(in, lineBufferString); // Recursively call the function to read the next input - } catch (NoSuchElementException e) { - // printGoodbyeMsgs(); } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException e) { printBreakLine(); System.out.println(e); printBreakLine(); - readInput(in, lineBufferString); // Let user try again + readInput(in, lineBufferString); + } catch (NoSuchElementException e) { + // FIXME: Facing unexpected NoSuchElementException error } From 0954bf63f437e0830b5800d7a913c7d63954e18a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 13 Sep 2024 16:27:01 +0800 Subject: [PATCH 38/88] Update Readme --- README.md | 4 +- src/main/java/org/ajay/Jarvis.java | 68 +++++++++++++++--------------- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 55154b5d8..b9e865cf5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Duke project template +# J.A.R.V.I.S project template This is a project template for a greenfield Java project. It's named after the Java mascot _Jarvis_. Given below are instructions on how to use it. @@ -13,7 +13,7 @@ Prerequisites: JDK 17, update Intellij to the most recent version. 1. If there are any further prompts, accept the defaults. 1. Configure the project to use **JDK 17** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
In the same dialog, set the **Project language level** field to the `SDK default` option. -3. After that, locate the `src/main/java/Jarvis.java` file, right-click it, and choose `Run Jarvis.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: +1. After that, locate the `src/main/java/Jarvis.java` file, right-click it, and choose `Run Jarvis.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: ``` Hello from ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index b6716605a..a991d9a8d 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -44,7 +44,7 @@ private static void printPrompt() { * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?"}; // List of greetings + String[] greetings = { "Hello! I'm " + chatBotName + "\nWhat can I do for you?" }; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -58,7 +58,7 @@ private static void printGreetingMsgs() { * Prints the goodbye messages to the console. */ private static void printGoodbyeMsgs() { - String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages + String[] goodbyes = { "Bye. Hope to see you again soon!" }; // List of goodbye messages // Print the goodbye messages for (String goodbye : goodbyes) { @@ -78,7 +78,6 @@ public static void printTasks() { printBreakLine(); } - /** * Splits the command and task from the input. * @@ -112,37 +111,37 @@ public static void readInput(Scanner in, String lineBufferString) { splitCommandAndTask(lineBufferString); switch (command) { - case "bye": - printGoodbyeMsgs(); - break; - case "exit": // Habit of typing exit to exit the program - printGoodbyeMsgs(); - break; - case Task.LIST_COMMAND_STRING: // List all the tasks - printTasks(); - break; - case Todo.COMMAND_STRING: // Add a todo task - taskList[Task.getNumberOfTasks()] = new Todo(task); - printBreakLine(); - break; - case Deadline.COMMAND_STRING: // Add a deadline task - taskList[Task.getNumberOfTasks()] = new Deadline(task); - printBreakLine(); - break; - case Event.COMMAND_STRING: // Add an event task - taskList[Task.getNumberOfTasks()] = new Event(task); - printBreakLine(); - break; - case Task.MARK_COMMAND_STRING: // Mark the task as done - int taskNumberMark = Integer.parseInt(task); // Get the task number - Task.markAsDone(taskList, taskNumberMark); // Mark the task as done - break; - case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - int taskNumberUnmark = Integer.parseInt(task); // Get the task number - Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone - break; - default: - throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); + case "bye": + printGoodbyeMsgs(); + break; + case "exit": // Habit of typing exit to exit the program + printGoodbyeMsgs(); + break; + case Task.LIST_COMMAND_STRING: // List all the tasks + printTasks(); + break; + case Todo.COMMAND_STRING: // Add a todo task + taskList[Task.getNumberOfTasks()] = new Todo(task); + printBreakLine(); + break; + case Deadline.COMMAND_STRING: // Add a deadline task + taskList[Task.getNumberOfTasks()] = new Deadline(task); + printBreakLine(); + break; + case Event.COMMAND_STRING: // Add an event task + taskList[Task.getNumberOfTasks()] = new Event(task); + printBreakLine(); + break; + case Task.MARK_COMMAND_STRING: // Mark the task as done + int taskNumberMark = Integer.parseInt(task); // Get the task number + Task.markAsDone(taskList, taskNumberMark); // Mark the task as done + break; + case Task.UNMARK_COMMAND_STRING: // Mark the task as undone + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone + break; + default: + throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); } readInput(in, lineBufferString); // Recursively call the function to read the next input @@ -155,7 +154,6 @@ public static void readInput(Scanner in, String lineBufferString) { // FIXME: Facing unexpected NoSuchElementException error } - } public static void main(String[] args) { From 0733df530f930afb6191cbad65d64e965cf74d8c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 11:59:18 +0800 Subject: [PATCH 39/88] Add support task as ArrayList - created function overload --- src/main/java/org/ajay/Jarvis.java | 72 ++++++++++++++------------- src/main/java/org/ajay/task/Task.java | 22 ++++++++ 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index a991d9a8d..aa7fdbea4 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -1,5 +1,6 @@ package org.ajay; +import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Scanner; import org.ajay.exceptions.*; @@ -12,7 +13,7 @@ public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot - private static Task[] taskList = new Task[MAX_TASK_LENGTH]; // Array to store tasks + private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks static String command; // Variable to store the command static String task; // Variable to store the task @@ -44,7 +45,7 @@ private static void printPrompt() { * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = { "Hello! I'm " + chatBotName + "\nWhat can I do for you?" }; // List of greetings + String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?"}; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -58,7 +59,7 @@ private static void printGreetingMsgs() { * Prints the goodbye messages to the console. */ private static void printGoodbyeMsgs() { - String[] goodbyes = { "Bye. Hope to see you again soon!" }; // List of goodbye messages + String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages // Print the goodbye messages for (String goodbye : goodbyes) { @@ -111,37 +112,40 @@ public static void readInput(Scanner in, String lineBufferString) { splitCommandAndTask(lineBufferString); switch (command) { - case "bye": - printGoodbyeMsgs(); - break; - case "exit": // Habit of typing exit to exit the program - printGoodbyeMsgs(); - break; - case Task.LIST_COMMAND_STRING: // List all the tasks - printTasks(); - break; - case Todo.COMMAND_STRING: // Add a todo task - taskList[Task.getNumberOfTasks()] = new Todo(task); - printBreakLine(); - break; - case Deadline.COMMAND_STRING: // Add a deadline task - taskList[Task.getNumberOfTasks()] = new Deadline(task); - printBreakLine(); - break; - case Event.COMMAND_STRING: // Add an event task - taskList[Task.getNumberOfTasks()] = new Event(task); - printBreakLine(); - break; - case Task.MARK_COMMAND_STRING: // Mark the task as done - int taskNumberMark = Integer.parseInt(task); // Get the task number - Task.markAsDone(taskList, taskNumberMark); // Mark the task as done - break; - case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - int taskNumberUnmark = Integer.parseInt(task); // Get the task number - Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone - break; - default: - throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); + case "bye": + printGoodbyeMsgs(); + break; + case "exit": // Habit of typing exit to exit the program + printGoodbyeMsgs(); + break; + case Task.LIST_COMMAND_STRING: // List all the tasks + printTasks(); + break; + case Todo.COMMAND_STRING: // Add a todo task + // taskList[Task.getNumberOfTasks()] = new Todo(task); + taskList.add(new Todo(task)); + printBreakLine(); + break; + case Deadline.COMMAND_STRING: // Add a deadline task + // taskList[Task.getNumberOfTasks()] = new Deadline(task); + taskList.add(new Deadline(task)); + printBreakLine(); + break; + case Event.COMMAND_STRING: // Add an event task + // taskList[Task.getNumberOfTasks()] = new Event(task); + taskList.add(new Event(task)); + printBreakLine(); + break; + case Task.MARK_COMMAND_STRING: // Mark the task as done + int taskNumberMark = Integer.parseInt(task); // Get the task number + Task.markAsDone(taskList, taskNumberMark); // Mark the task as done + break; + case Task.UNMARK_COMMAND_STRING: // Mark the task as undone + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone + break; + default: + throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); } readInput(in, lineBufferString); // Recursively call the function to read the next input diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/task/Task.java index 5d4acf377..3a3f01a32 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -1,5 +1,6 @@ package org.ajay.task; +import java.util.ArrayList; import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; @@ -95,6 +96,11 @@ public static void markAsDone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsDone(); // Mark the task as done } + public static void markAsDone(ArrayList taskList, int taskNumber) { + // taskList[taskNumber - 1].markAsDone(); // Mark the task as done + taskList.get(taskNumber - 1).markAsDone(); + } + /** * Marks the task as not done. */ @@ -115,6 +121,11 @@ public static void markAsUndone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done } + public static void markAsUndone(ArrayList taskList, int taskNumber) { + // taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done + taskList.get(taskNumber - 1).markAsUndone(); + } + /** * Returns the number of tasks in the list. * @@ -156,4 +167,15 @@ public static void printAllTasks(Task[] taskList) { } } } + + public static void printAllTasks(ArrayList taskList) { + if (getNumberOfTasks() == 0) { + System.out.println("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + System.out.println((i + 1) + "." + taskList.get(i).toString()); + } + } + } } From 693f80536c8843f54bc2ee37b7b79980de6ef39e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 11:59:18 +0800 Subject: [PATCH 40/88] Add support task as ArrayList - created function overload --- src/main/java/org/ajay/Jarvis.java | 72 ++++++++++++++------------- src/main/java/org/ajay/task/Task.java | 22 ++++++++ 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index a991d9a8d..aa7fdbea4 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -1,5 +1,6 @@ package org.ajay; +import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Scanner; import org.ajay.exceptions.*; @@ -12,7 +13,7 @@ public class Jarvis { private static final String chatBotName = "Jarvis"; // Name of the chatbot - private static Task[] taskList = new Task[MAX_TASK_LENGTH]; // Array to store tasks + private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks static String command; // Variable to store the command static String task; // Variable to store the task @@ -44,7 +45,7 @@ private static void printPrompt() { * Prints the greeting messages to the console. */ private static void printGreetingMsgs() { - String[] greetings = { "Hello! I'm " + chatBotName + "\nWhat can I do for you?" }; // List of greetings + String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?"}; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -58,7 +59,7 @@ private static void printGreetingMsgs() { * Prints the goodbye messages to the console. */ private static void printGoodbyeMsgs() { - String[] goodbyes = { "Bye. Hope to see you again soon!" }; // List of goodbye messages + String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages // Print the goodbye messages for (String goodbye : goodbyes) { @@ -111,37 +112,40 @@ public static void readInput(Scanner in, String lineBufferString) { splitCommandAndTask(lineBufferString); switch (command) { - case "bye": - printGoodbyeMsgs(); - break; - case "exit": // Habit of typing exit to exit the program - printGoodbyeMsgs(); - break; - case Task.LIST_COMMAND_STRING: // List all the tasks - printTasks(); - break; - case Todo.COMMAND_STRING: // Add a todo task - taskList[Task.getNumberOfTasks()] = new Todo(task); - printBreakLine(); - break; - case Deadline.COMMAND_STRING: // Add a deadline task - taskList[Task.getNumberOfTasks()] = new Deadline(task); - printBreakLine(); - break; - case Event.COMMAND_STRING: // Add an event task - taskList[Task.getNumberOfTasks()] = new Event(task); - printBreakLine(); - break; - case Task.MARK_COMMAND_STRING: // Mark the task as done - int taskNumberMark = Integer.parseInt(task); // Get the task number - Task.markAsDone(taskList, taskNumberMark); // Mark the task as done - break; - case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - int taskNumberUnmark = Integer.parseInt(task); // Get the task number - Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone - break; - default: - throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); + case "bye": + printGoodbyeMsgs(); + break; + case "exit": // Habit of typing exit to exit the program + printGoodbyeMsgs(); + break; + case Task.LIST_COMMAND_STRING: // List all the tasks + printTasks(); + break; + case Todo.COMMAND_STRING: // Add a todo task + // taskList[Task.getNumberOfTasks()] = new Todo(task); + taskList.add(new Todo(task)); + printBreakLine(); + break; + case Deadline.COMMAND_STRING: // Add a deadline task + // taskList[Task.getNumberOfTasks()] = new Deadline(task); + taskList.add(new Deadline(task)); + printBreakLine(); + break; + case Event.COMMAND_STRING: // Add an event task + // taskList[Task.getNumberOfTasks()] = new Event(task); + taskList.add(new Event(task)); + printBreakLine(); + break; + case Task.MARK_COMMAND_STRING: // Mark the task as done + int taskNumberMark = Integer.parseInt(task); // Get the task number + Task.markAsDone(taskList, taskNumberMark); // Mark the task as done + break; + case Task.UNMARK_COMMAND_STRING: // Mark the task as undone + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone + break; + default: + throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); } readInput(in, lineBufferString); // Recursively call the function to read the next input diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/task/Task.java index 5d4acf377..3a3f01a32 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -1,5 +1,6 @@ package org.ajay.task; +import java.util.ArrayList; import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; @@ -95,6 +96,11 @@ public static void markAsDone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsDone(); // Mark the task as done } + public static void markAsDone(ArrayList taskList, int taskNumber) { + // taskList[taskNumber - 1].markAsDone(); // Mark the task as done + taskList.get(taskNumber - 1).markAsDone(); + } + /** * Marks the task as not done. */ @@ -115,6 +121,11 @@ public static void markAsUndone(Task[] taskList, int taskNumber) { taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done } + public static void markAsUndone(ArrayList taskList, int taskNumber) { + // taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done + taskList.get(taskNumber - 1).markAsUndone(); + } + /** * Returns the number of tasks in the list. * @@ -156,4 +167,15 @@ public static void printAllTasks(Task[] taskList) { } } } + + public static void printAllTasks(ArrayList taskList) { + if (getNumberOfTasks() == 0) { + System.out.println("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + System.out.println((i + 1) + "." + taskList.get(i).toString()); + } + } + } } From 2451c3bac7fda9616b6dedd4a26a080bf3030da1 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 12:30:39 +0800 Subject: [PATCH 41/88] Add support to delete task - Level 6. Delete --- src/main/java/org/ajay/Jarvis.java | 8 +++++++- src/main/java/org/ajay/exceptions/Error.java | 2 +- .../exceptions/IllegalArgumentException.java | 8 ++++++++ src/main/java/org/ajay/task/Task.java | 16 +++++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/ajay/exceptions/IllegalArgumentException.java diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index aa7fdbea4..2fd516e08 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -5,6 +5,7 @@ import java.util.Scanner; import org.ajay.exceptions.*; import org.ajay.exceptions.Error; +import org.ajay.exceptions.IllegalArgumentException; import org.ajay.task.*; public class Jarvis { @@ -144,12 +145,17 @@ public static void readInput(Scanner in, String lineBufferString) { int taskNumberUnmark = Integer.parseInt(task); // Get the task number Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone break; + case Task.DELETE_COMMAND_STRING: // Delete the task + int taskNumberDelete = Integer.parseInt(task); // Get the task number + Task.deleteTask(taskList, taskNumberDelete); // Delete the task + break; default: throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); } readInput(in, lineBufferString); // Recursively call the function to read the next input - } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException e) { + } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException | + IllegalArgumentException e) { printBreakLine(); System.out.println(e); printBreakLine(); diff --git a/src/main/java/org/ajay/exceptions/Error.java b/src/main/java/org/ajay/exceptions/Error.java index 0285883e3..6b3c62e6b 100644 --- a/src/main/java/org/ajay/exceptions/Error.java +++ b/src/main/java/org/ajay/exceptions/Error.java @@ -4,7 +4,7 @@ // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java public enum Error { - EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."); + EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."), OUT_OF_BOUNDS(3, "Index out of bounds."); private final int code; private final String description; diff --git a/src/main/java/org/ajay/exceptions/IllegalArgumentException.java b/src/main/java/org/ajay/exceptions/IllegalArgumentException.java new file mode 100644 index 000000000..e2e24b484 --- /dev/null +++ b/src/main/java/org/ajay/exceptions/IllegalArgumentException.java @@ -0,0 +1,8 @@ +package org.ajay.exceptions; + + +public class IllegalArgumentException extends JarvisException { + public IllegalArgumentException(String msg) { + super(msg); + } +} diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/task/Task.java index 3a3f01a32..3ab10ef61 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -3,15 +3,18 @@ import java.util.ArrayList; import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; +import org.ajay.exceptions.IllegalArgumentException; public class Task { public final static String MARK_COMMAND_STRING = "mark"; public final static String UNMARK_COMMAND_STRING = "unmark"; public final static String LIST_COMMAND_STRING = "list"; + public final static String DELETE_COMMAND_STRING = "delete"; protected String description; // Description of the task private boolean isDone; // Status of the task + // TODO: Possible to use arraylist length private static int numberOfTasks = 0; // Number of tasks in the list /** @@ -83,7 +86,6 @@ public void markAsDone() { this.isDone = true; System.out.println("Nice! I've marked this task as done: \n " + toString()); - } /** @@ -126,6 +128,18 @@ public static void markAsUndone(ArrayList taskList, int taskNumber) { taskList.get(taskNumber - 1).markAsUndone(); } + public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { + + if (taskNumber > numberOfTasks) { + throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + } + + System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + taskList.remove(taskNumber - 1); + numberOfTasks--; + printNumberOfTasks(); + } + /** * Returns the number of tasks in the list. * From 98badc3fabc3c7dad4784f73529cf54a23f06299 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 18:48:33 +0800 Subject: [PATCH 42/88] Add saving and loading of tasks --- src/main/java/org/ajay/utils/Storage.java | 78 +++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main/java/org/ajay/utils/Storage.java diff --git a/src/main/java/org/ajay/utils/Storage.java b/src/main/java/org/ajay/utils/Storage.java new file mode 100644 index 000000000..bd9b01e49 --- /dev/null +++ b/src/main/java/org/ajay/utils/Storage.java @@ -0,0 +1,78 @@ +package org.ajay.utils; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.IllegalArgumentException; +import org.ajay.task.Deadline; +import org.ajay.task.Event; +import org.ajay.task.Task; +import org.ajay.task.Todo; + +public class Storage { + private static String filePath = "data/jarvis.txt"; + + + public static void loadTaskList(ArrayList taskList) throws EmptyArgumentException, IllegalArgumentException { + + // Try block to check for exceptions + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = br.readLine()) != null) { + + // Splitting the data + String[] task = line.split(" \\| "); + + boolean isDone = false; + if (task[1].equals("1")) { + isDone = true; + } + + switch (task[0]) { + case Todo.TASK_STRING: + if (task.length < 3) { + throw new IllegalArgumentException("Importing todo task failed. Data is corrupted."); + } + + taskList.add(Todo.loadTaskString(isDone, task[2])); + break; + case Event.TASK_STRING: + if (task.length < 5) { + throw new IllegalArgumentException("Importing Event task failed. Data is corrupted."); + } + + taskList.add(Event.loadTaskString(isDone, task[2], task[3], task[4])); + break; + case Deadline.TASK_STRING: + if (task.length < 4) { + throw new IllegalArgumentException("Importing Deadline task failed. Data is corrupted."); + } + + taskList.add(Deadline.loadTaskString(isDone, task[2], task[3])); + break; + default: + throw new AssertionError(); + } + } + } catch (IOException e) { + System.out.println("Error while reading a file."); + } + + } + + public static void saveTaskList(ArrayList taskList) { + try { + FileWriter fw = new FileWriter(filePath); + for (Task task : taskList) { + fw.write(task.saveTaskString() + "\n"); + } + fw.close(); + } catch (IOException e) { + System.out.println("Unable to write to file: " + filePath); + e.printStackTrace(); + } + } +} From 69e9c52fb5a2d32d0c159143525ebb50aecb13c6 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 18:51:30 +0800 Subject: [PATCH 43/88] Add catch exceptions index out of bound --- src/main/java/org/ajay/exceptions/Error.java | 2 +- .../java/org/ajay/exceptions/IllegalArgumentException.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/ajay/exceptions/IllegalArgumentException.java diff --git a/src/main/java/org/ajay/exceptions/Error.java b/src/main/java/org/ajay/exceptions/Error.java index 0285883e3..6b3c62e6b 100644 --- a/src/main/java/org/ajay/exceptions/Error.java +++ b/src/main/java/org/ajay/exceptions/Error.java @@ -4,7 +4,7 @@ // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java public enum Error { - EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."); + EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."), OUT_OF_BOUNDS(3, "Index out of bounds."); private final int code; private final String description; diff --git a/src/main/java/org/ajay/exceptions/IllegalArgumentException.java b/src/main/java/org/ajay/exceptions/IllegalArgumentException.java new file mode 100644 index 000000000..f09d92708 --- /dev/null +++ b/src/main/java/org/ajay/exceptions/IllegalArgumentException.java @@ -0,0 +1,7 @@ +package org.ajay.exceptions; + +public class IllegalArgumentException extends JarvisException { + public IllegalArgumentException(String msg) { + super(msg); + } +} From 586c155f270a776b85c6351fb02a497ae73bade6 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 18:52:34 +0800 Subject: [PATCH 44/88] Add Class to save and load --- data/jarvis.txt | 4 +++ src/main/java/org/ajay/Jarvis.java | 19 ++++++++++++++ src/main/java/org/ajay/task/Deadline.java | 21 ++++++++++++++- src/main/java/org/ajay/task/Event.java | 31 ++++++++++++++++++++++- src/main/java/org/ajay/task/Task.java | 10 +++++--- src/main/java/org/ajay/task/Todo.java | 19 +++++++++++++- 6 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 data/jarvis.txt diff --git a/data/jarvis.txt b/data/jarvis.txt new file mode 100644 index 000000000..d677d7b8a --- /dev/null +++ b/data/jarvis.txt @@ -0,0 +1,4 @@ +T | 1 | Answer CS2113 tutorial questions +D | 0 | weekly CS2113 quiz | Monday 9pm +E | 1 | CS2113 lecture | Friday 4 | 6 pm +T | 0 | ajay diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index aa7fdbea4..9d906f96b 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -5,7 +5,9 @@ import java.util.Scanner; import org.ajay.exceptions.*; import org.ajay.exceptions.Error; +import org.ajay.exceptions.IllegalArgumentException; import org.ajay.task.*; +import org.ajay.utils.Storage; public class Jarvis { // Constants @@ -125,24 +127,34 @@ public static void readInput(Scanner in, String lineBufferString) { // taskList[Task.getNumberOfTasks()] = new Todo(task); taskList.add(new Todo(task)); printBreakLine(); + + Storage.saveTaskList(taskList); break; case Deadline.COMMAND_STRING: // Add a deadline task // taskList[Task.getNumberOfTasks()] = new Deadline(task); taskList.add(new Deadline(task)); printBreakLine(); + + Storage.saveTaskList(taskList); break; case Event.COMMAND_STRING: // Add an event task // taskList[Task.getNumberOfTasks()] = new Event(task); taskList.add(new Event(task)); printBreakLine(); + + Storage.saveTaskList(taskList); break; case Task.MARK_COMMAND_STRING: // Mark the task as done int taskNumberMark = Integer.parseInt(task); // Get the task number Task.markAsDone(taskList, taskNumberMark); // Mark the task as done + + Storage.saveTaskList(taskList); break; case Task.UNMARK_COMMAND_STRING: // Mark the task as undone int taskNumberUnmark = Integer.parseInt(task); // Get the task number Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone + + Storage.saveTaskList(taskList); break; default: throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); @@ -198,6 +210,13 @@ public static void main(String[] args) { System.out.println("Hello from\n" + logo); printGreetingMsgs(); + + try { + Storage.loadTaskList(taskList); + } catch (EmptyArgumentException | IllegalArgumentException e) { + e.printStackTrace(); + } + readInput(in, lineBufferString); // Read the input from the user } } diff --git a/src/main/java/org/ajay/task/Deadline.java b/src/main/java/org/ajay/task/Deadline.java index d9836da7f..b5361b598 100644 --- a/src/main/java/org/ajay/task/Deadline.java +++ b/src/main/java/org/ajay/task/Deadline.java @@ -8,6 +8,7 @@ public class Deadline extends Task { public final static String COMMAND_STRING = "deadline"; final static String BY_KEYWORD_STRING = "/by"; protected String by; + public final static String TASK_STRING = "D"; /** * Constructor for the Deadline class. @@ -25,6 +26,7 @@ public Deadline(String description) throws EmptyArgumentException, InvalidComman Task.printNumberOfTasks(); } + /** * Constructor for the Deadline class. * @@ -40,6 +42,12 @@ public Deadline(String description, String by) throws EmptyArgumentException { Task.printNumberOfTasks(); } + public Deadline(boolean isDone, String description, String by) throws EmptyArgumentException { + super(description); + setBy(by); + super.setDoneState(isDone); + } + /** * Returns the by date. * @@ -94,8 +102,19 @@ public static String getDescriptionFromString(String input) { return input.trim(); } + @Override + public String saveTaskString() { + return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + by; + } + + public static Deadline loadTaskString(boolean isDone, String description, String by) throws EmptyArgumentException { + Deadline deadline = new Deadline(isDone, description, by); + return deadline; + } + + @Override public String toString() { - return "[D]" + super.toString() + " (by: " + by + ")"; + return "[" + TASK_STRING + "]" + super.toString() + " (by: " + by + ")"; } } diff --git a/src/main/java/org/ajay/task/Event.java b/src/main/java/org/ajay/task/Event.java index aa198190a..39c35cf9b 100644 --- a/src/main/java/org/ajay/task/Event.java +++ b/src/main/java/org/ajay/task/Event.java @@ -8,6 +8,7 @@ public class Event extends Task { public final static String COMMAND_STRING = "event"; // Command string for the Event class final static String FROM_KEYWORD_STRING = "/from"; // Keyword string for the from date final static String TO_KEYWORD_STRING = "/to"; // Keyword string for the to date + public final static String TASK_STRING = "E"; protected String from; protected String to; @@ -40,6 +41,23 @@ public Event(String description) throws EmptyArgumentException, InvalidCommandFo */ public Event(String description, String from, String to) throws EmptyArgumentException { super(description); + setFrom(from); + setTo(to); + + } + + /** + * Constructor for the Event class. + * + * @param description description of the event + * @param from from date + * @param to to date + */ + public Event(boolean isDone, String description, String from, String to) throws EmptyArgumentException { + super(description); + super.setDoneState(isDone); + setFrom(from); + setTo(to); } /** @@ -134,8 +152,19 @@ public static String getToFromString(String input) throws InvalidCommandFormatEx return input.substring(indexAfterTo).trim(); } + @Override + public String saveTaskString() { + return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + from + " | " + to; + } + + public static Event loadTaskString(boolean isDone, String description, String from, String to) throws EmptyArgumentException { + Event event = new Event(isDone, description, from, to); + return event; + } + + @Override public String toString() { - return "[E]" + super.toString() + " (from: " + from + " to: " + to + ")"; + return "[" + TASK_STRING + "]" + super.toString() + " (from: " + from + " to: " + to + ")"; } } diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/task/Task.java index 3a3f01a32..560d6554b 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -4,7 +4,7 @@ import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; -public class Task { +public abstract class Task { public final static String MARK_COMMAND_STRING = "mark"; public final static String UNMARK_COMMAND_STRING = "unmark"; public final static String LIST_COMMAND_STRING = "list"; @@ -83,7 +83,6 @@ public void markAsDone() { this.isDone = true; System.out.println("Nice! I've marked this task as done: \n " + toString()); - } /** @@ -107,8 +106,7 @@ public static void markAsDone(ArrayList taskList, int taskNumber) { public void markAsUndone() { this.isDone = false; - System.out.print("OK, I've marked this task as not done yet: \n "); - this.toString(); + System.out.println("OK, I've marked this task as not done yet: \n " + this.toString()); } /** @@ -152,6 +150,10 @@ public String toString() { return ("[" + this.getStatusIcon() + "] " + this.description); } + public abstract String saveTaskString(); + + // public abstract String loadTaskString(); + /** * Prints all the tasks in the list. * diff --git a/src/main/java/org/ajay/task/Todo.java b/src/main/java/org/ajay/task/Todo.java index 40d43c7a7..463e12af7 100644 --- a/src/main/java/org/ajay/task/Todo.java +++ b/src/main/java/org/ajay/task/Todo.java @@ -4,6 +4,7 @@ public class Todo extends Task { public final static String COMMAND_STRING = "todo"; // Command string for the Todo class + public final static String TASK_STRING = "T"; /** * Constructor for the Todo class. @@ -17,8 +18,24 @@ public Todo(String description) throws EmptyArgumentException { Task.printNumberOfTasks(); } + public Todo(String description, boolean isDone) throws EmptyArgumentException { + super(description); + super.setDoneState(isDone); + } + + + @Override + public String saveTaskString() { + return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description; + } + + public static Todo loadTaskString(boolean isDone, String description) throws EmptyArgumentException { + Todo todo = new Todo(description, isDone); + return todo; + } + @Override public String toString() { - return "[T]" + super.toString(); + return "[" + TASK_STRING + "]" + super.toString(); } } From 9ade014584da34fe684f453f4ee61dc2dd2a6c67 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 20:22:17 +0800 Subject: [PATCH 45/88] Add checks if the data file exists --- src/main/java/org/ajay/utils/Storage.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/ajay/utils/Storage.java b/src/main/java/org/ajay/utils/Storage.java index bd9b01e49..2574826b7 100644 --- a/src/main/java/org/ajay/utils/Storage.java +++ b/src/main/java/org/ajay/utils/Storage.java @@ -1,6 +1,7 @@ package org.ajay.utils; import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; @@ -17,6 +18,15 @@ public class Storage { public static void loadTaskList(ArrayList taskList) throws EmptyArgumentException, IllegalArgumentException { + // Check if the file exists + File f = new File(filePath); + if (!f.exists()) { + try { + f.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } // Try block to check for exceptions try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { From 42468e83bc8fb9bb4dd8bc15c8d1fc860748925d Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 20:22:43 +0800 Subject: [PATCH 46/88] Improve test cases --- data/jarvis.txt | 4 ---- text-ui-test/EXPECTED.TXT | 12 ++++++++++++ text-ui-test/data/jarvis.txt | 0 text-ui-test/input.txt | 4 ++++ text-ui-test/runtest.sh | 2 +- 5 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 text-ui-test/data/jarvis.txt diff --git a/data/jarvis.txt b/data/jarvis.txt index d677d7b8a..e69de29bb 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -1,4 +0,0 @@ -T | 1 | Answer CS2113 tutorial questions -D | 0 | weekly CS2113 quiz | Monday 9pm -E | 1 | CS2113 lecture | Friday 4 | 6 pm -T | 0 | ajay diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index e7d032eb2..437b75786 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -58,4 +58,16 @@ Here are the tasks in your list: 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) 3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) ──────────────────────────────────────────────────────────── + Noted. I've removed this task: + [T][✓] Answer CS2113 tutorial questions +Now you have 2 tasks in the list. + Noted. I've removed this task: + [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +Now you have 1 tasks in the list. + Noted. I've removed this task: + [D][ ] weekly CS2113 quiz (by: Monday 9pm) +Now you have 0 tasks in the list. + ──────────────────────────────────────────────────────────── +The list is empty. +────────────────────────────────────────────────────────────  \ No newline at end of file diff --git a/text-ui-test/data/jarvis.txt b/text-ui-test/data/jarvis.txt new file mode 100644 index 000000000..e69de29bb diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 255d1935e..752456ad8 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -4,3 +4,7 @@ list event CS2113 lecture /from Friday 4 /to 6 pm mark 1 list +delete 1 +delete 2 +delete 1 +list diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 5a344b895..90a963ba1 100755 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -20,7 +20,7 @@ then fi # run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ../bin Jarvis < input.txt > ACTUAL.TXT +java -classpath ../bin org/ajay/Jarvis < input.txt > ACTUAL.TXT # convert to UNIX format cp EXPECTED.TXT EXPECTED-UNIX.TXT From a31001be50427af7ef1b82501b3b3eacbd6b8fac Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Wed, 18 Sep 2024 20:22:55 +0800 Subject: [PATCH 47/88] Create jar manifest --- src/main/java/META-INF/MANIFEST.MF | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..cb234109d --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: org.ajay.Jarvis + From 4a5e43a59813801e4efc2ed754045dd0c34d3813 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 19 Sep 2024 10:37:53 +0800 Subject: [PATCH 48/88] Abstaract prompt relate as Prompt Class --- src/main/java/org/ajay/Ui/Prompt.java | 155 ++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/main/java/org/ajay/Ui/Prompt.java diff --git a/src/main/java/org/ajay/Ui/Prompt.java b/src/main/java/org/ajay/Ui/Prompt.java new file mode 100644 index 000000000..08ab3d260 --- /dev/null +++ b/src/main/java/org/ajay/Ui/Prompt.java @@ -0,0 +1,155 @@ +package org.ajay.Ui; + +import org.ajay.Jarvis; +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.Error; + +public class Prompt { + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_YELLOW = "\u001B[33m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; + public static final String ANSI_WHITE = "\u001B[37m"; + + public static String command; // Variable to store the command + public static String task; // Variable to store the task + + static String logo = """ + @@@@@@@@@@@@@@@@@@@@@@@ + @@% @@ @@ @@@ + @@ @@ @@ @@ + @@ @@ @@ @@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @ *@ + @@@ @@@ + @ @@@ @@@ @ + @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ + @ @@@ @@ @@ @@@ @ + @ *@@ @@ @( @@( @ + @ ,@@@@ @@ @@ @@@@ @ + @ @@@@@ %@@ @@ @ @@& @@@@@ @ + @@@@ @@@ /@ @@ @@@ *@@@@/ + @@ @@@ @@ @@@ @@ + @@ @@& (@@ @@ + @ @@@@@@@@ @@@@@@@ @ + @@ @@@@* @@, @@ @@@@ @& + @@ @@@ @@@ @@ + @@@ @@ @@ @@# + @@@@ @@@ @@@ @@@@ + @@@@@@@@@@@@@ + + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ + ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ + ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ + """; + + /** + * Prints a break line to the console. + */ + public static void printBreakLine() { + System.out.println(ANSI_BLACK + "────────────────────────────────────────────────────────────" + ANSI_RESET); + } + + /** + * Gracefully exits the program. + * + * @param status + */ + public static void exit(int status) { + System.exit(status); // Print the goodbye message + } // Print the goodbye message + + /** + * Prints the prompt to the console for visual marker for user to type. + */ + public static void printPrompt() { + System.out.print(" "); + } + + public static void printLogo() { + System.out.println("Hello from\n" + ANSI_BLUE + logo + ANSI_RESET); + } + + public static void printError(String errorMsg) { + System.out.println(ANSI_RED + errorMsg + ANSI_RESET); + } + + public static void printSuccess(String successMsg) { + System.out.println(ANSI_GREEN + successMsg + ANSI_RESET); + } + + public static void printInfo(String infoMsg) { + System.out.println(ANSI_CYAN + infoMsg + ANSI_RESET); + } + + public static void printWarning(String warningMsg) { + System.out.println(ANSI_YELLOW + warningMsg + ANSI_RESET); + } + + /** + * Prints the greeting messages to the console. + */ + public static void printGreetingMsgs() { + String[] greetings = {"Hello! I'm " + ANSI_YELLOW + Jarvis.chatBotName + ANSI_RESET + "\nWhat can I do for you?"}; // List of greetings + + // Print the greetings + for (String greeting : greetings) { + printBreakLine(); // Print a break line before each greeting + System.out.println(greeting); // Print the greeting + } + printBreakLine(); + } + + /** + * Prints the goodbye messages to the console. + */ + public static void printGoodbyeMsgs() { + String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages + // List of goodbye messages + // Print the goodbye messages + for (String goodbye : goodbyes) { + printBreakLine(); + System.out.println(goodbye); // Print the goodbye message + } // Print the goodbye message + printBreakLine(); + exit(0); + } + + public static void printHelpMsgs() { + String[] helpMsgs = {"Here are the list of commands you can use:", "1. todo - Adds a todo task to the list", "2. deadline /by - Adds a deadline task to the list", "3. event /from /to - Adds an event task to the list", "4. list - Lists all the tasks in the list", "5. done - Marks the task as done", "6. delete - Deletes the task from the list", "7. find - Finds the tasks with the keyword", "8. help - Shows the list of commands", "9. bye | exit - Exits the program" + }; + + // Print the help messages + for (String helpMsg : helpMsgs) { + printBreakLine(); + System.out.println(helpMsg); // Print the help message + } // Print the help message + printBreakLine(); + } + + /** + * Splits the command and task from the input. + * + * @param lineBufferString + */ + public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { + if (lineBufferString.isEmpty()) { + throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); + } + + if (lineBufferString.contains(" ")) { + Prompt.command = lineBufferString.split(" ")[0]; + Prompt.task = lineBufferString.substring(Prompt.command.length() + 1); + } else { + Prompt.command = lineBufferString; + Prompt.task = null; + } + } +} From ee892debf223927e7fbda8e00b4103d1dad91db7 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 19 Sep 2024 10:39:17 +0800 Subject: [PATCH 49/88] Remove wild card import --- src/main/java/org/ajay/Jarvis.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 7a1fc5b49..1a7b11856 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -3,10 +3,16 @@ import java.util.ArrayList; import java.util.NoSuchElementException; import java.util.Scanner; -import org.ajay.exceptions.*; +import org.ajay.Ui.Prompt; +import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; import org.ajay.exceptions.IllegalArgumentException; -import org.ajay.task.*; +import org.ajay.exceptions.IllegalCommandException; +import org.ajay.exceptions.InvalidCommandFormatException; +import org.ajay.task.Deadline; +import org.ajay.task.Event; +import org.ajay.task.Task; +import org.ajay.task.Todo; import org.ajay.utils.Storage; public class Jarvis { From 879414c3fd7cfe4fb867e96e1c0c61faac18b803 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 19 Sep 2024 10:40:22 +0800 Subject: [PATCH 50/88] Clean up main after abstraction Prompt class --- src/main/java/org/ajay/Jarvis.java | 161 +++++------------------------ 1 file changed, 24 insertions(+), 137 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 1a7b11856..23949012d 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -17,95 +17,10 @@ public class Jarvis { // Constants - static final int MAX_TASK_LENGTH = 100; // Maximum length of a string - - private static final String chatBotName = "Jarvis"; // Name of the chatbot + public static final String chatBotName = "Jarvis"; // Name of the chatbot private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks - static String command; // Variable to store the command - static String task; // Variable to store the task - - /** - * Prints a break line to the console. - */ - private static void printBreakLine() { - System.out.println("────────────────────────────────────────────────────────────"); - } - - /** - * Gracefully exits the program. - * - * @param status - */ - private static void exit(int status) { - System.exit(status); - } - - /** - * Prints the prompt to the console for visual marker for user to type. - */ - private static void printPrompt() { - System.out.print(" "); - } - - /** - * Prints the greeting messages to the console. - */ - private static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + chatBotName + "\nWhat can I do for you?"}; // List of greetings - - // Print the greetings - for (String greeting : greetings) { - printBreakLine(); // Print a break line before each greeting - System.out.println(greeting); // Print the greeting - } - printBreakLine(); - } - - /** - * Prints the goodbye messages to the console. - */ - private static void printGoodbyeMsgs() { - String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages - - // Print the goodbye messages - for (String goodbye : goodbyes) { - printBreakLine(); - System.out.println(goodbye); // Print the goodbye message - } - printBreakLine(); - exit(0); - } - - /** - * Prints the tasks to the console. - */ - public static void printTasks() { - printBreakLine(); - Task.printAllTasks(taskList); - printBreakLine(); - } - - /** - * Splits the command and task from the input. - * - * @param lineBufferString - */ - public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { - - if (lineBufferString.isEmpty()) { - throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); - } - - if (lineBufferString.contains(" ")) { - command = lineBufferString.split(" ")[0]; - task = lineBufferString.substring(command.length() + 1); - } else { - command = lineBufferString; - task = null; - } - } /** * Reads the input from the user and processes it. @@ -115,55 +30,59 @@ public static void splitCommandAndTask(String lineBufferString) throws EmptyArgu */ public static void readInput(Scanner in, String lineBufferString) { try { - printPrompt(); // Print the prompt to the console + Prompt.printPrompt(); // Print the prompt to the console lineBufferString = in.nextLine(); - splitCommandAndTask(lineBufferString); + Prompt.splitCommandAndTask(lineBufferString); - switch (command) { + switch (Prompt.command) { case "bye": - printGoodbyeMsgs(); + in.close(); + Prompt.printGoodbyeMsgs(); break; case "exit": // Habit of typing exit to exit the program - printGoodbyeMsgs(); + in.close(); + Prompt.printGoodbyeMsgs(); break; case Task.LIST_COMMAND_STRING: // List all the tasks - printTasks(); + Prompt.printBreakLine(); + Task.printAllTasks(taskList); + Prompt.printBreakLine(); break; case Todo.COMMAND_STRING: // Add a todo task // taskList[Task.getNumberOfTasks()] = new Todo(task); - taskList.add(new Todo(task)); - printBreakLine(); + taskList.add(new Todo(Prompt.task)); + Prompt.printBreakLine(); Storage.saveTaskList(taskList); break; case Deadline.COMMAND_STRING: // Add a deadline task // taskList[Task.getNumberOfTasks()] = new Deadline(task); - taskList.add(new Deadline(task)); - printBreakLine(); + taskList.add(new Deadline(Prompt.task)); + Prompt.printBreakLine(); Storage.saveTaskList(taskList); break; case Event.COMMAND_STRING: // Add an event task // taskList[Task.getNumberOfTasks()] = new Event(task); - taskList.add(new Event(task)); - printBreakLine(); + taskList.add(new Event(Prompt.task)); + Prompt.printBreakLine(); Storage.saveTaskList(taskList); break; case Task.MARK_COMMAND_STRING: // Mark the task as done - int taskNumberMark = Integer.parseInt(task); // Get the task number + int taskNumberMark = Integer.parseInt(Prompt.task); // Get the task number Task.markAsDone(taskList, taskNumberMark); // Mark the task as done Storage.saveTaskList(taskList); break; case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - int taskNumberUnmark = Integer.parseInt(task); // Get the task number + int taskNumberUnmark = Integer.parseInt(Prompt.task); // Get the task number Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone Storage.saveTaskList(taskList); break; case Task.DELETE_COMMAND_STRING: // Delete the task - int taskNumberDelete = Integer.parseInt(task); // Get the task number + int taskNumberDelete = Integer.parseInt(Prompt.task); // Get the task number Task.deleteTask(taskList, taskNumberDelete); // Delete the task Storage.saveTaskList(taskList); @@ -175,9 +94,9 @@ public static void readInput(Scanner in, String lineBufferString) { readInput(in, lineBufferString); // Recursively call the function to read the next input } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException | IllegalArgumentException e) { - printBreakLine(); + Prompt.printBreakLine(); System.out.println(e); - printBreakLine(); + Prompt.printBreakLine(); readInput(in, lineBufferString); } catch (NoSuchElementException e) { // FIXME: Facing unexpected NoSuchElementException error @@ -186,43 +105,11 @@ public static void readInput(Scanner in, String lineBufferString) { } public static void main(String[] args) { - String logo = """ - @@@@@@@@@@@@@@@@@@@@@@@ - @@% @@ @@ @@@ - @@ @@ @@ @@ - @@ @@ @@ @@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @ *@ - @@@ @@@ - @ @@@ @@@ @ - @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ - @ @@@ @@ @@ @@@ @ - @ *@@ @@ @( @@( @ - @ ,@@@@ @@ @@ @@@@ @ - @ @@@@@ %@@ @@ @ @@& @@@@@ @ - @@@@ @@@ /@ @@ @@@ *@@@@/ - @@ @@@ @@ @@@ @@ - @@ @@& (@@ @@ - @ @@@@@@@@ @@@@@@@ @ - @@ @@@@* @@, @@ @@@@ @& - @@ @@@ @@@ @@ - @@@ @@ @@ @@# - @@@@ @@@ @@@ @@@@ - @@@@@@@@@@@@@ - - ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ - ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ - ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ - ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ - ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ - ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - """; - String lineBufferString = ""; // Buffer to store the input from the user Scanner in = new Scanner(System.in); // Scanner object to read input from the user - System.out.println("Hello from\n" + logo); - printGreetingMsgs(); + Prompt.printLogo(); + Prompt.printGreetingMsgs(); try { Storage.loadTaskList(taskList); From ad8c4a2667714bda95a166768672a23ca095e71c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 19 Sep 2024 10:48:56 +0800 Subject: [PATCH 51/88] Convert and move exit command to prompt --- src/main/java/org/ajay/Jarvis.java | 4 ++-- src/main/java/org/ajay/Ui/Prompt.java | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 23949012d..e8f44c3db 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -35,11 +35,11 @@ public static void readInput(Scanner in, String lineBufferString) { Prompt.splitCommandAndTask(lineBufferString); switch (Prompt.command) { - case "bye": + case Prompt.EXIT_STRING: // Exit the program in.close(); Prompt.printGoodbyeMsgs(); break; - case "exit": // Habit of typing exit to exit the program + case Prompt.EXIT_STRING_ALT: // Habit of typing exit to exit the program in.close(); Prompt.printGoodbyeMsgs(); break; diff --git a/src/main/java/org/ajay/Ui/Prompt.java b/src/main/java/org/ajay/Ui/Prompt.java index 08ab3d260..91d92802e 100644 --- a/src/main/java/org/ajay/Ui/Prompt.java +++ b/src/main/java/org/ajay/Ui/Prompt.java @@ -15,6 +15,9 @@ public class Prompt { public static final String ANSI_CYAN = "\u001B[36m"; public static final String ANSI_WHITE = "\u001B[37m"; + public final static String EXIT_STRING = "bye"; + public final static String EXIT_STRING_ALT = "exit"; + public static String command; // Variable to store the command public static String task; // Variable to store the task From 3f4dc8c1593b310cd3954177cb7e8a891b0cf87f Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Tue, 24 Sep 2024 15:38:26 +0800 Subject: [PATCH 52/88] Improve runtest.sh script - script ignore whitespace --- data/jarvis.txt | 2 ++ text-ui-test/EXPECTED.TXT | 50 +++++++++++++++++++-------------------- text-ui-test/runtest.sh | 17 ++++++++++--- 3 files changed, 41 insertions(+), 28 deletions(-) diff --git a/data/jarvis.txt b/data/jarvis.txt index e69de29bb..3a3e8f075 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -0,0 +1,2 @@ +T | 0 | Answer CS2113 tutorial questions +D | 0 | weekly CS2113 quiz | Monday 9pm diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 437b75786..8b5a9be8f 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,5 +1,5 @@ Hello from - @@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@ @@% @@ @@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ -28,46 +28,46 @@ Hello from ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - -──────────────────────────────────────────────────────────── -Hello! I'm Jarvis + +──────────────────────────────────────────────────────────── +Hello! I'm Jarvis What can I do for you? -──────────────────────────────────────────────────────────── +────────────────────────────────────────────────────────────  Got it. I've added this task: [T][ ] Answer CS2113 tutorial questions Now you have 1 tasks in the list. -──────────────────────────────────────────────────────────── +────────────────────────────────────────────────────────────  Got it. I've added this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 2 tasks in the list. -──────────────────────────────────────────────────────────── - ──────────────────────────────────────────────────────────── +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── Here are the tasks in your list: -1.[T][ ] Answer CS2113 tutorial questions -2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) -──────────────────────────────────────────────────────────── +1.[T][ ] Answer CS2113 tutorial questions +2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) +────────────────────────────────────────────────────────────  Got it. I've added this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 3 tasks in the list. -──────────────────────────────────────────────────────────── - Nice! I've marked this task as done: +──────────────────────────────────────────────────────────── + Nice! I've marked this task as done: [T][✓] Answer CS2113 tutorial questions - ──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── Here are the tasks in your list: -1.[T][✓] Answer CS2113 tutorial questions -2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) -3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) -──────────────────────────────────────────────────────────── - Noted. I've removed this task: +1.[T][✓] Answer CS2113 tutorial questions +2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) +3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +──────────────────────────────────────────────────────────── + Noted. I've removed this task: [T][✓] Answer CS2113 tutorial questions Now you have 2 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 1 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 0 tasks in the list. - ──────────────────────────────────────────────────────────── -The list is empty. -──────────────────────────────────────────────────────────── - \ No newline at end of file + ──────────────────────────────────────────────────────────── +The list is empty. +──────────────────────────────────────────────────────────── + diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh index 90a963ba1..4ba143dcc 100755 --- a/text-ui-test/runtest.sh +++ b/text-ui-test/runtest.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash +# delete bin directory if it exist +# forsing to recompile the code +if [ -d "../bin" ] +then + rm -rf ../bin +fi + # create bin directory if it doesn't exist if [ ! -d "../bin" ] then @@ -23,11 +30,15 @@ fi java -classpath ../bin org/ajay/Jarvis < input.txt > ACTUAL.TXT # convert to UNIX format -cp EXPECTED.TXT EXPECTED-UNIX.TXT -dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT +# cp EXPECTED.TXT EXPECTED-UNIX.TXT +# dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT # compare the output to the expected output -diff ACTUAL.TXT EXPECTED-UNIX.TXT +# -b, --ignore-space-change +# ignore changes in the amount of white space +# -B, --ignore-blank-lines +# ignore changes whose lines are all blank +diff -bB ACTUAL.TXT EXPECTED.TXT if [ $? -eq 0 ] then echo "Test result: PASSED" From db87a4cb354df025711a777ed80074e328bdd24f Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Tue, 24 Sep 2024 15:39:08 +0800 Subject: [PATCH 53/88] Clean Task Class and Add TaskList --- src/main/java/org/ajay/task/Task.java | 73 +-------------- src/main/java/org/ajay/task/TaskList.java | 107 ++++++++++++++++++++++ 2 files changed, 112 insertions(+), 68 deletions(-) create mode 100644 src/main/java/org/ajay/task/TaskList.java diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/task/Task.java index af539c94d..9f81ad927 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/task/Task.java @@ -1,9 +1,7 @@ package org.ajay.task; -import java.util.ArrayList; import org.ajay.exceptions.EmptyArgumentException; import org.ajay.exceptions.Error; -import org.ajay.exceptions.IllegalArgumentException; public abstract class Task { public final static String MARK_COMMAND_STRING = "mark"; @@ -88,21 +86,6 @@ public void markAsDone() { System.out.println("Nice! I've marked this task as done: \n " + toString()); } - /** - * Marks the task as done. - * - * @param taskList list of tasks - * @param taskNumber number of the task to be marked as done - */ - public static void markAsDone(Task[] taskList, int taskNumber) { - taskList[taskNumber - 1].markAsDone(); // Mark the task as done - } - - public static void markAsDone(ArrayList taskList, int taskNumber) { - // taskList[taskNumber - 1].markAsDone(); // Mark the task as done - taskList.get(taskNumber - 1).markAsDone(); - } - /** * Marks the task as not done. */ @@ -112,32 +95,7 @@ public void markAsUndone() { System.out.println("OK, I've marked this task as not done yet: \n " + this.toString()); } - /** - * Marks the task as not done. - * - * @param taskList list of tasks - * @param taskNumber number of the task to be marked as not done - */ - public static void markAsUndone(Task[] taskList, int taskNumber) { - taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done - } - - public static void markAsUndone(ArrayList taskList, int taskNumber) { - // taskList[taskNumber - 1].markAsUndone(); // Mark the task as not done - taskList.get(taskNumber - 1).markAsUndone(); - } - public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { - - if (taskNumber > numberOfTasks) { - throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); - } - - System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); - taskList.remove(taskNumber - 1); - numberOfTasks--; - printNumberOfTasks(); - } /** * Returns the number of tasks in the list. @@ -148,6 +106,10 @@ public static int getNumberOfTasks() { return numberOfTasks; } + public static int setNumberOfTasks(int num) { + return numberOfTasks = num; + } + /** * Prints the number of tasks in the list. */ @@ -167,32 +129,7 @@ public String toString() { public abstract String saveTaskString(); - // public abstract String loadTaskString(); - /** - * Prints all the tasks in the list. - * - * @param taskList list of tasks - */ - public static void printAllTasks(Task[] taskList) { - if (getNumberOfTasks() == 0) { - System.out.println("The list is empty."); - } else { - System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { - System.out.println((i + 1) + "." + taskList[i].toString()); - } - } - } - public static void printAllTasks(ArrayList taskList) { - if (getNumberOfTasks() == 0) { - System.out.println("The list is empty."); - } else { - System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { - System.out.println((i + 1) + "." + taskList.get(i).toString()); - } - } - } + } diff --git a/src/main/java/org/ajay/task/TaskList.java b/src/main/java/org/ajay/task/TaskList.java new file mode 100644 index 000000000..4b757d7ab --- /dev/null +++ b/src/main/java/org/ajay/task/TaskList.java @@ -0,0 +1,107 @@ +package org.ajay.task; + +import java.util.ArrayList; +import org.ajay.exceptions.Error; +import org.ajay.ui.Ui; + +public class TaskList { + + public static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks + + /** + * Adds a task to the list. + * + * @param task task to be added + */ + public static void addTask(Task task) { + taskList.add(task); + } + + /** + * Marks the task as done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as done + */ + public static void markAsDone( int taskNumber) { + + taskList.get(taskNumber - 1).markAsDone(); + } + + public static void markAsDone( String task) { + int taskNumberMark = Integer.parseInt(task); // Get the task number + + taskList.get(taskNumberMark - 1).markAsDone(); + } + + public static void markAsDone(ArrayList taskList, int taskNumber) { + + taskList.get(taskNumber - 1).markAsDone(); + } + + /** + * Marks the task as not done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as not done + */ + public static void markAsUndone(int taskNumber) { + + taskList.get(taskNumber - 1).markAsUndone(); + } + + public static void markAsUndone(String task) { + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + + taskList.get(taskNumberUnmark - 1).markAsUndone(); + } + + public static void markAsUndone(ArrayList taskList, int taskNumber) { + + taskList.get(taskNumber - 1).markAsUndone(); + } + + public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { + + if (taskNumber > Task.getNumberOfTasks()) { + throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + } + + System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + taskList.remove(taskNumber - 1); + Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); + Task.printNumberOfTasks(); + } + + /** + * Prints all the tasks in the list. + * + * @param taskList list of tasks + */ + public static void printAllTasks(ArrayList taskList) { + if (Task.getNumberOfTasks() == 0) { + Ui.printWarning("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + Ui.printSuccess((i + 1) + "." + taskList.get(i).toString()); + } + } + } + + /** + * Prints all the tasks in the list. + * + * @param taskList list of tasks + */ + public static void printAllTasks() { + if (Task.getNumberOfTasks() == 0) { + Ui.printWarning("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + Ui.printSuccess((i + 1) + "." + taskList.get(i).toString()); + } + } + } +} From f7fbb98b97561b8cd659be1547680b81b6dc3656 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Tue, 24 Sep 2024 15:39:34 +0800 Subject: [PATCH 54/88] Add Parser and Constants --- src/main/java/org/ajay/utils/Constants.java | 7 ++ src/main/java/org/ajay/utils/Parser.java | 119 ++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 src/main/java/org/ajay/utils/Constants.java create mode 100644 src/main/java/org/ajay/utils/Parser.java diff --git a/src/main/java/org/ajay/utils/Constants.java b/src/main/java/org/ajay/utils/Constants.java new file mode 100644 index 000000000..2606c1456 --- /dev/null +++ b/src/main/java/org/ajay/utils/Constants.java @@ -0,0 +1,7 @@ +package org.ajay.utils; + +public class Constants { + // Constants + public static final String chatBotName = "Jarvis"; // Name of the chatbot + +} diff --git a/src/main/java/org/ajay/utils/Parser.java b/src/main/java/org/ajay/utils/Parser.java new file mode 100644 index 000000000..6ff7ec344 --- /dev/null +++ b/src/main/java/org/ajay/utils/Parser.java @@ -0,0 +1,119 @@ +package org.ajay.utils; + +import java.util.NoSuchElementException; +import java.util.Scanner; +import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.exceptions.Error; +import org.ajay.exceptions.IllegalCommandException; +import org.ajay.exceptions.InvalidCommandFormatException; +import org.ajay.task.Deadline; +import org.ajay.task.Event; +import org.ajay.task.Task; +import org.ajay.task.TaskList; +import org.ajay.task.Todo; +import org.ajay.ui.Ui; + +public class Parser { + + public static String command; // Variable to store the command + public static String task; // Variable to store the task + + /** + * Splits the command and task from the input. + * + * @param lineBufferString + */ + public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { + if (lineBufferString.isEmpty()) { + throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); + } + + if (lineBufferString.contains(" ")) { + command = lineBufferString.split(" ")[0]; + task = lineBufferString.substring(command.length() + 1); + } else { + command = lineBufferString; + task = null; + } + } + + + /** + * Reads the input from the user and processes it. + * + * @param in + * @param lineBufferString + */ + public static void readInput(Scanner in, String lineBufferString) { + try { + Ui.printPrompt(); // Print the prompt to the console + lineBufferString = in.nextLine(); + splitCommandAndTask(lineBufferString); + + switch (command) { + case Ui.EXIT_STRING: // Exit the program + in.close(); + Ui.printGoodbyeMsgs(); + break; + case Ui.EXIT_STRING_ALT: // Habit of typing exit to exit the program + in.close(); + Ui.printGoodbyeMsgs(); + break; + case Task.LIST_COMMAND_STRING: // List all the tasks + Ui.printBreakLine(); + TaskList.printAllTasks(); + Ui.printBreakLine(); + break; + case Todo.COMMAND_STRING: // Add a todo task + // taskList[Task.getNumberOfTasks()] = new Todo(task); + TaskList.addTask(new Todo(task)); + Ui.printBreakLine(); + + Storage.saveTaskList(TaskList.taskList); + break; + case Deadline.COMMAND_STRING: // Add a deadline task + // taskList[Task.getNumberOfTasks()] = new Deadline(task); + TaskList.addTask(new Deadline(task)); + Ui.printBreakLine(); + + Storage.saveTaskList(TaskList.taskList); + break; + case Event.COMMAND_STRING: // Add an event task + // taskList[Task.getNumberOfTasks()] = new Event(task); + TaskList.addTask(new Event(task)); + Ui.printBreakLine(); + + Storage.saveTaskList(TaskList.taskList); + break; + case Task.MARK_COMMAND_STRING: // Mark the task as done + TaskList.markAsDone(task); + + Storage.saveTaskList(TaskList.taskList); + break; + case Task.UNMARK_COMMAND_STRING: // Mark the task as undone + TaskList.markAsUndone(task); + + Storage.saveTaskList(TaskList.taskList); + break; + case Task.DELETE_COMMAND_STRING: // Delete the task + int taskNumberDelete = Integer.parseInt(task); // Get the task number + TaskList.deleteTask(TaskList.taskList, taskNumberDelete); // Delete the task + + Storage.saveTaskList(TaskList.taskList); + break; + default: + throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); + } + + readInput(in, lineBufferString); // Recursively call the function to read the next input + } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException e) { + Ui.printBreakLine(); + Ui.printExceptions(e.getMessage()); + Ui.printBreakLine(); + readInput(in, lineBufferString); + } catch (NoSuchElementException e) { + // FIXME: Facing unexpected NoSuchElementException error + } + + } +} From 637f85e1cdcb9ccd6aa697adb80ac4201f75f683 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Tue, 24 Sep 2024 15:40:01 +0800 Subject: [PATCH 55/88] Rename Prompt to Ui --- src/main/java/org/ajay/Ui/Prompt.java | 158 -------------------------- 1 file changed, 158 deletions(-) delete mode 100644 src/main/java/org/ajay/Ui/Prompt.java diff --git a/src/main/java/org/ajay/Ui/Prompt.java b/src/main/java/org/ajay/Ui/Prompt.java deleted file mode 100644 index 91d92802e..000000000 --- a/src/main/java/org/ajay/Ui/Prompt.java +++ /dev/null @@ -1,158 +0,0 @@ -package org.ajay.Ui; - -import org.ajay.Jarvis; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; - -public class Prompt { - public static final String ANSI_RESET = "\u001B[0m"; - public static final String ANSI_BLACK = "\u001B[30m"; - public static final String ANSI_RED = "\u001B[31m"; - public static final String ANSI_GREEN = "\u001B[32m"; - public static final String ANSI_YELLOW = "\u001B[33m"; - public static final String ANSI_BLUE = "\u001B[34m"; - public static final String ANSI_PURPLE = "\u001B[35m"; - public static final String ANSI_CYAN = "\u001B[36m"; - public static final String ANSI_WHITE = "\u001B[37m"; - - public final static String EXIT_STRING = "bye"; - public final static String EXIT_STRING_ALT = "exit"; - - public static String command; // Variable to store the command - public static String task; // Variable to store the task - - static String logo = """ - @@@@@@@@@@@@@@@@@@@@@@@ - @@% @@ @@ @@@ - @@ @@ @@ @@ - @@ @@ @@ @@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @ *@ - @@@ @@@ - @ @@@ @@@ @ - @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ - @ @@@ @@ @@ @@@ @ - @ *@@ @@ @( @@( @ - @ ,@@@@ @@ @@ @@@@ @ - @ @@@@@ %@@ @@ @ @@& @@@@@ @ - @@@@ @@@ /@ @@ @@@ *@@@@/ - @@ @@@ @@ @@@ @@ - @@ @@& (@@ @@ - @ @@@@@@@@ @@@@@@@ @ - @@ @@@@* @@, @@ @@@@ @& - @@ @@@ @@@ @@ - @@@ @@ @@ @@# - @@@@ @@@ @@@ @@@@ - @@@@@@@@@@@@@ - - ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ - ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ - ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ - ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ - ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ - ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - """; - - /** - * Prints a break line to the console. - */ - public static void printBreakLine() { - System.out.println(ANSI_BLACK + "────────────────────────────────────────────────────────────" + ANSI_RESET); - } - - /** - * Gracefully exits the program. - * - * @param status - */ - public static void exit(int status) { - System.exit(status); // Print the goodbye message - } // Print the goodbye message - - /** - * Prints the prompt to the console for visual marker for user to type. - */ - public static void printPrompt() { - System.out.print(" "); - } - - public static void printLogo() { - System.out.println("Hello from\n" + ANSI_BLUE + logo + ANSI_RESET); - } - - public static void printError(String errorMsg) { - System.out.println(ANSI_RED + errorMsg + ANSI_RESET); - } - - public static void printSuccess(String successMsg) { - System.out.println(ANSI_GREEN + successMsg + ANSI_RESET); - } - - public static void printInfo(String infoMsg) { - System.out.println(ANSI_CYAN + infoMsg + ANSI_RESET); - } - - public static void printWarning(String warningMsg) { - System.out.println(ANSI_YELLOW + warningMsg + ANSI_RESET); - } - - /** - * Prints the greeting messages to the console. - */ - public static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + ANSI_YELLOW + Jarvis.chatBotName + ANSI_RESET + "\nWhat can I do for you?"}; // List of greetings - - // Print the greetings - for (String greeting : greetings) { - printBreakLine(); // Print a break line before each greeting - System.out.println(greeting); // Print the greeting - } - printBreakLine(); - } - - /** - * Prints the goodbye messages to the console. - */ - public static void printGoodbyeMsgs() { - String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages - // List of goodbye messages - // Print the goodbye messages - for (String goodbye : goodbyes) { - printBreakLine(); - System.out.println(goodbye); // Print the goodbye message - } // Print the goodbye message - printBreakLine(); - exit(0); - } - - public static void printHelpMsgs() { - String[] helpMsgs = {"Here are the list of commands you can use:", "1. todo - Adds a todo task to the list", "2. deadline /by - Adds a deadline task to the list", "3. event /from /to - Adds an event task to the list", "4. list - Lists all the tasks in the list", "5. done - Marks the task as done", "6. delete - Deletes the task from the list", "7. find - Finds the tasks with the keyword", "8. help - Shows the list of commands", "9. bye | exit - Exits the program" - }; - - // Print the help messages - for (String helpMsg : helpMsgs) { - printBreakLine(); - System.out.println(helpMsg); // Print the help message - } // Print the help message - printBreakLine(); - } - - /** - * Splits the command and task from the input. - * - * @param lineBufferString - */ - public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { - if (lineBufferString.isEmpty()) { - throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); - } - - if (lineBufferString.contains(" ")) { - Prompt.command = lineBufferString.split(" ")[0]; - Prompt.task = lineBufferString.substring(Prompt.command.length() + 1); - } else { - Prompt.command = lineBufferString; - Prompt.task = null; - } - } -} From 1ab279bf23f699edb79bf8e633e90bc908eec746 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Tue, 24 Sep 2024 15:40:23 +0800 Subject: [PATCH 56/88] Cleanup Main --- src/main/java/org/ajay/Jarvis.java | 105 ++-------------------- src/main/java/org/ajay/ui/Ui.java | 139 +++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+), 98 deletions(-) create mode 100644 src/main/java/org/ajay/ui/Ui.java diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index e8f44c3db..6de11ae52 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -1,122 +1,31 @@ package org.ajay; -import java.util.ArrayList; -import java.util.NoSuchElementException; import java.util.Scanner; -import org.ajay.Ui.Prompt; import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; import org.ajay.exceptions.IllegalArgumentException; -import org.ajay.exceptions.IllegalCommandException; -import org.ajay.exceptions.InvalidCommandFormatException; -import org.ajay.task.Deadline; -import org.ajay.task.Event; -import org.ajay.task.Task; -import org.ajay.task.Todo; +import org.ajay.task.TaskList; +import org.ajay.ui.Ui; +import org.ajay.utils.Parser; import org.ajay.utils.Storage; public class Jarvis { - // Constants - public static final String chatBotName = "Jarvis"; // Name of the chatbot - private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks - /** - * Reads the input from the user and processes it. - * - * @param in - * @param lineBufferString - */ - public static void readInput(Scanner in, String lineBufferString) { - try { - Prompt.printPrompt(); // Print the prompt to the console - lineBufferString = in.nextLine(); - Prompt.splitCommandAndTask(lineBufferString); - - switch (Prompt.command) { - case Prompt.EXIT_STRING: // Exit the program - in.close(); - Prompt.printGoodbyeMsgs(); - break; - case Prompt.EXIT_STRING_ALT: // Habit of typing exit to exit the program - in.close(); - Prompt.printGoodbyeMsgs(); - break; - case Task.LIST_COMMAND_STRING: // List all the tasks - Prompt.printBreakLine(); - Task.printAllTasks(taskList); - Prompt.printBreakLine(); - break; - case Todo.COMMAND_STRING: // Add a todo task - // taskList[Task.getNumberOfTasks()] = new Todo(task); - taskList.add(new Todo(Prompt.task)); - Prompt.printBreakLine(); - - Storage.saveTaskList(taskList); - break; - case Deadline.COMMAND_STRING: // Add a deadline task - // taskList[Task.getNumberOfTasks()] = new Deadline(task); - taskList.add(new Deadline(Prompt.task)); - Prompt.printBreakLine(); - - Storage.saveTaskList(taskList); - break; - case Event.COMMAND_STRING: // Add an event task - // taskList[Task.getNumberOfTasks()] = new Event(task); - taskList.add(new Event(Prompt.task)); - Prompt.printBreakLine(); - - Storage.saveTaskList(taskList); - break; - case Task.MARK_COMMAND_STRING: // Mark the task as done - int taskNumberMark = Integer.parseInt(Prompt.task); // Get the task number - Task.markAsDone(taskList, taskNumberMark); // Mark the task as done - - Storage.saveTaskList(taskList); - break; - case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - int taskNumberUnmark = Integer.parseInt(Prompt.task); // Get the task number - Task.markAsUndone(taskList, taskNumberUnmark); // Mark the task as undone - - Storage.saveTaskList(taskList); - break; - case Task.DELETE_COMMAND_STRING: // Delete the task - int taskNumberDelete = Integer.parseInt(Prompt.task); // Get the task number - Task.deleteTask(taskList, taskNumberDelete); // Delete the task - - Storage.saveTaskList(taskList); - break; - default: - throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); - } - - readInput(in, lineBufferString); // Recursively call the function to read the next input - } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException | - IllegalArgumentException e) { - Prompt.printBreakLine(); - System.out.println(e); - Prompt.printBreakLine(); - readInput(in, lineBufferString); - } catch (NoSuchElementException e) { - // FIXME: Facing unexpected NoSuchElementException error - } - - } public static void main(String[] args) { String lineBufferString = ""; // Buffer to store the input from the user Scanner in = new Scanner(System.in); // Scanner object to read input from the user - Prompt.printLogo(); - Prompt.printGreetingMsgs(); + Ui.printLogo(); + Ui.printGreetingMsgs(); try { - Storage.loadTaskList(taskList); + Storage.loadTaskList(TaskList.taskList); } catch (EmptyArgumentException | IllegalArgumentException e) { e.printStackTrace(); } - readInput(in, lineBufferString); // Read the input from the user + Parser.readInput(in, lineBufferString); // Read the input from the user } } diff --git a/src/main/java/org/ajay/ui/Ui.java b/src/main/java/org/ajay/ui/Ui.java new file mode 100644 index 000000000..608d6a863 --- /dev/null +++ b/src/main/java/org/ajay/ui/Ui.java @@ -0,0 +1,139 @@ +package org.ajay.ui; + +import org.ajay.utils.Constants; + + +public class Ui { + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_YELLOW = "\u001B[33m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; + public static final String ANSI_WHITE = "\u001B[37m"; + + public final static String EXIT_STRING = "bye"; + public final static String EXIT_STRING_ALT = "exit"; + + + + static String logo = """ + @@@@@@@@@@@@@@@@@@@@@@@ + @@% @@ @@ @@@ + @@ @@ @@ @@ + @@ @@ @@ @@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @ *@ + @@@ @@@ + @ @@@ @@@ @ + @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ + @ @@@ @@ @@ @@@ @ + @ *@@ @@ @( @@( @ + @ ,@@@@ @@ @@ @@@@ @ + @ @@@@@ %@@ @@ @ @@& @@@@@ @ + @@@@ @@@ /@ @@ @@@ *@@@@/ + @@ @@@ @@ @@@ @@ + @@ @@& (@@ @@ + @ @@@@@@@@ @@@@@@@ @ + @@ @@@@* @@, @@ @@@@ @& + @@ @@@ @@@ @@ + @@@ @@ @@ @@# + @@@@ @@@ @@@ @@@@ + @@@@@@@@@@@@@ + + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ + ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ + ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ + """; + + /** + * Prints a break line to the console. + */ + public static void printBreakLine() { + System.out.println(ANSI_BLACK + "────────────────────────────────────────────────────────────" + ANSI_RESET); + } + + /** + * Gracefully exits the program. + * + * @param status + */ + public static void exit(int status) { + System.exit(status); // Print the goodbye message + } // Print the goodbye message + + /** + * Prints the prompt to the console for visual marker for user to type. + */ + public static void printPrompt() { + System.out.print(" "); + } + + public static void printLogo() { + System.out.println("Hello from\n" + ANSI_BLUE + logo + ANSI_RESET); + } + + public static void printExceptions(String errorMsg) { + System.out.println(ANSI_RED + errorMsg + ANSI_RESET); + } + + public static void printSuccess(String successMsg) { + System.out.println(ANSI_GREEN + successMsg + ANSI_RESET); + } + + public static void printInfo(String infoMsg) { + System.out.println(ANSI_CYAN + infoMsg + ANSI_RESET); + } + + public static void printWarning(String warningMsg) { + System.out.println(ANSI_YELLOW + warningMsg + ANSI_RESET); + } + + /** + * Prints the greeting messages to the console. + */ + public static void printGreetingMsgs() { + String[] greetings = {"Hello! I'm " + ANSI_YELLOW + Constants.chatBotName + ANSI_RESET + "\nWhat can I do for you?"}; // List of greetings + + // Print the greetings + for (String greeting : greetings) { + printBreakLine(); // Print a break line before each greeting + System.out.println(greeting); // Print the greeting + } + printBreakLine(); + } + + /** + * Prints the goodbye messages to the console. + */ + public static void printGoodbyeMsgs() { + String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages + // List of goodbye messages + // Print the goodbye messages + for (String goodbye : goodbyes) { + printBreakLine(); + System.out.println(goodbye); // Print the goodbye message + } // Print the goodbye message + printBreakLine(); + exit(0); + } + + public static void printHelpMsgs() { + String[] helpMsgs = {"Here are the list of commands you can use:", "1. todo - Adds a todo task to the list", "2. deadline /by - Adds a deadline task to the list", "3. event /from /to - Adds an event task to the list", "4. list - Lists all the tasks in the list", "5. done - Marks the task as done", "6. delete - Deletes the task from the list", "7. find - Finds the tasks with the keyword", "8. help - Shows the list of commands", "9. bye | exit - Exits the program" + }; + + // Print the help messages + for (String helpMsg : helpMsgs) { + printBreakLine(); + System.out.println(helpMsg); // Print the help message + } // Print the help message + printBreakLine(); + } + + +} From 483f4cb7dbe264315a2f854314a3c651f976d44a Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 17:15:54 +0800 Subject: [PATCH 57/88] Restructure code to make the code more OOP --- src/main/java/org/ajay/Jarvis.java | 54 +++++-- src/main/java/org/ajay/common/Constants.java | 11 ++ src/main/java/org/ajay/common/Messages.java | 45 ++++++ src/main/java/org/ajay/parser/Parser.java | 157 +++++++++++++++++++ src/main/java/org/ajay/storage/Storage.java | 107 +++++++++++++ src/main/java/org/ajay/ui/Color.java | 13 ++ src/main/java/org/ajay/ui/TextUi.java | 94 +++++++++++ src/main/java/org/ajay/ui/Ui.java | 139 ---------------- src/main/java/org/ajay/utils/Constants.java | 7 - src/main/java/org/ajay/utils/Parser.java | 119 -------------- src/main/java/org/ajay/utils/Storage.java | 88 ----------- 11 files changed, 466 insertions(+), 368 deletions(-) create mode 100644 src/main/java/org/ajay/common/Constants.java create mode 100644 src/main/java/org/ajay/common/Messages.java create mode 100644 src/main/java/org/ajay/parser/Parser.java create mode 100644 src/main/java/org/ajay/storage/Storage.java create mode 100644 src/main/java/org/ajay/ui/Color.java create mode 100644 src/main/java/org/ajay/ui/TextUi.java delete mode 100644 src/main/java/org/ajay/ui/Ui.java delete mode 100644 src/main/java/org/ajay/utils/Constants.java delete mode 100644 src/main/java/org/ajay/utils/Parser.java delete mode 100644 src/main/java/org/ajay/utils/Storage.java diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 6de11ae52..70baeeb8e 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -1,31 +1,55 @@ package org.ajay; import java.util.Scanner; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.IllegalArgumentException; -import org.ajay.task.TaskList; -import org.ajay.ui.Ui; -import org.ajay.utils.Parser; -import org.ajay.utils.Storage; +import org.ajay.commands.Command; +import org.ajay.common.Constants; +import org.ajay.data.TaskList; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.IllegalArgumentException; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; public class Jarvis { + private Storage storage; + private TextUi ui; + private TaskList tasks; + public Jarvis(String filePath) { + ui = new TextUi(); + storage = new Storage(filePath); + try { + tasks = new TaskList(storage.load()); + } catch (EmptyArgumentException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO: Update me + e.printStackTrace(); + } + } - public static void main(String[] args) { - String lineBufferString = ""; // Buffer to store the input from the user + public void run() { + boolean isExit = false; + + ui.printLogo(); + ui.printGreetingMsgs(); Scanner in = new Scanner(System.in); // Scanner object to read input from the user + while (!isExit) { - Ui.printLogo(); - Ui.printGreetingMsgs(); + Parser.readInput(in); // Read the input from the user + + Command c = Parser.parseCommand(Parser.command, Parser.task); // Parse the input + c.execute(tasks, ui, storage); // Execute the command + isExit = c.getExitBool(); // Check if the command is an exit command - try { - Storage.loadTaskList(TaskList.taskList); - } catch (EmptyArgumentException | IllegalArgumentException e) { - e.printStackTrace(); } + in.close(); - Parser.readInput(in, lineBufferString); // Read the input from the user + } + + public static void main(String[] args) { + new Jarvis(Constants.FILE_PATH).run(); } } diff --git a/src/main/java/org/ajay/common/Constants.java b/src/main/java/org/ajay/common/Constants.java new file mode 100644 index 000000000..081c87038 --- /dev/null +++ b/src/main/java/org/ajay/common/Constants.java @@ -0,0 +1,11 @@ +package org.ajay.common; + +public class Constants { + // Constants + public static final String CHAT_BOT_NAME = "Jarvis"; // Name of the chatbot + + public static final String FILE_PATH = "data/jarvis.txt"; // File path to store the tasks + + // Constants for the commands + public final static String EXIT_COMMAND_ALT = "bye"; +} diff --git a/src/main/java/org/ajay/common/Messages.java b/src/main/java/org/ajay/common/Messages.java new file mode 100644 index 000000000..3c109ba79 --- /dev/null +++ b/src/main/java/org/ajay/common/Messages.java @@ -0,0 +1,45 @@ +package org.ajay.common; + +import org.ajay.ui.Color; + +public class Messages { + + static final String LOGO = """ + @@@@@@@@@@@@@@@@@@@@@@@ + @@% @@ @@ @@@ + @@ @@ @@ @@ + @@ @@ @@ @@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @ *@ + @@@ @@@ + @ @@@ @@@ @ + @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ + @ @@@ @@ @@ @@@ @ + @ *@@ @@ @( @@( @ + @ ,@@@@ @@ @@ @@@@ @ + @ @@@@@ %@@ @@ @ @@& @@@@@ @ + @@@@ @@@ /@ @@ @@@ *@@@@/ + @@ @@@ @@ @@@ @@ + @@ @@& (@@ @@ + @ @@@@@@@@ @@@@@@@ @ + @@ @@@@* @@, @@ @@@@ @& + @@ @@@ @@@ @@ + @@@ @@ @@ @@# + @@@@ @@@ @@@ @@@@ + @@@@@@@@@@@@@ + + ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ + ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ + ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ + ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ + ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ + ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ + """; + + public static final String MESSAGE_PROMPT = Color.ANSI_GREEN + " " + Color.ANSI_RESET; + public static final String MESSAGE_BREAKLINE = Color.ANSI_BLACK + "────────────────────────────────────────────────────────────" + Color.ANSI_RESET; + public static final String MESSAGE_EXIT = "Bye. Hope to see you again soon!"; + public static final String MESSAGE_LOGO = "Hello from\n" + Color.ANSI_BLUE + LOGO + Color.ANSI_RESET; + public static final String MESSAGE_WELCOME = "Hello! I'm " + Color.ANSI_YELLOW + Constants.CHAT_BOT_NAME + Color.ANSI_RESET + "\nWhat can I do for you?"; + public static final String MESSAGE_HELP = "Here are the list of commands you can use: \n1. todo - Adds a todo task to the list \n2. deadline /by - Adds a deadline task to the list \n3. event /from /to - Adds an event task to the list \n4. list - Lists all the tasks in the list \n5. done - Marks the task as done \n6. delete - Deletes the task from the list \n7. find - Finds the tasks with the keyword \n8. help - Shows the list of commands \n9. bye | exit - Exits the program"; +} diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java new file mode 100644 index 000000000..025886634 --- /dev/null +++ b/src/main/java/org/ajay/parser/Parser.java @@ -0,0 +1,157 @@ +package org.ajay.parser; + +import java.util.NoSuchElementException; +import java.util.Scanner; +import org.ajay.commands.Command; +import org.ajay.commands.DeadlineCommand; +import org.ajay.commands.DeleteCommand; +import org.ajay.commands.EventCommand; +import org.ajay.commands.ExitCommand; +import org.ajay.commands.HelpCommand; +import org.ajay.commands.ListCommand; +import org.ajay.commands.MarkCommand; +import org.ajay.commands.TodoCommand; +import org.ajay.commands.UnmarkCommand; +import org.ajay.common.Constants; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.Error; +import org.ajay.ui.TextUi; + +public class Parser { + + public static String command; // Variable to store the command + public static String task; // Variable to store the task + + // public static String lineBufferString = ""; // Buffer to store the input from + // the user + + /** + * Splits the command and task from the input. + * + * @param lineBufferString + */ + public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { + if (lineBufferString.isEmpty()) { + throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); + } + + if (lineBufferString.contains(" ")) { + command = lineBufferString.split(" ")[0]; + task = lineBufferString.substring(command.length() + 1); + } else { + command = lineBufferString; + task = null; + } + } + + /** + * Reads the input from the user and processes it. + * + * @param in + * @param lineBufferString + */ + public static void readInput(Scanner in) { + + try { + TextUi.printPrompt(); // Print the prompt to the console + String lineBufferString = in.nextLine(); + splitCommandAndTask(lineBufferString); + + // switch (command) { + // case Ui.EXIT_STRING: // Exit the program + // in.close(); + // Ui.printGoodbyeMsgs(); + // break; + // case Ui.EXIT_STRING_ALT: // Habit of typing exit to exit the program + // in.close(); + // Ui.printGoodbyeMsgs(); + // break; + // case Task.LIST_COMMAND_STRING: // List all the tasks + // Ui.printBreakLine(); + // TaskList.printAllTasks(); + // Ui.printBreakLine(); + // break; + // case Todo.COMMAND_STRING: // Add a todo task + // // taskList[Task.getNumberOfTasks()] = new Todo(task); + // TaskList.addTask(new Todo(task)); + // Ui.printBreakLine(); + + // Storage.saveTaskList(TaskList.taskList); + // break; + // case Deadline.COMMAND_STRING: // Add a deadline task + // // taskList[Task.getNumberOfTasks()] = new Deadline(task); + // TaskList.addTask(new Deadline(task)); + // Ui.printBreakLine(); + + // Storage.saveTaskList(TaskList.taskList); + // break; + // case Event.COMMAND_STRING: // Add an event task + // // taskList[Task.getNumberOfTasks()] = new Event(task); + // TaskList.addTask(new Event(task)); + // Ui.printBreakLine(); + + // Storage.saveTaskList(TaskList.taskList); + // break; + // case Task.MARK_COMMAND_STRING: // Mark the task as done + // TaskList.markAsDone(task); + + // Storage.saveTaskList(TaskList.taskList); + // break; + // case Task.UNMARK_COMMAND_STRING: // Mark the task as undone + // TaskList.markAsUndone(task); + + // Storage.saveTaskList(TaskList.taskList); + // break; + // case Task.DELETE_COMMAND_STRING: // Delete the task + // int taskNumberDelete = Integer.parseInt(task); // Get the task number + // TaskList.deleteTask(TaskList.taskList, taskNumberDelete); // Delete the task + + // Storage.saveTaskList(TaskList.taskList); + // break; + // default: + // throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); + // } + + // readInput(); // Recursively call the function to read the next input + } catch (EmptyArgumentException e) { + TextUi.printBreakLine(); + TextUi.printExceptions(e.getMessage()); + TextUi.printBreakLine(); + } + // catch (InvalidCommandFormatException e) { + // // TODO: Update me + // } catch (IllegalCommandException e) { + // // TODO: Update me + // } + catch (NoSuchElementException e) { + // FIXME: Facing unexpected NoSuchElementException error + } + + } + + public static Command parseCommand(String command, String task) { + switch (command) { + case ExitCommand.COMMAND_WORD: // Exit the program + return new ExitCommand(); + case Constants.EXIT_COMMAND_ALT: // Habit of typing exit to exit the program + return new ExitCommand(); + case ListCommand.COMMAND_WORD: // List all the tasks + return new ListCommand(); + case TodoCommand.COMMAND_WORD: // Add a todo task + return new TodoCommand(); + case DeadlineCommand.COMMAND_WORD: // Add a deadline task + return new DeadlineCommand(); + case EventCommand.COMMAND_WORD: // Add an event task + return new EventCommand(); + case MarkCommand.COMMAND_WORD: // Mark the task as done + return new MarkCommand(); + case UnmarkCommand.COMMAND_WORD: // Mark the task as undone + return new UnmarkCommand(); + case DeleteCommand.COMMAND_WORD: // Delete the task + return new DeleteCommand(); + default: + return new HelpCommand(); + } + + } +} diff --git a/src/main/java/org/ajay/storage/Storage.java b/src/main/java/org/ajay/storage/Storage.java new file mode 100644 index 000000000..bacfef18d --- /dev/null +++ b/src/main/java/org/ajay/storage/Storage.java @@ -0,0 +1,107 @@ +package org.ajay.storage; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.IllegalArgumentException; +import org.ajay.data.task.Deadline; +import org.ajay.data.task.Event; +import org.ajay.data.task.Task; +import org.ajay.data.task.Todo; + +public class Storage { + + private static String filePath; + + public static String getFilePath() { + return filePath; + } + + public static void setFilePath(String filePath) { + Storage.filePath = filePath; + } + + public Storage() {} + + public Storage(String filePath) { + setFilePath(filePath); + } + + public ArrayList load() throws EmptyArgumentException, IllegalArgumentException { + ArrayList taskList = new ArrayList<>(); + + // Check if the file exists + File f = new File(filePath); + if (!f.exists()) { + try { + f.createNewFile(); + } catch (IOException e) { + // TODO: Update me + e.printStackTrace(); + } + } + + // Try block to check for exceptions + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = br.readLine()) != null) { + + // Splitting the data + String[] task = line.split(" \\| "); + + boolean isDone = false; + if (task[1].equals("1")) { + isDone = true; + } + + switch (task[0]) { + case Todo.TASK_STRING: + if (task.length < 3) { + throw new IllegalArgumentException("Importing todo task failed. Data is corrupted."); + } + + taskList.add(Todo.loadTaskString(isDone, task[2])); + break; + case Event.TASK_STRING: + if (task.length < 5) { + throw new IllegalArgumentException("Importing Event task failed. Data is corrupted."); + } + + taskList.add(Event.loadTaskString(isDone, task[2], task[3], task[4])); + break; + case Deadline.TASK_STRING: + if (task.length < 4) { + throw new IllegalArgumentException("Importing Deadline task failed. Data is corrupted."); + } + + taskList.add(Deadline.loadTaskString(isDone, task[2], task[3])); + break; + default: + throw new AssertionError(); + } + } + } catch (IOException e) { + System.out.println("Error while reading a file."); + } + + return taskList; + + } + + public static void saveTaskList(ArrayList taskList) { + try { + FileWriter fw = new FileWriter(filePath); + for (Task task : taskList) { + fw.write(task.saveTaskString() + "\n"); + } + fw.close(); + } catch (IOException e) { + System.out.println("Unable to write to file: " + filePath); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/ajay/ui/Color.java b/src/main/java/org/ajay/ui/Color.java new file mode 100644 index 000000000..3a04bc78b --- /dev/null +++ b/src/main/java/org/ajay/ui/Color.java @@ -0,0 +1,13 @@ +package org.ajay.ui; + +public class Color { + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_YELLOW = "\u001B[33m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; + public static final String ANSI_WHITE = "\u001B[37m"; +} diff --git a/src/main/java/org/ajay/ui/TextUi.java b/src/main/java/org/ajay/ui/TextUi.java new file mode 100644 index 000000000..bf5624df8 --- /dev/null +++ b/src/main/java/org/ajay/ui/TextUi.java @@ -0,0 +1,94 @@ +package org.ajay.ui; + +import org.ajay.common.Messages; + + +public class TextUi { + + + + + /** + * Prints a break line to the console. + */ + public static void printBreakLine() { + System.out.println(Messages.MESSAGE_BREAKLINE); + } + + /** + * Gracefully exits the program. + * + * @param status + */ + public static void exit(int status) { + System.exit(status); // Print the goodbye message + } // Print the goodbye message + + /** + * Prints the prompt to the console for visual marker for user to type. + */ + public static void printPrompt() { + System.out.print(Messages.MESSAGE_PROMPT); + } + + public void printLogo() { + System.out.println(Messages.MESSAGE_LOGO); + } + + public static void printExceptions(String errorMsg) { + System.out.println(Color.ANSI_RED + errorMsg + Color.ANSI_RESET); + } + + public static void printSuccess(String successMsg) { + System.out.println(Color.ANSI_GREEN + successMsg + Color.ANSI_RESET); + } + + public static void printInfo(String infoMsg) { + System.out.println(Color.ANSI_CYAN + infoMsg + Color.ANSI_RESET); + } + + public static void printWarning(String warningMsg) { + System.out.println(Color.ANSI_YELLOW + warningMsg + Color.ANSI_RESET); + } + + /** + * Prints the greeting messages to the console. + */ + public void printGreetingMsgs() { + String[] greetings = {Messages.MESSAGE_WELCOME}; // List of greetings + + // Print the greetings + for (String greeting : greetings) { + printBreakLine(); // Print a break line before each greeting + System.out.println(greeting); // Print the greeting + } + printBreakLine(); + } + + /** + * Prints the goodbye messages to the console. + */ + public void printGoodbyeMsgs() { + String[] goodbyes = {Messages.MESSAGE_EXIT}; // List of goodbye messages + // List of goodbye messages + // Print the goodbye messages + for (String goodbye : goodbyes) { + printBreakLine(); + System.out.println(goodbye); // Print the goodbye message + } // Print the goodbye message + printBreakLine(); + exit(0); + } + + public static void printHelpMsgs() { + String[] helpMsgs = {Messages.MESSAGE_HELP}; + printBreakLine(); + // Print the help messages + for (String helpMsg : helpMsgs) { + System.out.println(helpMsg); // Print the help message + } // Print the help message + printBreakLine(); + } + + +} diff --git a/src/main/java/org/ajay/ui/Ui.java b/src/main/java/org/ajay/ui/Ui.java deleted file mode 100644 index 608d6a863..000000000 --- a/src/main/java/org/ajay/ui/Ui.java +++ /dev/null @@ -1,139 +0,0 @@ -package org.ajay.ui; - -import org.ajay.utils.Constants; - - -public class Ui { - public static final String ANSI_RESET = "\u001B[0m"; - public static final String ANSI_BLACK = "\u001B[30m"; - public static final String ANSI_RED = "\u001B[31m"; - public static final String ANSI_GREEN = "\u001B[32m"; - public static final String ANSI_YELLOW = "\u001B[33m"; - public static final String ANSI_BLUE = "\u001B[34m"; - public static final String ANSI_PURPLE = "\u001B[35m"; - public static final String ANSI_CYAN = "\u001B[36m"; - public static final String ANSI_WHITE = "\u001B[37m"; - - public final static String EXIT_STRING = "bye"; - public final static String EXIT_STRING_ALT = "exit"; - - - - static String logo = """ - @@@@@@@@@@@@@@@@@@@@@@@ - @@% @@ @@ @@@ - @@ @@ @@ @@ - @@ @@ @@ @@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @ *@ - @@@ @@@ - @ @@@ @@@ @ - @& @@ @@@@@@@@@@@@@@@@@@@@@ @@. @@ - @ @@@ @@ @@ @@@ @ - @ *@@ @@ @( @@( @ - @ ,@@@@ @@ @@ @@@@ @ - @ @@@@@ %@@ @@ @ @@& @@@@@ @ - @@@@ @@@ /@ @@ @@@ *@@@@/ - @@ @@@ @@ @@@ @@ - @@ @@& (@@ @@ - @ @@@@@@@@ @@@@@@@ @ - @@ @@@@* @@, @@ @@@@ @& - @@ @@@ @@@ @@ - @@@ @@ @@ @@# - @@@@ @@@ @@@ @@@@ - @@@@@@@@@@@@@ - - ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ - ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ - ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ - ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ - ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ - ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - """; - - /** - * Prints a break line to the console. - */ - public static void printBreakLine() { - System.out.println(ANSI_BLACK + "────────────────────────────────────────────────────────────" + ANSI_RESET); - } - - /** - * Gracefully exits the program. - * - * @param status - */ - public static void exit(int status) { - System.exit(status); // Print the goodbye message - } // Print the goodbye message - - /** - * Prints the prompt to the console for visual marker for user to type. - */ - public static void printPrompt() { - System.out.print(" "); - } - - public static void printLogo() { - System.out.println("Hello from\n" + ANSI_BLUE + logo + ANSI_RESET); - } - - public static void printExceptions(String errorMsg) { - System.out.println(ANSI_RED + errorMsg + ANSI_RESET); - } - - public static void printSuccess(String successMsg) { - System.out.println(ANSI_GREEN + successMsg + ANSI_RESET); - } - - public static void printInfo(String infoMsg) { - System.out.println(ANSI_CYAN + infoMsg + ANSI_RESET); - } - - public static void printWarning(String warningMsg) { - System.out.println(ANSI_YELLOW + warningMsg + ANSI_RESET); - } - - /** - * Prints the greeting messages to the console. - */ - public static void printGreetingMsgs() { - String[] greetings = {"Hello! I'm " + ANSI_YELLOW + Constants.chatBotName + ANSI_RESET + "\nWhat can I do for you?"}; // List of greetings - - // Print the greetings - for (String greeting : greetings) { - printBreakLine(); // Print a break line before each greeting - System.out.println(greeting); // Print the greeting - } - printBreakLine(); - } - - /** - * Prints the goodbye messages to the console. - */ - public static void printGoodbyeMsgs() { - String[] goodbyes = {"Bye. Hope to see you again soon!"}; // List of goodbye messages - // List of goodbye messages - // Print the goodbye messages - for (String goodbye : goodbyes) { - printBreakLine(); - System.out.println(goodbye); // Print the goodbye message - } // Print the goodbye message - printBreakLine(); - exit(0); - } - - public static void printHelpMsgs() { - String[] helpMsgs = {"Here are the list of commands you can use:", "1. todo - Adds a todo task to the list", "2. deadline /by - Adds a deadline task to the list", "3. event /from /to - Adds an event task to the list", "4. list - Lists all the tasks in the list", "5. done - Marks the task as done", "6. delete - Deletes the task from the list", "7. find - Finds the tasks with the keyword", "8. help - Shows the list of commands", "9. bye | exit - Exits the program" - }; - - // Print the help messages - for (String helpMsg : helpMsgs) { - printBreakLine(); - System.out.println(helpMsg); // Print the help message - } // Print the help message - printBreakLine(); - } - - -} diff --git a/src/main/java/org/ajay/utils/Constants.java b/src/main/java/org/ajay/utils/Constants.java deleted file mode 100644 index 2606c1456..000000000 --- a/src/main/java/org/ajay/utils/Constants.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ajay.utils; - -public class Constants { - // Constants - public static final String chatBotName = "Jarvis"; // Name of the chatbot - -} diff --git a/src/main/java/org/ajay/utils/Parser.java b/src/main/java/org/ajay/utils/Parser.java deleted file mode 100644 index 6ff7ec344..000000000 --- a/src/main/java/org/ajay/utils/Parser.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.ajay.utils; - -import java.util.NoSuchElementException; -import java.util.Scanner; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; -import org.ajay.exceptions.IllegalCommandException; -import org.ajay.exceptions.InvalidCommandFormatException; -import org.ajay.task.Deadline; -import org.ajay.task.Event; -import org.ajay.task.Task; -import org.ajay.task.TaskList; -import org.ajay.task.Todo; -import org.ajay.ui.Ui; - -public class Parser { - - public static String command; // Variable to store the command - public static String task; // Variable to store the task - - /** - * Splits the command and task from the input. - * - * @param lineBufferString - */ - public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { - if (lineBufferString.isEmpty()) { - throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); - } - - if (lineBufferString.contains(" ")) { - command = lineBufferString.split(" ")[0]; - task = lineBufferString.substring(command.length() + 1); - } else { - command = lineBufferString; - task = null; - } - } - - - /** - * Reads the input from the user and processes it. - * - * @param in - * @param lineBufferString - */ - public static void readInput(Scanner in, String lineBufferString) { - try { - Ui.printPrompt(); // Print the prompt to the console - lineBufferString = in.nextLine(); - splitCommandAndTask(lineBufferString); - - switch (command) { - case Ui.EXIT_STRING: // Exit the program - in.close(); - Ui.printGoodbyeMsgs(); - break; - case Ui.EXIT_STRING_ALT: // Habit of typing exit to exit the program - in.close(); - Ui.printGoodbyeMsgs(); - break; - case Task.LIST_COMMAND_STRING: // List all the tasks - Ui.printBreakLine(); - TaskList.printAllTasks(); - Ui.printBreakLine(); - break; - case Todo.COMMAND_STRING: // Add a todo task - // taskList[Task.getNumberOfTasks()] = new Todo(task); - TaskList.addTask(new Todo(task)); - Ui.printBreakLine(); - - Storage.saveTaskList(TaskList.taskList); - break; - case Deadline.COMMAND_STRING: // Add a deadline task - // taskList[Task.getNumberOfTasks()] = new Deadline(task); - TaskList.addTask(new Deadline(task)); - Ui.printBreakLine(); - - Storage.saveTaskList(TaskList.taskList); - break; - case Event.COMMAND_STRING: // Add an event task - // taskList[Task.getNumberOfTasks()] = new Event(task); - TaskList.addTask(new Event(task)); - Ui.printBreakLine(); - - Storage.saveTaskList(TaskList.taskList); - break; - case Task.MARK_COMMAND_STRING: // Mark the task as done - TaskList.markAsDone(task); - - Storage.saveTaskList(TaskList.taskList); - break; - case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - TaskList.markAsUndone(task); - - Storage.saveTaskList(TaskList.taskList); - break; - case Task.DELETE_COMMAND_STRING: // Delete the task - int taskNumberDelete = Integer.parseInt(task); // Get the task number - TaskList.deleteTask(TaskList.taskList, taskNumberDelete); // Delete the task - - Storage.saveTaskList(TaskList.taskList); - break; - default: - throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); - } - - readInput(in, lineBufferString); // Recursively call the function to read the next input - } catch (EmptyArgumentException | IllegalCommandException | InvalidCommandFormatException e) { - Ui.printBreakLine(); - Ui.printExceptions(e.getMessage()); - Ui.printBreakLine(); - readInput(in, lineBufferString); - } catch (NoSuchElementException e) { - // FIXME: Facing unexpected NoSuchElementException error - } - - } -} diff --git a/src/main/java/org/ajay/utils/Storage.java b/src/main/java/org/ajay/utils/Storage.java deleted file mode 100644 index 2574826b7..000000000 --- a/src/main/java/org/ajay/utils/Storage.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.ajay.utils; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.IllegalArgumentException; -import org.ajay.task.Deadline; -import org.ajay.task.Event; -import org.ajay.task.Task; -import org.ajay.task.Todo; - -public class Storage { - private static String filePath = "data/jarvis.txt"; - - - public static void loadTaskList(ArrayList taskList) throws EmptyArgumentException, IllegalArgumentException { - // Check if the file exists - File f = new File(filePath); - if (!f.exists()) { - try { - f.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - // Try block to check for exceptions - try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { - String line; - while ((line = br.readLine()) != null) { - - // Splitting the data - String[] task = line.split(" \\| "); - - boolean isDone = false; - if (task[1].equals("1")) { - isDone = true; - } - - switch (task[0]) { - case Todo.TASK_STRING: - if (task.length < 3) { - throw new IllegalArgumentException("Importing todo task failed. Data is corrupted."); - } - - taskList.add(Todo.loadTaskString(isDone, task[2])); - break; - case Event.TASK_STRING: - if (task.length < 5) { - throw new IllegalArgumentException("Importing Event task failed. Data is corrupted."); - } - - taskList.add(Event.loadTaskString(isDone, task[2], task[3], task[4])); - break; - case Deadline.TASK_STRING: - if (task.length < 4) { - throw new IllegalArgumentException("Importing Deadline task failed. Data is corrupted."); - } - - taskList.add(Deadline.loadTaskString(isDone, task[2], task[3])); - break; - default: - throw new AssertionError(); - } - } - } catch (IOException e) { - System.out.println("Error while reading a file."); - } - - } - - public static void saveTaskList(ArrayList taskList) { - try { - FileWriter fw = new FileWriter(filePath); - for (Task task : taskList) { - fw.write(task.saveTaskString() + "\n"); - } - fw.close(); - } catch (IOException e) { - System.out.println("Unable to write to file: " + filePath); - e.printStackTrace(); - } - } -} From 08101249b4983695546bc0bafe064b96e20a0e00 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 17:33:01 +0800 Subject: [PATCH 58/88] Move exception into data folder --- .../org/ajay/{ => data}/exceptions/EmptyArgumentException.java | 2 +- src/main/java/org/ajay/{ => data}/exceptions/Error.java | 2 +- .../ajay/{ => data}/exceptions/IllegalArgumentException.java | 2 +- .../org/ajay/{ => data}/exceptions/IllegalCommandException.java | 2 +- .../{ => data}/exceptions/InvalidCommandFormatException.java | 2 +- .../java/org/ajay/{ => data}/exceptions/JarvisException.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/org/ajay/{ => data}/exceptions/EmptyArgumentException.java (80%) rename src/main/java/org/ajay/{ => data}/exceptions/Error.java (96%) rename src/main/java/org/ajay/{ => data}/exceptions/IllegalArgumentException.java (80%) rename src/main/java/org/ajay/{ => data}/exceptions/IllegalCommandException.java (80%) rename src/main/java/org/ajay/{ => data}/exceptions/InvalidCommandFormatException.java (81%) rename src/main/java/org/ajay/{ => data}/exceptions/JarvisException.java (77%) diff --git a/src/main/java/org/ajay/exceptions/EmptyArgumentException.java b/src/main/java/org/ajay/data/exceptions/EmptyArgumentException.java similarity index 80% rename from src/main/java/org/ajay/exceptions/EmptyArgumentException.java rename to src/main/java/org/ajay/data/exceptions/EmptyArgumentException.java index 6c7b4a96e..6ace7c9c2 100644 --- a/src/main/java/org/ajay/exceptions/EmptyArgumentException.java +++ b/src/main/java/org/ajay/data/exceptions/EmptyArgumentException.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; public class EmptyArgumentException extends JarvisException { public EmptyArgumentException(String msg) { diff --git a/src/main/java/org/ajay/exceptions/Error.java b/src/main/java/org/ajay/data/exceptions/Error.java similarity index 96% rename from src/main/java/org/ajay/exceptions/Error.java rename to src/main/java/org/ajay/data/exceptions/Error.java index 6b3c62e6b..47a146de1 100644 --- a/src/main/java/org/ajay/exceptions/Error.java +++ b/src/main/java/org/ajay/data/exceptions/Error.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java diff --git a/src/main/java/org/ajay/exceptions/IllegalArgumentException.java b/src/main/java/org/ajay/data/exceptions/IllegalArgumentException.java similarity index 80% rename from src/main/java/org/ajay/exceptions/IllegalArgumentException.java rename to src/main/java/org/ajay/data/exceptions/IllegalArgumentException.java index f09d92708..89d026226 100644 --- a/src/main/java/org/ajay/exceptions/IllegalArgumentException.java +++ b/src/main/java/org/ajay/data/exceptions/IllegalArgumentException.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; public class IllegalArgumentException extends JarvisException { public IllegalArgumentException(String msg) { diff --git a/src/main/java/org/ajay/exceptions/IllegalCommandException.java b/src/main/java/org/ajay/data/exceptions/IllegalCommandException.java similarity index 80% rename from src/main/java/org/ajay/exceptions/IllegalCommandException.java rename to src/main/java/org/ajay/data/exceptions/IllegalCommandException.java index f14be8c70..b29ea6488 100644 --- a/src/main/java/org/ajay/exceptions/IllegalCommandException.java +++ b/src/main/java/org/ajay/data/exceptions/IllegalCommandException.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; public class IllegalCommandException extends JarvisException { diff --git a/src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java b/src/main/java/org/ajay/data/exceptions/InvalidCommandFormatException.java similarity index 81% rename from src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java rename to src/main/java/org/ajay/data/exceptions/InvalidCommandFormatException.java index 31ba55881..8ba46040a 100644 --- a/src/main/java/org/ajay/exceptions/InvalidCommandFormatException.java +++ b/src/main/java/org/ajay/data/exceptions/InvalidCommandFormatException.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; public class InvalidCommandFormatException extends JarvisException { diff --git a/src/main/java/org/ajay/exceptions/JarvisException.java b/src/main/java/org/ajay/data/exceptions/JarvisException.java similarity index 77% rename from src/main/java/org/ajay/exceptions/JarvisException.java rename to src/main/java/org/ajay/data/exceptions/JarvisException.java index b5502eba9..06e037c62 100644 --- a/src/main/java/org/ajay/exceptions/JarvisException.java +++ b/src/main/java/org/ajay/data/exceptions/JarvisException.java @@ -1,4 +1,4 @@ -package org.ajay.exceptions; +package org.ajay.data.exceptions; public class JarvisException extends Exception { public JarvisException(String msg) { From 841d2f3c92aea8f66426117cd674307ae9258d58 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 17:42:49 +0800 Subject: [PATCH 59/88] Add TaskList and move into data folder --- src/main/java/org/ajay/data/TaskList.java | 141 ++++++++++++++++++ .../org/ajay/{ => data}/task/Deadline.java | 8 +- .../java/org/ajay/{ => data}/task/Event.java | 8 +- .../java/org/ajay/{ => data}/task/Task.java | 6 +- .../java/org/ajay/{ => data}/task/Todo.java | 4 +- src/main/java/org/ajay/task/TaskList.java | 107 ------------- 6 files changed, 154 insertions(+), 120 deletions(-) create mode 100644 src/main/java/org/ajay/data/TaskList.java rename src/main/java/org/ajay/{ => data}/task/Deadline.java (94%) rename src/main/java/org/ajay/{ => data}/task/Event.java (96%) rename src/main/java/org/ajay/{ => data}/task/Task.java (96%) rename src/main/java/org/ajay/{ => data}/task/Todo.java (93%) delete mode 100644 src/main/java/org/ajay/task/TaskList.java diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java new file mode 100644 index 000000000..a5d8ec69a --- /dev/null +++ b/src/main/java/org/ajay/data/TaskList.java @@ -0,0 +1,141 @@ +package org.ajay.data; + +import java.util.ArrayList; + +import org.ajay.data.exceptions.Error; +import org.ajay.data.task.Task; +import org.ajay.ui.TextUi; + +public class TaskList { + + public static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks + + public TaskList() { + + } + + public TaskList(ArrayList taskList) { + this.taskList = taskList; + } + + /** + * Adds a task to the list. + * + * @param task task to be added + */ + public static void addTask(Task task) { + taskList.add(task); + } + + /** + * Marks the task as done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as done + */ + public static void markAsDone(int taskNumber) { + + taskList.get(taskNumber - 1).markAsDone(); + } + + public static void markAsDone(String task) { + int taskNumberMark = Integer.parseInt(task); // Get the task number + + taskList.get(taskNumberMark - 1).markAsDone(); + } + + public static void markAsDone(ArrayList taskList, int taskNumber) { + + taskList.get(taskNumber - 1).markAsDone(); + } + + /** + * Marks the task as not done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as not done + */ + public static void markAsUndone(int taskNumber) { + + taskList.get(taskNumber - 1).markAsUndone(); + } + + public static void markAsUndone(String task) { + int taskNumberUnmark = Integer.parseInt(task); // Get the task number + + taskList.get(taskNumberUnmark - 1).markAsUndone(); + } + + public static void markAsUndone(ArrayList taskList, int taskNumber) { + + taskList.get(taskNumber - 1).markAsUndone(); + } + + public static void deleteTask(String task) throws IllegalArgumentException { + int taskNumberDelete = Integer.parseInt(task); + if (taskNumberDelete > Task.getNumberOfTasks()) { + throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + } + + System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); + taskList.remove(taskNumberDelete - 1); + Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); + Task.printNumberOfTasks(); + } + + public static void deleteTask(int taskNumber) throws IllegalArgumentException { + + if (taskNumber > Task.getNumberOfTasks()) { + throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + } + + System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + taskList.remove(taskNumber - 1); + Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); + Task.printNumberOfTasks(); + } + + public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { + + if (taskNumber > Task.getNumberOfTasks()) { + throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + } + + System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + taskList.remove(taskNumber - 1); + Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); + Task.printNumberOfTasks(); + } + + /** + * Prints all the tasks in the list. + * + * @param taskList list of tasks + */ + public static void printAllTasks(ArrayList taskList) { + if (Task.getNumberOfTasks() == 0) { + TextUi.printWarning("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + TextUi.printSuccess((i + 1) + "." + taskList.get(i).toString()); + } + } + } + + /** + * Prints all the tasks in the list. + * + * @param taskList list of tasks + */ + public static void printAllTasks() { + if (Task.getNumberOfTasks() == 0) { + TextUi.printWarning("The list is empty."); + } else { + System.out.println("Here are the tasks in your list:"); + for (int i = 0; i < Task.getNumberOfTasks(); i++) { + TextUi.printSuccess((i + 1) + "." + taskList.get(i).toString()); + } + } + } +} diff --git a/src/main/java/org/ajay/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java similarity index 94% rename from src/main/java/org/ajay/task/Deadline.java rename to src/main/java/org/ajay/data/task/Deadline.java index b5361b598..529174fe8 100644 --- a/src/main/java/org/ajay/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -1,8 +1,8 @@ -package org.ajay.task; +package org.ajay.data.task; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; -import org.ajay.exceptions.InvalidCommandFormatException; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.Error; +import org.ajay.data.exceptions.InvalidCommandFormatException; public class Deadline extends Task { public final static String COMMAND_STRING = "deadline"; diff --git a/src/main/java/org/ajay/task/Event.java b/src/main/java/org/ajay/data/task/Event.java similarity index 96% rename from src/main/java/org/ajay/task/Event.java rename to src/main/java/org/ajay/data/task/Event.java index 39c35cf9b..c7346526b 100644 --- a/src/main/java/org/ajay/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -1,8 +1,8 @@ -package org.ajay.task; +package org.ajay.data.task; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; -import org.ajay.exceptions.InvalidCommandFormatException; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.Error; +import org.ajay.data.exceptions.InvalidCommandFormatException; public class Event extends Task { public final static String COMMAND_STRING = "event"; // Command string for the Event class diff --git a/src/main/java/org/ajay/task/Task.java b/src/main/java/org/ajay/data/task/Task.java similarity index 96% rename from src/main/java/org/ajay/task/Task.java rename to src/main/java/org/ajay/data/task/Task.java index 9f81ad927..e0e109834 100644 --- a/src/main/java/org/ajay/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -1,7 +1,7 @@ -package org.ajay.task; +package org.ajay.data.task; -import org.ajay.exceptions.EmptyArgumentException; -import org.ajay.exceptions.Error; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.Error; public abstract class Task { public final static String MARK_COMMAND_STRING = "mark"; diff --git a/src/main/java/org/ajay/task/Todo.java b/src/main/java/org/ajay/data/task/Todo.java similarity index 93% rename from src/main/java/org/ajay/task/Todo.java rename to src/main/java/org/ajay/data/task/Todo.java index 463e12af7..3af0ab754 100644 --- a/src/main/java/org/ajay/task/Todo.java +++ b/src/main/java/org/ajay/data/task/Todo.java @@ -1,6 +1,6 @@ -package org.ajay.task; +package org.ajay.data.task; -import org.ajay.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.EmptyArgumentException; public class Todo extends Task { public final static String COMMAND_STRING = "todo"; // Command string for the Todo class diff --git a/src/main/java/org/ajay/task/TaskList.java b/src/main/java/org/ajay/task/TaskList.java deleted file mode 100644 index 4b757d7ab..000000000 --- a/src/main/java/org/ajay/task/TaskList.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.ajay.task; - -import java.util.ArrayList; -import org.ajay.exceptions.Error; -import org.ajay.ui.Ui; - -public class TaskList { - - public static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks - - /** - * Adds a task to the list. - * - * @param task task to be added - */ - public static void addTask(Task task) { - taskList.add(task); - } - - /** - * Marks the task as done. - * - * @param taskList list of tasks - * @param taskNumber number of the task to be marked as done - */ - public static void markAsDone( int taskNumber) { - - taskList.get(taskNumber - 1).markAsDone(); - } - - public static void markAsDone( String task) { - int taskNumberMark = Integer.parseInt(task); // Get the task number - - taskList.get(taskNumberMark - 1).markAsDone(); - } - - public static void markAsDone(ArrayList taskList, int taskNumber) { - - taskList.get(taskNumber - 1).markAsDone(); - } - - /** - * Marks the task as not done. - * - * @param taskList list of tasks - * @param taskNumber number of the task to be marked as not done - */ - public static void markAsUndone(int taskNumber) { - - taskList.get(taskNumber - 1).markAsUndone(); - } - - public static void markAsUndone(String task) { - int taskNumberUnmark = Integer.parseInt(task); // Get the task number - - taskList.get(taskNumberUnmark - 1).markAsUndone(); - } - - public static void markAsUndone(ArrayList taskList, int taskNumber) { - - taskList.get(taskNumber - 1).markAsUndone(); - } - - public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { - - if (taskNumber > Task.getNumberOfTasks()) { - throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); - } - - System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); - taskList.remove(taskNumber - 1); - Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); - Task.printNumberOfTasks(); - } - - /** - * Prints all the tasks in the list. - * - * @param taskList list of tasks - */ - public static void printAllTasks(ArrayList taskList) { - if (Task.getNumberOfTasks() == 0) { - Ui.printWarning("The list is empty."); - } else { - System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { - Ui.printSuccess((i + 1) + "." + taskList.get(i).toString()); - } - } - } - - /** - * Prints all the tasks in the list. - * - * @param taskList list of tasks - */ - public static void printAllTasks() { - if (Task.getNumberOfTasks() == 0) { - Ui.printWarning("The list is empty."); - } else { - System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { - Ui.printSuccess((i + 1) + "." + taskList.get(i).toString()); - } - } - } -} From 36a8f23c6912f299c54a00b1cdc84c49eec06096 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 17:55:08 +0800 Subject: [PATCH 60/88] Split each command into OOP --- src/main/java/org/ajay/commands/Command.java | 22 +++++++++++++ .../org/ajay/commands/DeadlineCommand.java | 32 ++++++++++++++++++ .../java/org/ajay/commands/DeleteCommand.java | 23 +++++++++++++ .../java/org/ajay/commands/EventCommand.java | 33 +++++++++++++++++++ .../java/org/ajay/commands/ExitCommand.java | 21 ++++++++++++ .../java/org/ajay/commands/HelpCommand.java | 14 ++++++++ .../java/org/ajay/commands/ListCommand.java | 22 +++++++++++++ .../java/org/ajay/commands/MarkCommand.java | 23 +++++++++++++ .../java/org/ajay/commands/TodoCommand.java | 30 +++++++++++++++++ .../java/org/ajay/commands/UnmarkCommand.java | 24 ++++++++++++++ 10 files changed, 244 insertions(+) create mode 100644 src/main/java/org/ajay/commands/Command.java create mode 100644 src/main/java/org/ajay/commands/DeadlineCommand.java create mode 100644 src/main/java/org/ajay/commands/DeleteCommand.java create mode 100644 src/main/java/org/ajay/commands/EventCommand.java create mode 100644 src/main/java/org/ajay/commands/ExitCommand.java create mode 100644 src/main/java/org/ajay/commands/HelpCommand.java create mode 100644 src/main/java/org/ajay/commands/ListCommand.java create mode 100644 src/main/java/org/ajay/commands/MarkCommand.java create mode 100644 src/main/java/org/ajay/commands/TodoCommand.java create mode 100644 src/main/java/org/ajay/commands/UnmarkCommand.java diff --git a/src/main/java/org/ajay/commands/Command.java b/src/main/java/org/ajay/commands/Command.java new file mode 100644 index 000000000..c1fdca4d5 --- /dev/null +++ b/src/main/java/org/ajay/commands/Command.java @@ -0,0 +1,22 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class Command { + + protected boolean isExit = false; + + public boolean getExitBool() { + return isExit; + } + + public void setExitBool(boolean isExit) { + this.isExit = isExit; + } + + public void execute(TaskList tasks, TextUi ui, Storage storage) { + throw new UnsupportedOperationException("Unimplemented method 'execute'"); + } +} diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java new file mode 100644 index 000000000..1abeb2dc4 --- /dev/null +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -0,0 +1,32 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.InvalidCommandFormatException; +import org.ajay.data.task.Deadline; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class DeadlineCommand extends Command { + public static final String COMMAND_WORD = Deadline.COMMAND_STRING; + public static final String MESSAGE_USAGE = "Creates a deadline task.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Deadline has been created!"; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + try { + tasks.addTask(new Deadline(Parser.task)); + storage.saveTaskList(tasks.taskList); + } catch (EmptyArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvalidCommandFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/org/ajay/commands/DeleteCommand.java b/src/main/java/org/ajay/commands/DeleteCommand.java new file mode 100644 index 000000000..3e4b2306f --- /dev/null +++ b/src/main/java/org/ajay/commands/DeleteCommand.java @@ -0,0 +1,23 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.task.Task; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class DeleteCommand extends Command{ + + public static final String COMMAND_WORD = Task.DELETE_COMMAND_STRING; + public static final String MESSAGE_USAGE = "Delete a task from the list.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Task has been deleted"; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + tasks.deleteTask(Parser.task); + storage.saveTaskList(tasks.taskList); + } + +} diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java new file mode 100644 index 000000000..daef110ab --- /dev/null +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -0,0 +1,33 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.InvalidCommandFormatException; +import org.ajay.data.task.Event; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class EventCommand extends Command{ + + public static final String COMMAND_WORD = Event.COMMAND_STRING; + public static final String MESSAGE_USAGE = "Creates an event task.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Event has been created!"; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + try { + tasks.addTask(new Event(Parser.task)); + } catch (EmptyArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvalidCommandFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + storage.saveTaskList(tasks.taskList); + } + +} diff --git a/src/main/java/org/ajay/commands/ExitCommand.java b/src/main/java/org/ajay/commands/ExitCommand.java new file mode 100644 index 000000000..0399c0bf8 --- /dev/null +++ b/src/main/java/org/ajay/commands/ExitCommand.java @@ -0,0 +1,21 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class ExitCommand extends Command { + + public static final String COMMAND_WORD = "exit"; + public static final String MESSAGE_USAGE = "Exits the program.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Exiting program..."; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + super.setExitBool(true); + ui.printGoodbyeMsgs(); + } + +} diff --git a/src/main/java/org/ajay/commands/HelpCommand.java b/src/main/java/org/ajay/commands/HelpCommand.java new file mode 100644 index 000000000..a81ba81b2 --- /dev/null +++ b/src/main/java/org/ajay/commands/HelpCommand.java @@ -0,0 +1,14 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class HelpCommand extends Command { + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + ui.printHelpMsgs(); + } + +} diff --git a/src/main/java/org/ajay/commands/ListCommand.java b/src/main/java/org/ajay/commands/ListCommand.java new file mode 100644 index 000000000..ab5aba31b --- /dev/null +++ b/src/main/java/org/ajay/commands/ListCommand.java @@ -0,0 +1,22 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.task.Task; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class ListCommand extends Command { + + public static final String COMMAND_WORD = Task.LIST_COMMAND_STRING; + public static final String MESSAGE_USAGE = "Clears address book permanently.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; + + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + TaskList.printAllTasks(); + } + +} diff --git a/src/main/java/org/ajay/commands/MarkCommand.java b/src/main/java/org/ajay/commands/MarkCommand.java new file mode 100644 index 000000000..f3042c0a0 --- /dev/null +++ b/src/main/java/org/ajay/commands/MarkCommand.java @@ -0,0 +1,23 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.task.Task; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class MarkCommand extends Command { + + public static final String COMMAND_WORD = Task.MARK_COMMAND_STRING; + public static final String MESSAGE_USAGE = "Marks a task as done.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Task has been marked as done"; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + tasks.markAsDone(Parser.task); + storage.saveTaskList(tasks.taskList); + } + +} diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java new file mode 100644 index 000000000..8f7904db4 --- /dev/null +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -0,0 +1,30 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.task.Todo; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class TodoCommand extends Command { + + public static final String COMMAND_WORD = Todo.COMMAND_STRING; + public static final String MESSAGE_USAGE = "Creates a todo task.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Todo has been created!"; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + try { + tasks.addTask(new Todo(Parser.task)); + storage.saveTaskList(tasks.taskList); + } catch (EmptyArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/org/ajay/commands/UnmarkCommand.java b/src/main/java/org/ajay/commands/UnmarkCommand.java new file mode 100644 index 000000000..c43845df9 --- /dev/null +++ b/src/main/java/org/ajay/commands/UnmarkCommand.java @@ -0,0 +1,24 @@ +package org.ajay.commands; + +import org.ajay.data.TaskList; +import org.ajay.data.task.Task; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class UnmarkCommand extends Command{ + + public static final String COMMAND_WORD = Task.UNMARK_COMMAND_STRING; + public static final String MESSAGE_USAGE = "Unmarks a task as done.\n" + + "Example: " + COMMAND_WORD; + + public static final String MESSAGE_SUCCESS = "Task has been unmarked as done"; + + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + tasks.markAsUndone(Parser.task); + storage.saveTaskList(tasks.taskList); + } + +} From 5eb7fc70e494246d2640dcf7ad23c4318ac5cebc Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 20:09:08 +0800 Subject: [PATCH 61/88] Cleanup exceptions catches --- src/main/java/org/ajay/Jarvis.java | 13 ++-- .../org/ajay/commands/DeadlineCommand.java | 14 ++-- .../java/org/ajay/commands/DeleteCommand.java | 7 +- .../java/org/ajay/commands/EventCommand.java | 13 ++-- .../java/org/ajay/commands/ExitCommand.java | 5 +- .../java/org/ajay/commands/ListCommand.java | 5 +- .../java/org/ajay/commands/MarkCommand.java | 7 +- .../java/org/ajay/commands/TodoCommand.java | 10 +-- .../java/org/ajay/commands/UnmarkCommand.java | 2 +- src/main/java/org/ajay/data/TaskList.java | 15 ++-- .../java/org/ajay/data/task/Deadline.java | 15 ++-- src/main/java/org/ajay/parser/Parser.java | 70 +------------------ src/main/java/org/ajay/storage/Storage.java | 21 +++--- src/main/java/org/ajay/ui/TextUi.java | 6 +- 14 files changed, 73 insertions(+), 130 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 70baeeb8e..b37ca281c 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -4,14 +4,12 @@ import org.ajay.commands.Command; import org.ajay.common.Constants; import org.ajay.data.TaskList; -import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.parser.Parser; import org.ajay.storage.Storage; import org.ajay.ui.TextUi; public class Jarvis { - private Storage storage; private TextUi ui; private TaskList tasks; @@ -22,12 +20,13 @@ public Jarvis(String filePath) { try { tasks = new TaskList(storage.load()); - } catch (EmptyArgumentException e) { - e.printStackTrace(); } catch (IllegalArgumentException e) { - // TODO: Update me - e.printStackTrace(); + ui.printExceptions(e.getMessage()); + + // Create empty task list + tasks = new TaskList(); } + } public void run() { @@ -37,13 +36,11 @@ public void run() { ui.printGreetingMsgs(); Scanner in = new Scanner(System.in); // Scanner object to read input from the user while (!isExit) { - Parser.readInput(in); // Read the input from the user Command c = Parser.parseCommand(Parser.command, Parser.task); // Parse the input c.execute(tasks, ui, storage); // Execute the command isExit = c.getExitBool(); // Check if the command is an exit command - } in.close(); diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java index 1abeb2dc4..d8cffafd4 100644 --- a/src/main/java/org/ajay/commands/DeadlineCommand.java +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -2,7 +2,6 @@ import org.ajay.data.TaskList; import org.ajay.data.exceptions.EmptyArgumentException; -import org.ajay.data.exceptions.InvalidCommandFormatException; import org.ajay.data.task.Deadline; import org.ajay.parser.Parser; import org.ajay.storage.Storage; @@ -10,8 +9,9 @@ public class DeadlineCommand extends Command { public static final String COMMAND_WORD = Deadline.COMMAND_STRING; - public static final String MESSAGE_USAGE = "Creates a deadline task.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Creates a deadline task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Deadline has been created!"; @@ -19,13 +19,9 @@ public class DeadlineCommand extends Command { public void execute(TaskList tasks, TextUi ui, Storage storage) { try { tasks.addTask(new Deadline(Parser.task)); - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } catch (EmptyArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InvalidCommandFormatException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + TextUi.printExceptions(e.getMessage()); } } diff --git a/src/main/java/org/ajay/commands/DeleteCommand.java b/src/main/java/org/ajay/commands/DeleteCommand.java index 3e4b2306f..de2011477 100644 --- a/src/main/java/org/ajay/commands/DeleteCommand.java +++ b/src/main/java/org/ajay/commands/DeleteCommand.java @@ -9,15 +9,16 @@ public class DeleteCommand extends Command{ public static final String COMMAND_WORD = Task.DELETE_COMMAND_STRING; - public static final String MESSAGE_USAGE = "Delete a task from the list.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Delete a task from the list. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been deleted"; @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { tasks.deleteTask(Parser.task); - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java index daef110ab..168d36a21 100644 --- a/src/main/java/org/ajay/commands/EventCommand.java +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -11,8 +11,9 @@ public class EventCommand extends Command{ public static final String COMMAND_WORD = Event.COMMAND_STRING; - public static final String MESSAGE_USAGE = "Creates an event task.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Creates an event task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Event has been created!"; @@ -21,13 +22,11 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { try { tasks.addTask(new Event(Parser.task)); } catch (EmptyArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + ui.printExceptions(e.getMessage()); } catch (InvalidCommandFormatException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + ui.printExceptions(e.getMessage()); } - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/commands/ExitCommand.java b/src/main/java/org/ajay/commands/ExitCommand.java index 0399c0bf8..960719e73 100644 --- a/src/main/java/org/ajay/commands/ExitCommand.java +++ b/src/main/java/org/ajay/commands/ExitCommand.java @@ -7,8 +7,9 @@ public class ExitCommand extends Command { public static final String COMMAND_WORD = "exit"; - public static final String MESSAGE_USAGE = "Exits the program.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Exits the program. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Exiting program..."; diff --git a/src/main/java/org/ajay/commands/ListCommand.java b/src/main/java/org/ajay/commands/ListCommand.java index ab5aba31b..b62b5b4eb 100644 --- a/src/main/java/org/ajay/commands/ListCommand.java +++ b/src/main/java/org/ajay/commands/ListCommand.java @@ -8,8 +8,9 @@ public class ListCommand extends Command { public static final String COMMAND_WORD = Task.LIST_COMMAND_STRING; - public static final String MESSAGE_USAGE = "Clears address book permanently.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Clears address book permanently. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; diff --git a/src/main/java/org/ajay/commands/MarkCommand.java b/src/main/java/org/ajay/commands/MarkCommand.java index f3042c0a0..992e68f6e 100644 --- a/src/main/java/org/ajay/commands/MarkCommand.java +++ b/src/main/java/org/ajay/commands/MarkCommand.java @@ -9,15 +9,16 @@ public class MarkCommand extends Command { public static final String COMMAND_WORD = Task.MARK_COMMAND_STRING; - public static final String MESSAGE_USAGE = "Marks a task as done.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Marks a task as done. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been marked as done"; @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { tasks.markAsDone(Parser.task); - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java index 8f7904db4..43a7b43a4 100644 --- a/src/main/java/org/ajay/commands/TodoCommand.java +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -10,8 +10,9 @@ public class TodoCommand extends Command { public static final String COMMAND_WORD = Todo.COMMAND_STRING; - public static final String MESSAGE_USAGE = "Creates a todo task.\n" - + "Example: " + COMMAND_WORD; + public static final String MESSAGE_USAGE = """ + Creates a todo task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Todo has been created!"; @@ -19,10 +20,9 @@ public class TodoCommand extends Command { public void execute(TaskList tasks, TextUi ui, Storage storage) { try { tasks.addTask(new Todo(Parser.task)); - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } catch (EmptyArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + ui.printExceptions(e.getMessage()); } } diff --git a/src/main/java/org/ajay/commands/UnmarkCommand.java b/src/main/java/org/ajay/commands/UnmarkCommand.java index c43845df9..660273c9d 100644 --- a/src/main/java/org/ajay/commands/UnmarkCommand.java +++ b/src/main/java/org/ajay/commands/UnmarkCommand.java @@ -18,7 +18,7 @@ public class UnmarkCommand extends Command{ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { tasks.markAsUndone(Parser.task); - storage.saveTaskList(tasks.taskList); + storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index a5d8ec69a..db27fef0b 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -1,21 +1,26 @@ package org.ajay.data; import java.util.ArrayList; - import org.ajay.data.exceptions.Error; import org.ajay.data.task.Task; import org.ajay.ui.TextUi; public class TaskList { - public static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks + private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks - public TaskList() { + public ArrayList getTaskList() { + return taskList; + } + public void setTaskList(ArrayList taskList) { + TaskList.taskList = taskList; } + public TaskList() {} + public TaskList(ArrayList taskList) { - this.taskList = taskList; + setTaskList(taskList); } /** @@ -23,7 +28,7 @@ public TaskList(ArrayList taskList) { * * @param task task to be added */ - public static void addTask(Task task) { + public void addTask(Task task) { taskList.add(task); } diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index 529174fe8..73d08fda1 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -3,6 +3,7 @@ import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.InvalidCommandFormatException; +import org.ajay.ui.TextUi; public class Deadline extends Task { public final static String COMMAND_STRING = "deadline"; @@ -14,12 +15,17 @@ public class Deadline extends Task { * Constructor for the Deadline class. * * @param description description of the deadline + * @throws EmptyArgumentException * * @throws InvalidCommandFormatException */ - public Deadline(String description) throws EmptyArgumentException, InvalidCommandFormatException { + public Deadline(String description) throws EmptyArgumentException { super(getDescriptionFromString(description)); - setBy(getDayFromString(description)); + try { + setBy(getDayFromString(description)); + } catch (InvalidCommandFormatException e) { + TextUi.printExceptions(e.getMessage()); + } System.out.println("Got it. I've added this task:"); System.out.println(" " + this.toString()); @@ -32,8 +38,9 @@ public Deadline(String description) throws EmptyArgumentException, InvalidComman * * @param description description of the deadline * @param by by date + * @throws EmptyArgumentException */ - public Deadline(String description, String by) throws EmptyArgumentException { + public Deadline(String description, String by) throws EmptyArgumentException { super(description); setBy(by); @@ -62,7 +69,7 @@ public String getBy() { * * @param by */ - public void setBy(String by) { + private void setBy(String by) { this.by = by; } diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java index 025886634..3ebcf3684 100644 --- a/src/main/java/org/ajay/parser/Parser.java +++ b/src/main/java/org/ajay/parser/Parser.java @@ -1,6 +1,5 @@ package org.ajay.parser; -import java.util.NoSuchElementException; import java.util.Scanner; import org.ajay.commands.Command; import org.ajay.commands.DeadlineCommand; @@ -51,82 +50,15 @@ public static void splitCommandAndTask(String lineBufferString) throws EmptyArgu * @param lineBufferString */ public static void readInput(Scanner in) { - try { TextUi.printPrompt(); // Print the prompt to the console String lineBufferString = in.nextLine(); splitCommandAndTask(lineBufferString); - - // switch (command) { - // case Ui.EXIT_STRING: // Exit the program - // in.close(); - // Ui.printGoodbyeMsgs(); - // break; - // case Ui.EXIT_STRING_ALT: // Habit of typing exit to exit the program - // in.close(); - // Ui.printGoodbyeMsgs(); - // break; - // case Task.LIST_COMMAND_STRING: // List all the tasks - // Ui.printBreakLine(); - // TaskList.printAllTasks(); - // Ui.printBreakLine(); - // break; - // case Todo.COMMAND_STRING: // Add a todo task - // // taskList[Task.getNumberOfTasks()] = new Todo(task); - // TaskList.addTask(new Todo(task)); - // Ui.printBreakLine(); - - // Storage.saveTaskList(TaskList.taskList); - // break; - // case Deadline.COMMAND_STRING: // Add a deadline task - // // taskList[Task.getNumberOfTasks()] = new Deadline(task); - // TaskList.addTask(new Deadline(task)); - // Ui.printBreakLine(); - - // Storage.saveTaskList(TaskList.taskList); - // break; - // case Event.COMMAND_STRING: // Add an event task - // // taskList[Task.getNumberOfTasks()] = new Event(task); - // TaskList.addTask(new Event(task)); - // Ui.printBreakLine(); - - // Storage.saveTaskList(TaskList.taskList); - // break; - // case Task.MARK_COMMAND_STRING: // Mark the task as done - // TaskList.markAsDone(task); - - // Storage.saveTaskList(TaskList.taskList); - // break; - // case Task.UNMARK_COMMAND_STRING: // Mark the task as undone - // TaskList.markAsUndone(task); - - // Storage.saveTaskList(TaskList.taskList); - // break; - // case Task.DELETE_COMMAND_STRING: // Delete the task - // int taskNumberDelete = Integer.parseInt(task); // Get the task number - // TaskList.deleteTask(TaskList.taskList, taskNumberDelete); // Delete the task - - // Storage.saveTaskList(TaskList.taskList); - // break; - // default: - // throw new IllegalCommandException(Error.ILLEGAL_COMMAND.toString()); - // } - - // readInput(); // Recursively call the function to read the next input } catch (EmptyArgumentException e) { - TextUi.printBreakLine(); TextUi.printExceptions(e.getMessage()); - TextUi.printBreakLine(); - } - // catch (InvalidCommandFormatException e) { - // // TODO: Update me - // } catch (IllegalCommandException e) { - // // TODO: Update me - // } - catch (NoSuchElementException e) { - // FIXME: Facing unexpected NoSuchElementException error } + } public static Command parseCommand(String command, String task) { diff --git a/src/main/java/org/ajay/storage/Storage.java b/src/main/java/org/ajay/storage/Storage.java index bacfef18d..576dce05b 100644 --- a/src/main/java/org/ajay/storage/Storage.java +++ b/src/main/java/org/ajay/storage/Storage.java @@ -12,6 +12,8 @@ import org.ajay.data.task.Event; import org.ajay.data.task.Task; import org.ajay.data.task.Todo; +import org.ajay.ui.TextUi; + public class Storage { @@ -31,7 +33,7 @@ public Storage(String filePath) { setFilePath(filePath); } - public ArrayList load() throws EmptyArgumentException, IllegalArgumentException { + public ArrayList load() throws IllegalArgumentException { ArrayList taskList = new ArrayList<>(); // Check if the file exists @@ -40,8 +42,7 @@ public ArrayList load() throws EmptyArgumentException, IllegalArgumentExce try { f.createNewFile(); } catch (IOException e) { - // TODO: Update me - e.printStackTrace(); + TextUi.printExceptions(e.getMessage()); } } @@ -61,10 +62,11 @@ public ArrayList load() throws EmptyArgumentException, IllegalArgumentExce switch (task[0]) { case Todo.TASK_STRING: if (task.length < 3) { - throw new IllegalArgumentException("Importing todo task failed. Data is corrupted."); + throw new IllegalArgumentException("Importing Todo task failed. Data is corrupted."); } taskList.add(Todo.loadTaskString(isDone, task[2])); + break; case Event.TASK_STRING: if (task.length < 5) { @@ -85,14 +87,17 @@ public ArrayList load() throws EmptyArgumentException, IllegalArgumentExce } } } catch (IOException e) { - System.out.println("Error while reading a file."); + // System.out.println("Error while reading a file."); + TextUi.printExceptions("Error while reading a file."); + } catch (EmptyArgumentException e) { + TextUi.printExceptions(e.getMessage()); } return taskList; } - public static void saveTaskList(ArrayList taskList) { + public void saveTaskList(ArrayList taskList) { try { FileWriter fw = new FileWriter(filePath); for (Task task : taskList) { @@ -100,8 +105,8 @@ public static void saveTaskList(ArrayList taskList) { } fw.close(); } catch (IOException e) { - System.out.println("Unable to write to file: " + filePath); - e.printStackTrace(); + // System.out.println("Unable to write to file: " + filePath); + TextUi.printExceptions("Unable to write to file: " + filePath); } } } diff --git a/src/main/java/org/ajay/ui/TextUi.java b/src/main/java/org/ajay/ui/TextUi.java index bf5624df8..606284269 100644 --- a/src/main/java/org/ajay/ui/TextUi.java +++ b/src/main/java/org/ajay/ui/TextUi.java @@ -4,10 +4,6 @@ public class TextUi { - - - - /** * Prints a break line to the console. */ @@ -36,7 +32,9 @@ public void printLogo() { } public static void printExceptions(String errorMsg) { + printBreakLine(); System.out.println(Color.ANSI_RED + errorMsg + Color.ANSI_RESET); + printBreakLine(); } public static void printSuccess(String successMsg) { From 843aa5e3d963d5917a142c62be8cb28c5fc81ef8 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 22:05:09 +0800 Subject: [PATCH 62/88] Remove variable to keep track of number of task --- .../org/ajay/commands/DeadlineCommand.java | 4 ++ .../java/org/ajay/commands/EventCommand.java | 5 +++ .../java/org/ajay/commands/TodoCommand.java | 3 ++ src/main/java/org/ajay/data/TaskList.java | 39 ++++++++++++------- .../java/org/ajay/data/task/Deadline.java | 6 --- src/main/java/org/ajay/data/task/Event.java | 4 +- src/main/java/org/ajay/data/task/Task.java | 26 ++++--------- src/main/java/org/ajay/data/task/Todo.java | 5 +-- 8 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java index d8cffafd4..4fe8631b2 100644 --- a/src/main/java/org/ajay/commands/DeadlineCommand.java +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -19,6 +19,10 @@ public class DeadlineCommand extends Command { public void execute(TaskList tasks, TextUi ui, Storage storage) { try { tasks.addTask(new Deadline(Parser.task)); + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks.getLatestTask().toString()); + tasks.printNumberOfTasks(); + storage.saveTaskList(tasks.getTaskList()); } catch (EmptyArgumentException e) { TextUi.printExceptions(e.getMessage()); diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java index 168d36a21..4b02f8741 100644 --- a/src/main/java/org/ajay/commands/EventCommand.java +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -26,6 +26,11 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { } catch (InvalidCommandFormatException e) { ui.printExceptions(e.getMessage()); } + + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks.getLatestTask().toString()); + TaskList.printNumberOfTasks(); + storage.saveTaskList(tasks.getTaskList()); } diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java index 43a7b43a4..03b1b9b91 100644 --- a/src/main/java/org/ajay/commands/TodoCommand.java +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -25,6 +25,9 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printExceptions(e.getMessage()); } + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks.getLatestTask().toString()); + TaskList.printNumberOfTasks(); } } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index db27fef0b..1af513672 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -54,6 +54,19 @@ public static void markAsDone(ArrayList taskList, int taskNumber) { taskList.get(taskNumber - 1).markAsDone(); } + public Task getLatestTask() { + return taskList.get(taskList.size() - 1); + } + + /** + * Prints the number of tasks in the list. + */ + public static void printNumberOfTasks() { + taskList.trimToSize(); + int numberOfTasks = taskList.size(); + System.out.println("Now you have " + numberOfTasks + " tasks in the list."); + } + /** * Marks the task as not done. * @@ -78,38 +91,38 @@ public static void markAsUndone(ArrayList taskList, int taskNumber) { public static void deleteTask(String task) throws IllegalArgumentException { int taskNumberDelete = Integer.parseInt(task); - if (taskNumberDelete > Task.getNumberOfTasks()) { + if (taskNumberDelete > taskList.size()) { throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); taskList.remove(taskNumberDelete - 1); - Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); - Task.printNumberOfTasks(); + taskList.trimToSize(); + printNumberOfTasks(); } public static void deleteTask(int taskNumber) throws IllegalArgumentException { - if (taskNumber > Task.getNumberOfTasks()) { + if (taskNumber > taskList.size()) { throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); taskList.remove(taskNumber - 1); - Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); - Task.printNumberOfTasks(); + taskList.trimToSize(); + printNumberOfTasks(); } public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { - if (taskNumber > Task.getNumberOfTasks()) { + if (taskNumber > taskList.size()) { throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); taskList.remove(taskNumber - 1); - Task.setNumberOfTasks(Task.getNumberOfTasks() - 1); - Task.printNumberOfTasks(); + taskList.trimToSize(); + printNumberOfTasks(); } /** @@ -118,11 +131,11 @@ public static void deleteTask(ArrayList taskList, int taskNumber) throws I * @param taskList list of tasks */ public static void printAllTasks(ArrayList taskList) { - if (Task.getNumberOfTasks() == 0) { + if (taskList.isEmpty()) { TextUi.printWarning("The list is empty."); } else { System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { + for (int i = 0; i < taskList.size(); i++) { TextUi.printSuccess((i + 1) + "." + taskList.get(i).toString()); } } @@ -134,11 +147,11 @@ public static void printAllTasks(ArrayList taskList) { * @param taskList list of tasks */ public static void printAllTasks() { - if (Task.getNumberOfTasks() == 0) { + if (taskList.isEmpty()) { TextUi.printWarning("The list is empty."); } else { System.out.println("Here are the tasks in your list:"); - for (int i = 0; i < Task.getNumberOfTasks(); i++) { + for (int i = 0; i < taskList.size(); i++) { TextUi.printSuccess((i + 1) + "." + taskList.get(i).toString()); } } diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index 73d08fda1..8ef858e78 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -27,9 +27,6 @@ public Deadline(String description) throws EmptyArgumentException { TextUi.printExceptions(e.getMessage()); } - System.out.println("Got it. I've added this task:"); - System.out.println(" " + this.toString()); - Task.printNumberOfTasks(); } @@ -44,9 +41,6 @@ public Deadline(String description, String by) throws EmptyArgumentException { super(description); setBy(by); - System.out.println("Got it. I've added this task:"); - System.out.println(" " + this.toString()); - Task.printNumberOfTasks(); } public Deadline(boolean isDone, String description, String by) throws EmptyArgumentException { diff --git a/src/main/java/org/ajay/data/task/Event.java b/src/main/java/org/ajay/data/task/Event.java index c7346526b..d64ef4cb4 100644 --- a/src/main/java/org/ajay/data/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -26,9 +26,7 @@ public Event(String description) throws EmptyArgumentException, InvalidCommandFo setFrom(getFromFromString(description)); setTo(getToFromString(description)); - System.out.println("Got it. I've added this task:"); - System.out.println(" " + this.toString()); - Task.printNumberOfTasks(); + } diff --git a/src/main/java/org/ajay/data/task/Task.java b/src/main/java/org/ajay/data/task/Task.java index e0e109834..cc6c264af 100644 --- a/src/main/java/org/ajay/data/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -13,7 +13,7 @@ public abstract class Task { private boolean isDone; // Status of the task // TODO: Possible to use arraylist length - private static int numberOfTasks = 0; // Number of tasks in the list + // private static int numberOfTasks = 0; // Number of tasks in the list /** * Constructor for the Task class. @@ -29,7 +29,7 @@ public Task(String description) throws EmptyArgumentException { this.description = description; this.isDone = false; - numberOfTasks++; + // numberOfTasks++; } /** @@ -97,25 +97,13 @@ public void markAsUndone() { - /** - * Returns the number of tasks in the list. - * - * @return number of tasks in the list - */ - public static int getNumberOfTasks() { - return numberOfTasks; - } - public static int setNumberOfTasks(int num) { - return numberOfTasks = num; - } - /** - * Prints the number of tasks in the list. - */ - public static void printNumberOfTasks() { - System.out.println("Now you have " + numberOfTasks + " tasks in the list."); - } + // public static int setNumberOfTasks(int num) { + // return numberOfTasks = num; + // } + + /** * Prints the task to the console. diff --git a/src/main/java/org/ajay/data/task/Todo.java b/src/main/java/org/ajay/data/task/Todo.java index 3af0ab754..7bbee1ddc 100644 --- a/src/main/java/org/ajay/data/task/Todo.java +++ b/src/main/java/org/ajay/data/task/Todo.java @@ -1,5 +1,6 @@ package org.ajay.data.task; + import org.ajay.data.exceptions.EmptyArgumentException; public class Todo extends Task { @@ -13,9 +14,7 @@ public class Todo extends Task { */ public Todo(String description) throws EmptyArgumentException { super(description); - System.out.println("Got it. I've added this task:"); - System.out.println(" " + this.toString()); - Task.printNumberOfTasks(); + } public Todo(String description, boolean isDone) throws EmptyArgumentException { From 179d7cc210e8e6538977b501ce896525553bd247 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 22:05:43 +0800 Subject: [PATCH 63/88] Update text-ui-test --- data/jarvis.txt | 2 -- text-ui-test/EXPECTED.TXT | 31 ++++++++++++------------------- text-ui-test/input.txt | 1 + 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/data/jarvis.txt b/data/jarvis.txt index 3a3e8f075..e69de29bb 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -1,2 +0,0 @@ -T | 0 | Answer CS2113 tutorial questions -D | 0 | weekly CS2113 quiz | Monday 9pm diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 8b5a9be8f..6b7029b03 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -33,41 +33,34 @@ Hello from Hello! I'm Jarvis What can I do for you? ──────────────────────────────────────────────────────────── - Got it. I've added this task: + Got it. I've added this task: [T][ ] Answer CS2113 tutorial questions Now you have 1 tasks in the list. -──────────────────────────────────────────────────────────── - Got it. I've added this task: + Got it. I've added this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 2 tasks in the list. -──────────────────────────────────────────────────────────── - ──────────────────────────────────────────────────────────── -Here are the tasks in your list: + Here are the tasks in your list: 1.[T][ ] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) -──────────────────────────────────────────────────────────── - Got it. I've added this task: + Got it. I've added this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 3 tasks in the list. -──────────────────────────────────────────────────────────── - Nice! I've marked this task as done: + Nice! I've marked this task as done: [T][✓] Answer CS2113 tutorial questions - ──────────────────────────────────────────────────────────── -Here are the tasks in your list: + Here are the tasks in your list: 1.[T][✓] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) 3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) -──────────────────────────────────────────────────────────── - Noted. I've removed this task: + Noted. I've removed this task: [T][✓] Answer CS2113 tutorial questions Now you have 2 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 1 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 0 tasks in the list. - ──────────────────────────────────────────────────────────── -The list is empty. + The list is empty. + ──────────────────────────────────────────────────────────── +Bye. Hope to see you again soon! ──────────────────────────────────────────────────────────── - diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 752456ad8..2e3cc6c7b 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -8,3 +8,4 @@ delete 1 delete 2 delete 1 list +bye From 6d16d9981779c4ab74e9fd8018dbd68073490eb1 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Sat, 5 Oct 2024 23:10:24 +0800 Subject: [PATCH 64/88] Formate and delete unused codes --- src/main/java/org/ajay/commands/ExitCommand.java | 5 ++--- src/main/java/org/ajay/commands/HelpCommand.java | 1 - src/main/java/org/ajay/commands/ListCommand.java | 8 +++----- src/main/java/org/ajay/commands/MarkCommand.java | 5 ++--- src/main/java/org/ajay/commands/TodoCommand.java | 5 ++--- .../java/org/ajay/commands/UnmarkCommand.java | 4 +--- src/main/java/org/ajay/common/Messages.java | 8 +++++--- src/main/java/org/ajay/data/TaskList.java | 7 ++++--- src/main/java/org/ajay/data/exceptions/Error.java | 6 +++--- src/main/java/org/ajay/data/task/Deadline.java | 9 ++++----- src/main/java/org/ajay/data/task/Event.java | 15 ++++++++------- src/main/java/org/ajay/data/task/Task.java | 13 ++----------- src/main/java/org/ajay/data/task/Todo.java | 2 -- src/main/java/org/ajay/parser/Parser.java | 1 - src/main/java/org/ajay/storage/Storage.java | 4 ++-- src/main/java/org/ajay/ui/TextUi.java | 10 ++++------ 16 files changed, 42 insertions(+), 61 deletions(-) diff --git a/src/main/java/org/ajay/commands/ExitCommand.java b/src/main/java/org/ajay/commands/ExitCommand.java index 960719e73..af2f8338d 100644 --- a/src/main/java/org/ajay/commands/ExitCommand.java +++ b/src/main/java/org/ajay/commands/ExitCommand.java @@ -8,8 +8,8 @@ public class ExitCommand extends Command { public static final String COMMAND_WORD = "exit"; public static final String MESSAGE_USAGE = """ - Exits the program. - Example: """ + COMMAND_WORD; + Exits the program. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Exiting program..."; @@ -18,5 +18,4 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { super.setExitBool(true); ui.printGoodbyeMsgs(); } - } diff --git a/src/main/java/org/ajay/commands/HelpCommand.java b/src/main/java/org/ajay/commands/HelpCommand.java index a81ba81b2..e061060c7 100644 --- a/src/main/java/org/ajay/commands/HelpCommand.java +++ b/src/main/java/org/ajay/commands/HelpCommand.java @@ -10,5 +10,4 @@ public class HelpCommand extends Command { public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printHelpMsgs(); } - } diff --git a/src/main/java/org/ajay/commands/ListCommand.java b/src/main/java/org/ajay/commands/ListCommand.java index b62b5b4eb..9919705cf 100644 --- a/src/main/java/org/ajay/commands/ListCommand.java +++ b/src/main/java/org/ajay/commands/ListCommand.java @@ -9,15 +9,13 @@ public class ListCommand extends Command { public static final String COMMAND_WORD = Task.LIST_COMMAND_STRING; public static final String MESSAGE_USAGE = """ - Clears address book permanently. - Example: """ + COMMAND_WORD; + Clears address book permanently. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; - @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - TaskList.printAllTasks(); + TaskList.printAllTasks(); } - } diff --git a/src/main/java/org/ajay/commands/MarkCommand.java b/src/main/java/org/ajay/commands/MarkCommand.java index 992e68f6e..57356771f 100644 --- a/src/main/java/org/ajay/commands/MarkCommand.java +++ b/src/main/java/org/ajay/commands/MarkCommand.java @@ -10,8 +10,8 @@ public class MarkCommand extends Command { public static final String COMMAND_WORD = Task.MARK_COMMAND_STRING; public static final String MESSAGE_USAGE = """ - Marks a task as done. - Example: """ + COMMAND_WORD; + Marks a task as done. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been marked as done"; @@ -20,5 +20,4 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { tasks.markAsDone(Parser.task); storage.saveTaskList(tasks.getTaskList()); } - } diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java index 03b1b9b91..a82c73df0 100644 --- a/src/main/java/org/ajay/commands/TodoCommand.java +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -11,8 +11,8 @@ public class TodoCommand extends Command { public static final String COMMAND_WORD = Todo.COMMAND_STRING; public static final String MESSAGE_USAGE = """ - Creates a todo task. - Example: """ + COMMAND_WORD; + Creates a todo task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Todo has been created!"; @@ -29,5 +29,4 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { System.out.println(" " + tasks.getLatestTask().toString()); TaskList.printNumberOfTasks(); } - } diff --git a/src/main/java/org/ajay/commands/UnmarkCommand.java b/src/main/java/org/ajay/commands/UnmarkCommand.java index 660273c9d..fdf422f7f 100644 --- a/src/main/java/org/ajay/commands/UnmarkCommand.java +++ b/src/main/java/org/ajay/commands/UnmarkCommand.java @@ -6,7 +6,7 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; -public class UnmarkCommand extends Command{ +public class UnmarkCommand extends Command { public static final String COMMAND_WORD = Task.UNMARK_COMMAND_STRING; public static final String MESSAGE_USAGE = "Unmarks a task as done.\n" @@ -14,11 +14,9 @@ public class UnmarkCommand extends Command{ public static final String MESSAGE_SUCCESS = "Task has been unmarked as done"; - @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { tasks.markAsUndone(Parser.task); storage.saveTaskList(tasks.getTaskList()); } - } diff --git a/src/main/java/org/ajay/common/Messages.java b/src/main/java/org/ajay/common/Messages.java index 3c109ba79..1e7e91b61 100644 --- a/src/main/java/org/ajay/common/Messages.java +++ b/src/main/java/org/ajay/common/Messages.java @@ -4,7 +4,7 @@ public class Messages { - static final String LOGO = """ + static final String LOGO = """ @@@@@@@@@@@@@@@@@@@@@@@ @@% @@ @@ @@@ @@ @@ @@ @@ @@ -37,9 +37,11 @@ public class Messages { """; public static final String MESSAGE_PROMPT = Color.ANSI_GREEN + " " + Color.ANSI_RESET; - public static final String MESSAGE_BREAKLINE = Color.ANSI_BLACK + "────────────────────────────────────────────────────────────" + Color.ANSI_RESET; + public static final String MESSAGE_BREAKLINE = Color.ANSI_BLACK + + "────────────────────────────────────────────────────────────" + Color.ANSI_RESET; public static final String MESSAGE_EXIT = "Bye. Hope to see you again soon!"; public static final String MESSAGE_LOGO = "Hello from\n" + Color.ANSI_BLUE + LOGO + Color.ANSI_RESET; - public static final String MESSAGE_WELCOME = "Hello! I'm " + Color.ANSI_YELLOW + Constants.CHAT_BOT_NAME + Color.ANSI_RESET + "\nWhat can I do for you?"; + public static final String MESSAGE_WELCOME = "Hello! I'm " + Color.ANSI_YELLOW + Constants.CHAT_BOT_NAME + + Color.ANSI_RESET + "\nWhat can I do for you?"; public static final String MESSAGE_HELP = "Here are the list of commands you can use: \n1. todo - Adds a todo task to the list \n2. deadline /by - Adds a deadline task to the list \n3. event /from /to - Adds an event task to the list \n4. list - Lists all the tasks in the list \n5. done - Marks the task as done \n6. delete - Deletes the task from the list \n7. find - Finds the tasks with the keyword \n8. help - Shows the list of commands \n9. bye | exit - Exits the program"; } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index 1af513672..d5afd5299 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -7,7 +7,7 @@ public class TaskList { - private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks + private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks public ArrayList getTaskList() { return taskList; @@ -17,7 +17,8 @@ public void setTaskList(ArrayList taskList) { TaskList.taskList = taskList; } - public TaskList() {} + public TaskList() { + } public TaskList(ArrayList taskList) { setTaskList(taskList); @@ -55,7 +56,7 @@ public static void markAsDone(ArrayList taskList, int taskNumber) { } public Task getLatestTask() { - return taskList.get(taskList.size() - 1); + return taskList.get(taskList.size() - 1); } /** diff --git a/src/main/java/org/ajay/data/exceptions/Error.java b/src/main/java/org/ajay/data/exceptions/Error.java index 47a146de1..c05c83361 100644 --- a/src/main/java/org/ajay/data/exceptions/Error.java +++ b/src/main/java/org/ajay/data/exceptions/Error.java @@ -1,10 +1,10 @@ package org.ajay.data.exceptions; - // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java public enum Error { - EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), INVAILD_COMMAND_FORMAT(2, "Invalid command format found."), OUT_OF_BOUNDS(3, "Index out of bounds."); + EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), + INVAILD_COMMAND_FORMAT(2, "Invalid command format found."), OUT_OF_BOUNDS(3, "Index out of bounds."); private final int code; private final String description; @@ -29,6 +29,6 @@ public String toString() { } // public enum ErrorLevel { -// SUCCESS, WARN, ERROR, INFO, +// SUCCESS, WARN, ERROR, INFO, // } diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index 8ef858e78..f93ae79d7 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -19,7 +19,7 @@ public class Deadline extends Task { * * @throws InvalidCommandFormatException */ - public Deadline(String description) throws EmptyArgumentException { + public Deadline(String description) throws EmptyArgumentException { super(getDescriptionFromString(description)); try { setBy(getDayFromString(description)); @@ -29,7 +29,6 @@ public Deadline(String description) throws EmptyArgumentException { } - /** * Constructor for the Deadline class. * @@ -37,7 +36,7 @@ public Deadline(String description) throws EmptyArgumentException { * @param by by date * @throws EmptyArgumentException */ - public Deadline(String description, String by) throws EmptyArgumentException { + public Deadline(String description, String by) throws EmptyArgumentException { super(description); setBy(by); @@ -77,7 +76,8 @@ private void setBy(String by) { public static String getDayFromString(String input) throws InvalidCommandFormatException { if (input == null) { - throw new InvalidCommandFormatException("Invalid command format. Please include the by date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + throw new InvalidCommandFormatException( + "Invalid command format. Please include the by date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterBy = input.indexOf(BY_KEYWORD_STRING) + BY_KEYWORD_STRING.length(); @@ -113,7 +113,6 @@ public static Deadline loadTaskString(boolean isDone, String description, String return deadline; } - @Override public String toString() { return "[" + TASK_STRING + "]" + super.toString() + " (by: " + by + ")"; diff --git a/src/main/java/org/ajay/data/task/Event.java b/src/main/java/org/ajay/data/task/Event.java index d64ef4cb4..8ddbdefcd 100644 --- a/src/main/java/org/ajay/data/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -26,8 +26,6 @@ public Event(String description) throws EmptyArgumentException, InvalidCommandFo setFrom(getFromFromString(description)); setTo(getToFromString(description)); - - } /** @@ -123,7 +121,8 @@ public static String getDescriptionFromString(String input) throws InvalidComman public static String getFromFromString(String input) throws InvalidCommandFormatException { if (input == null || !input.contains(FROM_KEYWORD_STRING)) { - throw new InvalidCommandFormatException("Invalid command format. Please include the from date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + throw new InvalidCommandFormatException( + "Invalid command format. Please include the from date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterFrom = input.indexOf(FROM_KEYWORD_STRING) + FROM_KEYWORD_STRING.length(); @@ -142,7 +141,8 @@ public static String getFromFromString(String input) throws InvalidCommandFormat public static String getToFromString(String input) throws InvalidCommandFormatException { if (input == null || !input.contains(TO_KEYWORD_STRING)) { - throw new InvalidCommandFormatException("Invalid command format. Please include the to date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + throw new InvalidCommandFormatException( + "Invalid command format. Please include the to date. " + Error.INVAILD_COMMAND_FORMAT.toString()); } int indexAfterTo = input.indexOf(TO_KEYWORD_STRING) + TO_KEYWORD_STRING.length(); @@ -152,15 +152,16 @@ public static String getToFromString(String input) throws InvalidCommandFormatEx @Override public String saveTaskString() { - return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + from + " | " + to; + return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + from + " | " + + to; } - public static Event loadTaskString(boolean isDone, String description, String from, String to) throws EmptyArgumentException { + public static Event loadTaskString(boolean isDone, String description, String from, String to) + throws EmptyArgumentException { Event event = new Event(isDone, description, from, to); return event; } - @Override public String toString() { return "[" + TASK_STRING + "]" + super.toString() + " (from: " + from + " to: " + to + ")"; diff --git a/src/main/java/org/ajay/data/task/Task.java b/src/main/java/org/ajay/data/task/Task.java index cc6c264af..735654812 100644 --- a/src/main/java/org/ajay/data/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -10,7 +10,7 @@ public abstract class Task { public final static String DELETE_COMMAND_STRING = "delete"; protected String description; // Description of the task - private boolean isDone; // Status of the task + private boolean isDone; // Status of the task // TODO: Possible to use arraylist length // private static int numberOfTasks = 0; // Number of tasks in the list @@ -95,16 +95,10 @@ public void markAsUndone() { System.out.println("OK, I've marked this task as not done yet: \n " + this.toString()); } - - - - // public static int setNumberOfTasks(int num) { - // return numberOfTasks = num; + // return numberOfTasks = num; // } - - /** * Prints the task to the console. * @@ -117,7 +111,4 @@ public String toString() { public abstract String saveTaskString(); - - - } diff --git a/src/main/java/org/ajay/data/task/Todo.java b/src/main/java/org/ajay/data/task/Todo.java index 7bbee1ddc..1e317a58e 100644 --- a/src/main/java/org/ajay/data/task/Todo.java +++ b/src/main/java/org/ajay/data/task/Todo.java @@ -1,6 +1,5 @@ package org.ajay.data.task; - import org.ajay.data.exceptions.EmptyArgumentException; public class Todo extends Task { @@ -22,7 +21,6 @@ public Todo(String description, boolean isDone) throws EmptyArgumentException { super.setDoneState(isDone); } - @Override public String saveTaskString() { return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description; diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java index 3ebcf3684..291512328 100644 --- a/src/main/java/org/ajay/parser/Parser.java +++ b/src/main/java/org/ajay/parser/Parser.java @@ -58,7 +58,6 @@ public static void readInput(Scanner in) { TextUi.printExceptions(e.getMessage()); } - } public static Command parseCommand(String command, String task) { diff --git a/src/main/java/org/ajay/storage/Storage.java b/src/main/java/org/ajay/storage/Storage.java index 576dce05b..04de84e37 100644 --- a/src/main/java/org/ajay/storage/Storage.java +++ b/src/main/java/org/ajay/storage/Storage.java @@ -14,7 +14,6 @@ import org.ajay.data.task.Todo; import org.ajay.ui.TextUi; - public class Storage { private static String filePath; @@ -27,7 +26,8 @@ public static void setFilePath(String filePath) { Storage.filePath = filePath; } - public Storage() {} + public Storage() { + } public Storage(String filePath) { setFilePath(filePath); diff --git a/src/main/java/org/ajay/ui/TextUi.java b/src/main/java/org/ajay/ui/TextUi.java index 606284269..bbcd73e07 100644 --- a/src/main/java/org/ajay/ui/TextUi.java +++ b/src/main/java/org/ajay/ui/TextUi.java @@ -2,7 +2,6 @@ import org.ajay.common.Messages; - public class TextUi { /** * Prints a break line to the console. @@ -23,7 +22,7 @@ public static void exit(int status) { /** * Prints the prompt to the console for visual marker for user to type. */ - public static void printPrompt() { + public static void printPrompt() { System.out.print(Messages.MESSAGE_PROMPT); } @@ -53,7 +52,7 @@ public static void printWarning(String warningMsg) { * Prints the greeting messages to the console. */ public void printGreetingMsgs() { - String[] greetings = {Messages.MESSAGE_WELCOME}; // List of greetings + String[] greetings = { Messages.MESSAGE_WELCOME }; // List of greetings // Print the greetings for (String greeting : greetings) { @@ -67,7 +66,7 @@ public void printGreetingMsgs() { * Prints the goodbye messages to the console. */ public void printGoodbyeMsgs() { - String[] goodbyes = {Messages.MESSAGE_EXIT}; // List of goodbye messages + String[] goodbyes = { Messages.MESSAGE_EXIT }; // List of goodbye messages // List of goodbye messages // Print the goodbye messages for (String goodbye : goodbyes) { @@ -79,7 +78,7 @@ public void printGoodbyeMsgs() { } public static void printHelpMsgs() { - String[] helpMsgs = {Messages.MESSAGE_HELP}; + String[] helpMsgs = { Messages.MESSAGE_HELP }; printBreakLine(); // Print the help messages for (String helpMsg : helpMsgs) { @@ -88,5 +87,4 @@ public static void printHelpMsgs() { printBreakLine(); } - } From c113d2036985756788c6e1a609a3058583a6662d Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 15:18:35 +0800 Subject: [PATCH 65/88] Add find command using stream - Update print list using stream --- data/jarvis.txt | 5 +++ .../java/org/ajay/commands/ExitCommand.java | 2 +- .../java/org/ajay/commands/FindCommand.java | 22 ++++++++++ .../java/org/ajay/commands/HelpCommand.java | 5 +++ .../java/org/ajay/commands/ListCommand.java | 2 +- src/main/java/org/ajay/data/TaskList.java | 40 ++++++++++++++++++- src/main/java/org/ajay/parser/Parser.java | 5 +++ text-ui-test/input_edge_case.txt | 6 +++ 8 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/ajay/commands/FindCommand.java create mode 100644 text-ui-test/input_edge_case.txt diff --git a/data/jarvis.txt b/data/jarvis.txt index e69de29bb..3793c672f 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -0,0 +1,5 @@ +D | 1 | weekly CS2113 quiz | Monday 9pm +T | 0 | Answer CS2113 tutorial questions +T | 0 | read book +D | 0 | return book | June 6th +T | 0 | todo todo diff --git a/src/main/java/org/ajay/commands/ExitCommand.java b/src/main/java/org/ajay/commands/ExitCommand.java index af2f8338d..5f8d323a1 100644 --- a/src/main/java/org/ajay/commands/ExitCommand.java +++ b/src/main/java/org/ajay/commands/ExitCommand.java @@ -11,7 +11,7 @@ public class ExitCommand extends Command { Exits the program. Example: """ + COMMAND_WORD; - public static final String MESSAGE_SUCCESS = "Exiting program..."; + // public static final String MESSAGE_SUCCESS = "Exiting program..."; @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { diff --git a/src/main/java/org/ajay/commands/FindCommand.java b/src/main/java/org/ajay/commands/FindCommand.java new file mode 100644 index 000000000..0e4216fa7 --- /dev/null +++ b/src/main/java/org/ajay/commands/FindCommand.java @@ -0,0 +1,22 @@ +package org.ajay.commands; + +import java.util.ArrayList; +import org.ajay.data.TaskList; +import org.ajay.data.task.Task; +import org.ajay.parser.Parser; +import org.ajay.storage.Storage; +import org.ajay.ui.TextUi; + +public class FindCommand extends Command { + public static final String COMMAND_WORD = "find"; + public static final String MESSAGE_USAGE = """ + Find tasks by searching for a keyword. + Example: """ + COMMAND_WORD; + + @Override + public void execute(TaskList tasks, TextUi ui, Storage storage) { + String keyword = Parser.task; + ArrayList foundTasks = TaskList.findTaskWithStreams(tasks.getTaskList(), keyword); + tasks.printAllTasks(foundTasks); + } +} diff --git a/src/main/java/org/ajay/commands/HelpCommand.java b/src/main/java/org/ajay/commands/HelpCommand.java index e061060c7..2d5ce6228 100644 --- a/src/main/java/org/ajay/commands/HelpCommand.java +++ b/src/main/java/org/ajay/commands/HelpCommand.java @@ -6,6 +6,11 @@ public class HelpCommand extends Command { + public static final String COMMAND_WORD = "help"; + public static final String MESSAGE_USAGE = """ + Print help message. + Example: """ + COMMAND_WORD; + @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printHelpMsgs(); diff --git a/src/main/java/org/ajay/commands/ListCommand.java b/src/main/java/org/ajay/commands/ListCommand.java index 9919705cf..f3edf01a3 100644 --- a/src/main/java/org/ajay/commands/ListCommand.java +++ b/src/main/java/org/ajay/commands/ListCommand.java @@ -16,6 +16,6 @@ public class ListCommand extends Command { @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - TaskList.printAllTasks(); + TaskList.printAllTasksWithStreams(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index d5afd5299..e90773926 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -1,6 +1,7 @@ package org.ajay.data; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicInteger; import org.ajay.data.exceptions.Error; import org.ajay.data.task.Task; import org.ajay.ui.TextUi; @@ -13,7 +14,7 @@ public ArrayList getTaskList() { return taskList; } - public void setTaskList(ArrayList taskList) { + public final void setTaskList(ArrayList taskList) { TaskList.taskList = taskList; } @@ -126,6 +127,43 @@ public static void deleteTask(ArrayList taskList, int taskNumber) throws I printNumberOfTasks(); } + public static ArrayList findTaskWithStreams(String keyword) { + ArrayList foundTasks = new ArrayList<>(); + taskList.stream().filter(task -> task.getDescription().contains(keyword)).forEach(foundTasks::add); + + return foundTasks; + } + + public static ArrayList findTaskWithStreams(ArrayList tasks, String keyword) { + ArrayList foundTasks = new ArrayList<>(); + taskList.stream().filter(task -> task.getDescription().contains(keyword)).forEach(foundTasks::add); + + return foundTasks; + } + + public static void printAllTasksWithStreams() { + if (taskList.isEmpty()) { + TextUi.printWarning("The list is empty."); + } else { + // Solution: https://stackoverflow.com/questions/34118412/numbering-in-some-list-java-streams-foreach + AtomicInteger counter = new AtomicInteger(1); + System.out.println("Here are the tasks in your list:"); + taskList.stream().forEach(task -> TextUi.printSuccess(counter.getAndIncrement() + "." + task.toString())); + } + } + + public static void printAllTasksWithStreams(ArrayList tasks) { + if (tasks.isEmpty()) { + TextUi.printWarning("The list is empty."); + } else { + AtomicInteger counter = new AtomicInteger(1); + System.out.println("Here are the tasks in your list:"); + tasks.stream().forEach(task -> TextUi.printSuccess(counter.getAndIncrement() + "." + task.toString())); + } + } + + + /** * Prints all the tasks in the list. * diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java index 291512328..54373ce4a 100644 --- a/src/main/java/org/ajay/parser/Parser.java +++ b/src/main/java/org/ajay/parser/Parser.java @@ -6,6 +6,7 @@ import org.ajay.commands.DeleteCommand; import org.ajay.commands.EventCommand; import org.ajay.commands.ExitCommand; +import org.ajay.commands.FindCommand; import org.ajay.commands.HelpCommand; import org.ajay.commands.ListCommand; import org.ajay.commands.MarkCommand; @@ -80,6 +81,10 @@ public static Command parseCommand(String command, String task) { return new UnmarkCommand(); case DeleteCommand.COMMAND_WORD: // Delete the task return new DeleteCommand(); + case HelpCommand.COMMAND_WORD: // Print the help message + return new HelpCommand(); + case FindCommand.COMMAND_WORD: // Find the task + return new FindCommand(); default: return new HelpCommand(); } diff --git a/text-ui-test/input_edge_case.txt b/text-ui-test/input_edge_case.txt new file mode 100644 index 000000000..8fa0fd935 --- /dev/null +++ b/text-ui-test/input_edge_case.txt @@ -0,0 +1,6 @@ +todo +deadline weekly CS2113 quiz Monday 9pm +list +event CS2113 lecture /from Friday 4 /to 6 pm +event CS2113 lecture /from Friday 4 6 pm +event CS2113 lecture Friday 4 6 pm From 39d08afd6b2680f45ad7746220beddb03f77ddb9 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 23:43:49 +0800 Subject: [PATCH 66/88] Ensure storage file and folder exist --- src/main/java/org/ajay/Jarvis.java | 20 +++++++++++++------- src/main/java/org/ajay/common/Messages.java | 16 ++++++++++++++++ src/main/java/org/ajay/storage/Storage.java | 20 ++++++++++---------- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index b37ca281c..86efb3119 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -34,15 +34,21 @@ public void run() { ui.printLogo(); ui.printGreetingMsgs(); - Scanner in = new Scanner(System.in); // Scanner object to read input from the user - while (!isExit) { - Parser.readInput(in); // Read the input from the user - Command c = Parser.parseCommand(Parser.command, Parser.task); // Parse the input - c.execute(tasks, ui, storage); // Execute the command - isExit = c.getExitBool(); // Check if the command is an exit command + // Scanner object to read input from the user + try (Scanner in = new Scanner(System.in)) { + while (!isExit) { + Parser.readInput(in); // Read the input from the user + + Command c = Parser.parseCommand(Parser.command, Parser.task); // Parse the input + c.execute(tasks, ui, storage); // Execute the command + isExit = c.getExitBool(); // Check if the command is an exit command + } } - in.close(); + // catch (Exception e) { + // // catch if scanner system in fails + // ui.printExceptions("Scanner failed to read input" + " " + e.getMessage()); + // } } diff --git a/src/main/java/org/ajay/common/Messages.java b/src/main/java/org/ajay/common/Messages.java index 1e7e91b61..ba5a701f2 100644 --- a/src/main/java/org/ajay/common/Messages.java +++ b/src/main/java/org/ajay/common/Messages.java @@ -44,4 +44,20 @@ public class Messages { public static final String MESSAGE_WELCOME = "Hello! I'm " + Color.ANSI_YELLOW + Constants.CHAT_BOT_NAME + Color.ANSI_RESET + "\nWhat can I do for you?"; public static final String MESSAGE_HELP = "Here are the list of commands you can use: \n1. todo - Adds a todo task to the list \n2. deadline /by - Adds a deadline task to the list \n3. event /from /to - Adds an event task to the list \n4. list - Lists all the tasks in the list \n5. done - Marks the task as done \n6. delete - Deletes the task from the list \n7. find - Finds the tasks with the keyword \n8. help - Shows the list of commands \n9. bye | exit - Exits the program"; + + // Exeception messages + public static final String MESSAGE_EMPTY_ARG = "Empty argument found."; + public static final String MESSAGE_ILLEGAL_COMMAND = "Invalid command found."; + public static final String MESSAGE_INVALID_COMMAND_FORMAT = "Invalid command format found."; + public static final String MESSAGE_OUT_OF_BOUNDS = "Number is out of bounds."; + public static final String MESSAGE_LINE_STRING_EMPTY = "User input is empty."; + public static final String MESSAGE_FILE_NOT_FOUND = "File not found."; + public static final String MESSAGE_FILE_NOT_SAVED = "File not saved."; + public static final String MESSAGE_FILE_NOT_READ = "Error while reading a file."; + public static final String MESSAGE_IMPORT_TODO_FAILED = "Importing Todo task failed. Data is corrupted."; + public static final String MESSAGE_IMPORT_DEADLINE_FAILED = "Importing Event task failed. Data is corrupted."; + public static final String MESSAGE_IMPORT_EVENT_FAILED = "Importing Deadline task failed. Data is corrupted."; + public static final String MESSAGE_MISSING_KEYWORD = "Missing keyword found."; + public static final String MESSAGE_INVALID_KEYWORK_ARRAGEMENT = "Wrong keyword arrangement found."; + } diff --git a/src/main/java/org/ajay/storage/Storage.java b/src/main/java/org/ajay/storage/Storage.java index 04de84e37..361950c03 100644 --- a/src/main/java/org/ajay/storage/Storage.java +++ b/src/main/java/org/ajay/storage/Storage.java @@ -6,6 +6,7 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import org.ajay.common.Messages; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Deadline; @@ -40,9 +41,11 @@ public ArrayList load() throws IllegalArgumentException { File f = new File(filePath); if (!f.exists()) { try { + f.getParentFile().mkdirs(); f.createNewFile(); } catch (IOException e) { - TextUi.printExceptions(e.getMessage()); + TextUi.printExceptions(Messages.MESSAGE_FILE_NOT_FOUND + " " + e.getMessage()); + TextUi.exit(0); } } @@ -62,7 +65,7 @@ public ArrayList load() throws IllegalArgumentException { switch (task[0]) { case Todo.TASK_STRING: if (task.length < 3) { - throw new IllegalArgumentException("Importing Todo task failed. Data is corrupted."); + throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_TODO_FAILED); } taskList.add(Todo.loadTaskString(isDone, task[2])); @@ -70,14 +73,14 @@ public ArrayList load() throws IllegalArgumentException { break; case Event.TASK_STRING: if (task.length < 5) { - throw new IllegalArgumentException("Importing Event task failed. Data is corrupted."); + throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_EVENT_FAILED); } taskList.add(Event.loadTaskString(isDone, task[2], task[3], task[4])); break; case Deadline.TASK_STRING: if (task.length < 4) { - throw new IllegalArgumentException("Importing Deadline task failed. Data is corrupted."); + throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_DEADLINE_FAILED); } taskList.add(Deadline.loadTaskString(isDone, task[2], task[3])); @@ -87,8 +90,7 @@ public ArrayList load() throws IllegalArgumentException { } } } catch (IOException e) { - // System.out.println("Error while reading a file."); - TextUi.printExceptions("Error while reading a file."); + TextUi.printExceptions(Messages.MESSAGE_FILE_NOT_READ + " " + e.getMessage()); } catch (EmptyArgumentException e) { TextUi.printExceptions(e.getMessage()); } @@ -98,14 +100,12 @@ public ArrayList load() throws IllegalArgumentException { } public void saveTaskList(ArrayList taskList) { - try { - FileWriter fw = new FileWriter(filePath); + + try (FileWriter fw = new FileWriter(filePath)) { for (Task task : taskList) { fw.write(task.saveTaskString() + "\n"); } - fw.close(); } catch (IOException e) { - // System.out.println("Unable to write to file: " + filePath); TextUi.printExceptions("Unable to write to file: " + filePath); } } From e007cbb2a3726d37b20af9320b3ce32147f0f86f Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 23:46:26 +0800 Subject: [PATCH 67/88] Add support to catch invalid commands --- .../java/org/ajay/data/exceptions/Error.java | 8 ++++++-- src/main/java/org/ajay/parser/Parser.java | 20 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/ajay/data/exceptions/Error.java b/src/main/java/org/ajay/data/exceptions/Error.java index c05c83361..18ac13ce0 100644 --- a/src/main/java/org/ajay/data/exceptions/Error.java +++ b/src/main/java/org/ajay/data/exceptions/Error.java @@ -1,10 +1,14 @@ package org.ajay.data.exceptions; // NOTE: Taken from https://stackoverflow.com/questions/446663/best-way-to-define-error-codes-strings-in-java + +import org.ajay.common.Messages; +import org.ajay.data.exceptions.Error; + public enum Error { - EMPTY_ARG(0, "Empty argument found."), ILLEGAL_COMMAND(1, "Invalid command found."), - INVAILD_COMMAND_FORMAT(2, "Invalid command format found."), OUT_OF_BOUNDS(3, "Index out of bounds."); + EMPTY_ARG(0, Messages.MESSAGE_EMPTY_ARG), ILLEGAL_COMMAND(1, Messages.MESSAGE_ILLEGAL_COMMAND), + INVAILD_COMMAND_FORMAT(2, Messages.MESSAGE_INVALID_COMMAND_FORMAT), OUT_OF_BOUNDS(3, Messages.MESSAGE_OUT_OF_BOUNDS); private final int code; private final String description; diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java index 54373ce4a..a9bd891c0 100644 --- a/src/main/java/org/ajay/parser/Parser.java +++ b/src/main/java/org/ajay/parser/Parser.java @@ -13,14 +13,15 @@ import org.ajay.commands.TodoCommand; import org.ajay.commands.UnmarkCommand; import org.ajay.common.Constants; +import org.ajay.common.Messages; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.Error; import org.ajay.ui.TextUi; public class Parser { - public static String command; // Variable to store the command - public static String task; // Variable to store the task + public static String command = ""; // Variable to store the command + public static String task = ""; // Variable to store the task // public static String lineBufferString = ""; // Buffer to store the input from // the user @@ -32,15 +33,24 @@ public class Parser { */ public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { if (lineBufferString.isEmpty()) { - throw new EmptyArgumentException(Error.EMPTY_ARG.toString()); + throw new EmptyArgumentException( Messages.MESSAGE_LINE_STRING_EMPTY + " " + Error.EMPTY_ARG.toString()); + } else { + lineBufferString = lineBufferString.trim(); // Remove any leading or trailing whitespaces } + command = ""; + task = ""; + boolean isSingleCommand = (lineBufferString.equals(ListCommand.COMMAND_WORD) || lineBufferString.equals(ExitCommand.COMMAND_WORD) || lineBufferString.equals(HelpCommand.COMMAND_WORD) || lineBufferString.equals(Constants.EXIT_COMMAND_ALT)); + if (lineBufferString.contains(" ")) { command = lineBufferString.split(" ")[0]; task = lineBufferString.substring(command.length() + 1); - } else { + } else if (isSingleCommand) { + // single word commands command = lineBufferString; - task = null; + } + else { + throw new EmptyArgumentException(Error.INVAILD_COMMAND_FORMAT.toString()); } } From 9cf42fe5a9b23e3710da5633e3032c87bc6368bc Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 23:52:56 +0800 Subject: [PATCH 68/88] Add support to catch deadline is not found --- .../org/ajay/commands/DeadlineCommand.java | 17 +++--- .../java/org/ajay/data/task/Deadline.java | 52 +++++++++---------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java index 4fe8631b2..718e6c1eb 100644 --- a/src/main/java/org/ajay/commands/DeadlineCommand.java +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -2,6 +2,7 @@ import org.ajay.data.TaskList; import org.ajay.data.exceptions.EmptyArgumentException; +import org.ajay.data.exceptions.InvalidCommandFormatException; import org.ajay.data.task.Deadline; import org.ajay.parser.Parser; import org.ajay.storage.Storage; @@ -19,14 +20,18 @@ public class DeadlineCommand extends Command { public void execute(TaskList tasks, TextUi ui, Storage storage) { try { tasks.addTask(new Deadline(Parser.task)); - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks.getLatestTask().toString()); - tasks.printNumberOfTasks(); - - storage.saveTaskList(tasks.getTaskList()); } catch (EmptyArgumentException e) { - TextUi.printExceptions(e.getMessage()); + ui.printExceptions(e.getMessage()); + } catch (InvalidCommandFormatException e) { + ui.printExceptions(e.getMessage()); + return; } + + System.out.println("Got it. I've added this task:"); + System.out.println(" " + tasks.getLatestTask().toString()); + tasks.printNumberOfTasks(); + + storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index f93ae79d7..71b0a2325 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -1,49 +1,46 @@ package org.ajay.data.task; +import org.ajay.common.Messages; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.InvalidCommandFormatException; -import org.ajay.ui.TextUi; public class Deadline extends Task { public final static String COMMAND_STRING = "deadline"; final static String BY_KEYWORD_STRING = "/by"; - protected String by; public final static String TASK_STRING = "D"; + protected String by; + /** * Constructor for the Deadline class. * - * @param description description of the deadline + * @param task description of the deadline * @throws EmptyArgumentException * * @throws InvalidCommandFormatException */ - public Deadline(String description) throws EmptyArgumentException { - super(getDescriptionFromString(description)); - try { - setBy(getDayFromString(description)); - } catch (InvalidCommandFormatException e) { - TextUi.printExceptions(e.getMessage()); - } + public Deadline(String task) throws EmptyArgumentException, InvalidCommandFormatException { + super(getDescriptionFromString(task)); + setBy(getDayFromString(task)); } /** * Constructor for the Deadline class. * - * @param description description of the deadline - * @param by by date + * @param task description of the deadline + * @param by by date * @throws EmptyArgumentException */ - public Deadline(String description, String by) throws EmptyArgumentException { - super(description); + public Deadline(String task, String by) throws EmptyArgumentException { + super(task); setBy(by); } - public Deadline(boolean isDone, String description, String by) throws EmptyArgumentException { - super(description); + public Deadline(boolean isDone, String task, String by) throws EmptyArgumentException { + super(task); setBy(by); super.setDoneState(isDone); } @@ -75,13 +72,17 @@ private void setBy(String by) { */ public static String getDayFromString(String input) throws InvalidCommandFormatException { - if (input == null) { + int indexOfBy = input.indexOf(BY_KEYWORD_STRING); + int indexAfterBy; + + if (indexOfBy == -1) { throw new InvalidCommandFormatException( - "Invalid command format. Please include the by date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + Messages.MESSAGE_MISSING_KEYWORD + " [" + BY_KEYWORD_STRING + "] " + + Error.INVAILD_COMMAND_FORMAT.toString()); + } else { + indexAfterBy = indexOfBy + BY_KEYWORD_STRING.length(); } - int indexAfterBy = input.indexOf(BY_KEYWORD_STRING) + BY_KEYWORD_STRING.length(); - return input.substring(indexAfterBy).trim(); } @@ -93,13 +94,12 @@ public static String getDayFromString(String input) throws InvalidCommandFormatE * @return */ public static String getDescriptionFromString(String input) { - if (input == null) { - return null; - } int indexOfBy = input.indexOf(BY_KEYWORD_STRING); - input = input.substring(0, indexOfBy); + if (indexOfBy != -1) { + input = input.substring(0, indexOfBy); + } return input.trim(); } @@ -108,8 +108,8 @@ public String saveTaskString() { return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + by; } - public static Deadline loadTaskString(boolean isDone, String description, String by) throws EmptyArgumentException { - Deadline deadline = new Deadline(isDone, description, by); + public static Deadline loadTaskString(boolean isDone, String task, String by) throws EmptyArgumentException { + Deadline deadline = new Deadline(isDone, task, by); return deadline; } From 53126698703b7636bf01692ec545ebc2e6e59ab1 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 23:53:28 +0800 Subject: [PATCH 69/88] Add support to catch event keyword not found --- .../java/org/ajay/commands/EventCommand.java | 1 + src/main/java/org/ajay/data/task/Event.java | 55 ++++++++++++------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java index 4b02f8741..8ad6305ca 100644 --- a/src/main/java/org/ajay/commands/EventCommand.java +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -25,6 +25,7 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printExceptions(e.getMessage()); } catch (InvalidCommandFormatException e) { ui.printExceptions(e.getMessage()); + return; } System.out.println("Got it. I've added this task:"); diff --git a/src/main/java/org/ajay/data/task/Event.java b/src/main/java/org/ajay/data/task/Event.java index 8ddbdefcd..4bd424e21 100644 --- a/src/main/java/org/ajay/data/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -1,5 +1,6 @@ package org.ajay.data.task; +import org.ajay.common.Messages; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.InvalidCommandFormatException; @@ -16,15 +17,15 @@ public class Event extends Task { /** * Constructor for the Event class. * - * @param description description of the event + * @param task description of the event * * @throws EmptyArgumentException * @throws InvalidCommandFormatException */ - public Event(String description) throws EmptyArgumentException, InvalidCommandFormatException { - super(getDescriptionFromString(description)); - setFrom(getFromFromString(description)); - setTo(getToFromString(description)); + public Event(String task) throws EmptyArgumentException, InvalidCommandFormatException { + super(getDescriptionFromString(task)); + setFrom(getFromFromString(task)); + setTo(getToFromString(task)); } @@ -70,7 +71,7 @@ public String getFrom() { * * @param from */ - public void setFrom(String from) { + private void setFrom(String from) { this.from = from; } @@ -88,7 +89,7 @@ public String getTo() { * * @param to */ - public void setTo(String to) { + private void setTo(String to) { this.to = to; } @@ -101,13 +102,11 @@ public void setTo(String to) { */ public static String getDescriptionFromString(String input) throws InvalidCommandFormatException { - if (input == null) { - return null; - } - int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); - input = input.substring(0, indexOfFrom); + if (indexOfFrom != -1) { + input = input.substring(0, indexOfFrom); + } return input.trim(); } @@ -120,13 +119,25 @@ public static String getDescriptionFromString(String input) throws InvalidComman */ public static String getFromFromString(String input) throws InvalidCommandFormatException { - if (input == null || !input.contains(FROM_KEYWORD_STRING)) { + int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); + int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + int indexAfterFrom; + + boolean isFromBeforeTo = indexOfFrom < indexOfTo; + + if (indexOfFrom == -1 || indexOfTo == -1 ) { throw new InvalidCommandFormatException( - "Invalid command format. Please include the from date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD_STRING + " & " + TO_KEYWORD_STRING +"] " + + Error.INVAILD_COMMAND_FORMAT.toString()); + } else if (!isFromBeforeTo) { + throw new InvalidCommandFormatException( + Messages.MESSAGE_INVALID_KEYWORK_ARRAGEMENT + " [" + FROM_KEYWORD_STRING + " then " + TO_KEYWORD_STRING +"] "+ Error.INVAILD_COMMAND_FORMAT.toString()); + } else { + indexAfterFrom = indexOfFrom + FROM_KEYWORD_STRING.length(); } - int indexAfterFrom = input.indexOf(FROM_KEYWORD_STRING) + FROM_KEYWORD_STRING.length(); - int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + + return input.substring(indexAfterFrom, indexOfTo).trim(); } @@ -140,12 +151,18 @@ public static String getFromFromString(String input) throws InvalidCommandFormat */ public static String getToFromString(String input) throws InvalidCommandFormatException { - if (input == null || !input.contains(TO_KEYWORD_STRING)) { + int indexOfTo = input.indexOf(TO_KEYWORD_STRING); + int indexAfterTo; + + if (indexOfTo == -1) { throw new InvalidCommandFormatException( - "Invalid command format. Please include the to date. " + Error.INVAILD_COMMAND_FORMAT.toString()); + Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD_STRING + " & " + TO_KEYWORD_STRING +"] " + + Error.INVAILD_COMMAND_FORMAT.toString()); + } else { + indexAfterTo = indexOfTo + TO_KEYWORD_STRING.length(); } - int indexAfterTo = input.indexOf(TO_KEYWORD_STRING) + TO_KEYWORD_STRING.length(); + return input.substring(indexAfterTo).trim(); } From dc1a56e69208c9122b8b9e13f21b5b8fda708d2c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Thu, 10 Oct 2024 23:55:09 +0800 Subject: [PATCH 70/88] Add support to catch out of bound index --- .../java/org/ajay/commands/DeleteCommand.java | 8 ++- .../java/org/ajay/commands/MarkCommand.java | 8 ++- .../java/org/ajay/commands/UnmarkCommand.java | 8 ++- src/main/java/org/ajay/data/TaskList.java | 63 +++++++++++++++---- 4 files changed, 71 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/ajay/commands/DeleteCommand.java b/src/main/java/org/ajay/commands/DeleteCommand.java index de2011477..8fe9a5ff9 100644 --- a/src/main/java/org/ajay/commands/DeleteCommand.java +++ b/src/main/java/org/ajay/commands/DeleteCommand.java @@ -1,6 +1,7 @@ package org.ajay.commands; import org.ajay.data.TaskList; +import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Task; import org.ajay.parser.Parser; import org.ajay.storage.Storage; @@ -17,7 +18,12 @@ public class DeleteCommand extends Command{ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - tasks.deleteTask(Parser.task); + try { + tasks.deleteTask(Parser.task); + } catch (IllegalArgumentException e) { + ui.printExceptions(e.getMessage()); + return; + } storage.saveTaskList(tasks.getTaskList()); } diff --git a/src/main/java/org/ajay/commands/MarkCommand.java b/src/main/java/org/ajay/commands/MarkCommand.java index 57356771f..2521d75d0 100644 --- a/src/main/java/org/ajay/commands/MarkCommand.java +++ b/src/main/java/org/ajay/commands/MarkCommand.java @@ -1,6 +1,7 @@ package org.ajay.commands; import org.ajay.data.TaskList; +import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Task; import org.ajay.parser.Parser; import org.ajay.storage.Storage; @@ -17,7 +18,12 @@ public class MarkCommand extends Command { @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - tasks.markAsDone(Parser.task); + try { + tasks.markAsDone(Parser.task); + } catch (IllegalArgumentException e) { + ui.printExceptions(e.getMessage()); + return; + } storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/commands/UnmarkCommand.java b/src/main/java/org/ajay/commands/UnmarkCommand.java index fdf422f7f..2d1371ac6 100644 --- a/src/main/java/org/ajay/commands/UnmarkCommand.java +++ b/src/main/java/org/ajay/commands/UnmarkCommand.java @@ -1,6 +1,7 @@ package org.ajay.commands; import org.ajay.data.TaskList; +import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Task; import org.ajay.parser.Parser; import org.ajay.storage.Storage; @@ -16,7 +17,12 @@ public class UnmarkCommand extends Command { @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - tasks.markAsUndone(Parser.task); + try { + tasks.markAsUndone(Parser.task); + } catch (IllegalArgumentException e) { + ui.printExceptions(e.getMessage()); + return; + } storage.saveTaskList(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index e90773926..154d4c826 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; import org.ajay.data.exceptions.Error; +import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Task; import org.ajay.ui.TextUi; @@ -39,19 +40,33 @@ public void addTask(Task task) { * * @param taskList list of tasks * @param taskNumber number of the task to be marked as done + * @throws IllegalArgumentException */ - public static void markAsDone(int taskNumber) { + public static void markAsDone(int taskNumber) throws IllegalArgumentException { + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } taskList.get(taskNumber - 1).markAsDone(); } - public static void markAsDone(String task) { + public static void markAsDone(String task) throws IllegalArgumentException { int taskNumberMark = Integer.parseInt(task); // Get the task number + if (!isValidTaskNumber(taskNumberMark)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } + taskList.get(taskNumberMark - 1).markAsDone(); } - public static void markAsDone(ArrayList taskList, int taskNumber) { + public static void markAsDone(ArrayList taskList, int taskNumber) throws IllegalArgumentException { + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } taskList.get(taskNumber - 1).markAsDone(); } @@ -74,27 +89,47 @@ public static void printNumberOfTasks() { * * @param taskList list of tasks * @param taskNumber number of the task to be marked as not done + * @throws IllegalArgumentException */ - public static void markAsUndone(int taskNumber) { + public static void markAsUndone(int taskNumber) throws IllegalArgumentException { + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } taskList.get(taskNumber - 1).markAsUndone(); } - public static void markAsUndone(String task) { + public static void markAsUndone(String task) throws IllegalArgumentException { int taskNumberUnmark = Integer.parseInt(task); // Get the task number + if (!isValidTaskNumber(taskNumberUnmark)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } + taskList.get(taskNumberUnmark - 1).markAsUndone(); } - public static void markAsUndone(ArrayList taskList, int taskNumber) { + public static void markAsUndone(ArrayList taskList, int taskNumber) throws IllegalArgumentException { + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); + } taskList.get(taskNumber - 1).markAsUndone(); } - public static void deleteTask(String task) throws IllegalArgumentException { + private static boolean isValidTaskNumber(int taskNumber) { + return taskNumber <= taskList.size() && taskNumber > 0; + } + + public static void deleteTask(String task) throws IllegalArgumentException { int taskNumberDelete = Integer.parseInt(task); - if (taskNumberDelete > taskList.size()) { - throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + + if (!isValidTaskNumber(taskNumberDelete)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); @@ -105,8 +140,9 @@ public static void deleteTask(String task) throws IllegalArgumentException { public static void deleteTask(int taskNumber) throws IllegalArgumentException { - if (taskNumber > taskList.size()) { - throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); @@ -117,8 +153,9 @@ public static void deleteTask(int taskNumber) throws IllegalArgumentException { public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { - if (taskNumber > taskList.size()) { - throw new IllegalArgumentException("Out of range index. " + Error.OUT_OF_BOUNDS.toString()); + if (!isValidTaskNumber(taskNumber)) { + throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + + Error.OUT_OF_BOUNDS.toString()); } System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); From befc96ef9c1a42cec4bacafd77011c5c36ca82a1 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 17:13:30 +0800 Subject: [PATCH 71/88] Add support catch empty datetime --- src/main/java/org/ajay/common/Messages.java | 1 + src/main/java/org/ajay/data/task/Deadline.java | 8 +++++++- src/main/java/org/ajay/data/task/Event.java | 10 +++++++++- src/main/java/org/ajay/data/task/Task.java | 3 --- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/ajay/common/Messages.java b/src/main/java/org/ajay/common/Messages.java index ba5a701f2..95be32534 100644 --- a/src/main/java/org/ajay/common/Messages.java +++ b/src/main/java/org/ajay/common/Messages.java @@ -59,5 +59,6 @@ public class Messages { public static final String MESSAGE_IMPORT_EVENT_FAILED = "Importing Deadline task failed. Data is corrupted."; public static final String MESSAGE_MISSING_KEYWORD = "Missing keyword found."; public static final String MESSAGE_INVALID_KEYWORK_ARRAGEMENT = "Wrong keyword arrangement found."; + public static final String MESSAGE_EMPTY_DATE = "Empty date found."; } diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index 71b0a2325..e5c8c1377 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -75,12 +75,18 @@ public static String getDayFromString(String input) throws InvalidCommandFormatE int indexOfBy = input.indexOf(BY_KEYWORD_STRING); int indexAfterBy; + // Check if the by keyword is missing if (indexOfBy == -1) { throw new InvalidCommandFormatException( Messages.MESSAGE_MISSING_KEYWORD + " [" + BY_KEYWORD_STRING + "] " + Error.INVAILD_COMMAND_FORMAT.toString()); } else { - indexAfterBy = indexOfBy + BY_KEYWORD_STRING.length(); + indexAfterBy = indexOfBy + BY_KEYWORD_STRING.length(); + } + + // Check if the by date is empty + if (indexAfterBy == input.length()) { + throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); } return input.substring(indexAfterBy).trim(); diff --git a/src/main/java/org/ajay/data/task/Event.java b/src/main/java/org/ajay/data/task/Event.java index 4bd424e21..ac640c5f6 100644 --- a/src/main/java/org/ajay/data/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -136,7 +136,10 @@ public static String getFromFromString(String input) throws InvalidCommandFormat indexAfterFrom = indexOfFrom + FROM_KEYWORD_STRING.length(); } - + // Check if the from date is empty + if (indexAfterFrom == indexOfTo - 1) { + throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); + } return input.substring(indexAfterFrom, indexOfTo).trim(); @@ -162,6 +165,11 @@ public static String getToFromString(String input) throws InvalidCommandFormatEx indexAfterTo = indexOfTo + TO_KEYWORD_STRING.length(); } + // Check if the to date is empty + if (indexAfterTo == input.length()) { + throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); + } + return input.substring(indexAfterTo).trim(); diff --git a/src/main/java/org/ajay/data/task/Task.java b/src/main/java/org/ajay/data/task/Task.java index 735654812..0ac47696f 100644 --- a/src/main/java/org/ajay/data/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -12,9 +12,6 @@ public abstract class Task { protected String description; // Description of the task private boolean isDone; // Status of the task - // TODO: Possible to use arraylist length - // private static int numberOfTasks = 0; // Number of tasks in the list - /** * Constructor for the Task class. * From 89488d3e252aa08950c39e0186955e0af04245cd Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 17:29:03 +0800 Subject: [PATCH 72/88] Improve test cases to include edge cases --- text-ui-test/EXPECTED.TXT | 42 +++++++++++++++++++++++++++++++++++++++ text-ui-test/input.txt | 10 ++++++++++ 2 files changed, 52 insertions(+) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 6b7029b03..0af498d40 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -33,24 +33,66 @@ Hello from Hello! I'm Jarvis What can I do for you? ──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Invalid command format found. (Error Code: 2) +──────────────────────────────────────────────────────────── +──────────────────────────────────────────────────────────── +Here are the list of commands you can use: +1. todo - Adds a todo task to the list +2. deadline /by - Adds a deadline task to the list +3. event /from /to - Adds an event task to the list +4. list - Lists all the tasks in the list +5. done - Marks the task as done +6. delete - Deletes the task from the list +7. find - Finds the tasks with the keyword +8. help - Shows the list of commands +9. bye | exit - Exits the program +────────────────────────────────────────────────────────────  Got it. I've added this task: [T][ ] Answer CS2113 tutorial questions Now you have 1 tasks in the list. + ──────────────────────────────────────────────────────────── +Missing keyword found. [/by] Invalid command format found. (Error Code: 2) +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Empty date found. Empty argument found. (Error Code: 0) +────────────────────────────────────────────────────────────  Got it. I've added this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 2 tasks in the list.  Here are the tasks in your list: 1.[T][ ] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) + ──────────────────────────────────────────────────────────── +Missing keyword found. [/from & /to] Invalid command format found. (Error Code: 2) +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Missing keyword found. [/from & /to] Invalid command format found. (Error Code: 2) +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Empty date found. Empty argument found. (Error Code: 0) +────────────────────────────────────────────────────────────  Got it. I've added this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 3 tasks in the list. + ──────────────────────────────────────────────────────────── +Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) +────────────────────────────────────────────────────────────  Nice! I've marked this task as done: [T][✓] Answer CS2113 tutorial questions  Here are the tasks in your list: 1.[T][✓] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) 3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) + ──────────────────────────────────────────────────────────── +Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) +──────────────────────────────────────────────────────────── + ──────────────────────────────────────────────────────────── +Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) +────────────────────────────────────────────────────────────  Noted. I've removed this task: [T][✓] Answer CS2113 tutorial questions Now you have 2 tasks in the list. diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 2e3cc6c7b..6f52d4c08 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1,9 +1,19 @@ +todo todo Answer CS2113 tutorial questions +deadline weekly CS2113 quiz Monday 9pm +deadline weekly CS2113 quiz /by deadline weekly CS2113 quiz /by Monday 9pm list +event CS2113 lecture /from Friday 4 6 pm +event CS2113 lecture Friday 4 6 pm +event CS2113 lecture /from /to 6 pm event CS2113 lecture /from Friday 4 /to 6 pm +mark 100 +mark -100 mark 1 list +delete 100 +delete -100 delete 1 delete 2 delete 1 From 9223f710c56829046b348e1870598567f931cb8c Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 17:48:23 +0800 Subject: [PATCH 73/88] Clean up UI --- data/jarvis.txt | 5 ----- .../org/ajay/commands/DeadlineCommand.java | 19 +++++++++++++------ .../java/org/ajay/commands/EventCommand.java | 19 +++++++++++++------ .../java/org/ajay/commands/TodoCommand.java | 16 ++++++++++++---- src/main/java/org/ajay/common/Constants.java | 1 + src/main/java/org/ajay/data/TaskList.java | 8 ++++---- src/main/java/org/ajay/data/task/Task.java | 5 +++-- text-ui-test/input_edge_case.txt | 6 ------ 8 files changed, 46 insertions(+), 33 deletions(-) delete mode 100644 text-ui-test/input_edge_case.txt diff --git a/data/jarvis.txt b/data/jarvis.txt index 3793c672f..e69de29bb 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -1,5 +0,0 @@ -D | 1 | weekly CS2113 quiz | Monday 9pm -T | 0 | Answer CS2113 tutorial questions -T | 0 | read book -D | 0 | return book | June 6th -T | 0 | todo todo diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java index 718e6c1eb..931b45725 100644 --- a/src/main/java/org/ajay/commands/DeadlineCommand.java +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -1,5 +1,6 @@ package org.ajay.commands; +import org.ajay.common.Constants; import org.ajay.data.TaskList; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.InvalidCommandFormatException; @@ -14,7 +15,17 @@ public class DeadlineCommand extends Command { Creates a deadline task. Example: """ + COMMAND_WORD; - public static final String MESSAGE_SUCCESS = "Deadline has been created!"; + public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + + private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { + ui.printBreakLine(); + ui.printSuccess(MESSAGE_SUCCESS); + ui.printSuccess(Constants.PADDING + tasks.getLatestTask().toString()); + tasks.printNumberOfTasks(); + ui.printBreakLine(); + + storage.saveTaskList(tasks.getTaskList()); + } @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { @@ -27,11 +38,7 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { return; } - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks.getLatestTask().toString()); - tasks.printNumberOfTasks(); - - storage.saveTaskList(tasks.getTaskList()); + printSuccessMessage(tasks, ui, storage); } } diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java index 8ad6305ca..6bf6bf0c8 100644 --- a/src/main/java/org/ajay/commands/EventCommand.java +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -1,5 +1,6 @@ package org.ajay.commands; +import org.ajay.common.Constants; import org.ajay.data.TaskList; import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.InvalidCommandFormatException; @@ -15,7 +16,17 @@ public class EventCommand extends Command{ Creates an event task. Example: """ + COMMAND_WORD; - public static final String MESSAGE_SUCCESS = "Event has been created!"; + public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + + private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { + ui.printBreakLine(); + ui.printSuccess(MESSAGE_SUCCESS); + ui.printSuccess(Constants.PADDING + tasks.getLatestTask().toString()); + TaskList.printNumberOfTasks(); + ui.printBreakLine(); + + storage.saveTaskList(tasks.getTaskList()); + } @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { @@ -28,11 +39,7 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { return; } - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks.getLatestTask().toString()); - TaskList.printNumberOfTasks(); - - storage.saveTaskList(tasks.getTaskList()); + printSuccessMessage(tasks, ui, storage); } } diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java index a82c73df0..7d966d06e 100644 --- a/src/main/java/org/ajay/commands/TodoCommand.java +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -14,7 +14,17 @@ public class TodoCommand extends Command { Creates a todo task. Example: """ + COMMAND_WORD; - public static final String MESSAGE_SUCCESS = "Todo has been created!"; + public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + + private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { + ui.printBreakLine(); + ui.printSuccess(MESSAGE_SUCCESS); + ui.printSuccess(tasks.getLatestTask().toString()); + TaskList.printNumberOfTasks(); + ui.printBreakLine(); + + storage.saveTaskList(tasks.getTaskList()); + } @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { @@ -25,8 +35,6 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printExceptions(e.getMessage()); } - System.out.println("Got it. I've added this task:"); - System.out.println(" " + tasks.getLatestTask().toString()); - TaskList.printNumberOfTasks(); + printSuccessMessage(tasks, ui, storage); } } diff --git a/src/main/java/org/ajay/common/Constants.java b/src/main/java/org/ajay/common/Constants.java index 081c87038..d5be3b777 100644 --- a/src/main/java/org/ajay/common/Constants.java +++ b/src/main/java/org/ajay/common/Constants.java @@ -8,4 +8,5 @@ public class Constants { // Constants for the commands public final static String EXIT_COMMAND_ALT = "bye"; + public final static String PADDING = " "; } diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index 154d4c826..1e1ce149d 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -81,7 +81,7 @@ public Task getLatestTask() { public static void printNumberOfTasks() { taskList.trimToSize(); int numberOfTasks = taskList.size(); - System.out.println("Now you have " + numberOfTasks + " tasks in the list."); + TextUi.printSuccess("Now you have " + numberOfTasks + " tasks in the list."); } /** @@ -132,7 +132,7 @@ public static void deleteTask(String task) throws IllegalArgumentException { + Error.OUT_OF_BOUNDS.toString()); } - System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); + TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); taskList.remove(taskNumberDelete - 1); taskList.trimToSize(); printNumberOfTasks(); @@ -145,7 +145,7 @@ public static void deleteTask(int taskNumber) throws IllegalArgumentException { + Error.OUT_OF_BOUNDS.toString()); } - System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); taskList.remove(taskNumber - 1); taskList.trimToSize(); printNumberOfTasks(); @@ -158,7 +158,7 @@ public static void deleteTask(ArrayList taskList, int taskNumber) throws I + Error.OUT_OF_BOUNDS.toString()); } - System.out.println("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); taskList.remove(taskNumber - 1); taskList.trimToSize(); printNumberOfTasks(); diff --git a/src/main/java/org/ajay/data/task/Task.java b/src/main/java/org/ajay/data/task/Task.java index 0ac47696f..1b05d1d8b 100644 --- a/src/main/java/org/ajay/data/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -2,6 +2,7 @@ import org.ajay.data.exceptions.EmptyArgumentException; import org.ajay.data.exceptions.Error; +import org.ajay.ui.TextUi; public abstract class Task { public final static String MARK_COMMAND_STRING = "mark"; @@ -80,7 +81,7 @@ public String getStatusIcon() { public void markAsDone() { this.isDone = true; - System.out.println("Nice! I've marked this task as done: \n " + toString()); + TextUi.printSuccess("Nice! I've marked this task as done: \n " + toString()); } /** @@ -89,7 +90,7 @@ public void markAsDone() { public void markAsUndone() { this.isDone = false; - System.out.println("OK, I've marked this task as not done yet: \n " + this.toString()); + TextUi.printSuccess("OK, I've marked this task as not done yet: \n " + this.toString()); } // public static int setNumberOfTasks(int num) { diff --git a/text-ui-test/input_edge_case.txt b/text-ui-test/input_edge_case.txt deleted file mode 100644 index 8fa0fd935..000000000 --- a/text-ui-test/input_edge_case.txt +++ /dev/null @@ -1,6 +0,0 @@ -todo -deadline weekly CS2113 quiz Monday 9pm -list -event CS2113 lecture /from Friday 4 /to 6 pm -event CS2113 lecture /from Friday 4 6 pm -event CS2113 lecture Friday 4 6 pm From 1ff7aded9931809e1e06951983afe1abaf55e62d Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:03:54 +0800 Subject: [PATCH 74/88] Add JavaDoc for entry of the program --- src/main/java/org/ajay/Jarvis.java | 18 ++--- src/main/java/org/ajay/common/Constants.java | 11 +-- src/main/java/org/ajay/common/Messages.java | 8 ++- src/main/java/org/ajay/ui/Color.java | 3 + src/main/java/org/ajay/ui/TextUi.java | 75 ++++++++++++-------- 5 files changed, 70 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/ajay/Jarvis.java b/src/main/java/org/ajay/Jarvis.java index 86efb3119..712c25e4e 100644 --- a/src/main/java/org/ajay/Jarvis.java +++ b/src/main/java/org/ajay/Jarvis.java @@ -9,6 +9,11 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Jarvis is a personal assistant chatbot that helps to keep track of various + * tasks application. + * Initializes the application and starts the interaction with the user. + */ public class Jarvis { private Storage storage; private TextUi ui; @@ -23,33 +28,28 @@ public Jarvis(String filePath) { } catch (IllegalArgumentException e) { ui.printExceptions(e.getMessage()); - // Create empty task list + /** Create empty task list if tasks storage file not found */ tasks = new TaskList(); } - } + /** Runs the program until termination. */ public void run() { boolean isExit = false; ui.printLogo(); ui.printGreetingMsgs(); - // Scanner object to read input from the user + /** Scanner object to read input from the user */ try (Scanner in = new Scanner(System.in)) { while (!isExit) { - Parser.readInput(in); // Read the input from the user + Parser.readInput(in); Command c = Parser.parseCommand(Parser.command, Parser.task); // Parse the input c.execute(tasks, ui, storage); // Execute the command isExit = c.getExitBool(); // Check if the command is an exit command } } - // catch (Exception e) { - // // catch if scanner system in fails - // ui.printExceptions("Scanner failed to read input" + " " + e.getMessage()); - // } - } public static void main(String[] args) { diff --git a/src/main/java/org/ajay/common/Constants.java b/src/main/java/org/ajay/common/Constants.java index d5be3b777..b89fc09f1 100644 --- a/src/main/java/org/ajay/common/Constants.java +++ b/src/main/java/org/ajay/common/Constants.java @@ -1,12 +1,15 @@ package org.ajay.common; +/** + * Constants class contains all the constants used in the Jarvis chatbot. + */ public class Constants { - // Constants - public static final String CHAT_BOT_NAME = "Jarvis"; // Name of the chatbot + /** Constants */ + public static final String CHAT_BOT_NAME = "Jarvis"; - public static final String FILE_PATH = "data/jarvis.txt"; // File path to store the tasks + public static final String FILE_PATH = "data/jarvis.txt"; - // Constants for the commands + /** Constants for the commands */ public final static String EXIT_COMMAND_ALT = "bye"; public final static String PADDING = " "; } diff --git a/src/main/java/org/ajay/common/Messages.java b/src/main/java/org/ajay/common/Messages.java index 95be32534..cceb9d8c0 100644 --- a/src/main/java/org/ajay/common/Messages.java +++ b/src/main/java/org/ajay/common/Messages.java @@ -2,8 +2,10 @@ import org.ajay.ui.Color; +/** + * Messages class contains all the messages used in the program. + */ public class Messages { - static final String LOGO = """ @@@@@@@@@@@@@@@@@@@@@@@ @@% @@ @@ @@@ @@ -36,16 +38,18 @@ public class Messages { ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ """; + /** Text Messages */ public static final String MESSAGE_PROMPT = Color.ANSI_GREEN + " " + Color.ANSI_RESET; public static final String MESSAGE_BREAKLINE = Color.ANSI_BLACK + "────────────────────────────────────────────────────────────" + Color.ANSI_RESET; public static final String MESSAGE_EXIT = "Bye. Hope to see you again soon!"; + public static final String MESSAGE_LIST_EMPTY = "List is empty."; public static final String MESSAGE_LOGO = "Hello from\n" + Color.ANSI_BLUE + LOGO + Color.ANSI_RESET; public static final String MESSAGE_WELCOME = "Hello! I'm " + Color.ANSI_YELLOW + Constants.CHAT_BOT_NAME + Color.ANSI_RESET + "\nWhat can I do for you?"; public static final String MESSAGE_HELP = "Here are the list of commands you can use: \n1. todo - Adds a todo task to the list \n2. deadline /by - Adds a deadline task to the list \n3. event /from /to - Adds an event task to the list \n4. list - Lists all the tasks in the list \n5. done - Marks the task as done \n6. delete - Deletes the task from the list \n7. find - Finds the tasks with the keyword \n8. help - Shows the list of commands \n9. bye | exit - Exits the program"; - // Exeception messages + /** Exeception messages */ public static final String MESSAGE_EMPTY_ARG = "Empty argument found."; public static final String MESSAGE_ILLEGAL_COMMAND = "Invalid command found."; public static final String MESSAGE_INVALID_COMMAND_FORMAT = "Invalid command format found."; diff --git a/src/main/java/org/ajay/ui/Color.java b/src/main/java/org/ajay/ui/Color.java index 3a04bc78b..66347c294 100644 --- a/src/main/java/org/ajay/ui/Color.java +++ b/src/main/java/org/ajay/ui/Color.java @@ -1,5 +1,8 @@ package org.ajay.ui; +/** + * Color class contains ANSI color codes for text color in the console. + */ public class Color { public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_BLACK = "\u001B[30m"; diff --git a/src/main/java/org/ajay/ui/TextUi.java b/src/main/java/org/ajay/ui/TextUi.java index bbcd73e07..b6043699d 100644 --- a/src/main/java/org/ajay/ui/TextUi.java +++ b/src/main/java/org/ajay/ui/TextUi.java @@ -2,10 +2,12 @@ import org.ajay.common.Messages; +/** + * Text Ui class deals with the user interface of the application. + */ public class TextUi { - /** - * Prints a break line to the console. - */ + + /** Prints a break line to the console. */ public static void printBreakLine() { System.out.println(Messages.MESSAGE_BREAKLINE); } @@ -13,77 +15,90 @@ public static void printBreakLine() { /** * Gracefully exits the program. * - * @param status + * @param status the status code to exit. */ public static void exit(int status) { - System.exit(status); // Print the goodbye message - } // Print the goodbye message + System.exit(status); + } - /** - * Prints the prompt to the console for visual marker for user to type. - */ + /** Prints the prompt to the console for visual marker for user to type. */ public static void printPrompt() { System.out.print(Messages.MESSAGE_PROMPT); } + /** Prints the logo to the console. */ public void printLogo() { System.out.println(Messages.MESSAGE_LOGO); } + /** + * Prints exceptions message to the console in red color. + * + * @param errorMsg The error message to be printed. + */ public static void printExceptions(String errorMsg) { printBreakLine(); System.out.println(Color.ANSI_RED + errorMsg + Color.ANSI_RESET); printBreakLine(); } + /** + * Prints the error message to the console in green color. + * + * @param successMsg The success message to be printed. + */ public static void printSuccess(String successMsg) { System.out.println(Color.ANSI_GREEN + successMsg + Color.ANSI_RESET); } + /** + * Prints the info message to the console in CYAN color. + * + * @param infoMsg The info message to be printed. + */ public static void printInfo(String infoMsg) { System.out.println(Color.ANSI_CYAN + infoMsg + Color.ANSI_RESET); } + /** + * Prints the warning message to the console in yellow color. + * + * @param warningMsg The warning message to be printed. + */ public static void printWarning(String warningMsg) { System.out.println(Color.ANSI_YELLOW + warningMsg + Color.ANSI_RESET); } - /** - * Prints the greeting messages to the console. - */ + /** Prints the greeting messages to the console. */ public void printGreetingMsgs() { - String[] greetings = { Messages.MESSAGE_WELCOME }; // List of greetings - - // Print the greetings - for (String greeting : greetings) { - printBreakLine(); // Print a break line before each greeting - System.out.println(greeting); // Print the greeting + String[] greetingMsgs = { Messages.MESSAGE_WELCOME }; + for (String greetingMsg : greetingMsgs) { + printBreakLine(); + System.out.println(greetingMsg); } printBreakLine(); } - /** - * Prints the goodbye messages to the console. - */ + /** Prints the goodbye messages to the console. */ public void printGoodbyeMsgs() { - String[] goodbyes = { Messages.MESSAGE_EXIT }; // List of goodbye messages - // List of goodbye messages - // Print the goodbye messages - for (String goodbye : goodbyes) { + String[] goodbyeMsgs = { Messages.MESSAGE_EXIT }; + for (String goodbyeMsg : goodbyeMsgs) { printBreakLine(); - System.out.println(goodbye); // Print the goodbye message - } // Print the goodbye message + System.out.println(goodbyeMsg); + } printBreakLine(); + + /** exit gracefully */ exit(0); } + /** Prints the help messages to the console. */ public static void printHelpMsgs() { String[] helpMsgs = { Messages.MESSAGE_HELP }; printBreakLine(); - // Print the help messages for (String helpMsg : helpMsgs) { - System.out.println(helpMsg); // Print the help message - } // Print the help message + System.out.println(helpMsg); + } printBreakLine(); } From c00c7dd58420196c96cf5f5a6bc8f286badcf7f1 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:04:18 +0800 Subject: [PATCH 75/88] Add JavaDoc for storage --- .../java/org/ajay/data/exceptions/Error.java | 32 ++++++-- .../ajay/data/exceptions/JarvisException.java | 3 + src/main/java/org/ajay/parser/Parser.java | 71 +++++++++++------- src/main/java/org/ajay/storage/Storage.java | 75 +++++++++++++------ 4 files changed, 128 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/ajay/data/exceptions/Error.java b/src/main/java/org/ajay/data/exceptions/Error.java index 18ac13ce0..8e771bef5 100644 --- a/src/main/java/org/ajay/data/exceptions/Error.java +++ b/src/main/java/org/ajay/data/exceptions/Error.java @@ -5,34 +5,54 @@ import org.ajay.common.Messages; import org.ajay.data.exceptions.Error; +/** + * Represents an error in Jarvis. + */ public enum Error { EMPTY_ARG(0, Messages.MESSAGE_EMPTY_ARG), ILLEGAL_COMMAND(1, Messages.MESSAGE_ILLEGAL_COMMAND), - INVAILD_COMMAND_FORMAT(2, Messages.MESSAGE_INVALID_COMMAND_FORMAT), OUT_OF_BOUNDS(3, Messages.MESSAGE_OUT_OF_BOUNDS); + INVAILD_COMMAND_FORMAT(2, Messages.MESSAGE_INVALID_COMMAND_FORMAT), + OUT_OF_BOUNDS(3, Messages.MESSAGE_OUT_OF_BOUNDS); private final int code; private final String description; + /** + * Constructor for the Error class. + * + * @param code Error code. + * @param description Description of the error. + */ private Error(int code, String description) { this.code = code; this.description = description; } + /** + * Gets the description of the error. + * + * @return Description of the error. + */ public String getDescription() { return description; } + /** + * Gets the error code. + * + * @return Error code. + */ public int getCode() { return code; } + /** + * Returns the string representation of the error. + * + * @return String representation of the error. + */ @Override public String toString() { return description + " (Error Code: " + code + ")"; } } - -// public enum ErrorLevel { -// SUCCESS, WARN, ERROR, INFO, - -// } diff --git a/src/main/java/org/ajay/data/exceptions/JarvisException.java b/src/main/java/org/ajay/data/exceptions/JarvisException.java index 06e037c62..5bc4dda90 100644 --- a/src/main/java/org/ajay/data/exceptions/JarvisException.java +++ b/src/main/java/org/ajay/data/exceptions/JarvisException.java @@ -1,5 +1,8 @@ package org.ajay.data.exceptions; +/** + * Represents an exception in Jarvis. + */ public class JarvisException extends Exception { public JarvisException(String msg) { super(msg); diff --git a/src/main/java/org/ajay/parser/Parser.java b/src/main/java/org/ajay/parser/Parser.java index a9bd891c0..6f62be1e2 100644 --- a/src/main/java/org/ajay/parser/Parser.java +++ b/src/main/java/org/ajay/parser/Parser.java @@ -18,38 +18,40 @@ import org.ajay.data.exceptions.Error; import org.ajay.ui.TextUi; +/** + * Represents the parser to parse the input from the user. + */ public class Parser { - public static String command = ""; // Variable to store the command public static String task = ""; // Variable to store the task - // public static String lineBufferString = ""; // Buffer to store the input from - // the user - /** * Splits the command and task from the input. * - * @param lineBufferString + * @param lineBufferString The input from the user */ public static void splitCommandAndTask(String lineBufferString) throws EmptyArgumentException { if (lineBufferString.isEmpty()) { - throw new EmptyArgumentException( Messages.MESSAGE_LINE_STRING_EMPTY + " " + Error.EMPTY_ARG.toString()); + throw new EmptyArgumentException(Messages.MESSAGE_LINE_STRING_EMPTY + " " + Error.EMPTY_ARG.toString()); } else { - lineBufferString = lineBufferString.trim(); // Remove any leading or trailing whitespaces + lineBufferString = lineBufferString.trim(); } command = ""; task = ""; - boolean isSingleCommand = (lineBufferString.equals(ListCommand.COMMAND_WORD) || lineBufferString.equals(ExitCommand.COMMAND_WORD) || lineBufferString.equals(HelpCommand.COMMAND_WORD) || lineBufferString.equals(Constants.EXIT_COMMAND_ALT)); + + /** Check if the command is a single word command */ + boolean isSingleCommand = (lineBufferString.equals(ListCommand.COMMAND_WORD) + || lineBufferString.equals(ExitCommand.COMMAND_WORD) + || lineBufferString.equals(HelpCommand.COMMAND_WORD) + || lineBufferString.equals(Constants.EXIT_COMMAND_ALT)); if (lineBufferString.contains(" ")) { command = lineBufferString.split(" ")[0]; task = lineBufferString.substring(command.length() + 1); } else if (isSingleCommand) { - // single word commands command = lineBufferString; - } - else { + } else { throw new EmptyArgumentException(Error.INVAILD_COMMAND_FORMAT.toString()); } } @@ -57,8 +59,8 @@ public static void splitCommandAndTask(String lineBufferString) throws EmptyArgu /** * Reads the input from the user and processes it. * - * @param in - * @param lineBufferString + * @param in Scanner object to read input from the user + * @param lineBufferString The input from the user */ public static void readInput(Scanner in) { try { @@ -68,36 +70,53 @@ public static void readInput(Scanner in) { } catch (EmptyArgumentException e) { TextUi.printExceptions(e.getMessage()); } - } + /** + * Parses the command and returns the appropriate command object. + * + * @param command The command from the user + * @param task The task from the user + * + * @return Command object + */ public static Command parseCommand(String command, String task) { switch (command) { - case ExitCommand.COMMAND_WORD: // Exit the program + case ExitCommand.COMMAND_WORD: + /** Exit the program */ return new ExitCommand(); - case Constants.EXIT_COMMAND_ALT: // Habit of typing exit to exit the program + case Constants.EXIT_COMMAND_ALT: + /** Alternative exit to exit the program */ return new ExitCommand(); - case ListCommand.COMMAND_WORD: // List all the tasks + case ListCommand.COMMAND_WORD: + /** List all the tasks */ return new ListCommand(); - case TodoCommand.COMMAND_WORD: // Add a todo task + case TodoCommand.COMMAND_WORD: + /** Add a todo task */ return new TodoCommand(); - case DeadlineCommand.COMMAND_WORD: // Add a deadline task + case DeadlineCommand.COMMAND_WORD: + /** Add a deadline task */ return new DeadlineCommand(); - case EventCommand.COMMAND_WORD: // Add an event task + case EventCommand.COMMAND_WORD: + /** Add an event task */ return new EventCommand(); - case MarkCommand.COMMAND_WORD: // Mark the task as done + case MarkCommand.COMMAND_WORD: + /** Mark the task as done */ return new MarkCommand(); - case UnmarkCommand.COMMAND_WORD: // Mark the task as undone + case UnmarkCommand.COMMAND_WORD: + /** Mark the task as undone */ return new UnmarkCommand(); - case DeleteCommand.COMMAND_WORD: // Delete the task + case DeleteCommand.COMMAND_WORD: + /** Delete the task */ return new DeleteCommand(); - case HelpCommand.COMMAND_WORD: // Print the help message + case HelpCommand.COMMAND_WORD: + /** Print the help message */ return new HelpCommand(); - case FindCommand.COMMAND_WORD: // Find the task + case FindCommand.COMMAND_WORD: + /** Find the task */ return new FindCommand(); default: return new HelpCommand(); } - } } diff --git a/src/main/java/org/ajay/storage/Storage.java b/src/main/java/org/ajay/storage/Storage.java index 361950c03..522b5c6b2 100644 --- a/src/main/java/org/ajay/storage/Storage.java +++ b/src/main/java/org/ajay/storage/Storage.java @@ -15,32 +15,60 @@ import org.ajay.data.task.Todo; import org.ajay.ui.TextUi; +/** + * Represents the storage of the task list. + */ public class Storage { + /** The file path of the storage file. */ private static String filePath; + /** + * Gets the file path of the storage file. + * + * @return The file path of the storage file. + */ public static String getFilePath() { return filePath; } + /** + * Sets the file path of the storage file. + * + * @param filePath The file path of the storage file. + */ public static void setFilePath(String filePath) { Storage.filePath = filePath; } + /** Default constructor for Storage. */ public Storage() { } + /** + * Constructor for Storage. + * + * @param filePath The file path of the storage file. + */ public Storage(String filePath) { setFilePath(filePath); } + /** + * Loads the task list from the storage file. + * + * @return The task list loaded from the storage file. + * @throws IllegalArgumentException If the file is not found or the data is + * corrupted. + */ public ArrayList load() throws IllegalArgumentException { - ArrayList taskList = new ArrayList<>(); + ArrayList tasks = new ArrayList<>(); - // Check if the file exists + /** Check if the file exists */ File f = new File(filePath); if (!f.exists()) { try { + /** Create the file if it does not exist */ f.getParentFile().mkdirs(); f.createNewFile(); } catch (IOException e) { @@ -49,41 +77,42 @@ public ArrayList load() throws IllegalArgumentException { } } - // Try block to check for exceptions + /** Read the file */ try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { - // Splitting the data + /* Split the line into task type, isDone, and task description */ String[] task = line.split(" \\| "); boolean isDone = false; - if (task[1].equals("1")) { + if (task[Task.DONE_FLAG_LOAD_INDEX].equals("1")) { isDone = true; } - switch (task[0]) { - case Todo.TASK_STRING: - if (task.length < 3) { + switch (task[Task.COMMAND_LOAD_INDEX]) { + case Todo.TASK_ID: + if (task.length < Todo.TASK_LENGTH) { throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_TODO_FAILED); } - - taskList.add(Todo.loadTaskString(isDone, task[2])); + tasks.add(Todo.loadTaskString(isDone, task[Todo.DESCRIPTION_LOAD_INDEX])); break; - case Event.TASK_STRING: - if (task.length < 5) { + case Event.TASK_ID: + if (task.length < Event.TASK_LENGTH) { throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_EVENT_FAILED); } + tasks.add(Event.loadTaskString(isDone, task[Event.DESCRIPTION_LOAD_INDEX], + task[Event.FROM_LOAD_INDEX], task[Event.TO_LOAD_INDEX])); - taskList.add(Event.loadTaskString(isDone, task[2], task[3], task[4])); break; - case Deadline.TASK_STRING: - if (task.length < 4) { + case Deadline.TASK_ID: + if (task.length < Deadline.TASK_LENGTH) { throw new IllegalArgumentException(Messages.MESSAGE_IMPORT_DEADLINE_FAILED); } + tasks.add(Deadline.loadTaskString(isDone, task[Deadline.DESCRIPTION_LOAD_INDEX], + task[Deadline.BY_LOAD_INDEX])); - taskList.add(Deadline.loadTaskString(isDone, task[2], task[3])); break; default: throw new AssertionError(); @@ -95,18 +124,22 @@ public ArrayList load() throws IllegalArgumentException { TextUi.printExceptions(e.getMessage()); } - return taskList; - + return tasks; } - public void saveTaskList(ArrayList taskList) { + /** + * Saves the task list to the storage file. + * + * @param tasks The task list to be saved. + */ + public void saveTaskList(ArrayList tasks) { try (FileWriter fw = new FileWriter(filePath)) { - for (Task task : taskList) { + for (Task task : tasks) { fw.write(task.saveTaskString() + "\n"); } } catch (IOException e) { - TextUi.printExceptions("Unable to write to file: " + filePath); + TextUi.printExceptions(Messages.MESSAGE_FILE_NOT_SAVED + " Unable to write to file: " + filePath); } } } From 22f850b734bc89d5a1c95bdd075d22874d4ffdd7 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:04:37 +0800 Subject: [PATCH 76/88] Add JavaDoc Tasks and Commands --- data/jarvis.txt | 5 + src/main/java/org/ajay/commands/Command.java | 20 +++ .../org/ajay/commands/DeadlineCommand.java | 23 ++- .../java/org/ajay/commands/DeleteCommand.java | 18 +- .../java/org/ajay/commands/EventCommand.java | 26 ++- .../java/org/ajay/commands/ExitCommand.java | 12 +- .../java/org/ajay/commands/FindCommand.java | 10 ++ .../java/org/ajay/commands/HelpCommand.java | 14 +- .../java/org/ajay/commands/ListCommand.java | 14 +- .../java/org/ajay/commands/MarkCommand.java | 12 +- .../java/org/ajay/commands/TodoCommand.java | 20 ++- .../java/org/ajay/commands/UnmarkCommand.java | 12 +- src/main/java/org/ajay/data/TaskList.java | 149 +++++++++++++--- .../java/org/ajay/data/task/Deadline.java | 97 +++++++---- src/main/java/org/ajay/data/task/Event.java | 164 ++++++++++-------- src/main/java/org/ajay/data/task/Task.java | 55 +++--- src/main/java/org/ajay/data/task/Todo.java | 38 +++- text-ui-test/EXPECTED.TXT | 68 ++++---- text-ui-test/input.txt | 1 + 19 files changed, 543 insertions(+), 215 deletions(-) diff --git a/data/jarvis.txt b/data/jarvis.txt index e69de29bb..3793c672f 100644 --- a/data/jarvis.txt +++ b/data/jarvis.txt @@ -0,0 +1,5 @@ +D | 1 | weekly CS2113 quiz | Monday 9pm +T | 0 | Answer CS2113 tutorial questions +T | 0 | read book +D | 0 | return book | June 6th +T | 0 | todo todo diff --git a/src/main/java/org/ajay/commands/Command.java b/src/main/java/org/ajay/commands/Command.java index c1fdca4d5..08ee649af 100644 --- a/src/main/java/org/ajay/commands/Command.java +++ b/src/main/java/org/ajay/commands/Command.java @@ -4,18 +4,38 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Represents a command to be executed + */ public class Command { protected boolean isExit = false; + /** + * Get the exit boolean. + * + * @return boolean representing if the program should exit. + */ public boolean getExitBool() { return isExit; } + /** + * Sets the exit boolean to true. + * + * @param isExit boolean to set the exit boolean to. + */ public void setExitBool(boolean isExit) { this.isExit = isExit; } + /** + * Executes the command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ public void execute(TaskList tasks, TextUi ui, Storage storage) { throw new UnsupportedOperationException("Unimplemented method 'execute'"); } diff --git a/src/main/java/org/ajay/commands/DeadlineCommand.java b/src/main/java/org/ajay/commands/DeadlineCommand.java index 931b45725..bc4f3f5ff 100644 --- a/src/main/java/org/ajay/commands/DeadlineCommand.java +++ b/src/main/java/org/ajay/commands/DeadlineCommand.java @@ -9,14 +9,24 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Creates a deadline task. + */ public class DeadlineCommand extends Command { - public static final String COMMAND_WORD = Deadline.COMMAND_STRING; + public static final String COMMAND_WORD = Deadline.COMMAND_WORD; public static final String MESSAGE_USAGE = """ - Creates a deadline task. - Example: """ + COMMAND_WORD; + Creates a deadline task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + /** + * Prints success message after adding the task. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { ui.printBreakLine(); ui.printSuccess(MESSAGE_SUCCESS); @@ -27,6 +37,13 @@ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { storage.saveTaskList(tasks.getTaskList()); } + /** + * Executes the deadline command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { diff --git a/src/main/java/org/ajay/commands/DeleteCommand.java b/src/main/java/org/ajay/commands/DeleteCommand.java index 8fe9a5ff9..015945b98 100644 --- a/src/main/java/org/ajay/commands/DeleteCommand.java +++ b/src/main/java/org/ajay/commands/DeleteCommand.java @@ -7,15 +7,25 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; -public class DeleteCommand extends Command{ +/** + * Deletes a task from the list. + */ +public class DeleteCommand extends Command { - public static final String COMMAND_WORD = Task.DELETE_COMMAND_STRING; + public static final String COMMAND_WORD = Task.DELETE_COMMAND; public static final String MESSAGE_USAGE = """ - Delete a task from the list. - Example: """ + COMMAND_WORD; + Delete a task from the list. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been deleted"; + /** + * Executes the delete command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { diff --git a/src/main/java/org/ajay/commands/EventCommand.java b/src/main/java/org/ajay/commands/EventCommand.java index 6bf6bf0c8..57cf27275 100644 --- a/src/main/java/org/ajay/commands/EventCommand.java +++ b/src/main/java/org/ajay/commands/EventCommand.java @@ -9,15 +9,25 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; -public class EventCommand extends Command{ +/** + * Creates an event task. + */ +public class EventCommand extends Command { - public static final String COMMAND_WORD = Event.COMMAND_STRING; + public static final String COMMAND_WORD = Event.COMMAND_WORD; public static final String MESSAGE_USAGE = """ - Creates an event task. - Example: """ + COMMAND_WORD; + Creates an event task. + Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + /** + * Prints success message after adding the task. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { ui.printBreakLine(); ui.printSuccess(MESSAGE_SUCCESS); @@ -28,6 +38,13 @@ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { storage.saveTaskList(tasks.getTaskList()); } + /** + * Executes the event command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { @@ -38,7 +55,6 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printExceptions(e.getMessage()); return; } - printSuccessMessage(tasks, ui, storage); } diff --git a/src/main/java/org/ajay/commands/ExitCommand.java b/src/main/java/org/ajay/commands/ExitCommand.java index 5f8d323a1..b819358bb 100644 --- a/src/main/java/org/ajay/commands/ExitCommand.java +++ b/src/main/java/org/ajay/commands/ExitCommand.java @@ -4,6 +4,9 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Exits the program. + */ public class ExitCommand extends Command { public static final String COMMAND_WORD = "exit"; @@ -11,8 +14,13 @@ public class ExitCommand extends Command { Exits the program. Example: """ + COMMAND_WORD; - // public static final String MESSAGE_SUCCESS = "Exiting program..."; - + /** + * Executes the exit command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { super.setExitBool(true); diff --git a/src/main/java/org/ajay/commands/FindCommand.java b/src/main/java/org/ajay/commands/FindCommand.java index 0e4216fa7..7882a6447 100644 --- a/src/main/java/org/ajay/commands/FindCommand.java +++ b/src/main/java/org/ajay/commands/FindCommand.java @@ -7,12 +7,22 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Finds tasks by searching for a keyword. + */ public class FindCommand extends Command { public static final String COMMAND_WORD = "find"; public static final String MESSAGE_USAGE = """ Find tasks by searching for a keyword. Example: """ + COMMAND_WORD; + /** + * Executes the find command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { String keyword = Parser.task; diff --git a/src/main/java/org/ajay/commands/HelpCommand.java b/src/main/java/org/ajay/commands/HelpCommand.java index 2d5ce6228..466742d58 100644 --- a/src/main/java/org/ajay/commands/HelpCommand.java +++ b/src/main/java/org/ajay/commands/HelpCommand.java @@ -4,13 +4,23 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Prints help message. + */ public class HelpCommand extends Command { public static final String COMMAND_WORD = "help"; public static final String MESSAGE_USAGE = """ - Print help message. - Example: """ + COMMAND_WORD; + Print help message. + Example: """ + COMMAND_WORD; + /** + * Executes the help command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { ui.printHelpMsgs(); diff --git a/src/main/java/org/ajay/commands/ListCommand.java b/src/main/java/org/ajay/commands/ListCommand.java index f3edf01a3..a84189e2e 100644 --- a/src/main/java/org/ajay/commands/ListCommand.java +++ b/src/main/java/org/ajay/commands/ListCommand.java @@ -5,17 +5,27 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Lists all tasks in the task list. + */ public class ListCommand extends Command { - public static final String COMMAND_WORD = Task.LIST_COMMAND_STRING; + public static final String COMMAND_WORD = Task.LIST_COMMAND; public static final String MESSAGE_USAGE = """ Clears address book permanently. Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Address book has been cleared!"; + /** + * Executes the list command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { - TaskList.printAllTasksWithStreams(tasks.getTaskList()); + TaskList.printAllTasksWithStreams(tasks.getTaskList()); } } diff --git a/src/main/java/org/ajay/commands/MarkCommand.java b/src/main/java/org/ajay/commands/MarkCommand.java index 2521d75d0..b2441fe22 100644 --- a/src/main/java/org/ajay/commands/MarkCommand.java +++ b/src/main/java/org/ajay/commands/MarkCommand.java @@ -7,15 +7,25 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Marks a task as done. + */ public class MarkCommand extends Command { - public static final String COMMAND_WORD = Task.MARK_COMMAND_STRING; + public static final String COMMAND_WORD = Task.MARK_COMMAND; public static final String MESSAGE_USAGE = """ Marks a task as done. Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been marked as done"; + /** + * Executes the mark command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { diff --git a/src/main/java/org/ajay/commands/TodoCommand.java b/src/main/java/org/ajay/commands/TodoCommand.java index 7d966d06e..5de3de0c9 100644 --- a/src/main/java/org/ajay/commands/TodoCommand.java +++ b/src/main/java/org/ajay/commands/TodoCommand.java @@ -7,15 +7,25 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Represents a command to create a todo task. + */ public class TodoCommand extends Command { - public static final String COMMAND_WORD = Todo.COMMAND_STRING; + public static final String COMMAND_WORD = Todo.COMMAND_WORD; public static final String MESSAGE_USAGE = """ Creates a todo task. Example: """ + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Got it. I've added this task:"; + /** + * Prints the success message after adding the task. + * + * @param tasks The list of tasks. + * @param ui The user interface. + * @param storage The storage object. + */ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { ui.printBreakLine(); ui.printSuccess(MESSAGE_SUCCESS); @@ -26,6 +36,13 @@ private void printSuccessMessage(TaskList tasks, TextUi ui, Storage storage) { storage.saveTaskList(tasks.getTaskList()); } + /** + * Executes the todo command. + * + * @param tasks The list of tasks. + * @param ui The user interface. + * @param storage The storage object. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { @@ -34,7 +51,6 @@ public void execute(TaskList tasks, TextUi ui, Storage storage) { } catch (EmptyArgumentException e) { ui.printExceptions(e.getMessage()); } - printSuccessMessage(tasks, ui, storage); } } diff --git a/src/main/java/org/ajay/commands/UnmarkCommand.java b/src/main/java/org/ajay/commands/UnmarkCommand.java index 2d1371ac6..565fbb6bc 100644 --- a/src/main/java/org/ajay/commands/UnmarkCommand.java +++ b/src/main/java/org/ajay/commands/UnmarkCommand.java @@ -7,14 +7,24 @@ import org.ajay.storage.Storage; import org.ajay.ui.TextUi; +/** + * Unmarks a task as done. + */ public class UnmarkCommand extends Command { - public static final String COMMAND_WORD = Task.UNMARK_COMMAND_STRING; + public static final String COMMAND_WORD = Task.UNMARK_COMMAND; public static final String MESSAGE_USAGE = "Unmarks a task as done.\n" + "Example: " + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Task has been unmarked as done"; + /** + * Executes the unmark command. + * + * @param tasks TaskList containing all tasks. + * @param ui TextUi object to interact with the user. + * @param storage Storage object to save the task list. + */ @Override public void execute(TaskList tasks, TextUi ui, Storage storage) { try { diff --git a/src/main/java/org/ajay/data/TaskList.java b/src/main/java/org/ajay/data/TaskList.java index 1e1ce149d..3da64d096 100644 --- a/src/main/java/org/ajay/data/TaskList.java +++ b/src/main/java/org/ajay/data/TaskList.java @@ -2,26 +2,47 @@ import java.util.ArrayList; import java.util.concurrent.atomic.AtomicInteger; +import org.ajay.common.Messages; import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.IllegalArgumentException; import org.ajay.data.task.Task; import org.ajay.ui.TextUi; +/** + * Represents the list of tasks. + */ public class TaskList { - private static ArrayList taskList = new ArrayList<>(); // ArrayList to store tasks + /** The list of tasks. */ + private static ArrayList taskList = new ArrayList<>(); + /** + * Gets the list of tasks. + * + * @return The list of tasks. + */ public ArrayList getTaskList() { return taskList; } + /** + * Sets the list of tasks. + * + * @param taskList The list of tasks. + */ public final void setTaskList(ArrayList taskList) { TaskList.taskList = taskList; } + /** Default constructor for TaskList. */ public TaskList() { } + /** + * Constructor for TaskList. + * + * @param taskList The list of tasks. + */ public TaskList(ArrayList taskList) { setTaskList(taskList); } @@ -29,7 +50,7 @@ public TaskList(ArrayList taskList) { /** * Adds a task to the list. * - * @param task task to be added + * @param task The task to be added. */ public void addTask(Task task) { taskList.add(task); @@ -38,9 +59,8 @@ public void addTask(Task task) { /** * Marks the task as done. * - * @param taskList list of tasks - * @param taskNumber number of the task to be marked as done - * @throws IllegalArgumentException + * @param taskNumber Number of the task to be marked as done + * @throws IllegalArgumentException If the task number is out of range */ public static void markAsDone(int taskNumber) throws IllegalArgumentException { if (!isValidTaskNumber(taskNumber)) { @@ -51,8 +71,14 @@ public static void markAsDone(int taskNumber) throws IllegalArgumentException { taskList.get(taskNumber - 1).markAsDone(); } - public static void markAsDone(String task) throws IllegalArgumentException { - int taskNumberMark = Integer.parseInt(task); // Get the task number + /** + * Marks the task as done. + * + * @param taskNumber Number of the task to be marked as done + * @throws IllegalArgumentException If the task number is out of range + */ + public static void markAsDone(String taskNumber) throws IllegalArgumentException { + int taskNumberMark = Integer.parseInt(taskNumber); // Get the task number if (!isValidTaskNumber(taskNumberMark)) { throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " @@ -62,6 +88,13 @@ public static void markAsDone(String task) throws IllegalArgumentException { taskList.get(taskNumberMark - 1).markAsDone(); } + /** + * Marks the task as done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as done + * @throws IllegalArgumentException If the task number is out of range + */ public static void markAsDone(ArrayList taskList, int taskNumber) throws IllegalArgumentException { if (!isValidTaskNumber(taskNumber)) { throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " @@ -71,15 +104,20 @@ public static void markAsDone(ArrayList taskList, int taskNumber) throws I taskList.get(taskNumber - 1).markAsDone(); } + /** + * Gets the latest added task in the list. + * + * @return The latest added task in the list. + */ public Task getLatestTask() { return taskList.get(taskList.size() - 1); } - /** - * Prints the number of tasks in the list. - */ + /** Prints the number of tasks in the list. */ public static void printNumberOfTasks() { + /** Ensure that the list is trimmed to size */ taskList.trimToSize(); + int numberOfTasks = taskList.size(); TextUi.printSuccess("Now you have " + numberOfTasks + " tasks in the list."); } @@ -87,9 +125,8 @@ public static void printNumberOfTasks() { /** * Marks the task as not done. * - * @param taskList list of tasks * @param taskNumber number of the task to be marked as not done - * @throws IllegalArgumentException + * @throws IllegalArgumentException If the task number is out of range */ public static void markAsUndone(int taskNumber) throws IllegalArgumentException { if (!isValidTaskNumber(taskNumber)) { @@ -100,6 +137,12 @@ public static void markAsUndone(int taskNumber) throws IllegalArgumentException taskList.get(taskNumber - 1).markAsUndone(); } + /** + * Marks the task as not done. + * + * @param task number of the task to be marked as not done + * @throws IllegalArgumentException + */ public static void markAsUndone(String task) throws IllegalArgumentException { int taskNumberUnmark = Integer.parseInt(task); // Get the task number @@ -111,6 +154,13 @@ public static void markAsUndone(String task) throws IllegalArgumentException { taskList.get(taskNumberUnmark - 1).markAsUndone(); } + /** + * Marks the task as not done. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be marked as not done + * @throws IllegalArgumentException If the task number is out of range + */ public static void markAsUndone(ArrayList taskList, int taskNumber) throws IllegalArgumentException { if (!isValidTaskNumber(taskNumber)) { throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " @@ -120,37 +170,62 @@ public static void markAsUndone(ArrayList taskList, int taskNumber) throws taskList.get(taskNumber - 1).markAsUndone(); } + /** + * Checks if the task number is valid. + * + * @param taskNumber number of the task + * @return true if the task number is valid, false otherwise + */ private static boolean isValidTaskNumber(int taskNumber) { return taskNumber <= taskList.size() && taskNumber > 0; } - public static void deleteTask(String task) throws IllegalArgumentException { - int taskNumberDelete = Integer.parseInt(task); + /** + * Deletes a task from the list. + * + * @param taskNumber number of the task to be deleted + * @throws IllegalArgumentException If the task number is out of range + */ + public static void deleteTask(int taskNumber) throws IllegalArgumentException { - if (!isValidTaskNumber(taskNumberDelete)) { + if (!isValidTaskNumber(taskNumber)) { throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + Error.OUT_OF_BOUNDS.toString()); } - TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); - taskList.remove(taskNumberDelete - 1); + TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); + taskList.remove(taskNumber - 1); taskList.trimToSize(); printNumberOfTasks(); } - public static void deleteTask(int taskNumber) throws IllegalArgumentException { + /** + * Deletes a task from the list. + * + * @param task number of the task to be deleted + * @throws IllegalArgumentException If the task number is out of range + */ + public static void deleteTask(String task) throws IllegalArgumentException { + int taskNumberDelete = Integer.parseInt(task); - if (!isValidTaskNumber(taskNumber)) { + if (!isValidTaskNumber(taskNumberDelete)) { throw new IllegalArgumentException("Invalid task number. Please enter a vaild task number. " + Error.OUT_OF_BOUNDS.toString()); } - TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); - taskList.remove(taskNumber - 1); + TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumberDelete - 1).toString()); + taskList.remove(taskNumberDelete - 1); taskList.trimToSize(); printNumberOfTasks(); } + /** + * Deletes a task from the list. + * + * @param taskList list of tasks + * @param taskNumber number of the task to be deleted + * @throws IllegalArgumentException If the task number is out of range + */ public static void deleteTask(ArrayList taskList, int taskNumber) throws IllegalArgumentException { if (!isValidTaskNumber(taskNumber)) { @@ -160,10 +235,19 @@ public static void deleteTask(ArrayList taskList, int taskNumber) throws I TextUi.printSuccess("Noted. I've removed this task: \n " + taskList.get(taskNumber - 1).toString()); taskList.remove(taskNumber - 1); + + /** Ensure that the list is trimmed to size */ taskList.trimToSize(); + printNumberOfTasks(); } + /** + * Finds a task in the list using stream. + * + * @param keyword keyword to search for + * @return list of tasks found + */ public static ArrayList findTaskWithStreams(String keyword) { ArrayList foundTasks = new ArrayList<>(); taskList.stream().filter(task -> task.getDescription().contains(keyword)).forEach(foundTasks::add); @@ -171,6 +255,13 @@ public static ArrayList findTaskWithStreams(String keyword) { return foundTasks; } + /** + * Finds a task in the list using stream. + * + * @param tasks list of tasks + * @param keyword keyword to search for + * @return list of tasks found + */ public static ArrayList findTaskWithStreams(ArrayList tasks, String keyword) { ArrayList foundTasks = new ArrayList<>(); taskList.stream().filter(task -> task.getDescription().contains(keyword)).forEach(foundTasks::add); @@ -178,9 +269,10 @@ public static ArrayList findTaskWithStreams(ArrayList tasks, String return foundTasks; } + /** Print all the tasks in the list using streams. */ public static void printAllTasksWithStreams() { if (taskList.isEmpty()) { - TextUi.printWarning("The list is empty."); + TextUi.printWarning(Messages.MESSAGE_LIST_EMPTY); } else { // Solution: https://stackoverflow.com/questions/34118412/numbering-in-some-list-java-streams-foreach AtomicInteger counter = new AtomicInteger(1); @@ -189,9 +281,14 @@ public static void printAllTasksWithStreams() { } } + /** + * Prints all the tasks in the list using streams. + * + * @param tasks list of tasks + */ public static void printAllTasksWithStreams(ArrayList tasks) { if (tasks.isEmpty()) { - TextUi.printWarning("The list is empty."); + TextUi.printWarning(Messages.MESSAGE_LIST_EMPTY); } else { AtomicInteger counter = new AtomicInteger(1); System.out.println("Here are the tasks in your list:"); @@ -199,8 +296,6 @@ public static void printAllTasksWithStreams(ArrayList tasks) { } } - - /** * Prints all the tasks in the list. * @@ -208,7 +303,7 @@ public static void printAllTasksWithStreams(ArrayList tasks) { */ public static void printAllTasks(ArrayList taskList) { if (taskList.isEmpty()) { - TextUi.printWarning("The list is empty."); + TextUi.printWarning(Messages.MESSAGE_LIST_EMPTY); } else { System.out.println("Here are the tasks in your list:"); for (int i = 0; i < taskList.size(); i++) { @@ -224,7 +319,7 @@ public static void printAllTasks(ArrayList taskList) { */ public static void printAllTasks() { if (taskList.isEmpty()) { - TextUi.printWarning("The list is empty."); + TextUi.printWarning(Messages.MESSAGE_LIST_EMPTY); } else { System.out.println("Here are the tasks in your list:"); for (int i = 0; i < taskList.size(); i++) { diff --git a/src/main/java/org/ajay/data/task/Deadline.java b/src/main/java/org/ajay/data/task/Deadline.java index e5c8c1377..6f3402856 100644 --- a/src/main/java/org/ajay/data/task/Deadline.java +++ b/src/main/java/org/ajay/data/task/Deadline.java @@ -5,40 +5,53 @@ import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.InvalidCommandFormatException; +/** + * Represents a deadline task. + */ public class Deadline extends Task { - public final static String COMMAND_STRING = "deadline"; - final static String BY_KEYWORD_STRING = "/by"; - public final static String TASK_STRING = "D"; + public final static String COMMAND_WORD = "deadline"; + final static String BY_KEYWORD = "/by"; + public final static String TASK_ID = "D"; + public final static int TASK_LENGTH = 4; + + public static final int BY_LOAD_INDEX = 3; protected String by; /** * Constructor for the Deadline class. * - * @param task description of the deadline - * @throws EmptyArgumentException + * @param task Description of the deadline. * - * @throws InvalidCommandFormatException + * @throws EmptyArgumentException If the description is empty. + * @throws InvalidCommandFormatException If the command format is invalid. */ public Deadline(String task) throws EmptyArgumentException, InvalidCommandFormatException { - super(getDescriptionFromString(task)); - setBy(getDayFromString(task)); + super(getDescriptionInput(task)); + setBy(getByKeywordInput(task)); } /** * Constructor for the Deadline class. * - * @param task description of the deadline - * @param by by date - * @throws EmptyArgumentException + * @param task Description of the deadline. + * @param by By date. + * @throws EmptyArgumentException If the description is empty. */ public Deadline(String task, String by) throws EmptyArgumentException { super(task); setBy(by); - } + /** + * Constructor for the Deadline class. + * + * @param isDone Done state of the deadline. + * @param task Description of the deadline. + * @param by By date. + * @throws EmptyArgumentException If the description is empty. + */ public Deadline(boolean isDone, String task, String by) throws EmptyArgumentException { super(task); setBy(by); @@ -46,45 +59,45 @@ public Deadline(boolean isDone, String task, String by) throws EmptyArgumentExce } /** - * Returns the by date. + * Get the by date. * - * @return + * @return By date. */ public String getBy() { return by; } /** - * Changes the by date. + * Set the by date. * - * @param by + * @param by By date. */ private void setBy(String by) { this.by = by; } /** - * Returns the by date from the input string. - * - * @param input + * Get the by date from the input. * - * @return + * @param input Input string. + * @return By date. + * @throws InvalidCommandFormatException If the command format is invalid. */ - public static String getDayFromString(String input) throws InvalidCommandFormatException { + public static String getByKeywordInput(String input) throws InvalidCommandFormatException { - int indexOfBy = input.indexOf(BY_KEYWORD_STRING); + int indexOfBy = input.indexOf(BY_KEYWORD); int indexAfterBy; // Check if the by keyword is missing if (indexOfBy == -1) { throw new InvalidCommandFormatException( - Messages.MESSAGE_MISSING_KEYWORD + " [" + BY_KEYWORD_STRING + "] " + Messages.MESSAGE_MISSING_KEYWORD + " [" + BY_KEYWORD + "] " + Error.INVAILD_COMMAND_FORMAT.toString()); } else { - indexAfterBy = indexOfBy + BY_KEYWORD_STRING.length(); + indexAfterBy = indexOfBy + BY_KEYWORD.length(); } - // Check if the by date is empty + /** Check if the by date is empty */ if (indexAfterBy == input.length()) { throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); } @@ -93,15 +106,14 @@ public static String getDayFromString(String input) throws InvalidCommandFormatE } /** - * Returns the description from the input string. + * Get the description from the input. * - * @param input - * - * @return + * @param input Input string. + * @return Description. */ - public static String getDescriptionFromString(String input) { + public static String getDescriptionInput(String input) { - int indexOfBy = input.indexOf(BY_KEYWORD_STRING); + int indexOfBy = input.indexOf(BY_KEYWORD); if (indexOfBy != -1) { input = input.substring(0, indexOfBy); @@ -109,18 +121,37 @@ public static String getDescriptionFromString(String input) { return input.trim(); } + /** + * Saves a deadline task to a string. + * + * @return String representation of the deadline task. + */ @Override public String saveTaskString() { - return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + by; + return TASK_ID + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + by; } + /** + * Loads a deadline task from a string. + * + * @param isDone Done state of the deadline. + * @param task Description of the deadline. + * @param by By date. + * @return Deadline task. + * @throws EmptyArgumentException If the description is empty. + */ public static Deadline loadTaskString(boolean isDone, String task, String by) throws EmptyArgumentException { Deadline deadline = new Deadline(isDone, task, by); return deadline; } + /** + * Returns the string representation of the deadline task. + * + * @return String representation of the deadline task. + */ @Override public String toString() { - return "[" + TASK_STRING + "]" + super.toString() + " (by: " + by + ")"; + return "[" + TASK_ID + "]" + super.toString() + " (by: " + by + ")"; } } diff --git a/src/main/java/org/ajay/data/task/Event.java b/src/main/java/org/ajay/data/task/Event.java index ac640c5f6..3623f4fd8 100644 --- a/src/main/java/org/ajay/data/task/Event.java +++ b/src/main/java/org/ajay/data/task/Event.java @@ -5,11 +5,19 @@ import org.ajay.data.exceptions.Error; import org.ajay.data.exceptions.InvalidCommandFormatException; +/** + * Represents an event task. + */ public class Event extends Task { - public final static String COMMAND_STRING = "event"; // Command string for the Event class - final static String FROM_KEYWORD_STRING = "/from"; // Keyword string for the from date - final static String TO_KEYWORD_STRING = "/to"; // Keyword string for the to date - public final static String TASK_STRING = "E"; + public final static String COMMAND_WORD = "event"; // Command string for the Event class + final static String FROM_KEYWORD = "/from"; // Keyword string for the from date + final static String TO_KEYWORD = "/to"; // Keyword string for the to date + public final static String TASK_ID = "E"; + + public final static int TASK_LENGTH = 5; + + public static final int FROM_LOAD_INDEX = 3; + public static final int TO_LOAD_INDEX = 4; protected String from; protected String to; @@ -17,38 +25,39 @@ public class Event extends Task { /** * Constructor for the Event class. * - * @param task description of the event + * @param task Description of the event. * - * @throws EmptyArgumentException - * @throws InvalidCommandFormatException + * @throws EmptyArgumentException If the description is empty. + * @throws InvalidCommandFormatException If the command format is invalid. */ public Event(String task) throws EmptyArgumentException, InvalidCommandFormatException { - super(getDescriptionFromString(task)); - setFrom(getFromFromString(task)); - setTo(getToFromString(task)); - + super(getDescriptionInput(task)); + setFrom(getFromKeywordInput(task)); + setTo(getToKeywordInput(task)); } /** * Constructor for the Event class. * - * @param description description of the event - * @param from from date - * @param to to date + * @param description Description of the event + * @param from From date + * @param to To date + * @throws EmptyArgumentException If the description is empty. */ public Event(String description, String from, String to) throws EmptyArgumentException { super(description); setFrom(from); setTo(to); - } /** * Constructor for the Event class. * - * @param description description of the event - * @param from from date - * @param to to date + * @param isDone Done state of the event + * @param description Description of the event + * @param from From date + * @param to To date + * @throws EmptyArgumentException If the description is empty. */ public Event(boolean isDone, String description, String from, String to) throws EmptyArgumentException { super(description); @@ -58,137 +67,154 @@ public Event(boolean isDone, String description, String from, String to) throws } /** - * Returns the from date. + * Gets date from the event. * - * @return from date + * @return From date. */ public String getFrom() { return from; } /** - * Changes the from date. + * Sets date from the event. * - * @param from + * @param from From date. */ private void setFrom(String from) { this.from = from; } /** - * Returns the to date. + * Get the to date. * - * @return + * @return To date. */ public String getTo() { return to; } /** - * Changes the to date. + * Set the to date. * - * @param to + * @param to To date. */ private void setTo(String to) { this.to = to; } /** - * Returns the description from the input string. - * - * @param input input string + * Get the description from the input string. * - * @return description + * @param input User input string. + * @return Description of the event. + * @throws InvalidCommandFormatException If the command format is invalid. */ - public static String getDescriptionFromString(String input) throws InvalidCommandFormatException { + private static String getDescriptionInput(String input) throws InvalidCommandFormatException { - int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); + int indexOfKeywordFrom = input.indexOf(FROM_KEYWORD); - if (indexOfFrom != -1) { - input = input.substring(0, indexOfFrom); + if (indexOfKeywordFrom != -1) { + input = input.substring(0, indexOfKeywordFrom); } return input.trim(); } /** - * Returns the from date from the input string. - * - * @param input input string + * Get the from date from the input string. * - * @return + * @param input User input string. + * @return From date. + * @throws InvalidCommandFormatException If the command format is invalid. */ - public static String getFromFromString(String input) throws InvalidCommandFormatException { + private static String getFromKeywordInput(String input) throws InvalidCommandFormatException { - int indexOfFrom = input.indexOf(FROM_KEYWORD_STRING); - int indexOfTo = input.indexOf(TO_KEYWORD_STRING); - int indexAfterFrom; + int indexOfKeywordFrom = input.indexOf(FROM_KEYWORD); + int indexOfKeywordTo = input.indexOf(TO_KEYWORD); + int indexAfterKeywordFrom; - boolean isFromBeforeTo = indexOfFrom < indexOfTo; + boolean isFromBeforeTo = indexOfKeywordFrom < indexOfKeywordTo; - if (indexOfFrom == -1 || indexOfTo == -1 ) { + if (indexOfKeywordFrom == -1 || indexOfKeywordTo == -1) { throw new InvalidCommandFormatException( - Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD_STRING + " & " + TO_KEYWORD_STRING +"] " + Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD + " & " + TO_KEYWORD + "] " + Error.INVAILD_COMMAND_FORMAT.toString()); } else if (!isFromBeforeTo) { throw new InvalidCommandFormatException( - Messages.MESSAGE_INVALID_KEYWORK_ARRAGEMENT + " [" + FROM_KEYWORD_STRING + " then " + TO_KEYWORD_STRING +"] "+ Error.INVAILD_COMMAND_FORMAT.toString()); + Messages.MESSAGE_INVALID_KEYWORK_ARRAGEMENT + " [" + FROM_KEYWORD + " then " + TO_KEYWORD + "] " + + Error.INVAILD_COMMAND_FORMAT.toString()); } else { - indexAfterFrom = indexOfFrom + FROM_KEYWORD_STRING.length(); + indexAfterKeywordFrom = indexOfKeywordFrom + FROM_KEYWORD.length(); } - // Check if the from date is empty - if (indexAfterFrom == indexOfTo - 1) { + /** Check if the from date is empty */ + if (indexAfterKeywordFrom == indexOfKeywordTo - 1) { throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); } - - - return input.substring(indexAfterFrom, indexOfTo).trim(); + return input.substring(indexAfterKeywordFrom, indexOfKeywordTo).trim(); } /** - * Returns the to date from the input string. + * Get the to date from the input string. * - * @param input input string - * - * @return + * @param input User input string. + * @return To date. + * @throws InvalidCommandFormatException If the command format is invalid. */ - public static String getToFromString(String input) throws InvalidCommandFormatException { + private static String getToKeywordInput(String input) throws InvalidCommandFormatException { - int indexOfTo = input.indexOf(TO_KEYWORD_STRING); - int indexAfterTo; + int indexOfKeywordTo = input.indexOf(TO_KEYWORD); + int indexAfterKeywordTo; - if (indexOfTo == -1) { + if (indexOfKeywordTo == -1) { throw new InvalidCommandFormatException( - Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD_STRING + " & " + TO_KEYWORD_STRING +"] " + Messages.MESSAGE_MISSING_KEYWORD + " [" + FROM_KEYWORD + " & " + TO_KEYWORD + "] " + Error.INVAILD_COMMAND_FORMAT.toString()); } else { - indexAfterTo = indexOfTo + TO_KEYWORD_STRING.length(); + indexAfterKeywordTo = indexOfKeywordTo + TO_KEYWORD.length(); } - // Check if the to date is empty - if (indexAfterTo == input.length()) { + /** Check if the from date is empty */ + if (indexAfterKeywordTo == input.length()) { throw new InvalidCommandFormatException(Messages.MESSAGE_EMPTY_DATE + " " + Error.EMPTY_ARG.toString()); } - - - return input.substring(indexAfterTo).trim(); + return input.substring(indexAfterKeywordTo).trim(); } + /** + * Saves an event task to a string. + * + * @return String representation of the event task. + */ @Override public String saveTaskString() { - return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + from + " | " + return TASK_ID + " | " + (super.getDoneState() ? "1" : "0") + " | " + description + " | " + from + " | " + to; } + /** + * Loads an event task from a string. + * + * @param isDone Done state of the event. + * @param description Description of the event. + * @param from From date. + * @param to To date. + * @return Event task. + * @throws EmptyArgumentException If the description is empty. + */ public static Event loadTaskString(boolean isDone, String description, String from, String to) throws EmptyArgumentException { Event event = new Event(isDone, description, from, to); return event; } + /** + * Returns the string representation of the event task. + * + * @return String representation of the event task. + */ @Override public String toString() { - return "[" + TASK_STRING + "]" + super.toString() + " (from: " + from + " to: " + to + ")"; + return "[" + TASK_ID + "]" + super.toString() + " (from: " + from + " to: " + to + ")"; } } diff --git a/src/main/java/org/ajay/data/task/Task.java b/src/main/java/org/ajay/data/task/Task.java index 1b05d1d8b..c140c58a2 100644 --- a/src/main/java/org/ajay/data/task/Task.java +++ b/src/main/java/org/ajay/data/task/Task.java @@ -4,11 +4,18 @@ import org.ajay.data.exceptions.Error; import org.ajay.ui.TextUi; +/** + * Represents a task in the task list. + */ public abstract class Task { - public final static String MARK_COMMAND_STRING = "mark"; - public final static String UNMARK_COMMAND_STRING = "unmark"; - public final static String LIST_COMMAND_STRING = "list"; - public final static String DELETE_COMMAND_STRING = "delete"; + public final static String MARK_COMMAND = "mark"; + public final static String UNMARK_COMMAND = "unmark"; + public final static String LIST_COMMAND = "list"; + public final static String DELETE_COMMAND = "delete"; + + public static final int COMMAND_LOAD_INDEX = 0; + public static final int DONE_FLAG_LOAD_INDEX = 1; + public static final int DESCRIPTION_LOAD_INDEX = 2; protected String description; // Description of the task private boolean isDone; // Status of the task @@ -16,24 +23,21 @@ public abstract class Task { /** * Constructor for the Task class. * - * @param description + * @param description Description of the task. + * @throws EmptyArgumentException If the description is empty. */ public Task(String description) throws EmptyArgumentException { - if (description == null || description.isEmpty()) { throw new EmptyArgumentException("Description cannot be empty. " + Error.EMPTY_ARG.toString()); } - this.description = description; this.isDone = false; - - // numberOfTasks++; } /** - * Returns the description of the task. + * Gets the description of the task. * - * @return description of the task + * @return Description of the task. */ public String getDescription() { return this.description; @@ -42,65 +46,57 @@ public String getDescription() { /** * Changes the description of the task. * - * @param newDescription + * @param newDescription New description of the task. */ public void changeDescription(String newDescription) { this.description = newDescription; } /** - * Changes the done state of the task. + * Sets done state of the task. * - * @param bool + * @param bool Done state of the task. */ public void setDoneState(boolean bool) { this.isDone = bool; } /** - * Returns the done state of the task. + * Gets the done state of the task. * - * @return done state of the task + * @return Done state of the task. */ public boolean getDoneState() { return this.isDone; } /** - * Returns the status icon of the task. + * Gets the status icon of the task. * - * @return status icon of the task + * @return Status icon of the task. */ public String getStatusIcon() { return (isDone ? "✓" : " "); } - /** - * Marks the task as done. - */ + /** Marks the task as done. */ public void markAsDone() { this.isDone = true; TextUi.printSuccess("Nice! I've marked this task as done: \n " + toString()); } - /** - * Marks the task as not done. - */ + /** Marks the task as not done. */ public void markAsUndone() { this.isDone = false; TextUi.printSuccess("OK, I've marked this task as not done yet: \n " + this.toString()); } - // public static int setNumberOfTasks(int num) { - // return numberOfTasks = num; - // } - /** * Prints the task to the console. * - * @return task to be printed + * @return String representation of the task. */ @Override public String toString() { @@ -108,5 +104,4 @@ public String toString() { } public abstract String saveTaskString(); - } diff --git a/src/main/java/org/ajay/data/task/Todo.java b/src/main/java/org/ajay/data/task/Todo.java index 1e317a58e..4afcabea5 100644 --- a/src/main/java/org/ajay/data/task/Todo.java +++ b/src/main/java/org/ajay/data/task/Todo.java @@ -2,37 +2,65 @@ import org.ajay.data.exceptions.EmptyArgumentException; +/** + * Represents a todo task. + */ public class Todo extends Task { - public final static String COMMAND_STRING = "todo"; // Command string for the Todo class - public final static String TASK_STRING = "T"; + public final static String COMMAND_WORD = "todo"; + public final static String TASK_ID = "T"; + public final static int TASK_LENGTH = 3; /** * Constructor for the Todo class. * - * @param description + * @param description Description of the todo. */ public Todo(String description) throws EmptyArgumentException { super(description); } + /** + * Constructor for the Todo class. + * + * @param description Description of the todo. + * @param isDone Done state of the todo. + */ public Todo(String description, boolean isDone) throws EmptyArgumentException { super(description); super.setDoneState(isDone); } + /** + * Saves a todo task to a string. + * + * @return String representation of the todo task. + */ @Override public String saveTaskString() { - return TASK_STRING + " | " + (super.getDoneState() ? "1" : "0") + " | " + description; + return TASK_ID + " | " + (super.getDoneState() ? "1" : "0") + " | " + description; } + /** + * Loads a todo task from a string. + * + * @param isDone Done state of the todo. + * @param description Description of the todo. + * @return Todo task. + * @throws EmptyArgumentException If the description is empty. + */ public static Todo loadTaskString(boolean isDone, String description) throws EmptyArgumentException { Todo todo = new Todo(description, isDone); return todo; } + /** + * Returns the string representation of the todo task. + * + * @return String representation of the todo task. + */ @Override public String toString() { - return "[" + TASK_STRING + "]" + super.toString(); + return "[" + TASK_ID + "]" + super.toString(); } } diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 0af498d40..9a87eeea6 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -37,29 +37,33 @@ What can I do for you? Invalid command format found. (Error Code: 2) ──────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────── -Here are the list of commands you can use: -1. todo - Adds a todo task to the list -2. deadline /by - Adds a deadline task to the list -3. event /from /to - Adds an event task to the list -4. list - Lists all the tasks in the list -5. done - Marks the task as done -6. delete - Deletes the task from the list -7. find - Finds the tasks with the keyword -8. help - Shows the list of commands +Here are the list of commands you can use: +1. todo - Adds a todo task to the list +2. deadline /by - Adds a deadline task to the list +3. event /from /to - Adds an event task to the list +4. list - Lists all the tasks in the list +5. done - Marks the task as done +6. delete - Deletes the task from the list +7. find - Finds the tasks with the keyword +8. help - Shows the list of commands 9. bye | exit - Exits the program ──────────────────────────────────────────────────────────── - Got it. I've added this task: - [T][ ] Answer CS2113 tutorial questions -Now you have 1 tasks in the list. + ──────────────────────────────────────────────────────────── +Got it. I've added this task: +[T][ ] Answer CS2113 tutorial questions +Now you have 1 tasks in the list. +────────────────────────────────────────────────────────────  ──────────────────────────────────────────────────────────── Missing keyword found. [/by] Invalid command format found. (Error Code: 2) ────────────────────────────────────────────────────────────  ──────────────────────────────────────────────────────────── Empty date found. Empty argument found. (Error Code: 0) ──────────────────────────────────────────────────────────── - Got it. I've added this task: - [D][ ] weekly CS2113 quiz (by: Monday 9pm) -Now you have 2 tasks in the list. + ──────────────────────────────────────────────────────────── +Got it. I've added this task: + [D][ ] weekly CS2113 quiz (by: Monday 9pm) +Now you have 2 tasks in the list. +────────────────────────────────────────────────────────────  Here are the tasks in your list: 1.[T][ ] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) @@ -72,17 +76,23 @@ Now you have 2 tasks in the list.  ──────────────────────────────────────────────────────────── Empty date found. Empty argument found. (Error Code: 0) ──────────────────────────────────────────────────────────── - Got it. I've added this task: - [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) -Now you have 3 tasks in the list. + ──────────────────────────────────────────────────────────── +Got it. I've added this task: + [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +Now you have 3 tasks in the list. +──────────────────────────────────────────────────────────── + Here are the tasks in your list: +1.[T][ ] Answer CS2113 tutorial questions +2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) +3.[E][ ] CS2113 lecture (from: Friday 4 to: 6 pm)  ──────────────────────────────────────────────────────────── Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) ────────────────────────────────────────────────────────────  ──────────────────────────────────────────────────────────── Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) ──────────────────────────────────────────────────────────── - Nice! I've marked this task as done: - [T][✓] Answer CS2113 tutorial questions + Nice! I've marked this task as done: + [T][✓] Answer CS2113 tutorial questions  Here are the tasks in your list: 1.[T][✓] Answer CS2113 tutorial questions 2.[D][ ] weekly CS2113 quiz (by: Monday 9pm) @@ -93,15 +103,15 @@ Now you have 3 tasks in the list.  ──────────────────────────────────────────────────────────── Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) ──────────────────────────────────────────────────────────── - Noted. I've removed this task: - [T][✓] Answer CS2113 tutorial questions -Now you have 2 tasks in the list. - Noted. I've removed this task: - [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) -Now you have 1 tasks in the list. - Noted. I've removed this task: - [D][ ] weekly CS2113 quiz (by: Monday 9pm) -Now you have 0 tasks in the list. + Noted. I've removed this task: + [T][✓] Answer CS2113 tutorial questions +Now you have 2 tasks in the list. + Noted. I've removed this task: + [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) +Now you have 1 tasks in the list. + Noted. I've removed this task: + [D][ ] weekly CS2113 quiz (by: Monday 9pm) +Now you have 0 tasks in the list.  The list is empty.  ──────────────────────────────────────────────────────────── Bye. Hope to see you again soon! diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index 6f52d4c08..ebf966e91 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -8,6 +8,7 @@ event CS2113 lecture /from Friday 4 6 pm event CS2113 lecture Friday 4 6 pm event CS2113 lecture /from /to 6 pm event CS2113 lecture /from Friday 4 /to 6 pm +find CS2113 mark 100 mark -100 mark 1 From ce50c7b6777eb43efce0554a2095cf6ebc25e420 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:34:16 +0800 Subject: [PATCH 77/88] Update Docs readme --- docs/README.md | 219 +++++++++++++++++++++++++++++++++++++++++---- docs/assets/ui.png | Bin 0 -> 84814 bytes 2 files changed, 203 insertions(+), 16 deletions(-) create mode 100644 docs/assets/ui.png diff --git a/docs/README.md b/docs/README.md index 47b9f984f..df4dafd02 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,30 +1,217 @@ -# Duke User Guide +# Jarvis User Guide -// Update the title above to match the actual product name +**Jarvis** is a desktop app for managing tasks, optimized for use via a Command Line Interface (CLI). If you can type fast, Jarvis can help you manage your tasks faster than traditional Graphical User Interface (GUI) apps. -// Product screenshot goes here +--- -// Product intro goes here +## Table of Contents -## Adding deadlines +- [Jarvis User Guide](#jarvis-user-guide) + - [Table of Contents](#table-of-contents) + - [Quick Start](#quick-start) + - [Features](#features) + - [Adding a Todo Task: `todo`](#adding-a-todo-task-todo) + - [Adding a Deadline Task: `deadline`](#adding-a-deadline-task-deadline) + - [Adding an Event Task: `event`](#adding-an-event-task-event) + - [Listing All Tasks: `list`](#listing-all-tasks-list) + - [Marking a Task as Done: `mark`](#marking-a-task-as-done-mark) + - [Unmarking a Task: `unmark`](#unmarking-a-task-unmark) + - [Finding Tasks: `find`](#finding-tasks-find) + - [Deleting a Task: `delete`](#deleting-a-task-delete) + - [Exiting the Application: `bye` or `exit`](#exiting-the-application-bye-or-exit) + - [Saving Data](#saving-data) + - [FAQ](#faq) + - [Q: How do I transfer my data to another computer?](#q-how-do-i-transfer-my-data-to-another-computer) + - [Editing the Data File](#editing-the-data-file) + - [Command Summary](#command-summary) -// Describe the action and its outcome. +--- +## Quick Start -// Give examples of usage +Ensure you have Java 17 or above installed on your computer. You may download Java 17 for your respective system [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html). -Example: `keyword (optional arguments)` +1. Download the latest Jarvis JAR file from the releases page [here](https://github.com/NCF3535/ip/releases). -// A description of the expected outcome goes here +2. Copy the file to the folder you want to use as the home folder for Jarvis. -``` -expected output -``` +3. Locate Your JAR File and copy the file path. Example:`C:\Users\YourUsername\Downloads` -## Feature ABC +4. Open a command terminal + - Windows: Click on the Start button and type `cmd`, then press `Enter` to open the Command Prompt. + - macOS/Linux: Press `Command + Space`, type `Terminal`, and hit `Enter` to open the Terminal. -// Feature details +5. Use `cd` to go to the folder where your JAR file is located. Example: + `cd C:\Users\YourUsername\Downloads` -## Feature XYZ +6. Run the application using the following command: -// Feature details \ No newline at end of file + `java -jar jarvis.jar` + +7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: + ![image](./ui.png) + +8. Type the command in the terminal and press Enter to execute it. Some example commands you can try: + - *list* : Lists all tasks. + - *todo* Read book : Adds a task named "Read book" to your task list. + - *deadline* Submit report /by Aug 20 23:59 : Adds a deadline task for "Submit report". + - *event* Team meeting /from Sept 1 14:00 /to 16:00 : Adds an event named "Team meeting" with start and end times. + - *delete* 2 : Deletes the 2rd task shown in the current list. + - *bye* or *exit* : Exits the application. + +9. Refer to the Features section below for more details about each command. + +--- + +## Features + + +### Adding a Todo Task: `todo` + +Adds a general task. + +**Format**: +```todo DESCRIPTION``` + +**Examples**: +- `todo Read book` Adds a todo task named "Read book" to the list. +- `todo buy groceries` Adds "buy groceries" as a todo task to the list. + + +### Adding a Deadline Task: `deadline` + +Adds a task with a specific deadline. Useful for time-sensitive tasks. + +**Format**: +```deadline DESCRIPTION /by DATE_TIME``` + +**Examples**: +- `deadline Submit CG2113 assignment /by Oct 10 6pm` Adds a task "Submit CS2113 assignment" with a deadline of 10th October 2024 at 6PM. +- `deadline pay rent /by Dec 1` Adds "pay rent" with a deadline of Dec 1. + + +### Adding an Event Task: `event` + +Adds a task with both a start and end time. Ideal for scheduling events like meetings. + +**Format**: +```event DESCRIPTION /from START_DATE_TIME /to END_DATE_TIME``` + +- Note: Ensure that the /from is require **comes before** /to. + +**Examples**: +- `event Team lunch /from Dec 13 2pm 4pm` Adds "Team lunch" from 2PM on 13th December 2024 to 4PM on same day. +- `event dinner with friends /from 18:00 /to 21:00` Adds "dinner with friends" from 6PM to 9PM. + + + +### Listing All Tasks: `list` + +Displays a list of all tasks currently saved. + +**Format**: +```list``` + +**Example**: +- `list` Lists all tasks in your task list, showing their status (done or pending). + + + +### Marking a Task as Done: `mark` + +Marks a task as completed. + +**Format**: +```mark TASK_NUMBER``` + +**Examples**: +- `mark 1` Marks the 1st task in the list as done. +- `mark 3` Marks the 3nd task in the list as done. + + + +### Unmarking a Task: `unmark` + +Marks a task as not completed (undoes the 'done' status). + +**Format**: +```unmark TASK_NUMBER``` + +**Examples**: +- `unmark 1` Unmarks the 1st task in the list as not done. +- `unmark 2` Unmarks the 2rd task in the list as not done. + +### Finding Tasks: `find` + +Searches for tasks that contain a specific keyword. The number shown on the result corresponds to the original list. + +**Format**: +```find KEYWORD``` + +- Note: The search is case-sensitive. For example, `book` will not match `Book` and `BOOK`. + +**Examples**: +- `find book` Searches for all tasks that contain the word "book" and displays the results. +- `find meeting` Searches for tasks that contain the word "meeting". + + +### Deleting a Task: `delete` + +Removes a task from the task list. + +**Format**: +```delete TASK_NUMBER``` + +**Examples**: +- `list` followed by `delete 2` deletes the 2nd task in the list. + + +### Exiting the Application: `bye` or `exit` + +Exits the Jarvis application. + +**Format**: +```bye``` or ```exit``` + +**Example**: +- `bye` or `exit` Closes the application. + + + +### Saving Data + +Jarvis automatically saves your tasks to the `data/jarvis.txt` file after any changes. There is no need for manual saving. + +--- + +## FAQ + +### Q: How do I transfer my data to another computer? + +A: Install the Jarvis application on the other computer and copy the `data/jarvis.txt` file to the new computer. Ensure that the file is located in the same directory as the JAR file. When you run the application, your tasks will be loaded from the file. + +--- + +## Editing the Data File + +Jarvis automatically saves your task data in a text file located at `./data/jarvis.txt`, relative to the directory where you run the program. Advanced users can update their tasks by directly editing this file. + +> ⚠️**Caution:** Be cautious when editing the file directly, as improper formatting may cause errors or data loss when the application is next launched. + +--- + +## Command Summary + +| **Action** | **Format, Examples** | +|-----------|---------------------------------------------------------------------------------------------------------------------| +| **Todo** | ```todo DESCRIPTION```
e.g., ```todo Read a book``` | +| **Deadline** | ```deadline DESCRIPTION /by DATE_TIME```
e.g., ```deadline Submit report /by Sept 9 1pm``` | +| **Event** | ```event DESCRIPTION /from START_DATE_TIME /to END_DATE_TIME```
e.g., ```event Team meeting /from 2pm /to 4pm``` | +| **List** | ```list``` | +| **Mark** | ```mark TASK_NUMBER```
e.g., ```mark 1``` | +| **Unmark** | ```unmark TASK_NUMBER```
e.g., ```unmark 1``` | +| **Find** | ```find KEYWORD```
e.g., ```find book``` | +| **Delete** | ```delete TASK_NUMBER```
e.g., ```delete 2``` | +| **Exit** | ```bye``` or ```exit``` | + +--- diff --git a/docs/assets/ui.png b/docs/assets/ui.png new file mode 100644 index 0000000000000000000000000000000000000000..3f07a19763a15d785636d6a4fab5e8eed25f8a1e GIT binary patch literal 84814 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 z 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

cRU|YZ9?hKD{Wp(b>x89PU@NtjXW7aAw(K* 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 literal 0 HcmV?d00001 From def515e134f4ffa256442332218a546297ff790e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:36:29 +0800 Subject: [PATCH 78/88] Update runtest --- text-ui-test/EXPECTED.TXT | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 9a87eeea6..7c19e0a1f 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -37,15 +37,15 @@ What can I do for you? Invalid command format found. (Error Code: 2) ──────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────── -Here are the list of commands you can use: -1. todo - Adds a todo task to the list -2. deadline /by - Adds a deadline task to the list -3. event /from /to - Adds an event task to the list -4. list - Lists all the tasks in the list -5. done - Marks the task as done -6. delete - Deletes the task from the list -7. find - Finds the tasks with the keyword -8. help - Shows the list of commands +Here are the list of commands you can use: +1. todo - Adds a todo task to the list +2. deadline /by - Adds a deadline task to the list +3. event /from /to - Adds an event task to the list +4. list - Lists all the tasks in the list +5. done - Marks the task as done +6. delete - Deletes the task from the list +7. find - Finds the tasks with the keyword +8. help - Shows the list of commands 9. bye | exit - Exits the program ────────────────────────────────────────────────────────────  ──────────────────────────────────────────────────────────── @@ -91,7 +91,7 @@ Here are the list of commands you can use:  ──────────────────────────────────────────────────────────── Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) ──────────────────────────────────────────────────────────── - Nice! I've marked this task as done: + Nice! I've marked this task as done: [T][✓] Answer CS2113 tutorial questions  Here are the tasks in your list: 1.[T][✓] Answer CS2113 tutorial questions @@ -103,16 +103,16 @@ Here are the list of commands you can use:  ──────────────────────────────────────────────────────────── Invalid task number. Please enter a vaild task number. Number is out of bounds. (Error Code: 3) ──────────────────────────────────────────────────────────── - Noted. I've removed this task: + Noted. I've removed this task: [T][✓] Answer CS2113 tutorial questions Now you have 2 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [E][ ] CS2113 lecture (from: Friday 4 to: 6 pm) Now you have 1 tasks in the list. - Noted. I've removed this task: + Noted. I've removed this task: [D][ ] weekly CS2113 quiz (by: Monday 9pm) Now you have 0 tasks in the list. - The list is empty. + List is empty.  ──────────────────────────────────────────────────────────── Bye. Hope to see you again soon! ──────────────────────────────────────────────────────────── From 9d7fc3ef4576580b38f906d51de6ea913d9c1872 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:41:06 +0800 Subject: [PATCH 79/88] Update image path --- docs/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index df4dafd02..b7fd16c61 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,7 +30,7 @@ Ensure you have Java 17 or above installed on your computer. You may download Java 17 for your respective system [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html). -1. Download the latest Jarvis JAR file from the releases page [here](https://github.com/NCF3535/ip/releases). +1. Download the latest Jarvis JAR file from the releases page [here](https://github.com/AjayShanker-geek/ip/releases). 2. Copy the file to the folder you want to use as the home folder for Jarvis. @@ -49,7 +49,7 @@ Ensure you have Java 17 or above installed on your computer. You may download Ja `java -jar jarvis.jar` 7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: - ![image](./ui.png) + ![image](/ip/assets/logo.png) 8. Type the command in the terminal and press Enter to execute it. Some example commands you can try: - *list* : Lists all tasks. @@ -59,7 +59,7 @@ Ensure you have Java 17 or above installed on your computer. You may download Ja - *delete* 2 : Deletes the 2rd task shown in the current list. - *bye* or *exit* : Exits the application. -9. Refer to the Features section below for more details about each command. +9. Refer to the Features section below for more details about each command. --- From 4e090f20880288ec549621d3880db74825aafb9e Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:45:18 +0800 Subject: [PATCH 80/88] Fix image path --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index b7fd16c61..e363c5776 100644 --- a/docs/README.md +++ b/docs/README.md @@ -49,7 +49,7 @@ Ensure you have Java 17 or above installed on your computer. You may download Ja `java -jar jarvis.jar` 7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: - ![image](/ip/assets/logo.png) + ![Jarvis User-Interface](/ip/assets/ui.png) 8. Type the command in the terminal and press Enter to execute it. Some example commands you can try: - *list* : Lists all tasks. From 4d5dc58b0cee66ba40ce3edb58b981c0199ce706 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:49:33 +0800 Subject: [PATCH 81/88] Resize image --- docs/README.md | 3 ++- docs/assets/ui.png | Bin 84814 -> 173418 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index e363c5776..9eef6f4c3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -49,7 +49,8 @@ Ensure you have Java 17 or above installed on your computer. You may download Ja `java -jar jarvis.jar` 7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: - ![Jarvis User-Interface](/ip/assets/ui.png) + +![Jarvis User-Interface](/ip/assets/ui.png) 8. Type the command in the terminal and press Enter to execute it. Some example commands you can try: - *list* : Lists all tasks. diff --git a/docs/assets/ui.png b/docs/assets/ui.png index 3f07a19763a15d785636d6a4fab5e8eed25f8a1e..be5179014e402541d38eb68b58844e0dd2dac04e 100644 GIT binary patch literal 173418 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ℑiXOtMCPjg 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 z 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 literal 84814 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 z z_V$h*Yka!MXE|kwZB}e;#r}Mg`}#{J-%M_qdCTDy7>{fF^9vNyKY|l z`%9=U-`aRIE5Uc6SL^R@R)4<#4Tlmk^dA4;FW!B*fu|yEdjz?(zO7Y<O zVP3UVKdJ_qp6P3H5HpCZ8GePRtwH`v>cCI(#1lMo5mnTK=%L4_&}+E@pTt2fW*8Sq*b(lR%BA1kL!;972R+EBuad_i;+% z`?jUBXtz-CPqV65y%iZyz1IX}t$SgZ3y~|K^m%Jgxd{`ZInfzlQ|e_?IY2D`iqm30 z^0^BOQP4WO257*H_JlmD5fO&Ym##-K_9Fx@vZe7;JeQ!a2Bc}9tUD-)hG%zEZkS!! zMq=g3M8s%M55(IlLdxM@qeU($wS^S1>YJHsafCU+sD88k1nC})jWq9tks1UEp8;1Pr8l33yZk5GQU1U>>Gtn`Cyi$tB zw|Yo6q+u+=$N9;rnYulp;XOX}#8%xglxcqjrop4s*DN8KrhlxCs?q;$9>!joTxpkfc^?G&3D#^$ z)RzSM@f(04#n<&SW)>t(Vx>`J{2L^QdsJ4Q5iSLXlUvDC4MPx5R^P;zeZ<2Puwv@+ z+X$8ftvqb4j{0Qnc$WMd4rIao-qGkebi*vfSr0|0<1_^v9H&y5o5c>ghYK!dlNUra zt9c&7@z#x0yDS{vx{j)F9OnzSYVJTg#?(r;OW>#zRSKrmiHXmvm)252?R zap^I5+0|N47P0({X+GHE!~hA4!5IsO6>nE5*W6bnDb3XrEL2jpmx;G;(&~hzc7!28 zHw$uob_m_*y)vvr%tCQ?~$rs_<>C=+{gXO{p(jxM@K4 znf>}4YgzlLL*P;Ev~HHUl$@NB@YW31k5mhL%0<-W1#+naE4c{qZ>6Wmj}Mk6G3 zGC%P<`gSCSM`>SXok3zA62965H>;DgJ@qacCK|oqy;U4W5!70a)|UdZjoEkMseE+~ zlhanT?zVtwVO(${f~JYgZ;fCTtaM*o)^_!hVrkz8VdhTYwg@j;!e|0AbD(E+O21LL zZw1z>S4Xw!*3oIPTiz1<)yJ`?@6$4uO{JejB0eO>&WDN#|11^Kb^=*?;qgLm-}2f1 zG-o3%M{`Bh7|*87w~DoSD*V-lU#xNiNi55q8nQ`Zp>-n;$91a6K20s}#UpStKH?FV z;rJ(N5%p7>Y0r|@SWkAE2web{{phT08CjySSPU^bj#<57v4pbocX1Wt8(iVnbYGhq zt;hOdbF~HCoExFC#ml<`5!v0I0WBe)WNLTe7^0}5w>WZmW${Yit83#y`mJ=0wGRlMidUmrA{OC7S~xrj8gOux65$^sni_jj5hrH;u@&T*Dw6 zPchrqCi3)X(a6Rk7PTWG;yE2Nu;9ZACkY0o57`GWPT^)#1WJ?cfqlLk?^WZsJ>v9f zhN7D!zJWFW$iOa9Z!JC{g8t=D_o_&_T=&3io)p}0G`4caHyAd|$!ee8gX#7U(c79D zH6^_BbR?}^KfIkMw#0FgYRF}~gmPwzYcf*c`N`AYOzKLgUFAW8vza3JRoL4^FI$@k z%M469fiR3Y0g~Z~gcfPqYrktDO~j>POK4EQj0DSj!o+WY>I@}Sx7`wzvFdJiwo4zy zmn-`QI0PD#rrr->nwX2@5&m*@%qBu+A~eFh91^oe7vUwUu#ULOa(@>70()evbTIW6 zTcU%qH}96s_%sqSYq>IMmr%?JlUm!g>Ex@AGgpgi$hT18?XxxAgBi<@fJJeF|bv(=9IVHG~AzmKU0S6~08Y!_Kyh$Yd%9U~foHS? ze3Kb$TUZvOp{$#wI`9tb=n2E-t>i@%FFcgY*Q1%C*7lr21%=SW#A;gwnQj9d$eE*x z=94up8bohY`LQ!qh@^i?&E?f#(Jg6(@j3%c(3Zw z7~?)3$eJcmxHQytB82j`FJdjtmXd)>ytBX!_IwvjpV8n)6BR?ZCS-2wSyi8?=&nAF z3x8j252+uiB}e7TxM7i_4d-o+T((z9@$-s-iR;z*tu^Qgv6g4AM(qChoXe$ls=rq`TRkdBFrQWPAk9``W!(x4wQZL)sq+s9%1Rm6 z6}!eAeXf6HI0i|OnFgdxNE%}#L(gd~mFj7$hxeKun5ZhLoiLj7SjFG7HS|fMZrkxC z^0BWUJvZoE7=}oXYdzi#Ye3d6kTRNSdNbU?^9NjOKk>Bq+h)>JZ6g|K19WXne+W^l zMAZPx!%l0K_ir}G{sx3Zqb{yq7+l0}3C4*H4Z=3#gikx{USi0HWPK3%uF-K6xs=&a zZeDK-uWBQ%tWbzc`GndZX%y3dI_?eCqxb6t^=s&r#0W_kuoWr>d#f$JR^Qt><=ru@ zJpf6;AQz2`N6)I@q1o$j$SWoPKDQywh^FC+Sr#N-!7SxjTyMoNZ`v~IRDvAe1#mwQ zyUo-+D=ojky$(RKSC9u;)VD67VxpUj2;$9oQ>-6d$yEr z)1<*U^6E?*?q1tQot@TfaZ=!esXjpgCSg!d9vXaQFKVGa{p@UmR!QgAk-enQn!6&l zvfB*+9t-qY=*6t1kl!?*UTH)Sp}n?XD)F5?F=bvd>gz@)Owt3MvpR3rGnN~i#EJ_c ztCDUvBz^6F4=E={IX!9QJqK`xmmy-&QD*;p+UIQ4r;@Nz3LSWIMnR{HjU2XYx6}GP z3eWsJ*uLy^kC@rI&192v^tD7BWyO&isYc_ufl^Gj<opa9yS}!%}u|c+2UmqHS4|(MP;Xazx^(-;NUM=Fmz@uFO1JYq8 z-dKbKstHmP8Ztq35G)=IZS7X^W_ucQ2}ioZwv#9JWm`C}fK(VwU8=L0q(?j8P?ngL zVg^Z5rF7qg?LaG?Uk?AhG}$e55roX&!yo_harz&aROi==dja-|zm5C+OUb0q{{6+9 zjlW*}9oUobg0=Y1FNCeX=vN;6UeRNI=Pws;14~fat84Vv=ONi|>Rrz<{L;T(6b1#? zi4QW^+zHk+X`p4)aa>mFQ1h(1dt84REWIDSvYGbb8;O`Ep-ejCB-I^Y=%BC9YsEOY zc=Wzjwy+Q{(Um|wnYH~|`?JVOT=A$*UYi;3*7K2EeR#LjYWYLX4SUFw-S7|RQ+4xq zN>i@?y+{&4fgTgi!A~d9RCoi5$;( zv^n|BW*_E*e%FQpf)NRR9cdffaf#M~<`H*1lRoQ`Ne}aGE1als=&$gosdfF73C(-? z-@QZaMggsrWb*AHn}IDuv{u0yYBQz-b|;;h6F^)oZ}Y*Vv#O-(J=dZR2=9CWQdIW0BO#_=mMJR14C%n? zFnU?+fK({1dyVbqt4lruEx+CiS=ILi~UyZ9T-|2T9|Fxiq6cZBSBsZdpv(*QWf#w*gZCyYbZ+I-w!)0*Om4au5ShyKlqL9?%Krv3#m z0>h*tv`R^7tp22Kd5NWU2f2B~ewOXZCC{h4 z+-M2QY*>C2%Hj;3$w{i*#+*WSqs_a+J6nGO^SA`PEOUtz#D-nD2iNtQd+oIMdy$t* zMw5Q;MJ|tPZNXdy4b>PPeq z>{QnR_dc0VXbxgllk9% z9{B1mazTKK_x`%ohow+kg5E&r>Wz5J*wTRKgRrj+xn#L+m`6?;5Qxhz>yo4>I)?y`?n0FLCmo1O8i%AC>Ll zROzzX9hhm|UF5g9r%#Bx80I3Sc}wZge$L~fUm`Wk9AtgAJY601LDkzV;h~v+B=6Nw z9_O|9#=bn6{#EJWZw{iUg_$+f;BXugL#fT^MuIYDenZr@b$2ZJZZ+#+gMX^`v(U!% z^**2S(oc7-rQuIP3 z-d^`O&Anrn(-G@}P8{&cGuZtEM2pLv&ua0nRflHA5lhoM-qbnPfAo4imv?C=8x&0J zb zhgwg9MEsUS-M*e^rVDW;G5gm;>y_D?A;R-Yz+qAHl=JewEjdZG?i4Vt^dI5E1cvvK z@cKf|OYhXFpfUm(Yg!JM7<1tJLgeTg;d#I?wx;|>G28Yeboq>T)7@j0$a&>(mJnNxpF^aZj2 zETxHA{+iQ|ivZJ6vyuH3X}s9%t6wyZ?fL~&{A+QcE}Q`oRH*m(f=a+cfhS{2X=>Qn zp88fV;_9t1rxmJqD}M@g;QXW?L}WPHh7a#rsqBMmy+}i-z5a4>_sLA9>l2y-iC%ia z&1*|ZTH2|U&y;}~F=k2FqF!lG(kdf4+Iyu0zXAQ1RSIDE4D@{>>X-v7v zsGG*{T1TGKUqduc5yL*u-#8WZ1V&&r z*)Is5%$Hu_48As6Dsc_w@vN5V1MeO+PTdj}3P|vxVAv`D;8~x1D;RS^f~T}}QSIpP zjs4!4sj=ur%YiS_R&)cgP&?d*>)8a(MQdbpe?UNIogBZ)b+$jR*Tn-JVwFLM#v*Up ztPz(MT~IKRDzY(5y}lB>a3%rMQ}&+udVveAQR*-(z1*<2Sba6mFbe^kY1+E`{-8Od z{{Xq}n-j`!EI}#0F25}hcZ>$}#?+ir*OjlT9Up?Et3lD}eal9zKdDWz(1Fup?zc2e zG80@D3K?z$$YRNHT5q;WM0`5s-8aWwVbkplVn!y+)NKdh_-<{mXT8aHZ!tDk=w(^h z(eoMvH`QRED`(H~o|99zD^S#~E?QFr^<5=t ziry^6!I7$K;Vne-WsW_#u#Q|LZjfh<)<}#AV|94-uU;R2_dH2|C%Dy>r`G$k-jD?g zG^^nLqn#^!17-2Lgr+a~Cu-yrGf|>6Cy}6lBjw=-rBjMx!D=oR~o#3wrm1Hu1cy)dvARznum80z-q$K zZN(!ZldQ-z>brn})f7j3--(6%)9Pymt!Ee}GBl+`MP*`$zQj^>i`AL#hu|R>A8B-K zmDeZoaQ|`r0C2ycYokMYo~-1kks&7H2*o#eWMfJ#Xu_ZYYcrPn4P+Og9ssNoj0-aK zX*``zQ&!8g7w_u%^&@&`ycwi&Z3e`pU2Xu>dP_RsAiJHMFmQ5kAISp)w=|82BFe@I zm*TrzXJw52yT^QjO*G&_rzw^cp4*ZOFM^ktcbe2kTork*gP1p-@ZioRVO}POv%QL_ z$~Ruc%d=vn>X)@wD;+oqbik}P-Mn76v6$%uURcRvL=13XiYejiWY4=ZQ7c`q#!aqW zWAz1;oF55eHTzR5$|Xp6O4!^C5+B$fR!4% z>I7y?K+nV^V`Dp>vlCLW>{cT74Cew!jR8Pvre-C>HP_x`f{e7fx`tAZ%9ey^`H(B>`ol7QsD#H6iosQD#j(nkje;U0Gg>sqXQD zPo5eT054Zd*`+uIUh7KCM0|EhYB-vR~-gdRUqQVQD|PJ$qdLVf^-jrOM8L{(KC`jhUO)frsgkpMa%S)zgvZ@VMh zCk-QYCGH$a>i-QYbIR~CFXv(U%qw0LTtx}iB0-k| z6|p$5XXeoX;R1F_3GEL4Ex4N%Y$=TvEGNMBcUE*BqJ)K-zZaqDi{pGFDMyJJIHh-Gde=GNx2gdH4YH7I}lxVVMn<$w)76|r>w?a*9{W^GM=9Xfg8Pc+vXD{ZN8K>0<+2ADNBd^=&6sM6Kj*XM$92~n6^*MpfY?J3au=UiJAJy8-xq9TnT&kDPYUxVR%0tO+ zW!ujo$mQLO)gyg6(o!7sYk?m20|%fg9`o0&fL;N<7mGRsmU(xy{OoU0p!OL6wa@43 zF3sZCy~x+EXnHSqg$`76Z@zmAB>8R5(x@}jx{0^m2!S-XC+o<5&M0<`dc!5Pn$uKJ z@6-9z!;Q0Lw67L>O-gOY5O#I1eJ+7ycK$Y>#{rPcUKPVMPY@Z~{Gxa`=q+4(O?L}f zf&IDc`}jEf``zEc7Wl7FfQv}`k4ygj8h9~1U{DSnZ3g`E-ymBZxIgv5p2WXj&sNP>f*JUPF$L+n+f6ghNxvA;7E7m zR-uA}zpykDJ;-#;YSB#CvwqfBdYgL9UD9tYHxF}m`fP1{V=^!K0zm=?RqZ{32;rXqDZxYpZI79BEIaz6}uc^9!Ed-FVCYk%z&NG9%h6k(iV!(3-6| zwKiI$oZ<)3R2xybpoig)%y-1$%f~M1c_OkQ)`A?|pFutJ*aGr#Q&c@C-w-sRKdcGv zO{He~NWQNBOreV?Ta7HGh7^Q_WBJ((ejw0cO}21E6n({OgAOw^2BDNfx29~J{S?Z( z``%-)rxnu%8oZ05M*)z-tC3uj>990V>fWR1LHO-lK$hSzGKu94=c`SsB`)4 zZW^jY??(wX)gBJjzvU?xL^_|ah z#~i>jqx4A86V)p!n5@dLN-0l!twY~xV}@mC^+w&5%>+)ci02>ZIr3y{;9}7rQ5G)6*mCzHs`}CEyELz!$jV4bSqP`^|T~z2wpR zXM4%$U$mDXDSjEZLJpmbq$dpT1S;hcIhnDWz3$z(<`LfALiWHq7PsBoz}dyUgq~;+C*Lmoi@0(5XDf$<4#R}s@4r5D9@eO)0>W%z z>)kIWz|Y(N>z`jZ`{e`5aV$@VbeR?}r9HrI-6ENTVjk)xoh~QmbL^%OM(*=1xtFwX z>`gPBOOxm1y?X;FmunZN;(KQ zrVjREU`ve;R5`sytuxxHjzZs^zecwn|Bs_viGFRv54e(iX1@)@bW8=?L3U)`{*amP6k(Ne_GmEU8qhVfOjE6R307#4FnJh}e&2Gz3GU*oIV=xdWJuU6%cQfqr6pz$s(52xVTiL4k zwm9G!fKNFMc63jrH6KvuKHnxrFx+Ug&eCBJ16rKiT z(T|Q||6zfYM~qwzp9>l{fCc@*#(bkA_rdJp2N5@!ia*Q!9Dt)h_X91 z{+h#$bqh0Kt76RMFi=JO8!}g)gsonU-}LH6a?c4FPp`TEtaRV~u3C1ha$9bv3esh4 z?fa&%`+!Zj5wIym`ZNwN0w2zg;s`hJ)Lw5t*#4aDfe7xsE5Sf!va51m?EXZfd_Q)5 z1w0%y-E7oCcbwc1^>icXq69d6Yb4`USs%Q@T*_-_OL63DvrkTB`gV+G_D~`lj>3fA z{#U;~nl)Q2&4Uk>Y6*awJkSPAG)PWgw`0VEQC688=~U^)8%=?kva&)Vv$D|5#(!;$^3 zSi^)-F}qbI)P%#sfqk0FP`w(mDJVLD?dHNitw7F@*?VpeB1Tv4gBdOk?i*VIW$;UV z5iz#a%bwmz5L%$EhVHnu=jv~bQ#eT1Y{bWQk*)*mZ?J z-@v2x$xsNm))T8Nn11cgtYxqBXH6QFRJvTkwmloahS~AA`|IGn_EOU8CBb(_903*9 z-|ZRoaELKWux$Rb%$)gG4S-#-MorAm?q+}y1l#sIpe=SJAfmxKu2CE3+*TPbU>5Iu z(VQ>Mj#c&9_R7<|cl-IpGB*AvPV+MxdFuT&SdieCwmC)3E^x>1>-@7JuqwX7RvWN` zicum%@Z|Jw#W#uU2~)v{H3igCn4^59UW2==-Dlr+YoQbDK*P%(wtb{V0?Jm}XlxT+ znXWVYrfm>3{2}FkZ}@AKipm@kNO947-lu|f7+Y_EgRv~YVbxjl1DE`Zl1G*EEBXW} zmWI=+uWP@luKLikHgbgUjCruaD9oM(kO?qe3t+rfJ{F)Z5$8JxS^Z7Zxj_=uIQY=E zHawK5K>Ip91`BREdj6J?xUv>s&br^d2OwPIp!N8=)PGiU3gC&0cpJvn|K#Vt-n;~6 z!*BFBvKid6YvfYpekTK@af|_ZKyEmZu{lyY{%(F@N_*9rViYG8` zVxARb7#I_tuL#PKPKlR;<&j(yVwNh#t!aKWuh%XWa`C8{B=f?!vf81;hTR6P_Z=R= z+tsrjE8^8{Xu5nvmFqUz7n7Q?4|O}J|%US*-6r%Yc^w}iKpB&cqQ6rS2Ud9=4RrFfXbvaGgOkb zeDx`2ckr4U#O=kD1Em6YOr4k#vlpSCsI__qoh!#PZ{$~sP^;~9rc~|qJk=`l)p6*g z<}qfF5M?nF z`nhhLIRC7BYdLw;KV&WU5|4lzLP40mN&gw?U3AIKw!L-o%p6a{|7*9?^RfL!1qzrq z9@i*E*L7AxtK|cw{0~2K49xwvt)g&nLz>U+%I3${`<&?=&uwBC$AVl=W4>N0d`)So z#9gYxe3_y#h58@rQfzT%5GMJRZaEgdmb>@U4{J>0*J&?x2gez>60N?RM7AIAzLF#U zd{La4Q)KYp(EKE=?sb5P>2fhe~7_%Wv z7st$A_O9=3``>npX(KFFhWDK%UPrV_wgaz%zL!0O(u$}5{=+#ia|vt<$3O*Vr!*P# zmdC&~ME%&tcK;oJR`2R8_%RUTil+`gbHr}TT)#NV%F`1%UA~>Z(F8O1WIF`>Sl#$- z$6VsHs%;$b<-lX#y+gmeupiSY$UPj%o>@N6K|et=n4}@wa&&(>$z0ezVCgMB#N%P~ z)_UD?wu_v2`Xh#H$D~+FHJG(@SUg0?21-3>kpJxzX8WNnf>SA+F|n~fJTx}%;5oM5 zEacN-W3wTU=XT8p*qXb6``^~wKLO>R{P4e*AM}Y5ki7i-$2*(Us+XOyrePxw5Y3>6 zT@#X@IYBsB`wnSe^*lK%ZmOl@Zo`bKbH3Bzuf7XK(j6Uh#?z|lp{0eOVQL4H1JfYs zpM($lYpa;Vt1L-v5` z+#==1c%@6PXfC0D@r#!?(l zEg~-5GMXz*u6?`r2B^p4b{$RK>$UxldMu+aF`8oNriV;?3U_zlUDHx^JCqMB^3g)< z(~n#faI-leCYAwPa|5Y%dxT!QqxZ7qb__!{S#S3)R!K9G-O@E3D!Nq7G5?l`ItNji zq;YfwT>c{Fw3OQCLDuYif;iBR4LnnWb3zxuFCHFC@z`o&zsnAQ_q4Qps0;wV3}#C( z3_#dz=Vv$F3wxG7K2>;r6GApG{wzY*RH5$bszGGc0d#@lrK$2Kb9&BMPE9IZI}zw3 z>snMdA?Z%*D$^LLb94Zpe@pA*-%UGd(yE$_nM{9&LUc{pZktqvaXrUX7sP^ki-p#^H zZ$!S9xX*X~_#glL<^Kg*GW-rniT0x3^bqgXSBeAR{ECeq@b`~jH~?Hf zjfI!B6^EY17E=U|Co36K%VF2SgUUvA@q=bH1 zdsl2lTu7hCJ$J*fO}%C@@p#u=JCvN7z>0agrGOn?vGoKab{(y2VE z3~K2gbzvN>96i_7$U2&}a^YGFs0}Y%3#9HrIw7jW|473l3^bC5_byt;oQQwoU*=fs zUJ#ZNXFVbFhutLOQoH^+y{$jr1z@_Xpl3IO53<8VDUn?^|ETCkn8oBUYMGvZo9=dr z08rI$m#~MOE_#xW+>|O?;d<}9b2TsQ@s;+yd3G~mp5oJkxlV)?o?T+}db35dO$r(x zS%yhi)A&(#Rs6kRFS)K)#BhMkBypt)VjCnu(T+W7Df3xj+`Y&kZ}aS~KTLNi8)iCN zRop%x#=xe?v86P+o}*xhS9Gm&Px27nY`0{9yBqFsJmvX5{Y_XcF%K@n3Nu|5lwY~+zj58;H#WTZ!E=euxq6h=4BlNH={z<_>mTXDjCGLqYF%ClvY zW23WsY-Rvi!YmP(?N!OV2(yR9UyU1TLY!s8A2x%huPmcxG59??CF&N1MKj5z*DzL= zN^l7jG;uxhBvbFsI;mq#n}>e}vQvI`3xmlFnWHNuGJwv>0dXwcH%vjYlR?PmDQZ9=U4do1hbTXwpZ_2`|G`I%Cu|v2W1NN zS;Qj{eOW;OhE^(0UC{g;vpj|kP=g$gV70r#8Fzat^ofjfbA8fdkuE3+)dv#OI}@Wa zZ!Jk49Zoa8K$B1a3D9p!Os9zV7JO~&b7r;KR1T{=81< zFoCDO=j93*{K>kM{^~_OggLh%X3c-f#O_7l#Wm04VM{nSwbGAlS{C|qQ$g8Xk)N+o zKvY|_o;|D8$=|L54_S~rkHcq1ET#_WUe!>#K-2B0tvYoqt9Q2H?$;Qtn5$ppvLQUi z)p;VF%$T#8D_(YV@Twxt?4gL7MLA`2birC>HiY4-mS*{tP2_6*Aab+F3DSKXrV^dr z;`HL6{Zi90lVX_H*Aw$xCvkdUCo&JG?-)`v$hRmEEs*QsBrAJp#!+DSmt74my%^0P-a z1)#?l;~gDzPIag*PRM|rz&$z7*I9>KESUvmL{RPFeKpyMV8G>!8!k$uWQrS#$^PsL zmq>www>arf(j1kUcZ`yirz5=FaI9Sk-PL z7wsswG(Pa*D!M@Mu&B}7!fOJDAXQ!mb*z`pxKBv_Pwup|Q0bu5c2qOhWs;IQq*SLeeJqr9DCubwDRA3ul9d9zb2 zVaom7v5$xB=&Jv$`Hw#Tv88|8kMi3bzvM}kz5FBZiVC|XG7x(`_CQseR0zEFdr_1Z zza5PO^roTQXHnu0Zl*TJ5AkBqr%{7Vf|z|QCnJv4C*`S=DLj&8Z`8wlW?$_`%6fE{ z?u>7@Uyl-4--WWgJ|k@cvz}V!&;;ral`bYtq~5cYqxGS@rkTmT+PpLDuEV#dNOsaY zSXzIVDKU{_!O(5G;50HO%diL$Jr;7bfMD9 z2vf_|glnax_1#3(2?lhb=+%q7J)wnR3EOqzVHt5osE1=UeMY4;q%-Sj0}$I!zlb2k zKF~*fohIR7BHqDQ7?P%O_?AIoO@UzTo@-%lrg`JXDiSQ79t9MPI###nfhiGkm0WsO z%FIXfs_ukBn=RGP15sFQ1~u#Mc31I;Fn3zC7Ddi?`|DHwFn$(xV?h192Lc}KnyI9o zGN3neiBb_9Gj#v3eW&rInR10=T}0J!){9O9s>R{)fRd5d<}&%?sc}Z;r=YNmrJN

cRU|YZ9?hKD{Wp(b>x89PU@NtjXW7aAw(K* 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 From 604bd9771821e9eb68b2dbd966bed9374e4495f9 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 22:52:05 +0800 Subject: [PATCH 82/88] Reduce size of the image --- docs/assets/ui.png | Bin 173418 -> 235352 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/ui.png b/docs/assets/ui.png index be5179014e402541d38eb68b58844e0dd2dac04e..95ea226938239f6d23c9a9db26439cbb2aee1cce 100644 GIT binary patch literal 235352 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

liSy`Qs)+$`RG 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 literal 173418 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ℑiXOtMCPjg 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 z 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 From 5411175678021e06891587c9d3f89d19381610ea Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:28:23 +0800 Subject: [PATCH 83/88] Clean up docs --- README.md | 4 ++-- docs/README.md | 25 ++++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b9e865cf5..93eeb63cb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# J.A.R.V.I.S project template +# J.A.R.V.I.S project -This is a project template for a greenfield Java project. It's named after the Java mascot _Jarvis_. Given below are instructions on how to use it. +This is a project for a greenfield Java project. It's named after the Java mascot _Jarvis_. Given below are instructions on how to use it. ## Setting up in Intellij diff --git a/docs/README.md b/docs/README.md index 9eef6f4c3..70cf0a5e3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,7 +28,7 @@ --- ## Quick Start -Ensure you have Java 17 or above installed on your computer. You may download Java 17 for your respective system [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html). +Ensure you have `Java 17` or above installed on your computer. You may download `Java 17` for your respective system [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html). 1. Download the latest Jarvis JAR file from the releases page [here](https://github.com/AjayShanker-geek/ip/releases). @@ -48,24 +48,35 @@ Ensure you have Java 17 or above installed on your computer. You may download Ja `java -jar jarvis.jar` -7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: +7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: Some example commands you can try: ![Jarvis User-Interface](/ip/assets/ui.png) -8. Type the command in the terminal and press Enter to execute it. Some example commands you can try: +1. Type the command in the terminal and press Enter to execute it. e.g. typing **`help`** and pressing Enter will print the list of commands available: - *list* : Lists all tasks. - *todo* Read book : Adds a task named "Read book" to your task list. - - *deadline* Submit report /by Aug 20 23:59 : Adds a deadline task for "Submit report". - - *event* Team meeting /from Sept 1 14:00 /to 16:00 : Adds an event named "Team meeting" with start and end times. + - *deadline* Submit report /by Aug 20 11pm : Adds a deadline task for "Submit report". + - *event* Team meeting /from Sept 1 2pm /to 4pm : Adds an event named "Team meeting" with start and end times. - *delete* 2 : Deletes the 2rd task shown in the current list. - *bye* or *exit* : Exits the application. -9. Refer to the Features section below for more details about each command. +2. Refer to the Features section below for more details about each command. --- ## Features +

+**ℹ️: Notes about the command format:**
+ +* Parameters cannot be in any order for `event`.
+ e.g. For event, the `/from` is require **comes before** `/to`. Improper ordering will result in an error. Will improve in future versions. + +* Extraneous parameters for commands that do not take in parameters (such as `help`, `list` and `exit`) will be ignored.
+ e.g. if the command specifies `help 123`, it will be interpreted as `help`. + +* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application. +
### Adding a Todo Task: `todo` @@ -102,7 +113,7 @@ Adds a task with both a start and end time. Ideal for scheduling events like mee **Examples**: - `event Team lunch /from Dec 13 2pm 4pm` Adds "Team lunch" from 2PM on 13th December 2024 to 4PM on same day. -- `event dinner with friends /from 18:00 /to 21:00` Adds "dinner with friends" from 6PM to 9PM. +- `event dinner with friends /from 6pm /to 9pm` Adds "dinner with friends" from 6PM to 9PM. From caae126215c061fba66313210b47320d09873e0b Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:33:09 +0800 Subject: [PATCH 84/88] Intergrated docsify --- docs/.nojekyll | 0 docs/index.html | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 docs/.nojekyll create mode 100644 docs/index.html diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..04dd4a728 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,22 @@ + + + + + Document + + + + + + +
+ + + + + From 9e2ba7ca6269235ad4922c04ccfd66acf75295f6 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:36:19 +0800 Subject: [PATCH 85/88] Update User guide info --- docs/README.md | 2 +- docs/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 70cf0a5e3..84b725123 100644 --- a/docs/README.md +++ b/docs/README.md @@ -67,7 +67,7 @@ Ensure you have `Java 17` or above installed on your computer. You may download ## Features
-**ℹ️: Notes about the command format:**
+**:information_source:: Notes about the command format:**
* Parameters cannot be in any order for `event`.
e.g. For event, the `/from` is require **comes before** `/to`. Improper ordering will result in an error. Will improve in future versions. diff --git a/docs/index.html b/docs/index.html index 04dd4a728..c38afa01b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,7 +2,7 @@ - Document + Jarvis User Guide From 7df86cb2d5d2d937b93613478fb181700f130611 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:41:00 +0800 Subject: [PATCH 86/88] Update User Guide image path --- docs/README.md | 2 +- docs/{assets => _images}/ui.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{assets => _images}/ui.png (100%) diff --git a/docs/README.md b/docs/README.md index 84b725123..d519e1bcb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -50,7 +50,7 @@ Ensure you have `Java 17` or above installed on your computer. You may download 7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: Some example commands you can try: -![Jarvis User-Interface](/ip/assets/ui.png) +![Jarvis User-Interface](_images/ui.png) 1. Type the command in the terminal and press Enter to execute it. e.g. typing **`help`** and pressing Enter will print the list of commands available: - *list* : Lists all tasks. diff --git a/docs/assets/ui.png b/docs/_images/ui.png similarity index 100% rename from docs/assets/ui.png rename to docs/_images/ui.png From ccc4f75e0d448f3ce0d830b0273022535c185c83 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:49:47 +0800 Subject: [PATCH 87/88] Fix jarvis cli image not showing --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index d519e1bcb..79c5d4cb8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -50,7 +50,7 @@ Ensure you have `Java 17` or above installed on your computer. You may download 7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: Some example commands you can try: -![Jarvis User-Interface](_images/ui.png) +![Jarvis User-Interface](https://raw.githubusercontent.com/AjayShanker-geek/ip/refs/heads/master/docs/_images/ui.png) 1. Type the command in the terminal and press Enter to execute it. e.g. typing **`help`** and pressing Enter will print the list of commands available: - *list* : Lists all tasks. From fc396cbecf2db6cf974b323a9cfe6d713158fa74 Mon Sep 17 00:00:00 2001 From: Ajay Shanker Date: Fri, 11 Oct 2024 23:54:59 +0800 Subject: [PATCH 88/88] Update repo README.md --- README.md | 250 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 227 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 93eeb63cb..2a9200cca 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,229 @@ # J.A.R.V.I.S project -This is a project for a greenfield Java project. It's named after the Java mascot _Jarvis_. Given below are instructions on how to use it. - -## Setting up in Intellij - -Prerequisites: JDK 17, update Intellij to the most recent version. - -1. Open Intellij (if you are not in the welcome screen, click `File` > `Close Project` to close the existing project first) -1. Open the project into Intellij as follows: - 1. Click `Open`. - 1. Select the project directory, and click `OK`. - 1. If there are any further prompts, accept the defaults. -1. Configure the project to use **JDK 17** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).
- In the same dialog, set the **Project language level** field to the `SDK default` option. -1. After that, locate the `src/main/java/Jarvis.java` file, right-click it, and choose `Run Jarvis.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output: - ``` - Hello from - ██╗ █████╗ ██████╗ ██╗ ██╗ ██╗ ███████╗ - ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██║ ██╔════╝ - ██║ ███████║ ██████╔╝ ██║ ██║ ██║ ███████╗ - ██ ██║ ██╔══██║ ██╔══██╗ ╚██╗ ██╔╝ ██║ ╚════██║ - ╚█████╔╝██╗██║ ██║██╗██║ ██║██╗╚████╔╝██╗██║██╗███████║██╗ - ╚════╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝╚═╝╚═╝╚══════╝╚═╝ - ``` +**Jarvis** is a desktop app for managing tasks, optimized for use via a Command Line Interface (CLI). If you can type fast, Jarvis can help you manage your tasks faster than traditional Graphical User Interface (GUI) apps. + +--- + +## Table of Contents + +- [J.A.R.V.I.S project](#jarvis-project) + - [Table of Contents](#table-of-contents) + - [Quick Start](#quick-start) + - [Features](#features) + - [Adding a Todo Task: `todo`](#adding-a-todo-task-todo) + - [Adding a Deadline Task: `deadline`](#adding-a-deadline-task-deadline) + - [Adding an Event Task: `event`](#adding-an-event-task-event) + - [Listing All Tasks: `list`](#listing-all-tasks-list) + - [Marking a Task as Done: `mark`](#marking-a-task-as-done-mark) + - [Unmarking a Task: `unmark`](#unmarking-a-task-unmark) + - [Finding Tasks: `find`](#finding-tasks-find) + - [Deleting a Task: `delete`](#deleting-a-task-delete) + - [Exiting the Application: `bye` or `exit`](#exiting-the-application-bye-or-exit) + - [Saving Data](#saving-data) + - [FAQ](#faq) + - [Q: How do I transfer my data to another computer?](#q-how-do-i-transfer-my-data-to-another-computer) + - [Editing the Data File](#editing-the-data-file) + - [Command Summary](#command-summary) + +--- +## Quick Start + +Ensure you have `Java 17` or above installed on your computer. You may download `Java 17` for your respective system [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html). + +1. Download the latest Jarvis JAR file from the releases page [here](https://github.com/AjayShanker-geek/ip/releases). + +2. Copy the file to the folder you want to use as the home folder for Jarvis. + +3. Locate Your JAR File and copy the file path. Example:`C:\Users\YourUsername\Downloads` + +4. Open a command terminal + - Windows: Click on the Start button and type `cmd`, then press `Enter` to open the Command Prompt. + - macOS/Linux: Press `Command + Space`, type `Terminal`, and hit `Enter` to open the Terminal. + +5. Use `cd` to go to the folder where your JAR file is located. Example: + + `cd C:\Users\YourUsername\Downloads` + +6. Run the application using the following command: + + `java -jar jarvis.jar` + +7. After a few seconds, the application will launch in your terminal. You should see the user interface output for Jarvis as shown below: Some example commands you can try: + +![Jarvis User-Interface](https://raw.githubusercontent.com/AjayShanker-geek/ip/refs/heads/master/docs/_images/ui.png) + +1. Type the command in the terminal and press Enter to execute it. e.g. typing **`help`** and pressing Enter will print the list of commands available: + - *list* : Lists all tasks. + - *todo* Read book : Adds a task named "Read book" to your task list. + - *deadline* Submit report /by Aug 20 11pm : Adds a deadline task for "Submit report". + - *event* Team meeting /from Sept 1 2pm /to 4pm : Adds an event named "Team meeting" with start and end times. + - *delete* 2 : Deletes the 2rd task shown in the current list. + - *bye* or *exit* : Exits the application. + +2. Refer to the Features section below for more details about each command. + +--- + +## Features +
+ +**:information_source:: Notes about the command format:**
+ +* Parameters cannot be in any order for `event`.
+ e.g. For event, the `/from` is require **comes before** `/to`. Improper ordering will result in an error. Will improve in future versions. + +* Extraneous parameters for commands that do not take in parameters (such as `help`, `list` and `exit`) will be ignored.
+ e.g. if the command specifies `help 123`, it will be interpreted as `help`. + +* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application. +
+ +### Adding a Todo Task: `todo` + +Adds a general task. + +**Format**: +```todo DESCRIPTION``` + +**Examples**: +- `todo Read book` Adds a todo task named "Read book" to the list. +- `todo buy groceries` Adds "buy groceries" as a todo task to the list. + + +### Adding a Deadline Task: `deadline` + +Adds a task with a specific deadline. Useful for time-sensitive tasks. + +**Format**: +```deadline DESCRIPTION /by DATE_TIME``` + +**Examples**: +- `deadline Submit CG2113 assignment /by Oct 10 6pm` Adds a task "Submit CS2113 assignment" with a deadline of 10th October 2024 at 6PM. +- `deadline pay rent /by Dec 1` Adds "pay rent" with a deadline of Dec 1. + + +### Adding an Event Task: `event` + +Adds a task with both a start and end time. Ideal for scheduling events like meetings. + +**Format**: +```event DESCRIPTION /from START_DATE_TIME /to END_DATE_TIME``` + +- Note: Ensure that the /from is require **comes before** /to. + +**Examples**: +- `event Team lunch /from Dec 13 2pm 4pm` Adds "Team lunch" from 2PM on 13th December 2024 to 4PM on same day. +- `event dinner with friends /from 6pm /to 9pm` Adds "dinner with friends" from 6PM to 9PM. + + + +### Listing All Tasks: `list` + +Displays a list of all tasks currently saved. + +**Format**: +```list``` + +**Example**: +- `list` Lists all tasks in your task list, showing their status (done or pending). + + + +### Marking a Task as Done: `mark` + +Marks a task as completed. + +**Format**: +```mark TASK_NUMBER``` + +**Examples**: +- `mark 1` Marks the 1st task in the list as done. +- `mark 3` Marks the 3nd task in the list as done. + + + +### Unmarking a Task: `unmark` + +Marks a task as not completed (undoes the 'done' status). + +**Format**: +```unmark TASK_NUMBER``` + +**Examples**: +- `unmark 1` Unmarks the 1st task in the list as not done. +- `unmark 2` Unmarks the 2rd task in the list as not done. + +### Finding Tasks: `find` + +Searches for tasks that contain a specific keyword. The number shown on the result corresponds to the original list. + +**Format**: +```find KEYWORD``` + +- Note: The search is case-sensitive. For example, `book` will not match `Book` and `BOOK`. + +**Examples**: +- `find book` Searches for all tasks that contain the word "book" and displays the results. +- `find meeting` Searches for tasks that contain the word "meeting". + + +### Deleting a Task: `delete` + +Removes a task from the task list. + +**Format**: +```delete TASK_NUMBER``` + +**Examples**: +- `list` followed by `delete 2` deletes the 2nd task in the list. + + +### Exiting the Application: `bye` or `exit` + +Exits the Jarvis application. + +**Format**: +```bye``` or ```exit``` + +**Example**: +- `bye` or `exit` Closes the application. + + + +### Saving Data + +Jarvis automatically saves your tasks to the `data/jarvis.txt` file after any changes. There is no need for manual saving. + +--- + +## FAQ + +### Q: How do I transfer my data to another computer? + +A: Install the Jarvis application on the other computer and copy the `data/jarvis.txt` file to the new computer. Ensure that the file is located in the same directory as the JAR file. When you run the application, your tasks will be loaded from the file. + +--- + +## Editing the Data File + +Jarvis automatically saves your task data in a text file located at `./data/jarvis.txt`, relative to the directory where you run the program. Advanced users can update their tasks by directly editing this file. + +> ⚠️**Caution:** Be cautious when editing the file directly, as improper formatting may cause errors or data loss when the application is next launched. + +--- + +## Command Summary + +| **Action** | **Format, Examples** | +|-----------|---------------------------------------------------------------------------------------------------------------------| +| **Todo** | ```todo DESCRIPTION```
e.g., ```todo Read a book``` | +| **Deadline** | ```deadline DESCRIPTION /by DATE_TIME```
e.g., ```deadline Submit report /by Sept 9 1pm``` | +| **Event** | ```event DESCRIPTION /from START_DATE_TIME /to END_DATE_TIME```
e.g., ```event Team meeting /from 2pm /to 4pm``` | +| **List** | ```list``` | +| **Mark** | ```mark TASK_NUMBER```
e.g., ```mark 1``` | +| **Unmark** | ```unmark TASK_NUMBER```
e.g., ```unmark 1``` | +| **Find** | ```find KEYWORD```
e.g., ```find book``` | +| **Delete** | ```delete TASK_NUMBER```
e.g., ```delete 2``` | +| **Exit** | ```bye``` or ```exit``` | + +---