From 0033e6ef0702b451f703a77b03b06e8890b56667 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 26 Aug 2021 23:23:08 +0800 Subject: [PATCH 01/34] Add Level 0 --- src/main/java/Duke.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..df4d33720 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,11 @@ public class Duke { public static void main(String[] args) { + String line = "------------------------------------------------------------------------------------------\n"; String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line + "Bye! Hope to see you again soon.\n" + line); } -} +} \ No newline at end of file From 9b01139be08e124e38d322eea6370b94255f2f54 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 26 Aug 2021 23:27:46 +0800 Subject: [PATCH 02/34] Echo's user input --- src/main/java/Duke.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index df4d33720..a0d4c6019 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,5 @@ +import java.util.Scanner; + public class Duke { public static void main(String[] args) { String line = "------------------------------------------------------------------------------------------\n"; @@ -6,6 +8,16 @@ public static void main(String[] args) { + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line + "Bye! Hope to see you again soon.\n" + line); + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); + + // getting user input and echoing it + Scanner scan = new Scanner(System.in); + String input = scan.nextLine(); + + while (!input.equals("bye")) { + System.out.println(line + "\n" + input + "\n" + line); + input = scan.nextLine(); + } + System.out.println(line + "\n" + input + ". Hope to see you again soon!\n" + line); } } \ No newline at end of file From c113fdf30680f519318a57a7130ec24354ec4fad Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Fri, 27 Aug 2021 01:05:13 +0800 Subject: [PATCH 03/34] Add Level-2 --- src/main/java/Duke.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a0d4c6019..e05231a90 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -10,14 +10,28 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); - // getting user input and echoing it + // getting user input + String[] array = new String[100]; Scanner scan = new Scanner(System.in); String input = scan.nextLine(); + int arrayCount = 0; while (!input.equals("bye")) { - System.out.println(line + "\n" + input + "\n" + line); + + if (input.equals("list")) { + System.out.println(line); + for (int i = 0; i < arrayCount; i++) { + System.out.println((i+1) + ". " + array[i] + "\n"); + } + System.out.println(line); + } else { + array[arrayCount] = input; + arrayCount++; + System.out.println(line + "added: " + input + "\n" + line); + } input = scan.nextLine(); } - System.out.println(line + "\n" + input + ". Hope to see you again soon!\n" + line); + System.out.println(line + "\n" + input + "! Hope to see you again soon!\n" + line); } -} \ No newline at end of file +} + From 6db8c9207c539bad829722d9ebdcf45bc2b174dc Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Sun, 29 Aug 2021 20:05:18 +0800 Subject: [PATCH 04/34] add level-3 --- src/main/java/Duke.java | 25 +++++++++++++++---------- src/main/java/Task.java | 26 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index e05231a90..24c24b56e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -10,28 +10,33 @@ public static void main(String[] args) { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); - // getting user input - String[] array = new String[100]; Scanner scan = new Scanner(System.in); String input = scan.nextLine(); - int arrayCount = 0; + Task[] t = new Task[100]; //contains array of null objects??? + int taskCount = 0; while (!input.equals("bye")) { - if (input.equals("list")) { + if (input.equals("list")) { //LIST DOESN'T WORK->null pointer exception->line 23 System.out.println(line); - for (int i = 0; i < arrayCount; i++) { - System.out.println((i+1) + ". " + array[i] + "\n"); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ". " + "[" + t[i].getStatusIcon() + "] " + t[i].getDescription() + "\n"); } System.out.println(line); - } else { - array[arrayCount] = input; - arrayCount++; + } else if (input.contains("done")) { //DONE WORKS + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + t[finalTaskNumber].markAsDone(); + System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); + System.out.println(" " + "[X] " + t[finalTaskNumber].getDescription() + "\n" + line); + } else { //ADDING NEW TASK WORKS + t[taskCount] = new Task(input); + taskCount++; System.out.println(line + "added: " + input + "\n" + line); } input = scan.nextLine(); } - System.out.println(line + "\n" + input + "! Hope to see you again soon!\n" + line); + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //BYE WORKS } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..cc6306788 --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,26 @@ +public class Task { + //attributes + protected String description; + protected boolean isDone; + + //constructor + public Task(String description) { + this.description = description; + this.isDone = false; + } + + //getters + public String getStatusIcon() { + return (isDone ? "X" : " "); + } + + public String getDescription() { + return description; + } + + //setters + public void markAsDone() { + isDone = true; + } +} + From 9df50ebf783a6f300a52983bc4a84c9c69a2a06b Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Sun, 29 Aug 2021 20:07:50 +0800 Subject: [PATCH 05/34] Code quality improved --- src/main/java/Duke.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 24c24b56e..f3f055acf 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,12 +12,12 @@ public static void main(String[] args) { Scanner scan = new Scanner(System.in); String input = scan.nextLine(); - Task[] t = new Task[100]; //contains array of null objects??? + Task[] t = new Task[100]; int taskCount = 0; - while (!input.equals("bye")) { + while (!input.equals("bye")) { //BYE WORKS - if (input.equals("list")) { //LIST DOESN'T WORK->null pointer exception->line 23 + if (input.equals("list")) { //LIST WORKS System.out.println(line); for (int i = 0; i < taskCount; i++) { System.out.println((i + 1) + ". " + "[" + t[i].getStatusIcon() + "] " + t[i].getDescription() + "\n"); @@ -36,7 +36,7 @@ public static void main(String[] args) { } input = scan.nextLine(); } - System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //BYE WORKS + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); } } From d779c13eb1ea6ac9abb00cba4f9259dc3abdaa66 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 2 Sep 2021 22:48:49 +0800 Subject: [PATCH 06/34] Add level-4 --- src/main/java/Deadline.java | 14 +++++ src/main/java/Duke.java | 121 +++++++++++++++++++++++++++++------- src/main/java/Event.java | 14 +++++ src/main/java/Task.java | 9 +-- src/main/java/Todo.java | 12 ++++ 5 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 src/main/java/Deadline.java create mode 100644 src/main/java/Event.java create mode 100644 src/main/java/Todo.java diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java new file mode 100644 index 000000000..1f2dff2a9 --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,14 @@ +public class Deadline extends Task { + + protected String by; + + public Deadline(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[D][" + super.getStatusIcon() + "] " + super.toString() + "(by: " + by + ")"; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index f3f055acf..a6f82c2fd 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,42 +1,119 @@ +import java.util.Arrays; import java.util.Scanner; public class Duke { - public static void main(String[] args) { - String line = "------------------------------------------------------------------------------------------\n"; + //declarations + public static String line = "------------------------------------------------------------------------------------------\n"; + + //declare task array and keep track of how many tasks stored + public static Task[] t = new Task[100]; + public static int taskCount = 0; + + //Program starts with this greeting + public static void start() { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); + } + + //Program exits with this ending + public static void bye() { + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); + System.exit(0); + } + //Creates scanner and takes in input from user + public static void userInput() { Scanner scan = new Scanner(System.in); + System.out.println("Enter your wish: " + "\n" + line); String input = scan.nextLine(); - Task[] t = new Task[100]; - int taskCount = 0; + inputSort(input); + } - while (!input.equals("bye")) { //BYE WORKS + //Lists out all tasks stored and their statuses + public static void list() { + System.out.println(line); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ". " + t[i].toString()+ "\n"); + } + } - if (input.equals("list")) { //LIST WORKS - System.out.println(line); - for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + "[" + t[i].getStatusIcon() + "] " + t[i].getDescription() + "\n"); - } + //Marks a stored task as done + public static void taskDone(String input) { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + t[finalTaskNumber].markAsDone(); + System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); + System.out.println(" " + t[finalTaskNumber].toString() + "\n" + line); + } + + //Adds a new todo task and prints it //todo borrow book + public static void todo(String input) { + int endIndex = input.length(); + String taskName = input.substring(5, endIndex); + t[taskCount] = new Todo(taskName); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + + //Adds a new deadline task and prints it + public static void deadline(String input) { //deadline return book /by Sunday + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(9, endIndex); + int endIndex2 = input.length(); + String by = input.substring(endIndex + 4, endIndex2); + t[taskCount] = new Deadline(taskName, by); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + + //Adds a new event task and prints it + public static void event(String input) { //event project meeting /at Mon 2-4pm + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(6, endIndex); + int endIndex2 = input.length(); + String at = input.substring(endIndex + 4, endIndex2); + t[taskCount] = new Event(taskName, at); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + + //Filters user inputs and pushes to different methods + public static void inputSort(String input) { + while (!input.equals("bye")) { + if (input.equals("list")) { + list(); System.out.println(line); - } else if (input.contains("done")) { //DONE WORKS - String taskNumber = input.substring(input.lastIndexOf(" ") + 1); - int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - t[finalTaskNumber].markAsDone(); - System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); - System.out.println(" " + "[X] " + t[finalTaskNumber].getDescription() + "\n" + line); - } else { //ADDING NEW TASK WORKS - t[taskCount] = new Task(input); - taskCount++; - System.out.println(line + "added: " + input + "\n" + line); + } else if (input.contains("done")) { + taskDone(input); + } else if (input.contains("todo")) { + todo(input); + } else if (input.contains("deadline")) { + deadline(input); + } else if (input.contains("event")) { + event(input); } - input = scan.nextLine(); + userInput(); } - System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); + bye(); + } + + //Main + public static void main(String[] args) { + start(); + userInput(); } } diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..1879687a3 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,14 @@ +public class Event extends Task { + + protected String at; + + public Event(String description, String at) { + super(description); + this.at = at; + } + + @Override + public String toString() { + return "[E][" + super.getStatusIcon() + "] " + super.toString() + "(at: " + at + ")"; + } +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index cc6306788..333e5d5a5 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -14,13 +14,14 @@ public String getStatusIcon() { return (isDone ? "X" : " "); } - public String getDescription() { - return description; - } - //setters public void markAsDone() { isDone = true; } + + //Returns description of task added + public String toString() { + return description; + } } diff --git a/src/main/java/Todo.java b/src/main/java/Todo.java new file mode 100644 index 000000000..6c7f8cc72 --- /dev/null +++ b/src/main/java/Todo.java @@ -0,0 +1,12 @@ +public class Todo extends Task{ + + public Todo(String description) { + super(description); + } + + @Override + public String toString() { + return "[T][" + super.getStatusIcon() + "] " + super.toString(); + } +} + From d25eed02d692d88b6d90486ce7f3982a387c9e46 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 2 Sep 2021 23:49:43 +0800 Subject: [PATCH 07/34] Improve Code Quality --- src/main/java/Duke.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a6f82c2fd..a6f80e3e8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -20,7 +20,7 @@ public static void start() { } //Program exits with this ending - public static void bye() { + public static void sayBye() { System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); System.exit(0); } @@ -34,7 +34,7 @@ public static void userInput() { } //Lists out all tasks stored and their statuses - public static void list() { + public static void sayList() { System.out.println(line); for (int i = 0; i < taskCount; i++) { System.out.println((i + 1) + ". " + t[i].toString()+ "\n"); @@ -42,7 +42,7 @@ public static void list() { } //Marks a stored task as done - public static void taskDone(String input) { + public static void sayDone(String input) { String taskNumber = input.substring(input.lastIndexOf(" ") + 1); int finalTaskNumber = Integer.parseInt(taskNumber) - 1; t[finalTaskNumber].markAsDone(); @@ -51,7 +51,7 @@ public static void taskDone(String input) { } //Adds a new todo task and prints it //todo borrow book - public static void todo(String input) { + public static void sayTodo(String input) { int endIndex = input.length(); String taskName = input.substring(5, endIndex); t[taskCount] = new Todo(taskName); @@ -63,7 +63,7 @@ public static void todo(String input) { } //Adds a new deadline task and prints it - public static void deadline(String input) { //deadline return book /by Sunday + public static void sayDeadline(String input) { //deadline return book /by Sunday int endIndex = input.lastIndexOf("/"); String taskName = input.substring(9, endIndex); int endIndex2 = input.length(); @@ -77,7 +77,7 @@ public static void deadline(String input) { //dead } //Adds a new event task and prints it - public static void event(String input) { //event project meeting /at Mon 2-4pm + public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm int endIndex = input.lastIndexOf("/"); String taskName = input.substring(6, endIndex); int endIndex2 = input.length(); @@ -94,20 +94,20 @@ public static void event(String input) { //event public static void inputSort(String input) { while (!input.equals("bye")) { if (input.equals("list")) { - list(); + sayList(); System.out.println(line); } else if (input.contains("done")) { - taskDone(input); + sayDone(input); } else if (input.contains("todo")) { - todo(input); + sayTodo(input); } else if (input.contains("deadline")) { - deadline(input); + sayDeadline(input); } else if (input.contains("event")) { - event(input); + sayEvent(input); } userInput(); } - bye(); + sayBye(); } //Main From 87826c16a928c570ec3a29a576256d2ba1509cfb Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 2 Sep 2021 23:58:38 +0800 Subject: [PATCH 08/34] auto testing --- text-ui-test/EXPECTED.TXT | 25 ++++++++++++++++++++++--- text-ui-test/input.txt | 1 + text-ui-test/runtest.bat | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 657e74f6e..f168b908e 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,7 +1,26 @@ -Hello from - ____ _ -| _ \ _ _| | _____ +------------------------------------------------------------------------------------------ +Hello! I'm Duke. + ____ _ +| _ \ _ _| | _____ | | | | | | | |/ / _ \ | |_| | |_| | < __/ |____/ \__,_|_|\_\___| +What can i do for you? +------------------------------------------------------------------------------------------ + +Enter your wish: +------------------------------------------------------------------------------------------ + +------------------------------------------------------------------------------------------ + + +Got it. I've added this task: + +[T][ ] borrow book + +Now you have 1 tasks in the list. +------------------------------------------------------------------------------------------ + +Enter your wish: +------------------------------------------------------------------------------------------ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index e69de29bb..bcc05005f 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -0,0 +1 @@ +todo borrow book diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index 087374464..289e6aa60 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -10,6 +10,7 @@ REM compile the code into the bin folder javac -cp ..\src\main\java -Xlint:none -d ..\bin ..\src\main\java\*.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** + pause exit /b 1 ) REM no error here, errorlevel == 0 @@ -19,3 +20,4 @@ java -classpath ..\bin Duke < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT +pause \ No newline at end of file From 2d8013a370f86969178d843f85e19491957604da Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 9 Sep 2021 16:59:48 +0800 Subject: [PATCH 09/34] Add A-Exceptions class --- src/main/java/Duke.java | 180 +++++++++++------- .../java/duke/exception/DukeException.java | 7 + text-ui-test/input.txt | 2 +- 3 files changed, 124 insertions(+), 65 deletions(-) create mode 100644 src/main/java/duke/exception/DukeException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a6f80e3e8..5825d25a6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,9 +1,11 @@ -import java.util.Arrays; +import duke.exception.DukeException; + import java.util.Scanner; public class Duke { //declarations public static String line = "------------------------------------------------------------------------------------------\n"; + private static int quitFlag = 0; //if 0, take user input. Otherwise, don't. //declare task array and keep track of how many tasks stored public static Task[] t = new Task[100]; @@ -20,100 +22,150 @@ public static void start() { } //Program exits with this ending - public static void sayBye() { - System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); + public static void sayBye(String input) throws DukeException{ //bye + if (input.length() != 3) { + throw new DukeException("You didn't say bye properly, but i get it! Adios for now!\n"); //bye 9 + } else { + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //bye + updateQuitFlag(); + } System.exit(0); } - //Creates scanner and takes in input from user - public static void userInput() { - Scanner scan = new Scanner(System.in); - System.out.println("Enter your wish: " + "\n" + line); - String input = scan.nextLine(); - inputSort(input); + //updates flag so that no more user input is taken + public static void updateQuitFlag() { + quitFlag = 1; } //Lists out all tasks stored and their statuses - public static void sayList() { - System.out.println(line); - for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + t[i].toString()+ "\n"); + public static void sayList(String input) throws DukeException{ //list + if (input.length() == 4) { + if (taskCount > 0) { + System.out.println(line); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ". " + t[i].toString() + "\n"); + } + System.out.println(line); + } + else { + throw new DukeException("Hold your horses, we haven't even started listing yet!"); //list when taskCount = 0 + } + } else { + throw new DukeException("Invalid input! Ask me nicely to list!"); //list 7 } } //Marks a stored task as done - public static void sayDone(String input) { - String taskNumber = input.substring(input.lastIndexOf(" ") + 1); - int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - t[finalTaskNumber].markAsDone(); - System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); - System.out.println(" " + t[finalTaskNumber].toString() + "\n" + line); + public static void sayDone(String input) throws DukeException { //done 1 + if (taskCount != 0) { + try { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + t[finalTaskNumber].markAsDone(); + System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 + System.out.println(" " + t[finalTaskNumber].toString() + "\n" + line); + } catch (NullPointerException e) { + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 + } + } else { + throw new DukeException("Calm down, we haven't even started listing out tasks yet!"); //done 1 when taskCount = 0 + } } - //Adds a new todo task and prints it //todo borrow book + //Adds a new todo task and prints it //todo borrow book public static void sayTodo(String input) { - int endIndex = input.length(); - String taskName = input.substring(5, endIndex); - t[taskCount] = new Todo(taskName); - System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); - System.out.println(t[taskCount].toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + if (input.length() == 4) { + System.out.println(line + "\nDid you forget what you were gonna say?\n" + line); //todo + } else { + int endIndex = input.length(); + String taskName = input.substring(5, endIndex); + t[taskCount] = new Todo(taskName); + System.out.println(line + "\n"); + System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } } //Adds a new deadline task and prints it - public static void sayDeadline(String input) { //deadline return book /by Sunday - int endIndex = input.lastIndexOf("/"); - String taskName = input.substring(9, endIndex); - int endIndex2 = input.length(); - String by = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Deadline(taskName, by); - System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); - System.out.println(t[taskCount].toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + public static void sayDeadline(String input) { //deadline return book /by Sunday + if (input.length() == 8) { + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //deadline + System.out.println(line); + } else if (!input.contains("/")) { + System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); //deadline return book + } else { + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(9, endIndex); + int endIndex2 = input.length(); + String by = input.substring(endIndex + 4, endIndex2); + t[taskCount] = new Deadline(taskName, by); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } } //Adds a new event task and prints it - public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm - int endIndex = input.lastIndexOf("/"); - String taskName = input.substring(6, endIndex); - int endIndex2 = input.length(); - String at = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Event(taskName, at); - System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); - System.out.println(t[taskCount].toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm + if (input.length() == 5) { + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //event + System.out.println(line); + } else if (!input.contains("/")) { + System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); //event project meeting + } else { + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(6, endIndex); + int endIndex2 = input.length(); + String at = input.substring(endIndex + 4, endIndex2); + t[taskCount] = new Event(taskName, at); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm + System.out.println(t[taskCount].toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } } - //Filters user inputs and pushes to different methods - public static void inputSort(String input) { - while (!input.equals("bye")) { - if (input.equals("list")) { - sayList(); - System.out.println(line); - } else if (input.contains("done")) { + //Creates scanner, takes in user input & filters it to different methods + public static void inputSort() throws DukeException { + System.out.println("Enter your wish: " + "\n" + line); + while (quitFlag == 0) { + Scanner scan = new Scanner(System.in); + String input = scan.nextLine(); + String actionWord = input.split(" ")[0]; + switch (actionWord) { + case "bye": + sayBye(input); + break; + case "list": + sayList(input); + break; + case "done": sayDone(input); - } else if (input.contains("todo")) { + break; + case "todo": sayTodo(input); - } else if (input.contains("deadline")) { + break; + case "deadline": sayDeadline(input); - } else if (input.contains("event")) { + break; + case "event": sayEvent(input); + break; + default: + System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); } - userInput(); } - sayBye(); } //Main - public static void main(String[] args) { + public static void main(String[] args) throws DukeException { start(); - userInput(); + inputSort(); } } diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java new file mode 100644 index 000000000..f74ad7363 --- /dev/null +++ b/src/main/java/duke/exception/DukeException.java @@ -0,0 +1,7 @@ +package duke.exception; + +public class DukeException extends Exception { + public DukeException(String errorMessage){ + super(errorMessage); + } +} \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index bcc05005f..8b1378917 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1 @@ -todo borrow book + From 2aaa1e08d2f00595942c445d151bb98acb00a654 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Fri, 10 Sep 2021 00:27:50 +0800 Subject: [PATCH 10/34] Add A-Packages --- src/main/java/{ => duke}/Deadline.java | 2 ++ src/main/java/{ => duke}/Duke.java | 3 +-- src/main/java/duke/{exception => }/DukeException.java | 6 +++--- src/main/java/{ => duke}/Event.java | 2 ++ src/main/java/{ => duke}/Task.java | 2 ++ src/main/java/{ => duke}/Todo.java | 2 ++ 6 files changed, 12 insertions(+), 5 deletions(-) rename src/main/java/{ => duke}/Deadline.java (95%) rename src/main/java/{ => duke}/Duke.java (99%) rename src/main/java/duke/{exception => }/DukeException.java (53%) rename src/main/java/{ => duke}/Event.java (95%) rename src/main/java/{ => duke}/Task.java (97%) rename src/main/java/{ => duke}/Todo.java (93%) diff --git a/src/main/java/Deadline.java b/src/main/java/duke/Deadline.java similarity index 95% rename from src/main/java/Deadline.java rename to src/main/java/duke/Deadline.java index 1f2dff2a9..99e9b9c2a 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/duke/Deadline.java @@ -1,3 +1,5 @@ +package duke; + public class Deadline extends Task { protected String by; diff --git a/src/main/java/Duke.java b/src/main/java/duke/Duke.java similarity index 99% rename from src/main/java/Duke.java rename to src/main/java/duke/Duke.java index 5825d25a6..026ac774a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,5 +1,4 @@ -import duke.exception.DukeException; - +package duke; import java.util.Scanner; public class Duke { diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/DukeException.java similarity index 53% rename from src/main/java/duke/exception/DukeException.java rename to src/main/java/duke/DukeException.java index f74ad7363..3c1763dfd 100644 --- a/src/main/java/duke/exception/DukeException.java +++ b/src/main/java/duke/DukeException.java @@ -1,7 +1,7 @@ -package duke.exception; +package duke; public class DukeException extends Exception { - public DukeException(String errorMessage){ + public DukeException(String errorMessage) { super(errorMessage); } -} \ No newline at end of file +} diff --git a/src/main/java/Event.java b/src/main/java/duke/Event.java similarity index 95% rename from src/main/java/Event.java rename to src/main/java/duke/Event.java index 1879687a3..b645529c5 100644 --- a/src/main/java/Event.java +++ b/src/main/java/duke/Event.java @@ -1,3 +1,5 @@ +package duke; + public class Event extends Task { protected String at; diff --git a/src/main/java/Task.java b/src/main/java/duke/Task.java similarity index 97% rename from src/main/java/Task.java rename to src/main/java/duke/Task.java index 333e5d5a5..d50dcf114 100644 --- a/src/main/java/Task.java +++ b/src/main/java/duke/Task.java @@ -1,3 +1,5 @@ +package duke; + public class Task { //attributes protected String description; diff --git a/src/main/java/Todo.java b/src/main/java/duke/Todo.java similarity index 93% rename from src/main/java/Todo.java rename to src/main/java/duke/Todo.java index 6c7f8cc72..e3f22de1e 100644 --- a/src/main/java/Todo.java +++ b/src/main/java/duke/Todo.java @@ -1,3 +1,5 @@ +package duke; + public class Todo extends Task{ public Todo(String description) { From c30246fedb41630afa6ffa878046a1d9c91af0f1 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Mon, 13 Sep 2021 19:27:58 +0800 Subject: [PATCH 11/34] Add Level-6 --- src/main/java/duke/Duke.java | 44 ++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 026ac774a..089113c43 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,5 +1,6 @@ package duke; import java.util.Scanner; +import java.util.ArrayList; public class Duke { //declarations @@ -7,7 +8,7 @@ public class Duke { private static int quitFlag = 0; //if 0, take user input. Otherwise, don't. //declare task array and keep track of how many tasks stored - public static Task[] t = new Task[100]; + public static ArrayList t = new ArrayList<>(); public static int taskCount = 0; //Program starts with this greeting @@ -42,7 +43,7 @@ public static void sayList(String input) throws DukeException{ if (taskCount > 0) { System.out.println(line); for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + t[i].toString() + "\n"); + System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); } System.out.println(line); } @@ -60,9 +61,9 @@ public static void sayDone(String input) throws DukeException { try { String taskNumber = input.substring(input.lastIndexOf(" ") + 1); int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - t[finalTaskNumber].markAsDone(); + t.get(finalTaskNumber).markAsDone(); System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 - System.out.println(" " + t[finalTaskNumber].toString() + "\n" + line); + System.out.println(" " + t.get(finalTaskNumber).toString() + "\n" + line); } catch (NullPointerException e) { System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 } @@ -78,10 +79,10 @@ public static void sayTodo(String input) { } else { int endIndex = input.length(); String taskName = input.substring(5, endIndex); - t[taskCount] = new Todo(taskName); + t.add(taskCount, new Todo(taskName)); System.out.println(line + "\n"); System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } @@ -99,10 +100,10 @@ public static void sayDeadline(String input) { String taskName = input.substring(9, endIndex); int endIndex2 = input.length(); String by = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Deadline(taskName, by); + t.add(taskCount, new Deadline(taskName, by)); System.out.println(line + "\n"); System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } @@ -120,15 +121,35 @@ public static void sayEvent(String input) { String taskName = input.substring(6, endIndex); int endIndex2 = input.length(); String at = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Event(taskName, at); + t.add(taskCount, new Event(taskName, at)); System.out.println(line + "\n"); System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } } + //Deletes a stored task + public static void sayDelete(String input) throws DukeException { //delete 1 + if (taskCount != 0) { + try { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + Task taskRemoved = t.get(finalTaskNumber); + t.remove(finalTaskNumber); + taskCount--; + System.out.println(line + "\n" + "One more thing outta your life as always...\n"); //delete 1 + System.out.println(" " + taskRemoved.toString() + "\n" + "\nYou now have " + taskCount + " tasks left.\n"); + System.out.println(line); + } catch (IndexOutOfBoundsException e) { + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //delete 101 + } + } else { + throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 + } + } + //Creates scanner, takes in user input & filters it to different methods public static void inputSort() throws DukeException { System.out.println("Enter your wish: " + "\n" + line); @@ -155,6 +176,9 @@ public static void inputSort() throws DukeException { case "event": sayEvent(input); break; + case "delete": + sayDelete(input); + break; default: System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); } From 5531ec34a5a77267f4f4f938db05bf005eb833f3 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Tue, 14 Sep 2021 03:36:39 +0800 Subject: [PATCH 12/34] Add Level-7 --- UserData.txt | 2 + src/main/java/duke/Deadline.java | 9 +++ src/main/java/duke/Duke.java | 122 +++++++++++++++++++++++++++---- src/main/java/duke/Event.java | 9 +++ src/main/java/duke/Task.java | 8 ++ src/main/java/duke/Todo.java | 9 +++ 6 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 UserData.txt diff --git a/UserData.txt b/UserData.txt new file mode 100644 index 000000000..8a6b61740 --- /dev/null +++ b/UserData.txt @@ -0,0 +1,2 @@ +todo hello | 1 +deadline hello /by Sunday | 1 diff --git a/src/main/java/duke/Deadline.java b/src/main/java/duke/Deadline.java index 99e9b9c2a..5877fd357 100644 --- a/src/main/java/duke/Deadline.java +++ b/src/main/java/duke/Deadline.java @@ -13,4 +13,13 @@ public Deadline(String description, String by) { public String toString() { return "[D][" + super.getStatusIcon() + "] " + super.toString() + "(by: " + by + ")"; } + + @Override + public String toSave() { + int done = 0; + if (this.isDone) { + done = 1; + } + return "deadline " + description + "/by " + by + " | " + done; + } } diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 026ac774a..245fda296 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,5 +1,10 @@ package duke; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.util.Scanner; +import java.util.ArrayList; +import java.io.*; public class Duke { //declarations @@ -7,17 +12,80 @@ public class Duke { private static int quitFlag = 0; //if 0, take user input. Otherwise, don't. //declare task array and keep track of how many tasks stored - public static Task[] t = new Task[100]; + public static ArrayList t = new ArrayList<>(); public static int taskCount = 0; //Program starts with this greeting - public static void start() { + public static void start() throws FileNotFoundException, DukeException { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); + loadData(); + } + + //Saves Task list into local file + public static void saveData(ArrayList t) { + String path = "D:\\Documents\\NUS\\Y2S1\\CS2113T\\IP\\UserData.txt"; + try { + FileWriter fw = new FileWriter(path, false); + PrintWriter pw = new PrintWriter(fw, false); + pw.flush(); + pw.close(); + fw.close(); + for (int i = 0; i < taskCount; i++) { + String input = t.get(i).toSave() + "\n"; + //line separator + Files.write(Paths.get(path), input.getBytes(), StandardOpenOption.APPEND); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + //Loads Task list into Duke + public static void loadData() throws FileNotFoundException, DukeException { + File f = new File("D:\\Documents\\NUS\\Y2S1\\CS2113T\\IP\\UserData.txt"); + + Scanner scan = new Scanner(f); + String taskType; + String s; + int taskNumber = 1; //tracks how many tasks read from .txt file so far + + while(scan.hasNext()) //todo hello | 1 + { //deadline hello /by Sunday | 1 + String data = scan.nextLine(); //event project meeting /at Mon 2-4pm | 0 + String[] arrayString = data.split(" \\| "); + String[] arrayString2 = arrayString[0].split(" "); + taskType = arrayString2[0]; + s = Integer.toString(taskNumber); + + switch (taskType) { + case "todo": + sayTodo(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + case "deadline": + sayDeadline(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + case "event": + sayEvent(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + default: + } + taskNumber++; + } + scan.close(); } //Program exits with this ending @@ -42,7 +110,7 @@ public static void sayList(String input) throws DukeException{ if (taskCount > 0) { System.out.println(line); for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + t[i].toString() + "\n"); + System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); } System.out.println(line); } @@ -60,9 +128,9 @@ public static void sayDone(String input) throws DukeException { try { String taskNumber = input.substring(input.lastIndexOf(" ") + 1); int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - t[finalTaskNumber].markAsDone(); + t.get(finalTaskNumber).markAsDone(); System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 - System.out.println(" " + t[finalTaskNumber].toString() + "\n" + line); + System.out.println(" " + t.get(finalTaskNumber).toString() + "\n" + line); } catch (NullPointerException e) { System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 } @@ -78,10 +146,10 @@ public static void sayTodo(String input) { } else { int endIndex = input.length(); String taskName = input.substring(5, endIndex); - t[taskCount] = new Todo(taskName); + t.add(taskCount, new Todo(taskName)); System.out.println(line + "\n"); System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } @@ -99,10 +167,10 @@ public static void sayDeadline(String input) { String taskName = input.substring(9, endIndex); int endIndex2 = input.length(); String by = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Deadline(taskName, by); + t.add(taskCount, new Deadline(taskName, by)); System.out.println(line + "\n"); System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } @@ -120,17 +188,37 @@ public static void sayEvent(String input) { String taskName = input.substring(6, endIndex); int endIndex2 = input.length(); String at = input.substring(endIndex + 4, endIndex2); - t[taskCount] = new Event(taskName, at); + t.add(taskCount, new Event(taskName, at)); System.out.println(line + "\n"); System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm - System.out.println(t[taskCount].toString()); + System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } } + //Deletes a stored task + public static void sayDelete(String input) throws DukeException { //delete 1 + if (taskCount != 0) { + try { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + Task taskRemoved = t.get(finalTaskNumber); + t.remove(finalTaskNumber); + taskCount--; + System.out.println(line + "\n" + "One more thing outta your life as always...\n"); //delete 1 + System.out.println(" " + taskRemoved.toString() + "\n" + "\nYou now have " + taskCount + " tasks left.\n"); + System.out.println(line); + } catch (IndexOutOfBoundsException e) { + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //delete 101 + } + } else { + throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 + } + } + //Creates scanner, takes in user input & filters it to different methods - public static void inputSort() throws DukeException { + public static void inputSort() throws DukeException, IOException { System.out.println("Enter your wish: " + "\n" + line); while (quitFlag == 0) { Scanner scan = new Scanner(System.in); @@ -145,15 +233,23 @@ public static void inputSort() throws DukeException { break; case "done": sayDone(input); + saveData(t); break; case "todo": sayTodo(input); + saveData(t); break; case "deadline": sayDeadline(input); + saveData(t); break; case "event": sayEvent(input); + saveData(t); + break; + case "delete": + sayDelete(input); + saveData(t); break; default: System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); @@ -162,7 +258,7 @@ public static void inputSort() throws DukeException { } //Main - public static void main(String[] args) throws DukeException { + public static void main(String[] args) throws DukeException, IOException { start(); inputSort(); } diff --git a/src/main/java/duke/Event.java b/src/main/java/duke/Event.java index b645529c5..68b5f3217 100644 --- a/src/main/java/duke/Event.java +++ b/src/main/java/duke/Event.java @@ -13,4 +13,13 @@ public Event(String description, String at) { public String toString() { return "[E][" + super.getStatusIcon() + "] " + super.toString() + "(at: " + at + ")"; } + + @Override + public String toSave() { + int done = 0; + if (this.isDone) { + done = 1; + } + return "event " + description + "/at " + at + " | " + done; + } } diff --git a/src/main/java/duke/Task.java b/src/main/java/duke/Task.java index d50dcf114..8d8b9b43b 100644 --- a/src/main/java/duke/Task.java +++ b/src/main/java/duke/Task.java @@ -25,5 +25,13 @@ public void markAsDone() { public String toString() { return description; } + + public String toSave() { + int done = 0; + if (this.isDone) { + done = 1; + } + return "taskType" + done + " | " + this.description + "\n"; + } } diff --git a/src/main/java/duke/Todo.java b/src/main/java/duke/Todo.java index e3f22de1e..d98a9328a 100644 --- a/src/main/java/duke/Todo.java +++ b/src/main/java/duke/Todo.java @@ -10,5 +10,14 @@ public Todo(String description) { public String toString() { return "[T][" + super.getStatusIcon() + "] " + super.toString(); } + + @Override + public String toSave() { + int done = 0; + if (this.isDone) { + done = 1; + } + return "todo " + description + " | " + done; + } } From 76955597ba1fa5fafdb3eeb63edfc11ebe97bfee Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Tue, 14 Sep 2021 15:44:53 +0800 Subject: [PATCH 13/34] Add Level-7 (latest) --- src/main/java/duke/Duke.java | 3 +-- src/main/java/duke/Task.java | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 245fda296..318e4e0f6 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -37,7 +37,6 @@ public static void saveData(ArrayList t) { fw.close(); for (int i = 0; i < taskCount; i++) { String input = t.get(i).toSave() + "\n"; - //line separator Files.write(Paths.get(path), input.getBytes(), StandardOpenOption.APPEND); } } catch (IOException e) { @@ -218,7 +217,7 @@ public static void sayDelete(String input) throws DukeException { } //Creates scanner, takes in user input & filters it to different methods - public static void inputSort() throws DukeException, IOException { + public static void inputSort() throws DukeException { System.out.println("Enter your wish: " + "\n" + line); while (quitFlag == 0) { Scanner scan = new Scanner(System.in); diff --git a/src/main/java/duke/Task.java b/src/main/java/duke/Task.java index 8d8b9b43b..1d2532c6b 100644 --- a/src/main/java/duke/Task.java +++ b/src/main/java/duke/Task.java @@ -31,7 +31,7 @@ public String toSave() { if (this.isDone) { done = 1; } - return "taskType" + done + " | " + this.description + "\n"; + return "taskType" + description + " | " + done; } } From d3e43c08c8ddcfc2ebab00a9076d4dd3f1a38744 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 16 Sep 2021 23:58:01 +0800 Subject: [PATCH 14/34] Add A-Jar --- UserData.txt | 3 +-- src/main/java/META-INF/MANIFEST.MF | 3 +++ src/main/java/duke/Duke.java | 28 ++++++++++++++++------------ 3 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/UserData.txt b/UserData.txt index bca1454e3..080b12d25 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1,2 +1 @@ -todo hello | 0 -deadline hello /by Sunday | 1 +todo vishalllll | 0 diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..2c9a9745c --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: duke.Duke + diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 98bae550d..b729f9db9 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -16,20 +16,24 @@ public class Duke { public static int taskCount = 0; //Program starts with this greeting - public static void start() throws FileNotFoundException, DukeException { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); - loadData(); + public static void start() throws DukeException { + try { + loadData(); + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); + } catch (FileNotFoundException e) { + System.out.println("Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); + } } //Saves Task list into local file public static void saveData(ArrayList t) { - String path = "D:\\Documents\\NUS\\Y2S1\\CS2113T\\IP\\UserData.txt"; try { + String path = new File("userData.txt").getAbsolutePath(); FileWriter fw = new FileWriter(path, false); PrintWriter pw = new PrintWriter(fw, false); pw.flush(); @@ -40,7 +44,7 @@ public static void saveData(ArrayList t) { Files.write(Paths.get(path), input.getBytes(), StandardOpenOption.APPEND); } } catch (IOException e) { - e.printStackTrace(); + System.out.println("ERROR: Could not write to file"); } } @@ -246,7 +250,7 @@ public static void inputSort() throws DukeException { sayEvent(input); saveData(t); break; - case "delete": //lvl 7 + case "delete": sayDelete(input); saveData(t); break; @@ -257,7 +261,7 @@ public static void inputSort() throws DukeException { } //Main - public static void main(String[] args) throws DukeException, IOException { + public static void main(String[] args) throws DukeException { start(); inputSort(); } From 6ac8bb082f96e36abdb3dec98610dfc02f000192 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Fri, 17 Sep 2021 01:13:37 +0800 Subject: [PATCH 15/34] Add A-Jar updated --- UserData.txt | 2 +- src/main/java/duke/Duke.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/UserData.txt b/UserData.txt index 080b12d25..8b1378917 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1 +1 @@ -todo vishalllll | 0 + diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index b729f9db9..751417076 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -50,7 +50,8 @@ public static void saveData(ArrayList t) { //Loads Task list into Duke public static void loadData() throws FileNotFoundException, DukeException { - File f = new File("D:\\Documents\\NUS\\Y2S1\\CS2113T\\IP\\UserData.txt"); + String path = new File("userData.txt").getAbsolutePath(); + File f = new File(path); Scanner scan = new Scanner(f); String taskType; From 27a1bf8d6bd05122c7462624d59c8dff7288fef3 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Wed, 22 Sep 2021 16:44:08 +0800 Subject: [PATCH 16/34] Add Level-8 --- src/main/java/duke/Deadline.java | 6 +++- src/main/java/duke/Duke.java | 48 +++++++++++++++++++------------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/main/java/duke/Deadline.java b/src/main/java/duke/Deadline.java index 5877fd357..5140c696e 100644 --- a/src/main/java/duke/Deadline.java +++ b/src/main/java/duke/Deadline.java @@ -1,12 +1,16 @@ package duke; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + public class Deadline extends Task { protected String by; public Deadline(String description, String by) { super(description); - this.by = by; + LocalDate time = LocalDate.parse(by); + this.by = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); } @Override diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 751417076..188906f68 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -2,9 +2,12 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import java.time.format.DateTimeParseException; import java.util.Scanner; import java.util.ArrayList; import java.io.*; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; public class Duke { //declarations @@ -61,7 +64,7 @@ public static void loadData() throws FileNotFoundException, DukeException { while(scan.hasNext()) //todo hello | 1 { //deadline hello /by Sunday | 1 String data = scan.nextLine(); //event project meeting /at Mon 2-4pm | 0 - String[] arrayString = data.split(" \\| "); + String[] arrayString = data.split(" \\| "); //deadline koo /by Oct 15 2019 | 0 String[] arrayString2 = arrayString[0].split(" "); taskType = arrayString2[0]; s = Integer.toString(taskNumber); @@ -109,20 +112,15 @@ public static void updateQuitFlag() { } //Lists out all tasks stored and their statuses - public static void sayList(String input) throws DukeException{ //list - if (input.length() == 4) { - if (taskCount > 0) { - System.out.println(line); - for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); - } - System.out.println(line); - } - else { - throw new DukeException("Hold your horses, we haven't even started listing yet!"); //list when taskCount = 0 - } + public static void sayList() throws DukeException{ //list + if (taskCount == 0) { + throw new DukeException("Hold your horses, you didn't even tell me about your wishes yet!"); } else { - throw new DukeException("Invalid input! Ask me nicely to list!"); //list 7 + System.out.println(line); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); + } + System.out.println(line); } } @@ -167,12 +165,14 @@ public static void sayDeadline(String input) { } else if (!input.contains("/")) { System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); //deadline return book } else { - int endIndex = input.lastIndexOf("/"); + int endIndex = input.indexOf("/"); String taskName = input.substring(9, endIndex); int endIndex2 = input.length(); String by = input.substring(endIndex + 4, endIndex2); + LocalDate dateTime = LocalDate.parse(by); t.add(taskCount, new Deadline(taskName, by)); System.out.println(line + "\n"); + System.out.println("Deadline Entered: " + dateTime.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\n"); System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday System.out.println(t.get(taskCount).toString()); taskCount++; @@ -188,7 +188,7 @@ public static void sayEvent(String input) { } else if (!input.contains("/")) { System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); //event project meeting } else { - int endIndex = input.lastIndexOf("/"); + int endIndex = input.indexOf("/"); String taskName = input.substring(6, endIndex); int endIndex2 = input.length(); String at = input.substring(endIndex + 4, endIndex2); @@ -223,8 +223,8 @@ public static void sayDelete(String input) throws DukeException { //Creates scanner, takes in user input & filters it to different methods public static void inputSort() throws DukeException { - System.out.println("Enter your wish: " + "\n" + line); while (quitFlag == 0) { + System.out.println("Enter your wish: " + "\n" + line); Scanner scan = new Scanner(System.in); String input = scan.nextLine(); String actionWord = input.split(" ")[0]; @@ -233,7 +233,11 @@ public static void inputSort() throws DukeException { sayBye(input); break; case "list": - sayList(input); + try { + sayList(); + } catch (DukeException e) { + System.out.println("Hold your horses, you didn't even tell me about your wishes yet!"); + } break; case "done": sayDone(input); @@ -244,8 +248,12 @@ public static void inputSort() throws DukeException { saveData(t); break; case "deadline": - sayDeadline(input); - saveData(t); + try { + sayDeadline(input); + saveData(t); + } catch (DateTimeParseException e) { + System.out.println("Please enter in the format: deadline (desc) /by yyyy-mm-dd"); + } break; case "event": sayEvent(input); From 2d29b0093dfa46af415d8ea0cd2b0495a831ba47 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Wed, 22 Sep 2021 18:52:23 +0800 Subject: [PATCH 17/34] Add Level-9 --- src/main/java/duke/Duke.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 751417076..63e66d318 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -221,6 +221,29 @@ public static void sayDelete(String input) throws DukeException { } } + //Give users a way to find a task by searching for a keyword + public static void search(String input){ //find book + String[] arrayString = input.split(" ", 2); + String keyWord = arrayString[1]; + int matchCount = 0; + + ArrayList filteredList = new ArrayList<>(); + for (Task task : t) { + if (task.toString().contains(keyWord)) { + filteredList.add(task.toString()); + matchCount++; + } + } + if (matchCount != 0) { + System.out.println("\n" + "Lucky for you, i'm really good at digging through your mess:" + "\n" + line); + for (int i = 0; i < filteredList.size(); i++) { + System.out.println((i + 1) + ". " + filteredList.get(i) + "\n"); + } + } else { + System.out.println("Too bad i couldn't find anything similar. Let's not get too ambitious and just stick to the tasks on hand shall we?" + "\n"); + } + } + //Creates scanner, takes in user input & filters it to different methods public static void inputSort() throws DukeException { System.out.println("Enter your wish: " + "\n" + line); @@ -255,6 +278,9 @@ public static void inputSort() throws DukeException { sayDelete(input); saveData(t); break; + case "find": + search(input); + break; default: System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); } From 6340b5b946246edd820c72e5138a6c8bf2fc2cd8 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Wed, 22 Sep 2021 22:36:35 +0800 Subject: [PATCH 18/34] Add new classes v1 --- UserData.txt | 5 +- src/main/java/duke/Duke.java | 262 +------------------------------ src/main/java/duke/Parser.java | 47 ++++++ src/main/java/duke/Storage.java | 73 +++++++++ src/main/java/duke/TaskList.java | 140 +++++++++++++++++ src/main/java/duke/Ui.java | 25 +++ 6 files changed, 291 insertions(+), 261 deletions(-) create mode 100644 src/main/java/duke/Parser.java create mode 100644 src/main/java/duke/Storage.java create mode 100644 src/main/java/duke/TaskList.java create mode 100644 src/main/java/duke/Ui.java diff --git a/UserData.txt b/UserData.txt index 8b1378917..2cb74d775 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1 +1,4 @@ - +todo hello | 0 +todo good | 1 +event ko /at 4-7pm | 0 +deadline owkow /by sunday | 1 diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 751417076..797e558ee 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -1,267 +1,9 @@ package duke; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.Scanner; -import java.util.ArrayList; -import java.io.*; +import static duke.Parser.inputSort; +import static duke.Ui.start; public class Duke { - //declarations - public static String line = "------------------------------------------------------------------------------------------\n"; - private static int quitFlag = 0; //if 0, take user input. Otherwise, don't. - //declare task array and keep track of how many tasks stored - public static ArrayList t = new ArrayList<>(); - public static int taskCount = 0; - - //Program starts with this greeting - public static void start() throws DukeException { - try { - loadData(); - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); - } catch (FileNotFoundException e) { - System.out.println("Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); - } - } - - //Saves Task list into local file - public static void saveData(ArrayList t) { - try { - String path = new File("userData.txt").getAbsolutePath(); - FileWriter fw = new FileWriter(path, false); - PrintWriter pw = new PrintWriter(fw, false); - pw.flush(); - pw.close(); - fw.close(); - for (int i = 0; i < taskCount; i++) { - String input = t.get(i).toSave() + "\n"; - Files.write(Paths.get(path), input.getBytes(), StandardOpenOption.APPEND); - } - } catch (IOException e) { - System.out.println("ERROR: Could not write to file"); - } - } - - //Loads Task list into Duke - public static void loadData() throws FileNotFoundException, DukeException { - String path = new File("userData.txt").getAbsolutePath(); - File f = new File(path); - - Scanner scan = new Scanner(f); - String taskType; - String s; - int taskNumber = 1; //tracks how many tasks read from .txt file so far - - while(scan.hasNext()) //todo hello | 1 - { //deadline hello /by Sunday | 1 - String data = scan.nextLine(); //event project meeting /at Mon 2-4pm | 0 - String[] arrayString = data.split(" \\| "); - String[] arrayString2 = arrayString[0].split(" "); - taskType = arrayString2[0]; - s = Integer.toString(taskNumber); - - switch (taskType) { - case "todo": - sayTodo(arrayString[0]); - if (arrayString[1].equals("1")) { - sayDone(s); - } - break; - case "deadline": - sayDeadline(arrayString[0]); - if (arrayString[1].equals("1")) { - sayDone(s); - } - break; - case "event": - sayEvent(arrayString[0]); - if (arrayString[1].equals("1")) { - sayDone(s); - } - break; - default: - } - taskNumber++; - } - scan.close(); - } - - //Program exits with this ending - public static void sayBye(String input) throws DukeException{ //bye - if (input.length() != 3) { - throw new DukeException("You didn't say bye properly, but i get it! Adios for now!\n"); //bye 9 - } else { - System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //bye - updateQuitFlag(); - } - System.exit(0); - } - - //updates flag so that no more user input is taken - public static void updateQuitFlag() { - quitFlag = 1; - } - - //Lists out all tasks stored and their statuses - public static void sayList(String input) throws DukeException{ //list - if (input.length() == 4) { - if (taskCount > 0) { - System.out.println(line); - for (int i = 0; i < taskCount; i++) { - System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); - } - System.out.println(line); - } - else { - throw new DukeException("Hold your horses, we haven't even started listing yet!"); //list when taskCount = 0 - } - } else { - throw new DukeException("Invalid input! Ask me nicely to list!"); //list 7 - } - } - - //Marks a stored task as done - public static void sayDone(String input) throws DukeException { //done 1 - if (taskCount != 0) { - try { - String taskNumber = input.substring(input.lastIndexOf(" ") + 1); - int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - t.get(finalTaskNumber).markAsDone(); - System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 - System.out.println(" " + t.get(finalTaskNumber).toString() + "\n" + line); - } catch (NullPointerException e) { - System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 - } - } else { - throw new DukeException("Calm down, we haven't even started listing out tasks yet!"); //done 1 when taskCount = 0 - } - } - - //Adds a new todo task and prints it //todo borrow book - public static void sayTodo(String input) { - if (input.length() == 4) { - System.out.println(line + "\nDid you forget what you were gonna say?\n" + line); //todo - } else { - int endIndex = input.length(); - String taskName = input.substring(5, endIndex); - t.add(taskCount, new Todo(taskName)); - System.out.println(line + "\n"); - System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book - System.out.println(t.get(taskCount).toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); - } - } - - //Adds a new deadline task and prints it - public static void sayDeadline(String input) { //deadline return book /by Sunday - if (input.length() == 8) { - System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //deadline - System.out.println(line); - } else if (!input.contains("/")) { - System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); //deadline return book - } else { - int endIndex = input.lastIndexOf("/"); - String taskName = input.substring(9, endIndex); - int endIndex2 = input.length(); - String by = input.substring(endIndex + 4, endIndex2); - t.add(taskCount, new Deadline(taskName, by)); - System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday - System.out.println(t.get(taskCount).toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); - } - } - - //Adds a new event task and prints it - public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm - if (input.length() == 5) { - System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //event - System.out.println(line); - } else if (!input.contains("/")) { - System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); //event project meeting - } else { - int endIndex = input.lastIndexOf("/"); - String taskName = input.substring(6, endIndex); - int endIndex2 = input.length(); - String at = input.substring(endIndex + 4, endIndex2); - t.add(taskCount, new Event(taskName, at)); - System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm - System.out.println(t.get(taskCount).toString()); - taskCount++; - System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); - } - } - - //Deletes a stored task - public static void sayDelete(String input) throws DukeException { //delete 1 - if (taskCount != 0) { - try { - String taskNumber = input.substring(input.lastIndexOf(" ") + 1); - int finalTaskNumber = Integer.parseInt(taskNumber) - 1; - Task taskRemoved = t.get(finalTaskNumber); - t.remove(finalTaskNumber); - taskCount--; - System.out.println(line + "\n" + "One more thing outta your life as always...\n"); //delete 1 - System.out.println(" " + taskRemoved.toString() + "\n" + "\nYou now have " + taskCount + " tasks left.\n"); - System.out.println(line); - } catch (IndexOutOfBoundsException e) { - System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //delete 101 - } - } else { - throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 - } - } - - //Creates scanner, takes in user input & filters it to different methods - public static void inputSort() throws DukeException { - System.out.println("Enter your wish: " + "\n" + line); - while (quitFlag == 0) { - Scanner scan = new Scanner(System.in); - String input = scan.nextLine(); - String actionWord = input.split(" ")[0]; - switch (actionWord) { - case "bye": - sayBye(input); - break; - case "list": - sayList(input); - break; - case "done": - sayDone(input); - saveData(t); - break; - case "todo": - sayTodo(input); - saveData(t); - break; - case "deadline": - sayDeadline(input); - saveData(t); - break; - case "event": - sayEvent(input); - saveData(t); - break; - case "delete": - sayDelete(input); - saveData(t); - break; - default: - System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); - } - } - } - - //Main public static void main(String[] args) throws DukeException { start(); inputSort(); diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java new file mode 100644 index 000000000..088cccba2 --- /dev/null +++ b/src/main/java/duke/Parser.java @@ -0,0 +1,47 @@ +package duke; +import java.util.Scanner; +import static duke.Storage.saveData; +import static duke.TaskList.*; + +public class Parser { + + //Creates scanner, takes in user input & filters it to different methods + public static void inputSort() throws DukeException { + System.out.println("Enter your wish: " + "\n" + line); + while (quitFlag == 0) { + Scanner scan = new Scanner(System.in); + String input = scan.nextLine(); + String actionWord = input.split(" ")[0]; + switch (actionWord) { + case "bye": + sayBye(input); + break; + case "list": + sayList(input); + break; + case "done": + sayDone(input); + saveData(t); + break; + case "todo": + sayTodo(input); + saveData(t); + break; + case "deadline": + sayDeadline(input); + saveData(t); + break; + case "event": + sayEvent(input); + saveData(t); + break; + case "delete": + sayDelete(input); + saveData(t); + break; + default: + System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); + } + } + } +} diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java new file mode 100644 index 000000000..00cd245ca --- /dev/null +++ b/src/main/java/duke/Storage.java @@ -0,0 +1,73 @@ +package duke; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Scanner; +import static duke.TaskList.*; + +public class Storage { + + //Saves Task list into local file + public static void saveData(ArrayList t) { + try { + String path = new File("userData.txt").getAbsolutePath(); + FileWriter fw = new FileWriter(path, false); + PrintWriter pw = new PrintWriter(fw, false); + pw.flush(); + pw.close(); + fw.close(); + for (int i = 0; i < taskCount; i++) { + String input = t.get(i).toSave() + "\n"; + Files.write(Paths.get(path), input.getBytes(), StandardOpenOption.APPEND); + } + } catch (IOException e) { + System.out.println("ERROR: Could not write to file"); + } + } + + //Loads Task list into Duke + public static void loadData() throws FileNotFoundException, DukeException { + String path = new File("userData.txt").getAbsolutePath(); + File f = new File(path); + + Scanner scan = new Scanner(f); + String taskType; + String s; + int taskNumber = 1; //tracks how many tasks read from .txt file so far + + while(scan.hasNext()) //todo hello | 1 + { //deadline hello /by Sunday | 1 + String data = scan.nextLine(); //event project meeting /at Mon 2-4pm | 0 + String[] arrayString = data.split(" \\| "); + String[] arrayString2 = arrayString[0].split(" "); + taskType = arrayString2[0]; + s = Integer.toString(taskNumber); + + switch (taskType) { + case "todo": + sayTodo(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + case "deadline": + sayDeadline(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + case "event": + sayEvent(arrayString[0]); + if (arrayString[1].equals("1")) { + sayDone(s); + } + break; + default: + } + taskNumber++; + } + scan.close(); + } +} diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java new file mode 100644 index 000000000..9b5d04910 --- /dev/null +++ b/src/main/java/duke/TaskList.java @@ -0,0 +1,140 @@ +package duke; +import java.util.ArrayList; + +public class TaskList { + + public static String line = "------------------------------------------------------------------------------------------\n"; + //declare task array and keep track of how many tasks stored + public static ArrayList t = new ArrayList<>(); + public static int taskCount = 0; + public static int quitFlag = 0; //if 0, take user input. Otherwise, don't. + + //updates flag so that no more user input is taken + public static void updateQuitFlag() { + quitFlag = 1; + } + + //Program exits with this ending + public static void sayBye(String input) throws DukeException{ //bye + if (input.length() != 3) { + throw new DukeException("You didn't say bye properly, but i get it! Adios for now!\n"); //bye 9 + } else { + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //bye + updateQuitFlag(); + } + System.exit(0); + } + + //Lists out all tasks stored and their statuses + public static void sayList(String input) throws DukeException{ //list + if (input.length() == 4) { + if (taskCount > 0) { + System.out.println(line); + for (int i = 0; i < taskCount; i++) { + System.out.println((i + 1) + ". " + t.get(i).toString() + "\n"); + } + System.out.println(line); + } + else { + throw new DukeException("Hold your horses, we haven't even started listing yet!"); //list when taskCount = 0 + } + } else { + throw new DukeException("Invalid input! Ask me nicely to list!"); //list 7 + } + } + + //Marks a stored task as done + public static void sayDone(String input) throws DukeException { //done 1 + if (taskCount != 0) { + try { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + t.get(finalTaskNumber).markAsDone(); + System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 + System.out.println(" " + t.get(finalTaskNumber).toString() + "\n" + line); + } catch (NullPointerException e) { + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 + } + } else { + throw new DukeException("Calm down, we haven't even started listing out tasks yet!"); //done 1 when taskCount = 0 + } + } + + //Adds a new todo task and prints it //todo borrow book + public static void sayTodo(String input) { + if (input.length() == 4) { + System.out.println(line + "\nDid you forget what you were gonna say?\n" + line); //todo + } else { + int endIndex = input.length(); + String taskName = input.substring(5, endIndex); + t.add(taskCount, new Todo(taskName)); + System.out.println(line + "\n"); + System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book + System.out.println(t.get(taskCount).toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + } + + //Adds a new deadline task and prints it + public static void sayDeadline(String input) { //deadline return book /by Sunday + if (input.length() == 8) { + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //deadline + System.out.println(line); + } else if (!input.contains("/")) { + System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); //deadline return book + } else { + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(9, endIndex); + int endIndex2 = input.length(); + String by = input.substring(endIndex + 4, endIndex2); + t.add(taskCount, new Deadline(taskName, by)); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday + System.out.println(t.get(taskCount).toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + } + + //Adds a new event task and prints it + public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm + if (input.length() == 5) { + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //event + System.out.println(line); + } else if (!input.contains("/")) { + System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); //event project meeting + } else { + int endIndex = input.lastIndexOf("/"); + String taskName = input.substring(6, endIndex); + int endIndex2 = input.length(); + String at = input.substring(endIndex + 4, endIndex2); + t.add(taskCount, new Event(taskName, at)); + System.out.println(line + "\n"); + System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm + System.out.println(t.get(taskCount).toString()); + taskCount++; + System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); + } + } + + //Deletes a stored task + public static void sayDelete(String input) throws DukeException { //delete 1 + if (taskCount != 0) { + try { + String taskNumber = input.substring(input.lastIndexOf(" ") + 1); + int finalTaskNumber = Integer.parseInt(taskNumber) - 1; + Task taskRemoved = t.get(finalTaskNumber); + t.remove(finalTaskNumber); + taskCount--; + System.out.println(line + "\n" + "One more thing outta your life as always...\n"); //delete 1 + System.out.println(" " + taskRemoved.toString() + "\n" + "\nYou now have " + taskCount + " tasks left.\n"); + System.out.println(line); + } catch (IndexOutOfBoundsException e) { + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //delete 101 + } + } else { + throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 + } + } +} diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java new file mode 100644 index 000000000..d2b229d7d --- /dev/null +++ b/src/main/java/duke/Ui.java @@ -0,0 +1,25 @@ +package duke; +import java.io.FileNotFoundException; +import static duke.Storage.loadData; + +public class Ui { + + public static String line = "------------------------------------------------------------------------------------------\n"; + + //Program starts with this greeting + public static void start() throws DukeException { + try { + loadData(); + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); + } catch (FileNotFoundException e) { + System.out.println("Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); + } + } + + +} From b07fb0e5b8cc4b083f5ce59305f459241d57ee58 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 23 Sep 2021 00:18:56 +0800 Subject: [PATCH 19/34] txt file --- UserData.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/UserData.txt b/UserData.txt index 2cb74d775..4398c066d 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1,4 +1 @@ -todo hello | 0 -todo good | 1 -event ko /at 4-7pm | 0 -deadline owkow /by sunday | 1 +todo book | 0 From c3bf73eceba57f99d07267c77d8f93ae5d85e0bd Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 23 Sep 2021 00:32:38 +0800 Subject: [PATCH 20/34] level-9 latest --- UserData.txt | 8 ++++---- src/main/java/duke/Parser.java | 3 +++ src/main/java/duke/TaskList.java | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/UserData.txt b/UserData.txt index 2cb74d775..f6e7a44d3 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1,4 +1,4 @@ -todo hello | 0 -todo good | 1 -event ko /at 4-7pm | 0 -deadline owkow /by sunday | 1 +todo vishal | 0 +todo edward | 0 +todo sleep | 0 +todo sleep again | 0 diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 088cccba2..feee6c58f 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -39,6 +39,9 @@ public static void inputSort() throws DukeException { sayDelete(input); saveData(t); break; + case "find": + sayFind(input); + break; default: System.out.println(line + "\n☹ OOPS!!! I'm sorry, but I don't know what that means :-(\n" + line); } diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 9b5d04910..9afc2aaf1 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -137,4 +137,27 @@ public static void sayDelete(String input) throws DukeException { throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 } } + + //Give users a way to find a task by searching for a keyword + public static void sayFind(String input){ //find book + String[] arrayString = input.split(" ", 2); + String keyWord = arrayString[1]; + int matchCount = 0; + + ArrayList filteredList = new ArrayList<>(); + for (Task task : t) { + if (task.toString().contains(keyWord)) { + filteredList.add(task.toString()); + matchCount++; + } + } + if (matchCount != 0) { + System.out.println("\n" + "Lucky for you, i'm really good at digging through your mess:" + "\n" + line); + for (int i = 0; i < filteredList.size(); i++) { + System.out.println((i + 1) + ". " + filteredList.get(i) + "\n"); + } + } else { + System.out.println("Too bad i couldn't find anything similar. Let's not get too ambitious and just stick to the tasks on hand shall we?" + "\n"); + } + } } From c8541d5b56c01459f9357ed47fcc14c99df3b180 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 23 Sep 2021 00:38:22 +0800 Subject: [PATCH 21/34] Level-8 latest --- src/main/java/duke/Duke.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 188906f68..f235c655b 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -158,7 +158,7 @@ public static void sayTodo(String input) { } //Adds a new deadline task and prints it - public static void sayDeadline(String input) { //deadline return book /by Sunday + public static void sayDeadline(String input) { //deadline return books /by Sunday if (input.length() == 8) { System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //deadline System.out.println(line); From 1ebb51f740392e01d92dd00498b22fcdf354bbd8 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Fri, 24 Sep 2021 16:21:11 +0800 Subject: [PATCH 22/34] Add documentation --- UserData.txt | 1 - src/main/java/duke/Deadline.java | 22 ++++++- src/main/java/duke/Duke.java | 8 +++ src/main/java/duke/Event.java | 21 +++++++ src/main/java/duke/Parser.java | 9 ++- src/main/java/duke/Storage.java | 15 ++++- src/main/java/duke/Task.java | 34 ++++++++-- src/main/java/duke/TaskList.java | 104 +++++++++++++++++++++---------- src/main/java/duke/Todo.java | 20 ++++++ src/main/java/duke/Ui.java | 11 +++- 10 files changed, 198 insertions(+), 47 deletions(-) diff --git a/UserData.txt b/UserData.txt index d8dd43f4a..e69de29bb 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1 +0,0 @@ -todo vishal | 0 diff --git a/src/main/java/duke/Deadline.java b/src/main/java/duke/Deadline.java index 5140c696e..d4126c07a 100644 --- a/src/main/java/duke/Deadline.java +++ b/src/main/java/duke/Deadline.java @@ -1,23 +1,43 @@ package duke; - import java.time.LocalDate; import java.time.format.DateTimeFormatter; +/** + * Class that is used in order to create a new deadline task. + * + * @author pragyan01 + */ public class Deadline extends Task { protected String by; + /** + * Constructor to instantiate new deadline object + * + * @param description Description of the deadline task + * @param by Due date of the deadline task + */ public Deadline(String description, String by) { super(description); LocalDate time = LocalDate.parse(by); this.by = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toString() { return "[D][" + super.getStatusIcon() + "] " + super.toString() + "(by: " + by + ")"; } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toSave() { int done = 0; diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 797e558ee..26a32fda8 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -2,8 +2,16 @@ import static duke.Parser.inputSort; import static duke.Ui.start; +/** + * Main class of Duke bot. + * + * @author pragyan01 + */ public class Duke { + /** + * Main method of Duke bot. + */ public static void main(String[] args) throws DukeException { start(); inputSort(); diff --git a/src/main/java/duke/Event.java b/src/main/java/duke/Event.java index 68b5f3217..21e78756c 100644 --- a/src/main/java/duke/Event.java +++ b/src/main/java/duke/Event.java @@ -1,19 +1,40 @@ package duke; +/** + * Class that is used in order to create a new event task. + * + * @author pragyan01 + */ public class Event extends Task { protected String at; + /** + * Constructor to instantiate new event object + * + * @param description Description of the event task + * @param at Due date of the event task + */ public Event(String description, String at) { super(description); this.at = at; } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toString() { return "[E][" + super.getStatusIcon() + "] " + super.toString() + "(at: " + at + ")"; } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toSave() { int done = 0; diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index f7fdfc863..6b0df22a8 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -4,9 +4,16 @@ import static duke.Storage.saveData; import static duke.TaskList.*; +/** + * Class responsible for filtering out user commands and determining the flow of the program. + * + * @author pragyan01 + */ public class Parser { - //Creates scanner, takes in user input & filters it to different methods + /** + * Method that determines the control flow of the duke bot based on user input + */ public static void inputSort() throws DukeException { while (quitFlag == 0) { System.out.println("Enter your wish: " + "\n" + line); diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 00cd245ca..585b461b1 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -7,9 +7,18 @@ import java.util.Scanner; import static duke.TaskList.*; +/** + * Class responsible for saving and loading of tasks to/from a local file. + * + * @author pragyan01 + */ public class Storage { - //Saves Task list into local file + /** + * Writes tasks in Arraylist and saves to local file in offline storage. + * + * @param t storing all tasks in the bot + */ public static void saveData(ArrayList t) { try { String path = new File("userData.txt").getAbsolutePath(); @@ -27,7 +36,9 @@ public static void saveData(ArrayList t) { } } - //Loads Task list into Duke + /** + * Method that loads the offline txt file tasks into the bot. + */ public static void loadData() throws FileNotFoundException, DukeException { String path = new File("userData.txt").getAbsolutePath(); File f = new File(path); diff --git a/src/main/java/duke/Task.java b/src/main/java/duke/Task.java index 1d2532c6b..3871b5c22 100644 --- a/src/main/java/duke/Task.java +++ b/src/main/java/duke/Task.java @@ -1,31 +1,55 @@ package duke; +/** + * Task class used by bot. + * + * @author pragyan01 + */ public class Task { - //attributes + protected String description; protected boolean isDone; - //constructor + /** + * Constructor of task + * + * @param description Description of task. + */ public Task(String description) { this.description = description; this.isDone = false; } - //getters + /** + * Return status of task as string. + * + * @return String status of task + */ public String getStatusIcon() { return (isDone ? "X" : " "); } - //setters + /** + * Setter method of task + */ public void markAsDone() { isDone = true; } - //Returns description of task added + /** + * Getter method of task. + * + * @return String description of task + */ public String toString() { return description; } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ public String toSave() { int done = 0; if (this.isDone) { diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 725d4d12a..1d77414f2 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -3,32 +3,44 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; +/** + * Class that contains methods to handle respective user inputs. + * + * @author pragyan01 + */ public class TaskList { public static String line = "------------------------------------------------------------------------------------------\n"; - //declare task array and keep track of how many tasks stored public static ArrayList t = new ArrayList<>(); public static int taskCount = 0; - public static int quitFlag = 0; //if 0, take user input. Otherwise, don't. + public static int quitFlag = 0; - //updates flag so that no more user input is taken + /** + * Method that updates quitFlag to 1 when user wants to terminate the program. + */ public static void updateQuitFlag() { quitFlag = 1; } - //Program exits with this ending - public static void sayBye(String input) throws DukeException{ //bye + /** + * Terminates the program. + * + * @param input that user gives + */ + public static void sayBye(String input) throws DukeException{ if (input.length() != 3) { - throw new DukeException("You didn't say bye properly, but i get it! Adios for now!\n"); //bye 9 + throw new DukeException("You didn't say bye properly, but i get it! Adios for now!\n"); } else { - System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); //bye + System.out.println(line + "\n" + "Ciao! More tasks to do later!\n" + line); updateQuitFlag(); } System.exit(0); } - //Lists out all tasks stored and their statuses - public static void sayList() throws DukeException{ //list + /** + * Prints out all the tasks, their types and statuses stored by the bot. + */ + public static void sayList() throws DukeException{ if (taskCount == 0) { throw new DukeException("Hold your horses, you didn't even tell me about your wishes yet!"); } else { @@ -40,46 +52,58 @@ public static void sayList() throws DukeException{ } } - //Marks a stored task as done - public static void sayDone(String input) throws DukeException { //done 1 + /** + * Marks a specific task stored as done. + * + * @param input that user gives containing the position of task + */ + public static void sayDone(String input) throws DukeException { if (taskCount != 0) { try { String taskNumber = input.substring(input.lastIndexOf(" ") + 1); int finalTaskNumber = Integer.parseInt(taskNumber) - 1; t.get(finalTaskNumber).markAsDone(); - System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); //done 1 + System.out.println(line + "\n" + "Kudos! One less thing to stress about!\n"); System.out.println(" " + t.get(finalTaskNumber).toString() + "\n" + line); } catch (NullPointerException e) { - System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //done 101 + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); } } else { - throw new DukeException("Calm down, we haven't even started listing out tasks yet!"); //done 1 when taskCount = 0 + throw new DukeException("Calm down, we haven't even started listing out tasks yet!"); } } - //Adds a new todo task and prints it //todo borrow book + /** + * Adds a todo task. + * + * @param input that user gives + */ public static void sayTodo(String input) { if (input.length() == 4) { - System.out.println(line + "\nDid you forget what you were gonna say?\n" + line); //todo + System.out.println(line + "\nDid you forget what you were gonna say?\n" + line); } else { int endIndex = input.length(); String taskName = input.substring(5, endIndex); t.add(taskCount, new Todo(taskName)); System.out.println(line + "\n"); - System.out.println("That's the spirit! I've added this task:\n"); //todo borrow book + System.out.println("That's the spirit! I've added this task:\n"); System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } } - //Adds a new deadline task and prints it - public static void sayDeadline(String input) { //deadline return books /by Sunday + /** + * Adds a deadline task. + * + * @param input that user gives + */ + public static void sayDeadline(String input) { if (input.length() == 8) { - System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //deadline + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); System.out.println(line); } else if (!input.contains("/")) { - System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); //deadline return book + System.out.println(line + "\nAre you kidding me? You forgot to tell me your deadline again?\n" + line); } else { int endIndex = input.indexOf("/"); String taskName = input.substring(9, endIndex); @@ -89,7 +113,7 @@ public static void sayDeadline(String input) { t.add(taskCount, new Deadline(taskName, by)); System.out.println(line + "\n"); System.out.println("Deadline Entered: " + dateTime.format(DateTimeFormatter.ofPattern("MMM d yyyy")) + "\n"); - System.out.println("Got it. I've added this task:\n"); //deadline return book /by Sunday + System.out.println("Got it. I've added this task:\n"); System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); @@ -97,13 +121,17 @@ public static void sayDeadline(String input) { } - //Adds a new event task and prints it - public static void sayEvent(String input) { //event project meeting /at Mon 2-4pm + /** + * Adds a event task. + * + * @param input that user gives + */ + public static void sayEvent(String input) { if (input.length() == 5) { - System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); //event + System.out.println(line + "\nAre you kidding me? You didn't even tell me what you were supposed to do!\n"); System.out.println(line); } else if (!input.contains("/")) { - System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); //event project meeting + System.out.println(line + "\nAre you kidding me? You forgot to tell me your event timing again?\n" + line); } else { int endIndex = input.lastIndexOf("/"); String taskName = input.substring(6, endIndex); @@ -111,15 +139,19 @@ public static void sayEvent(String input) { String at = input.substring(endIndex + 4, endIndex2); t.add(taskCount, new Event(taskName, at)); System.out.println(line + "\n"); - System.out.println("Got it. I've added this task:\n"); //event project meeting /at Tue 3-7pm + System.out.println("Got it. I've added this task:\n"); System.out.println(t.get(taskCount).toString()); taskCount++; System.out.println("\nNow you have " + taskCount + " tasks in the list.\n" + line); } } - //Deletes a stored task - public static void sayDelete(String input) throws DukeException { //delete 1 + /** + * Deletes a specific task. + * + * @param input that user gives containing the position of task + */ + public static void sayDelete(String input) throws DukeException { if (taskCount != 0) { try { String taskNumber = input.substring(input.lastIndexOf(" ") + 1); @@ -127,19 +159,23 @@ public static void sayDelete(String input) throws DukeException { Task taskRemoved = t.get(finalTaskNumber); t.remove(finalTaskNumber); taskCount--; - System.out.println(line + "\n" + "One more thing outta your life as always...\n"); //delete 1 + System.out.println(line + "\n" + "One more thing outta your life as always...\n"); System.out.println(" " + taskRemoved.toString() + "\n" + "\nYou now have " + taskCount + " tasks left.\n"); System.out.println(line); } catch (IndexOutOfBoundsException e) { - System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); //delete 101 + System.out.println(line + "\nInvalid task number entered! Please try again!\n" + line); } } else { - throw new DukeException("Calm down, we don't even have tasks yet!"); //delete 1 when taskCount = 0 + throw new DukeException("Calm down, we don't even have tasks yet!"); } } - //Give users a way to find a task by searching for a keyword - public static void sayFind(String input){ //find book + /** + * Finds and prints a specific task. + * + * @param input that user gives containing the position of task + */ + public static void sayFind(String input){ String[] arrayString = input.split(" ", 2); String keyWord = arrayString[1]; int matchCount = 0; diff --git a/src/main/java/duke/Todo.java b/src/main/java/duke/Todo.java index d98a9328a..c0ecc1104 100644 --- a/src/main/java/duke/Todo.java +++ b/src/main/java/duke/Todo.java @@ -1,16 +1,36 @@ package duke; +/** + * Class that is used in order to create a new todo task. + * + * @author pragyan01 + */ public class Todo extends Task{ + /** + * Constructor to instantiate new todo object + * + * @param description Description of the todo task + */ public Todo(String description) { super(description); } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toString() { return "[T][" + super.getStatusIcon() + "] " + super.toString(); } + /** + * Method to return String that has been stored in the Arraylist. + * + * @return String stored in the ArrayList + */ @Override public String toSave() { int done = 0; diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index d2b229d7d..ebacac27d 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -2,11 +2,18 @@ import java.io.FileNotFoundException; import static duke.Storage.loadData; +/** + * Class responsible for displaying the welcome messages by the bot. + * + * @author pragyan01 + */ public class Ui { public static String line = "------------------------------------------------------------------------------------------\n"; - //Program starts with this greeting + /** + * Method that prints a greeting and loads previously saved tasks into the bot. + */ public static void start() throws DukeException { try { loadData(); @@ -20,6 +27,4 @@ public static void start() throws DukeException { System.out.println("Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); } } - - } From b65f74b9e5f805d9ba5b4d721cf2b00156cdb26a Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Mon, 27 Sep 2021 23:46:46 +0800 Subject: [PATCH 23/34] All A-JavaDoc comments added --- src/main/java/duke/Parser.java | 3 +++ src/main/java/duke/Storage.java | 3 +++ src/main/java/duke/TaskList.java | 6 ++++++ src/main/java/duke/Ui.java | 2 ++ 4 files changed, 14 insertions(+) diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 6b0df22a8..41f06a24e 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -13,6 +13,9 @@ public class Parser { /** * Method that determines the control flow of the duke bot based on user input + * + * @throws DukeException custom error message when list is asked to be printed but empty + * @throws DateTimeParseException if format entered by user is not correct */ public static void inputSort() throws DukeException { while (quitFlag == 0) { diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 585b461b1..3f66dd9f6 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -38,6 +38,9 @@ public static void saveData(ArrayList t) { /** * Method that loads the offline txt file tasks into the bot. + * + * @throws FileNotFoundException if file does not exist + * @throws DukeException custom error message */ public static void loadData() throws FileNotFoundException, DukeException { String path = new File("userData.txt").getAbsolutePath(); diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 1d77414f2..0c91dd2bc 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -26,6 +26,7 @@ public static void updateQuitFlag() { * Terminates the program. * * @param input that user gives + * @throws DukeException custom error message if bye command not entered in correct format by user */ public static void sayBye(String input) throws DukeException{ if (input.length() != 3) { @@ -39,6 +40,8 @@ public static void sayBye(String input) throws DukeException{ /** * Prints out all the tasks, their types and statuses stored by the bot. + * + * @throws DukeException custom error message when user asks to print list but is empty */ public static void sayList() throws DukeException{ if (taskCount == 0) { @@ -56,6 +59,8 @@ public static void sayList() throws DukeException{ * Marks a specific task stored as done. * * @param input that user gives containing the position of task + * @throws DukeException custom error message when user enters task number in array out of bounds + * @throws DukeException custom error message when user tries to mark a task as done which doesn't exist */ public static void sayDone(String input) throws DukeException { if (taskCount != 0) { @@ -150,6 +155,7 @@ public static void sayEvent(String input) { * Deletes a specific task. * * @param input that user gives containing the position of task + * @throws DukeException custom error message when user deletes task number in array out of bounds */ public static void sayDelete(String input) throws DukeException { if (taskCount != 0) { diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index ebacac27d..3e40e56b3 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -13,6 +13,8 @@ public class Ui { /** * Method that prints a greeting and loads previously saved tasks into the bot. + * + * @throws DukeException custom error message if file not found */ public static void start() throws DukeException { try { From 434010ad2dbb50fb9fee2ee4aa508897383647e6 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Mon, 27 Sep 2021 23:58:46 +0800 Subject: [PATCH 24/34] add final copy of java doc commends --- src/main/java/duke/Storage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 3f66dd9f6..310158f75 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -39,7 +39,7 @@ public static void saveData(ArrayList t) { /** * Method that loads the offline txt file tasks into the bot. * - * @throws FileNotFoundException if file does not exist + * @throws FileNotFoundException if file does not exist in path specified * @throws DukeException custom error message */ public static void loadData() throws FileNotFoundException, DukeException { From 11e68d9a739ea24c12a9991a4443b56e7b3f0f11 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Tue, 28 Sep 2021 00:16:49 +0800 Subject: [PATCH 25/34] Add documentation-latest copy --- UserData.txt | 1 + src/main/java/duke/Storage.java | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/UserData.txt b/UserData.txt index e69de29bb..d8dd43f4a 100644 --- a/UserData.txt +++ b/UserData.txt @@ -0,0 +1 @@ +todo vishal | 0 diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 310158f75..2475d1772 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -49,11 +49,11 @@ public static void loadData() throws FileNotFoundException, DukeException { Scanner scan = new Scanner(f); String taskType; String s; - int taskNumber = 1; //tracks how many tasks read from .txt file so far + int taskNumber = 1; - while(scan.hasNext()) //todo hello | 1 - { //deadline hello /by Sunday | 1 - String data = scan.nextLine(); //event project meeting /at Mon 2-4pm | 0 + while(scan.hasNext()) + { + String data = scan.nextLine(); String[] arrayString = data.split(" \\| "); String[] arrayString2 = arrayString[0].split(" "); taskType = arrayString2[0]; From 7552d824fbe040b003158b284894f4bbd9422b74 Mon Sep 17 00:00:00 2001 From: pragyan01 <69446495+pragyan01@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:12:53 +0800 Subject: [PATCH 26/34] Set theme jekyll-theme-cayman --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 000000000..c4192631f --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file From 353632207a500642f42d7f72af7cf6e1e8941a15 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Wed, 29 Sep 2021 01:14:50 +0800 Subject: [PATCH 27/34] Add UG --- UserData.txt | 1 - docs/README.md | 198 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 187 insertions(+), 12 deletions(-) diff --git a/UserData.txt b/UserData.txt index d8dd43f4a..e69de29bb 100644 --- a/UserData.txt +++ b/UserData.txt @@ -1 +0,0 @@ -todo vishal | 0 diff --git a/docs/README.md b/docs/README.md index 8077118eb..a877a6a2e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,29 +1,205 @@ # User Guide +Duke is a CLI optimised bot that helps you create and manage 3 types of tasks - Deadlines, Events +and todo tasks. Users have the ability to create these tasks, mark them as done, delete +and find them. Users can also view their tasks in a list format. +* [Quick Start](#quick-start) +* [Features](#features) +* [Usage](#usage) + * [Adding a task](#adding-a-task) + * [Marking a task](#marking-a-task) + * [Deleting a task](#deleting-a-task) + * [Finding a task](#finding-a-task) + * [Listing all tasks](#listing-all-tasks) + * [Exiting the program](#exiting-the-program) +* [Command Summary](#command-summary) + +## Quick Start +1. Ensure you have Java 11 or above installed in your computer. +2. Download the latest iP.jar under v2.0 from [here]. +3. Go to the folder you saved iP.jar and note the absolute file path. +4. If you are using Windows, open up a Command prompt terminal cmd.exe or powershell.exe and for + Mac and Linux users, do the same with the terminal of your respective systems. +5. Navigate to the folder where iP.jar is stored. +6. Execute java -jar iP.jar in the terminal, and the application will start running. +You should be able to see something like this: +``` +------------------------------------------------------------------------------------------ +Hello! I'm Duke. + ____ _ +| _ \ _ _| | _____ +| | | | | | | |/ / _ \ +| |_| | |_| | < __/ +|____/ \__,_|_|\_\___| +What can i do for you? +------------------------------------------------------------------------------------------ + +Enter your wish: +------------------------------------------------------------------------------------------ +``` ## Features +1. Add any of the 3 task types: todo, deadline and events +2. Mark a task as done +3. Delete a task +4. Find a specific task or tasks containing the searched keyword +5. List out all tasks +6. Exit the program +## Usage +### Adding a task +Add tasks from any 3 types available: Todo, deadline and event -### Feature-ABC +1. A todo task only has a description associated with it. + This command allows you to add a new todo task to your list. -Description of the feature. +`todo {task description}` - Adds a new todo task -### Feature-XYZ +Example of usage: -Description of the feature. +`todo buy dinner` -## Usage +Expected outcome: + +``` +That's the spirit! I've added this task: + +[T][ ] buy dinner + +Now you have 1 tasks in the list. +``` + +2. A deadline task has a description, and a deadline associated with it. + This command allows you to add a new deadline task to your list. + +`deadline {task description} /by {yyyy-mm-dd}` - Adds a new deadline task + +Example of usage: + +`deadline submit assignment /by 2021-10-30` + +Expected outcome: + +``` +Deadline Entered: Oct 30 2021 + +Got it. I've added this task: + +[D][ ] submit assignment (by: 2021-10-30) + +Now you have 2 tasks in the list. +``` + +3. An event task has a description, and a duration associated with it. + This command allows you to add a new event task to your list. + +`event {task description} /at {duration}` - Adds a new event task + +Example of usage: + +`event team meeting /at Monday 5-6pm` + +Expected outcome: + +``` +Got it. I've added this task: + +[E][ ] team meeting (at: Monday 5-6pm) + +Now you have 3 tasks in the list. +``` +### Marking a task +Marks a task's status as done. + +`done {task number}` - Updates the task as completed + +Example of usage: -### `Keyword` - Describe action +`done 1` -Describe the action and its outcome. +Expected outcome: + +``` +Kudos! One less thing to stress about! + + [T][X] buy dinner +``` +### Deleting a task +Deletes a specific task from the list. + +`delete {task number}` - Removes the specific task + +Example of usage: + +`delete 1` + +Expected outcome: + +``` +One more thing outta your life as always... + + [T][X] buy dinner + +You now have 2 tasks left. +``` +### Finding a task +Searches for a specific task from the list or tasks containing the keyword. + +`find {keyword}` - Searches for tasks containing keyword + +Example of usage: + +`find assingment` -Example of usage: +Expected outcome: + +``` +Lucky for you, i'm really good at digging through your mess: +------------------------------------------------------------------------------------------ -`keyword (optional arguments)` +1. [D][ ] submit assignment (by: 2021-10-30) + +Enter your wish: +``` +### Listing all tasks +Prints all existing tasks in the list. + +`list` - Lists everything + +Example of usage: + +`list` Expected outcome: -Description of the outcome. +``` +1. [D][ ] submit assignment (by: 2021-10-30) + +2. [E][ ] team meeting (at: Monday 5-6pm) +``` +### Exiting the program +Terminates the program and exits. + +`bye` - Terminates program + +Example of usage: + +`bye` + +Expected outcome: ``` -expected output +------------------------------------------------------------------------------------------ + +Ciao! More tasks to do later! +------------------------------------------------------------------------------------------ ``` +## Command Summary +Description | Syntax | Example +------------|--------|-------- +Add todo task | todo {task description} | todo buy dinner +Add deadline task | deadline {task description} /by {yyyy-mm-dd} | deadline submit assignment /by 2021-10-30 +Add event task | event {task description} /at {duration} | event team meeting /at Monday 5-6pm +Mark task as done | done {task number} | done 1 +Delete a task | delete {task number} | delete 1 +Find a task | find {keyword} | find assignment +Exit the program | bye | bye + From eac98bbae124af0bebae7868fa7de1ec4a5264e2 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Wed, 29 Sep 2021 23:46:14 +0800 Subject: [PATCH 28/34] Add UG-latest version --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index a877a6a2e..8ba6209e1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,7 +15,7 @@ and find them. Users can also view their tasks in a list format. ## Quick Start 1. Ensure you have Java 11 or above installed in your computer. -2. Download the latest iP.jar under v2.0 from [here]. +2. Download the latest iP.jar under v2.0 from [here](https://github.com/pragyan01/ip/releases). 3. Go to the folder you saved iP.jar and note the absolute file path. 4. If you are using Windows, open up a Command prompt terminal cmd.exe or powershell.exe and for Mac and Linux users, do the same with the terminal of your respective systems. From b66e3a0aac7578d423cb3ba135f7067ecfbc8192 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 30 Sep 2021 00:07:22 +0800 Subject: [PATCH 29/34] final version of ip --- src/main/java/duke/Parser.java | 2 +- src/main/java/duke/TaskList.java | 2 +- src/main/java/duke/Ui.java | 14 ++++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index 41f06a24e..f4d75ebc2 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -31,7 +31,7 @@ public static void inputSort() throws DukeException { try { sayList(); } catch (DukeException e) { - System.out.println("Hold your horses, you didn't even tell me about your wishes yet!"); + System.out.println(line + "\n" + "Hold your horses, you didn't even tell me about your wishes yet!" + "\n" + line + "\n"); } break; case "done": diff --git a/src/main/java/duke/TaskList.java b/src/main/java/duke/TaskList.java index 0c91dd2bc..b8353e63b 100644 --- a/src/main/java/duke/TaskList.java +++ b/src/main/java/duke/TaskList.java @@ -45,7 +45,7 @@ public static void sayBye(String input) throws DukeException{ */ public static void sayList() throws DukeException{ if (taskCount == 0) { - throw new DukeException("Hold your horses, you didn't even tell me about your wishes yet!"); + throw new DukeException(line + "\n" + "Hold your horses, you didn't even tell me about your wishes yet!" + "\n" + line + "\n"); } else { System.out.println(line); for (int i = 0; i < taskCount; i++) { diff --git a/src/main/java/duke/Ui.java b/src/main/java/duke/Ui.java index 3e40e56b3..0e48d17d7 100644 --- a/src/main/java/duke/Ui.java +++ b/src/main/java/duke/Ui.java @@ -10,6 +10,11 @@ public class Ui { public static String line = "------------------------------------------------------------------------------------------\n"; + public static String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; /** * Method that prints a greeting and loads previously saved tasks into the bot. @@ -19,14 +24,11 @@ public class Ui { public static void start() throws DukeException { try { loadData(); - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); } catch (FileNotFoundException e) { - System.out.println("Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); + System.out.println(line + "\n" + "Saved file could not be found. I've used one of your wishes to create a new file for you! Thank me later."); + System.out.println(line + "Hello! I'm Duke.\n" + logo + "What can i do for you?\n" + line); } } } From ad649c6a193231f676334ebef315f2207d027e99 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 30 Sep 2021 23:22:13 +0800 Subject: [PATCH 30/34] added some small changes to UG --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 8ba6209e1..53721b29c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -193,6 +193,7 @@ Ciao! More tasks to do later! ------------------------------------------------------------------------------------------ ``` ## Command Summary + Description | Syntax | Example ------------|--------|-------- Add todo task | todo {task description} | todo buy dinner From 409360796571e16aa5676569bfee3897c13a4c51 Mon Sep 17 00:00:00 2001 From: pragyan01 <69446495+pragyan01@users.noreply.github.com> Date: Thu, 30 Sep 2021 23:27:40 +0800 Subject: [PATCH 31/34] Set theme jekyll-theme-hacker --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index c4192631f..fc24e7a62 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-cayman \ No newline at end of file +theme: jekyll-theme-hacker \ No newline at end of file From 0ff28b1e71c0688420811ddbf4c0aeee7f812f8d Mon Sep 17 00:00:00 2001 From: pragyan01 <69446495+pragyan01@users.noreply.github.com> Date: Thu, 30 Sep 2021 23:28:31 +0800 Subject: [PATCH 32/34] Set theme jekyll-theme-time-machine --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index fc24e7a62..ddeb671b6 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-hacker \ No newline at end of file +theme: jekyll-theme-time-machine \ No newline at end of file From 0e89a939d648cb2bd08272a2aee4ae1ace0602a3 Mon Sep 17 00:00:00 2001 From: pragyan_01 Date: Thu, 30 Sep 2021 23:34:34 +0800 Subject: [PATCH 33/34] add final version ip --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index 53721b29c..b50bfac61 100644 --- a/docs/README.md +++ b/docs/README.md @@ -44,7 +44,9 @@ Enter your wish: 4. Find a specific task or tasks containing the searched keyword 5. List out all tasks 6. Exit the program + ## Usage + ### Adding a task Add tasks from any 3 types available: Todo, deadline and event From cf715c55955925a66c8de30d73f0cc14348086e8 Mon Sep 17 00:00:00 2001 From: pragyan01 <69446495+pragyan01@users.noreply.github.com> Date: Thu, 30 Sep 2021 23:46:45 +0800 Subject: [PATCH 34/34] Set theme jekyll-theme-hacker --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index ddeb671b6..fc24e7a62 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-time-machine \ No newline at end of file +theme: jekyll-theme-hacker \ No newline at end of file