From 8887686f04870994b4608552678dba6d999baf65 Mon Sep 17 00:00:00 2001 From: yy Date: Thu, 19 Aug 2021 17:48:10 +0800 Subject: [PATCH 01/28] Week2 - ip - Level0 Incremenet - Implement an initial skeletal version of the Duke that simply greets the user and exits. --- src/main/java/Duke.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..a4f988884 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,7 @@ public class Duke { public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.printf(" Hello! I'm Duke\n" + + "What can I do for you?\n" + + "Bye. Hope to see you again soon!"); } } From 4da7dfafb6f605c344fe4b6cc72c486b856a473f Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 19 Aug 2021 17:50:18 +0800 Subject: [PATCH 02/28] Week2 - revert back to original Duke.java --- src/main/java/Duke.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a4f988884..5d313334c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,10 @@ public class Duke { public static void main(String[] args) { - System.out.printf(" Hello! I'm Duke\n" + - "What can I do for you?\n" + - "Bye. Hope to see you again soon!"); + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); } } From 30d4e6238230615d8d8baede2465edaa9398eae9 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 19 Aug 2021 21:24:14 +0800 Subject: [PATCH 03/28] Level0, Greet --- src/main/java/Duke.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334c..94aaf48dc 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,10 @@ public class Duke { public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + System.out.printf("____________________________________________________________\n" + + "Hello! I'm Duke\n" + + "What can I do for you?\n" + + "____________________________________________________________\n"+ + "Bye. Hope to see you again soon!\n"+ + "____________________________________________________________"); } } From ec42e0c3e7f58660fa414b28e52ed28d8e16fdb5 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 25 Aug 2021 18:46:34 +0800 Subject: [PATCH 04/28] Level-1: Greet, Echo, Exit --- src/main/java/Duke.java | 42 +++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 94aaf48dc..4aa90e2a3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,40 @@ +import java.util.Scanner; + public class Duke { public static void main(String[] args) { - System.out.printf("____________________________________________________________\n" + - "Hello! I'm Duke\n" + - "What can I do for you?\n" + - "____________________________________________________________\n"+ - "Bye. Hope to see you again soon!\n"+ - "____________________________________________________________"); + try (Scanner sc = new Scanner(System.in)) { + String sentence; + Chat.greet(); + while (true) { + sentence = sc.nextLine(); + if (sentence.equals("bye")) { + Chat.bye(); + break; + } + Chat.parrot(sentence); + } + } + } +} + +class Chat { + static void greet() { + System.out.printf("____________________________________________________________%n" + + "Hello! I'm Duke, the parrot.%n" + + "What can I do for you?%n" + + "____________________________________________________________%n"); + } + + static void parrot(String sentence) { + System.out.printf("____________________________________________________________%n" + + sentence + + "%n____________________________________________________________%n"); + + } + + static void bye() { + System.out.printf("____________________________________________________________%n" + + "Bye. Hope to see you again soon!%n" + + "____________________________________________________________%n"); } } From ad3d1925e3f6e6898303bdade829dbde1a0f032f Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 25 Aug 2021 18:53:56 +0800 Subject: [PATCH 05/28] Level 2. Add, List --- src/main/java/Duke.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 4aa90e2a3..2f90fa232 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -10,14 +10,20 @@ public static void main(String[] args) { if (sentence.equals("bye")) { Chat.bye(); break; + } else if (sentence.equals("list")) { + Chat.list(); + } else { + Chat.parrot(sentence); } - Chat.parrot(sentence); } } } } class Chat { + static String[] texts = new String[100]; + static int textIndex = 0; + static void greet() { System.out.printf("____________________________________________________________%n" + "Hello! I'm Duke, the parrot.%n" + @@ -26,9 +32,10 @@ static void greet() { } static void parrot(String sentence) { - System.out.printf("____________________________________________________________%n" + + System.out.printf("____________________________________________________________%nadded: " + sentence + "%n____________________________________________________________%n"); + texts[textIndex++] = sentence; } @@ -37,4 +44,13 @@ static void bye() { "Bye. Hope to see you again soon!%n" + "____________________________________________________________%n"); } + + static void list() { + int i; + System.out.printf("____________________________________________________________%n"); + for (i = 0; i < textIndex; i++) { + System.out.println((i + 1) + ". " + texts[i]); + } + System.out.printf("____________________________________________________________%n"); + } } From ad7dddde04d8fb2b322a7501763583324fa8d8ea Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 25 Aug 2021 18:55:22 +0800 Subject: [PATCH 06/28] Level 2. Add, List --- src/main/java/Duke.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 2f90fa232..498c6b12d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -13,7 +13,7 @@ public static void main(String[] args) { } else if (sentence.equals("list")) { Chat.list(); } else { - Chat.parrot(sentence); + Chat.add(sentence); } } } @@ -31,7 +31,7 @@ static void greet() { "____________________________________________________________%n"); } - static void parrot(String sentence) { + static void add(String sentence) { System.out.printf("____________________________________________________________%nadded: " + sentence + "%n____________________________________________________________%n"); From 776d310653228dadd33d1f68396c67d8a46b4976 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 25 Aug 2021 20:33:30 +0800 Subject: [PATCH 07/28] Level 3. Mark as Done --- src/main/java/Duke.java | 38 +++++++++++++++++++++++++++++-------- src/main/java/Task.java | 25 ++++++++++++++++++++++++ src/main/java/TaskBank.java | 26 +++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 src/main/java/Task.java create mode 100644 src/main/java/TaskBank.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 498c6b12d..97bfda2bf 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -7,11 +7,15 @@ public static void main(String[] args) { Chat.greet(); while (true) { sentence = sc.nextLine(); - if (sentence.equals("bye")) { + if (sentence.isEmpty()) { + System.out.println("I'm not sure if I get what you've said."); + } else if (sentence.equals("bye")) { Chat.bye(); break; } else if (sentence.equals("list")) { Chat.list(); + } else if (sentence.startsWith("done")) { + Chat.done(sentence); } else { Chat.add(sentence); } @@ -21,13 +25,12 @@ public static void main(String[] args) { } class Chat { - static String[] texts = new String[100]; - static int textIndex = 0; + static TaskBank taskBank = new TaskBank(); static void greet() { System.out.printf("____________________________________________________________%n" + - "Hello! I'm Duke, the parrot.%n" + - "What can I do for you?%n" + + "Hello! I'm Duke, your task manager.%n" + + "Key in your tasks below!%n" + "____________________________________________________________%n"); } @@ -35,7 +38,7 @@ static void add(String sentence) { System.out.printf("____________________________________________________________%nadded: " + sentence + "%n____________________________________________________________%n"); - texts[textIndex++] = sentence; + taskBank.addTask(sentence); } @@ -48,9 +51,28 @@ static void bye() { static void list() { int i; System.out.printf("____________________________________________________________%n"); - for (i = 0; i < textIndex; i++) { - System.out.println((i + 1) + ". " + texts[i]); + System.out.printf("Here are the tasks in your list:%n"); + taskBank.printList(); + System.out.printf("____________________________________________________________%n"); + } + + static void done(String sentence) { + String[] words = sentence.split(" "); + int targetIndex = Integer.parseInt(words[1]) - 1; + Task targetTask = taskBank.searchTask(targetIndex); + if (targetTask == null) { + System.out.println("Ouch! Index is out of range. Try again!"); + System.out.printf("____________________________________________________________%n"); + return; + } else if (targetTask.getIsDone()) { + System.out.println("Task is already completed"); + System.out.printf("____________________________________________________________%n"); + return; } + targetTask.markAsDone(); + System.out.println("Nice! I've marked this task as done: "); + System.out.println(" [X] " + targetTask.getDescription()); System.out.printf("____________________________________________________________%n"); } } + diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 000000000..dc123a33a --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,25 @@ +public class Task { + protected String description; + protected boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public String getStatusIcon() { + return (isDone ? "X" : " "); // mark done task with X + } + + public String getDescription() { + return this.description; + } + + public boolean getIsDone() { + return this.isDone; + } + + public void markAsDone() { + this.isDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java new file mode 100644 index 000000000..32bfb4eea --- /dev/null +++ b/src/main/java/TaskBank.java @@ -0,0 +1,26 @@ +public class TaskBank { + private Task[] tasks = new Task[100]; + private int taskIndex = 0; + + public void addTask(String taskInput) { + tasks[taskIndex++] = new Task(taskInput); + } + + public int getTaskIndex() { + return this.taskIndex; + } + + public void printList() { + int i; + for (i = 0; i < taskIndex; i++) { + System.out.println((i + 1) + ".[" + tasks[i].getStatusIcon() + "] " + tasks[i].getDescription()); + } + } + + public Task searchTask(int taskIndex) { + if (taskIndex < 1 || taskIndex > this.taskIndex) { + return null; + } + return tasks[taskIndex]; + } +} From d5622381de93e0185cb0c25e1e0826808c0c358a Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 26 Aug 2021 15:11:05 +0800 Subject: [PATCH 08/28] Fix bug. Change naming convention for class. --- src/main/java/Duke.java | 12 ++++++------ src/main/java/TaskBank.java | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 97bfda2bf..95d1cc0ea 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,27 +4,27 @@ public class Duke { public static void main(String[] args) { try (Scanner sc = new Scanner(System.in)) { String sentence; - Chat.greet(); + Chatter.greet(); while (true) { sentence = sc.nextLine(); if (sentence.isEmpty()) { System.out.println("I'm not sure if I get what you've said."); } else if (sentence.equals("bye")) { - Chat.bye(); + Chatter.bye(); break; } else if (sentence.equals("list")) { - Chat.list(); + Chatter.list(); } else if (sentence.startsWith("done")) { - Chat.done(sentence); + Chatter.done(sentence); } else { - Chat.add(sentence); + Chatter.add(sentence); } } } } } -class Chat { +class Chatter { static TaskBank taskBank = new TaskBank(); static void greet() { diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index 32bfb4eea..d33ee4f0a 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -1,7 +1,11 @@ public class TaskBank { - private Task[] tasks = new Task[100]; + private Task[] tasks; private int taskIndex = 0; + { + tasks = new Task[100]; + } + public void addTask(String taskInput) { tasks[taskIndex++] = new Task(taskInput); } @@ -18,7 +22,7 @@ public void printList() { } public Task searchTask(int taskIndex) { - if (taskIndex < 1 || taskIndex > this.taskIndex) { + if (taskIndex < 0 || taskIndex > this.taskIndex) { return null; } return tasks[taskIndex]; From 935abccbc06b13b578532f0538a661ead2b43499 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 31 Aug 2021 16:24:23 +0800 Subject: [PATCH 09/28] Level 4. ToDos, Events, Deadlines Add class Deadline, Event, Todo. All of them are inherited from class Task, and respective method of adding in each type of tasks in TaskBank. Add a default constructor for Task as for Deadline and Event, they cannot further use the parent's constructor to initialize the date (child field) --- src/main/java/Deadline.java | 24 ++++++++++++++++++++++++ src/main/java/Duke.java | 26 +++++++++++++++++--------- src/main/java/Event.java | 23 +++++++++++++++++++++++ src/main/java/Task.java | 16 +++++++++++++++- src/main/java/TaskBank.java | 17 ++++++++++++++++- src/main/java/ToDo.java | 8 ++++++++ 6 files changed, 103 insertions(+), 11 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..b94d57343 --- /dev/null +++ b/src/main/java/Deadline.java @@ -0,0 +1,24 @@ +public class Deadline extends Task { + private String deadLineDate; + + public Deadline(String description) { + int indexDivider = description.indexOf("/"); + String deadLineName = description.substring(0, indexDivider).trim(); + String deadLineDateString = description.substring(indexDivider + 1).trim(); + String deadLineDate = deadLineDateString.split(" ", 2)[1].trim(); + this.description = deadLineName; + this.deadLineDate = deadLineDateString; + this.taskType = "D"; + this.isDone = false; + } + + public String getDeadLineDate() { + return this.deadLineDate; + } + + @Override + public String toString() { + return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + + " (" + getDeadLineDate() + ")"; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 95d1cc0ea..efba34bb1 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -16,8 +16,15 @@ public static void main(String[] args) { Chatter.list(); } else if (sentence.startsWith("done")) { Chatter.done(sentence); - } else { - Chatter.add(sentence); + } else if (sentence.startsWith("todo")) { + Task newTask = Chatter.taskBank.addTodo(sentence); + Chatter.add(sentence, newTask); + } else if (sentence.startsWith("deadline")) { + Task newTask = Chatter.taskBank.addDeadline(sentence); + Chatter.add(sentence, newTask); + } else if (sentence.startsWith("event")) { + Task newTask = Chatter.taskBank.addEvent(sentence); + Chatter.add(sentence, newTask); } } } @@ -34,12 +41,13 @@ static void greet() { "____________________________________________________________%n"); } - static void add(String sentence) { - System.out.printf("____________________________________________________________%nadded: " + - sentence + - "%n____________________________________________________________%n"); - taskBank.addTask(sentence); - + static void add(String sentence, Task newTask) { + System.out.printf("____________________________________________________________%n" + + "Got it. I've added this task: %n " + + newTask + + "%nNow you have " + taskBank.getTaskIndex() + + " tasks in the list.%n" + + "____________________________________________________________%n"); } static void bye() { @@ -71,7 +79,7 @@ static void done(String sentence) { } targetTask.markAsDone(); System.out.println("Nice! I've marked this task as done: "); - System.out.println(" [X] " + targetTask.getDescription()); + System.out.println("[" + targetTask.getTaskType() + "]" + "[X] " + targetTask.getDescription()); System.out.printf("____________________________________________________________%n"); } } diff --git a/src/main/java/Event.java b/src/main/java/Event.java new file mode 100644 index 000000000..0b5be6a63 --- /dev/null +++ b/src/main/java/Event.java @@ -0,0 +1,23 @@ +public class Event extends Task { + private String eventDate; + + public Event(String description) { + int indexDivider = description.indexOf("/"); + String eventName = description.substring(0, indexDivider).trim(); + String eventDateString = description.substring(indexDivider + 1).trim(); + String eventDate = eventDateString.split(" ", 2)[1].trim(); + this.description = eventName; + this.eventDate = eventDateString; + this.taskType = "E"; + } + + public String getEventDate() { + return eventDate; + } + + @Override + public String toString() { + return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + + " (" + getEventDate() + ")"; + } +} diff --git a/src/main/java/Task.java b/src/main/java/Task.java index dc123a33a..87ff8033a 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -1,6 +1,11 @@ public class Task { protected String description; protected boolean isDone; + protected String taskType; + + public Task() { + + } public Task(String description) { this.description = description; @@ -22,4 +27,13 @@ public boolean getIsDone() { public void markAsDone() { this.isDone = true; } -} \ No newline at end of file + + public String getTaskType() { + return this.taskType; + } + + @Override + public String toString() { + return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription(); + } +} diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index d33ee4f0a..103d259a5 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -10,6 +10,21 @@ public void addTask(String taskInput) { tasks[taskIndex++] = new Task(taskInput); } + public Task addTodo(String todoInput) { + tasks[taskIndex++] = new ToDo(todoInput); + return tasks[taskIndex - 1]; + } + + public Task addEvent(String todoInput) { + tasks[taskIndex++] = new Event(todoInput); + return tasks[taskIndex - 1]; + } + + public Task addDeadline(String todoInput) { + tasks[taskIndex++] = new Deadline(todoInput); + return tasks[taskIndex - 1]; + } + public int getTaskIndex() { return this.taskIndex; } @@ -17,7 +32,7 @@ public int getTaskIndex() { public void printList() { int i; for (i = 0; i < taskIndex; i++) { - System.out.println((i + 1) + ".[" + tasks[i].getStatusIcon() + "] " + tasks[i].getDescription()); + System.out.printf("%d.%s%n", i + 1, tasks[i]); } } diff --git a/src/main/java/ToDo.java b/src/main/java/ToDo.java new file mode 100644 index 000000000..6e7df6395 --- /dev/null +++ b/src/main/java/ToDo.java @@ -0,0 +1,8 @@ +public class ToDo extends Task { + + public ToDo(String description) { + super(description); + this.taskType = "T"; + } + +} From 249071b6b9b181133cd649a6a6f30a5d613a5fbe Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 31 Aug 2021 16:47:53 +0800 Subject: [PATCH 10/28] A-CodeQuality: Rename and reformat the code abiding by the code standard --- src/main/java/Deadline.java | 14 +++++++------- src/main/java/Duke.java | 8 ++++---- src/main/java/Task.java | 2 +- src/main/java/TaskBank.java | 1 + 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/Deadline.java b/src/main/java/Deadline.java index b94d57343..bbf0bacd7 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/Deadline.java @@ -1,19 +1,19 @@ public class Deadline extends Task { - private String deadLineDate; + private String deadlineDate; public Deadline(String description) { int indexDivider = description.indexOf("/"); - String deadLineName = description.substring(0, indexDivider).trim(); - String deadLineDateString = description.substring(indexDivider + 1).trim(); - String deadLineDate = deadLineDateString.split(" ", 2)[1].trim(); - this.description = deadLineName; - this.deadLineDate = deadLineDateString; + String deadlineName = description.substring(0, indexDivider).trim(); + String deadlineDateString = description.substring(indexDivider + 1).trim(); + String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); + this.description = deadlineName; + this.deadlineDate = deadlineDateString; this.taskType = "D"; this.isDone = false; } public String getDeadLineDate() { - return this.deadLineDate; + return this.deadlineDate; } @Override diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index efba34bb1..d081ae5d3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -7,9 +7,7 @@ public static void main(String[] args) { Chatter.greet(); while (true) { sentence = sc.nextLine(); - if (sentence.isEmpty()) { - System.out.println("I'm not sure if I get what you've said."); - } else if (sentence.equals("bye")) { + if (sentence.equals("bye")) { Chatter.bye(); break; } else if (sentence.equals("list")) { @@ -25,6 +23,8 @@ public static void main(String[] args) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(sentence, newTask); + } else { + System.out.println("I'm not sure if I get what you've said."); } } } @@ -72,7 +72,7 @@ static void done(String sentence) { System.out.println("Ouch! Index is out of range. Try again!"); System.out.printf("____________________________________________________________%n"); return; - } else if (targetTask.getIsDone()) { + } else if (targetTask.getDone()) { System.out.println("Task is already completed"); System.out.printf("____________________________________________________________%n"); return; diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 87ff8033a..7bea4d340 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -20,7 +20,7 @@ public String getDescription() { return this.description; } - public boolean getIsDone() { + public boolean getDone() { return this.isDone; } diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index 103d259a5..dc65b7cba 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -36,6 +36,7 @@ public void printList() { } } + // search the Task in the array by index public Task searchTask(int taskIndex) { if (taskIndex < 0 || taskIndex > this.taskIndex) { return null; From 4104774dc8992d7df96180e4adf6f13ca781b5b2 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 2 Sep 2021 18:30:16 +0800 Subject: [PATCH 11/28] Bug fiex. Coding standard improved. --- src/main/java/Duke.java | 1 - src/main/java/Task.java | 3 ++- src/main/java/TaskBank.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d081ae5d3..909334e34 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -57,7 +57,6 @@ static void bye() { } static void list() { - int i; System.out.printf("____________________________________________________________%n"); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 7bea4d340..714df0e31 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -8,7 +8,8 @@ public Task() { } public Task(String description) { - this.description = description; + int spaceIndex = description.indexOf(' '); + this.description = description.substring(spaceIndex + 1); this.isDone = false; } diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index dc65b7cba..e9fd629e0 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -1,9 +1,10 @@ public class TaskBank { private Task[] tasks; private int taskIndex = 0; + private static final int MAX_TASK = 100; { - tasks = new Task[100]; + tasks = new Task[MAX_TASK]; } public void addTask(String taskInput) { From 73c315cdfbe349c494e5dc09bdc130f079d88d88 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 2 Sep 2021 18:31:03 +0800 Subject: [PATCH 12/28] Revert "Bug fiex. Coding standard improved." This reverts commit 4104774dc8992d7df96180e4adf6f13ca781b5b2. --- src/main/java/Duke.java | 1 + src/main/java/Task.java | 3 +-- src/main/java/TaskBank.java | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 909334e34..d081ae5d3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -57,6 +57,7 @@ static void bye() { } static void list() { + int i; System.out.printf("____________________________________________________________%n"); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 714df0e31..7bea4d340 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -8,8 +8,7 @@ public Task() { } public Task(String description) { - int spaceIndex = description.indexOf(' '); - this.description = description.substring(spaceIndex + 1); + this.description = description; this.isDone = false; } diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index e9fd629e0..dc65b7cba 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -1,10 +1,9 @@ public class TaskBank { private Task[] tasks; private int taskIndex = 0; - private static final int MAX_TASK = 100; { - tasks = new Task[MAX_TASK]; + tasks = new Task[100]; } public void addTask(String taskInput) { From ab261dda5561312429fe521b526d31aeb1d8d4a0 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 2 Sep 2021 18:55:01 +0800 Subject: [PATCH 13/28] Bug fixed. Coding standard improved. --- src/main/java/Duke.java | 1 - src/main/java/Task.java | 3 ++- src/main/java/TaskBank.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d081ae5d3..909334e34 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -57,7 +57,6 @@ static void bye() { } static void list() { - int i; System.out.printf("____________________________________________________________%n"); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); diff --git a/src/main/java/Task.java b/src/main/java/Task.java index 7bea4d340..714df0e31 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Task.java @@ -8,7 +8,8 @@ public Task() { } public Task(String description) { - this.description = description; + int spaceIndex = description.indexOf(' '); + this.description = description.substring(spaceIndex + 1); this.isDone = false; } diff --git a/src/main/java/TaskBank.java b/src/main/java/TaskBank.java index dc65b7cba..e9fd629e0 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/TaskBank.java @@ -1,9 +1,10 @@ public class TaskBank { private Task[] tasks; private int taskIndex = 0; + private static final int MAX_TASK = 100; { - tasks = new Task[100]; + tasks = new Task[MAX_TASK]; } public void addTask(String taskInput) { From c3e8e49272783651dbbf8f909fb6d391ceabc642 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 8 Sep 2021 13:02:17 +0800 Subject: [PATCH 14/28] Level-5. Added exception handling in irregular input, index out of bound and repeated completion exceptions. Added self-built exceptions under DukeException.java --- src/main/java/Duke.java | 63 +++++++++++++++++++------------- src/main/java/DukeException.java | 8 ++++ 2 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 src/main/java/DukeException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 909334e34..54bb0963a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -3,9 +3,26 @@ public class Duke { public static void main(String[] args) { try (Scanner sc = new Scanner(System.in)) { - String sentence; Chatter.greet(); - while (true) { + Chatter.talk(sc); + } + } +} + +class Chatter { + static TaskBank taskBank = new TaskBank(); + + static void greet() { + System.out.printf("____________________________________________________________%n" + + "Hello! I'm Duke, your task manager.%n" + + "Key in your tasks below!%n" + + "____________________________________________________________%n"); + } + + static void talk(Scanner sc) { + String sentence; + while (true) { + try { sentence = sc.nextLine(); if (sentence.equals("bye")) { Chatter.bye(); @@ -16,32 +33,32 @@ public static void main(String[] args) { Chatter.done(sentence); } else if (sentence.startsWith("todo")) { Task newTask = Chatter.taskBank.addTodo(sentence); - Chatter.add(sentence, newTask); + Chatter.add(newTask); } else if (sentence.startsWith("deadline")) { Task newTask = Chatter.taskBank.addDeadline(sentence); - Chatter.add(sentence, newTask); + Chatter.add(newTask); } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); - Chatter.add(sentence, newTask); + Chatter.add(newTask); } else { - System.out.println("I'm not sure if I get what you've said."); + throw new IrregularInputException(); } + } catch (IrregularInputException e) { + System.out.printf("____________________________________________________________%n" + + "☹ OOPS!!! I'm sorry, but I don't know what that means :-(%n" + + "Please try again!%n" + + "____________________________________________________________%n"); + } catch (IndexOutOfBoundsException e) { + System.out.printf("Ouch! Index is out of range. Try again!%n"); + System.out.printf("____________________________________________________________%n"); + } catch (RepeatedCompletionException e) { + System.out.println("Task is already completed"); + System.out.printf("____________________________________________________________%n"); } } } -} - -class Chatter { - static TaskBank taskBank = new TaskBank(); - - static void greet() { - System.out.printf("____________________________________________________________%n" + - "Hello! I'm Duke, your task manager.%n" + - "Key in your tasks below!%n" + - "____________________________________________________________%n"); - } - static void add(String sentence, Task newTask) { + static void add(Task newTask) { System.out.printf("____________________________________________________________%n" + "Got it. I've added this task: %n " + newTask + @@ -63,18 +80,14 @@ static void list() { System.out.printf("____________________________________________________________%n"); } - static void done(String sentence) { + static void done(String sentence) throws IndexOutOfBoundsException, RepeatedCompletionException { String[] words = sentence.split(" "); int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); if (targetTask == null) { - System.out.println("Ouch! Index is out of range. Try again!"); - System.out.printf("____________________________________________________________%n"); - return; + throw new IndexOutOfBoundsException(); } else if (targetTask.getDone()) { - System.out.println("Task is already completed"); - System.out.printf("____________________________________________________________%n"); - return; + throw new RepeatedCompletionException(); } targetTask.markAsDone(); System.out.println("Nice! I've marked this task as done: "); diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java new file mode 100644 index 000000000..6d0c2d227 --- /dev/null +++ b/src/main/java/DukeException.java @@ -0,0 +1,8 @@ +public class DukeException extends Exception { +} + +class RepeatedCompletionException extends DukeException { +} + +class IrregularInputException extends DukeException { +} From 241ec2699c1a750f5dfd0c03aabce3e2b00e2596 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 8 Sep 2021 13:21:21 +0800 Subject: [PATCH 15/28] A-Packages Organize all the task of Duke into one package. Organize all the exceptions generated by Duke (sub-class of DukeException) into one package. --- src/main/java/Duke.java | 5 +++++ src/main/java/DukeException.java | 8 -------- src/main/java/duke/exception/DukeException.java | 4 ++++ src/main/java/duke/exception/IrregularInputException.java | 4 ++++ .../java/duke/exception/RepeatedCompletionException.java | 4 ++++ src/main/java/{ => duke/task}/Deadline.java | 2 ++ src/main/java/{ => duke/task}/Event.java | 2 ++ src/main/java/{ => duke/task}/Task.java | 2 ++ src/main/java/{ => duke/task}/TaskBank.java | 2 ++ src/main/java/{ => duke/task}/ToDo.java | 2 ++ 10 files changed, 27 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/DukeException.java create mode 100644 src/main/java/duke/exception/DukeException.java create mode 100644 src/main/java/duke/exception/IrregularInputException.java create mode 100644 src/main/java/duke/exception/RepeatedCompletionException.java rename src/main/java/{ => duke/task}/Deadline.java (97%) rename src/main/java/{ => duke/task}/Event.java (97%) rename src/main/java/{ => duke/task}/Task.java (97%) rename src/main/java/{ => duke/task}/TaskBank.java (98%) rename src/main/java/{ => duke/task}/ToDo.java (87%) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 54bb0963a..145aab4e5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,8 @@ +import duke.exception.IrregularInputException; +import duke.exception.RepeatedCompletionException; +import duke.task.Task; +import duke.task.TaskBank; + import java.util.Scanner; public class Duke { diff --git a/src/main/java/DukeException.java b/src/main/java/DukeException.java deleted file mode 100644 index 6d0c2d227..000000000 --- a/src/main/java/DukeException.java +++ /dev/null @@ -1,8 +0,0 @@ -public class DukeException extends Exception { -} - -class RepeatedCompletionException extends DukeException { -} - -class IrregularInputException extends DukeException { -} diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java new file mode 100644 index 000000000..946898f59 --- /dev/null +++ b/src/main/java/duke/exception/DukeException.java @@ -0,0 +1,4 @@ +package duke.exception; + +public class DukeException extends Exception { +} diff --git a/src/main/java/duke/exception/IrregularInputException.java b/src/main/java/duke/exception/IrregularInputException.java new file mode 100644 index 000000000..27d98041a --- /dev/null +++ b/src/main/java/duke/exception/IrregularInputException.java @@ -0,0 +1,4 @@ +package duke.exception; + +public class IrregularInputException extends DukeException { +} diff --git a/src/main/java/duke/exception/RepeatedCompletionException.java b/src/main/java/duke/exception/RepeatedCompletionException.java new file mode 100644 index 000000000..905cdd495 --- /dev/null +++ b/src/main/java/duke/exception/RepeatedCompletionException.java @@ -0,0 +1,4 @@ +package duke.exception; + +public class RepeatedCompletionException extends DukeException{ +} diff --git a/src/main/java/Deadline.java b/src/main/java/duke/task/Deadline.java similarity index 97% rename from src/main/java/Deadline.java rename to src/main/java/duke/task/Deadline.java index bbf0bacd7..5eb7d57b5 100644 --- a/src/main/java/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,3 +1,5 @@ +package duke.task; + public class Deadline extends Task { private String deadlineDate; diff --git a/src/main/java/Event.java b/src/main/java/duke/task/Event.java similarity index 97% rename from src/main/java/Event.java rename to src/main/java/duke/task/Event.java index 0b5be6a63..26506d217 100644 --- a/src/main/java/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,3 +1,5 @@ +package duke.task; + public class Event extends Task { private String eventDate; diff --git a/src/main/java/Task.java b/src/main/java/duke/task/Task.java similarity index 97% rename from src/main/java/Task.java rename to src/main/java/duke/task/Task.java index 714df0e31..d1038a704 100644 --- a/src/main/java/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,3 +1,5 @@ +package duke.task; + public class Task { protected String description; protected boolean isDone; diff --git a/src/main/java/TaskBank.java b/src/main/java/duke/task/TaskBank.java similarity index 98% rename from src/main/java/TaskBank.java rename to src/main/java/duke/task/TaskBank.java index e9fd629e0..1784b9e4c 100644 --- a/src/main/java/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,3 +1,5 @@ +package duke.task; + public class TaskBank { private Task[] tasks; private int taskIndex = 0; diff --git a/src/main/java/ToDo.java b/src/main/java/duke/task/ToDo.java similarity index 87% rename from src/main/java/ToDo.java rename to src/main/java/duke/task/ToDo.java index 6e7df6395..95b2a43a2 100644 --- a/src/main/java/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -1,3 +1,5 @@ +package duke.task; + public class ToDo extends Task { public ToDo(String description) { From 34b583fc2c4660556a8ced434fdfe14665f95de7 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Sun, 12 Sep 2021 20:55:19 +0800 Subject: [PATCH 16/28] Level 6. Bug fixed. Use ArrayList to replace array in TaskBank. Add function of removing tasks from the list. --- src/main/java/Duke.java | 89 ++++++++++++------- .../java/duke/exception/DukeException.java | 8 ++ .../duke/exception/EmptyInputException.java | 13 +++ .../exception/IrregularInputException.java | 7 ++ .../RepeatedCompletionException.java | 8 ++ src/main/java/duke/task/Deadline.java | 12 +-- src/main/java/duke/task/Event.java | 11 +-- src/main/java/duke/task/Task.java | 28 ++++-- src/main/java/duke/task/TaskBank.java | 57 +++++++----- src/main/java/duke/task/ToDo.java | 2 +- 10 files changed, 165 insertions(+), 70 deletions(-) create mode 100644 src/main/java/duke/exception/EmptyInputException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 145aab4e5..ae35a99f8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,4 @@ +import duke.exception.EmptyInputException; import duke.exception.IrregularInputException; import duke.exception.RepeatedCompletionException; import duke.task.Task; @@ -18,10 +19,10 @@ class Chatter { static TaskBank taskBank = new TaskBank(); static void greet() { - System.out.printf("____________________________________________________________%n" + - "Hello! I'm Duke, your task manager.%n" + - "Key in your tasks below!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.printf("Hello! I'm Duke, your task manager.%n" + + "Key in your tasks below!%n"); + printDashLine(); } static void talk(Scanner sc) { @@ -29,7 +30,9 @@ static void talk(Scanner sc) { while (true) { try { sentence = sc.nextLine(); - if (sentence.equals("bye")) { + if (sentence.isEmpty()) { + throw new EmptyInputException("Empty input! Try again (o|o)\n"); + } else if (sentence.equals("bye")) { Chatter.bye(); break; } else if (sentence.equals("list")) { @@ -45,58 +48,80 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); + } else if (sentence.startsWith("delete")) { + Chatter.deleteTask(sentence); } else { - throw new IrregularInputException(); + throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + + "\nPlease try again!"); } } catch (IrregularInputException e) { - System.out.printf("____________________________________________________________%n" + - "☹ OOPS!!! I'm sorry, but I don't know what that means :-(%n" + - "Please try again!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.println(e.getMessage()); + printDashLine(); } catch (IndexOutOfBoundsException e) { - System.out.printf("Ouch! Index is out of range. Try again!%n"); - System.out.printf("____________________________________________________________%n"); + System.out.println(e.getMessage()); + printDashLine(); } catch (RepeatedCompletionException e) { - System.out.println("Task is already completed"); - System.out.printf("____________________________________________________________%n"); + System.out.println(e.getMessage()); + printDashLine(); + } catch (EmptyInputException e) { + printDashLine(); + System.out.println(e.getMessage()); + printDashLine(); + } catch (NumberFormatException e) { + printDashLine(); + System.out.printf("Not a valid number. Try again%n"); + printDashLine(); } } + } static void add(Task newTask) { - System.out.printf("____________________________________________________________%n" + - "Got it. I've added this task: %n " + + printDashLine(); + System.out.printf("Got it. I've added this task: %n " + newTask + - "%nNow you have " + taskBank.getTaskIndex() + - " tasks in the list.%n" + - "____________________________________________________________%n"); + "%nNow you have " + taskBank.getTaskSize() + + " tasks in the list.%n"); + printDashLine(); } static void bye() { - System.out.printf("____________________________________________________________%n" + - "Bye. Hope to see you again soon!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.printf("Bye. Hope to see you again soon!%n"); + printDashLine(); } static void list() { - System.out.printf("____________________________________________________________%n"); + printDashLine(); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); - System.out.printf("____________________________________________________________%n"); + printDashLine(); } - static void done(String sentence) throws IndexOutOfBoundsException, RepeatedCompletionException { + static void done(String sentence) throws RepeatedCompletionException, NumberFormatException { String[] words = sentence.split(" "); int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); - if (targetTask == null) { - throw new IndexOutOfBoundsException(); - } else if (targetTask.getDone()) { - throw new RepeatedCompletionException(); - } targetTask.markAsDone(); - System.out.println("Nice! I've marked this task as done: "); - System.out.println("[" + targetTask.getTaskType() + "]" + "[X] " + targetTask.getDescription()); + System.out.printf("Nice! I've marked this task as done: %n"); + System.out.println(" " + targetTask); + printDashLine(); + } + + static void deleteTask(String sentence) { + String[] words = sentence.split(" "); + int targetIndex = Integer.parseInt(words[1]) - 1; + Task deletedTask = Chatter.taskBank.removeTask(targetIndex); + printDashLine(); + System.out.printf("Noted. I've removed this task: %n"); + System.out.println(" " + deletedTask); + System.out.printf("Now you have " + taskBank.getTaskSize() + + " tasks in the list.%n"); + printDashLine(); + } + + static void printDashLine() { System.out.printf("____________________________________________________________%n"); } } diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java index 946898f59..b90f04d7a 100644 --- a/src/main/java/duke/exception/DukeException.java +++ b/src/main/java/duke/exception/DukeException.java @@ -1,4 +1,12 @@ package duke.exception; public class DukeException extends Exception { + public DukeException() { + super(); + } + + public DukeException(String message) { + super(message); + } + } diff --git a/src/main/java/duke/exception/EmptyInputException.java b/src/main/java/duke/exception/EmptyInputException.java new file mode 100644 index 000000000..afdabb965 --- /dev/null +++ b/src/main/java/duke/exception/EmptyInputException.java @@ -0,0 +1,13 @@ +package duke.exception; + +public class EmptyInputException extends DukeException { + + public EmptyInputException() { + super(); + } + + public EmptyInputException(String mesagge) { + super(mesagge); + } + +} diff --git a/src/main/java/duke/exception/IrregularInputException.java b/src/main/java/duke/exception/IrregularInputException.java index 27d98041a..16a4c9740 100644 --- a/src/main/java/duke/exception/IrregularInputException.java +++ b/src/main/java/duke/exception/IrregularInputException.java @@ -1,4 +1,11 @@ package duke.exception; public class IrregularInputException extends DukeException { + public IrregularInputException() { + super(); + } + + public IrregularInputException(String message) { + super(message); + } } diff --git a/src/main/java/duke/exception/RepeatedCompletionException.java b/src/main/java/duke/exception/RepeatedCompletionException.java index 905cdd495..4e7c662bb 100644 --- a/src/main/java/duke/exception/RepeatedCompletionException.java +++ b/src/main/java/duke/exception/RepeatedCompletionException.java @@ -1,4 +1,12 @@ package duke.exception; public class RepeatedCompletionException extends DukeException{ + + public RepeatedCompletionException(){ + super(); + } + + public RepeatedCompletionException(String message){ + super(message); + } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 5eb7d57b5..36bc9db24 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -4,14 +4,15 @@ public class Deadline extends Task { private String deadlineDate; public Deadline(String description) { + //super(); int indexDivider = description.indexOf("/"); + int spaceIndex = description.indexOf(' '); String deadlineName = description.substring(0, indexDivider).trim(); String deadlineDateString = description.substring(indexDivider + 1).trim(); - String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); - this.description = deadlineName; + //String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); this.deadlineDate = deadlineDateString; - this.taskType = "D"; - this.isDone = false; + this.description = deadlineName.substring(spaceIndex + 1); + this.taskType = TaskType.DEADLINE; } public String getDeadLineDate() { @@ -20,7 +21,6 @@ public String getDeadLineDate() { @Override public String toString() { - return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getDeadLineDate() + ")"; + return super.toString() + " (" + getDeadLineDate() + ")"; } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 26506d217..df2964d56 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -4,13 +4,15 @@ public class Event extends Task { private String eventDate; public Event(String description) { + super(); int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); + int spaceIndex = description.indexOf(' '); String eventDateString = description.substring(indexDivider + 1).trim(); - String eventDate = eventDateString.split(" ", 2)[1].trim(); - this.description = eventName; + //String eventDate = eventDateString.split(" ", 2)[1].trim(); + this.description = eventName.substring(spaceIndex + 1); this.eventDate = eventDateString; - this.taskType = "E"; + this.taskType = TaskType.EVENT; } public String getEventDate() { @@ -19,7 +21,6 @@ public String getEventDate() { @Override public String toString() { - return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getEventDate() + ")"; + return super.toString()+ " (" + getEventDate() + ")"; } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index d1038a704..eced7ad26 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,18 +1,24 @@ package duke.task; +import duke.exception.RepeatedCompletionException; + +enum TaskType { + TO_DO, DEADLINE, EVENT; +} + public class Task { protected String description; protected boolean isDone; - protected String taskType; + protected TaskType taskType; public Task() { - + this.isDone = false; } public Task(String description) { + this(); int spaceIndex = description.indexOf(' '); this.description = description.substring(spaceIndex + 1); - this.isDone = false; } public String getStatusIcon() { @@ -27,12 +33,24 @@ public boolean getDone() { return this.isDone; } - public void markAsDone() { + public void markAsDone() throws RepeatedCompletionException{ + if (this.getDone()) { + throw new RepeatedCompletionException("This task has already been completed!\n"); + } this.isDone = true; } public String getTaskType() { - return this.taskType; + switch (this.taskType) { + case TO_DO: + return "T"; + case EVENT: + return "E"; + case DEADLINE: + return "D"; + default: + return "N"; // stands for unknown tasks + } } @Override diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 1784b9e4c..bbc6e175d 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,49 +1,64 @@ package duke.task; +import java.util.ArrayList; + public class TaskBank { - private Task[] tasks; - private int taskIndex = 0; - private static final int MAX_TASK = 100; + private ArrayList tasks; { - tasks = new Task[MAX_TASK]; + tasks = new ArrayList<>(); } - public void addTask(String taskInput) { - tasks[taskIndex++] = new Task(taskInput); + public Task addTask(String taskInput) { + Task newTask = new Task(taskInput); + tasks.add(newTask); + return newTask; } public Task addTodo(String todoInput) { - tasks[taskIndex++] = new ToDo(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new ToDo(todoInput); + tasks.add(newTask); + return newTask; } public Task addEvent(String todoInput) { - tasks[taskIndex++] = new Event(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new Event(todoInput); + tasks.add(newTask); + return newTask; } public Task addDeadline(String todoInput) { - tasks[taskIndex++] = new Deadline(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new Deadline(todoInput); + tasks.add(newTask); + return newTask; } - public int getTaskIndex() { - return this.taskIndex; + public int getTaskSize() { + return tasks.size(); } public void printList() { - int i; - for (i = 0; i < taskIndex; i++) { - System.out.printf("%d.%s%n", i + 1, tasks[i]); + int i = 0; + for (Task task : tasks) { + System.out.printf("%d.%s%n", i + 1, task); + i++; } } // search the Task in the array by index - public Task searchTask(int taskIndex) { - if (taskIndex < 0 || taskIndex > this.taskIndex) { - return null; + public Task searchTask(int taskIndex) throws IndexOutOfBoundsException { + if (taskIndex < 0 || taskIndex > this.getTaskSize()) { + throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); + } + return tasks.get(taskIndex); + } + + public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { + if (taskIndex < 0 || taskIndex > this.getTaskSize()) { + throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); } - return tasks[taskIndex]; + Task deletedTask = tasks.get(taskIndex); + tasks.remove(taskIndex); + return deletedTask; } } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 95b2a43a2..605656f4a 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -4,7 +4,7 @@ public class ToDo extends Task { public ToDo(String description) { super(description); - this.taskType = "T"; + this.taskType = TaskType.TO_DO; } } From 064df2dc6cef2fb18e4b377b79bf8b95df9fbb4e Mon Sep 17 00:00:00 2001 From: an ruyi Date: Sun, 12 Sep 2021 20:59:59 +0800 Subject: [PATCH 17/28] Revert "Level 6." This reverts commit 34b583fc2c4660556a8ced434fdfe14665f95de7. --- src/main/java/Duke.java | 89 +++++++------------ .../java/duke/exception/DukeException.java | 8 -- .../duke/exception/EmptyInputException.java | 13 --- .../exception/IrregularInputException.java | 7 -- .../RepeatedCompletionException.java | 8 -- src/main/java/duke/task/Deadline.java | 12 +-- src/main/java/duke/task/Event.java | 11 ++- src/main/java/duke/task/Task.java | 28 ++---- src/main/java/duke/task/TaskBank.java | 57 +++++------- src/main/java/duke/task/ToDo.java | 2 +- 10 files changed, 70 insertions(+), 165 deletions(-) delete mode 100644 src/main/java/duke/exception/EmptyInputException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ae35a99f8..145aab4e5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,3 @@ -import duke.exception.EmptyInputException; import duke.exception.IrregularInputException; import duke.exception.RepeatedCompletionException; import duke.task.Task; @@ -19,10 +18,10 @@ class Chatter { static TaskBank taskBank = new TaskBank(); static void greet() { - printDashLine(); - System.out.printf("Hello! I'm Duke, your task manager.%n" + - "Key in your tasks below!%n"); - printDashLine(); + System.out.printf("____________________________________________________________%n" + + "Hello! I'm Duke, your task manager.%n" + + "Key in your tasks below!%n" + + "____________________________________________________________%n"); } static void talk(Scanner sc) { @@ -30,9 +29,7 @@ static void talk(Scanner sc) { while (true) { try { sentence = sc.nextLine(); - if (sentence.isEmpty()) { - throw new EmptyInputException("Empty input! Try again (o|o)\n"); - } else if (sentence.equals("bye")) { + if (sentence.equals("bye")) { Chatter.bye(); break; } else if (sentence.equals("list")) { @@ -48,80 +45,58 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); - } else if (sentence.startsWith("delete")) { - Chatter.deleteTask(sentence); } else { - throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + - "\nPlease try again!"); + throw new IrregularInputException(); } } catch (IrregularInputException e) { - printDashLine(); - System.out.println(e.getMessage()); - printDashLine(); + System.out.printf("____________________________________________________________%n" + + "☹ OOPS!!! I'm sorry, but I don't know what that means :-(%n" + + "Please try again!%n" + + "____________________________________________________________%n"); } catch (IndexOutOfBoundsException e) { - System.out.println(e.getMessage()); - printDashLine(); + System.out.printf("Ouch! Index is out of range. Try again!%n"); + System.out.printf("____________________________________________________________%n"); } catch (RepeatedCompletionException e) { - System.out.println(e.getMessage()); - printDashLine(); - } catch (EmptyInputException e) { - printDashLine(); - System.out.println(e.getMessage()); - printDashLine(); - } catch (NumberFormatException e) { - printDashLine(); - System.out.printf("Not a valid number. Try again%n"); - printDashLine(); + System.out.println("Task is already completed"); + System.out.printf("____________________________________________________________%n"); } } - } static void add(Task newTask) { - printDashLine(); - System.out.printf("Got it. I've added this task: %n " + + System.out.printf("____________________________________________________________%n" + + "Got it. I've added this task: %n " + newTask + - "%nNow you have " + taskBank.getTaskSize() + - " tasks in the list.%n"); - printDashLine(); + "%nNow you have " + taskBank.getTaskIndex() + + " tasks in the list.%n" + + "____________________________________________________________%n"); } static void bye() { - printDashLine(); - System.out.printf("Bye. Hope to see you again soon!%n"); - printDashLine(); + System.out.printf("____________________________________________________________%n" + + "Bye. Hope to see you again soon!%n" + + "____________________________________________________________%n"); } static void list() { - printDashLine(); + System.out.printf("____________________________________________________________%n"); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); - printDashLine(); + System.out.printf("____________________________________________________________%n"); } - static void done(String sentence) throws RepeatedCompletionException, NumberFormatException { + static void done(String sentence) throws IndexOutOfBoundsException, RepeatedCompletionException { String[] words = sentence.split(" "); int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); + if (targetTask == null) { + throw new IndexOutOfBoundsException(); + } else if (targetTask.getDone()) { + throw new RepeatedCompletionException(); + } targetTask.markAsDone(); - System.out.printf("Nice! I've marked this task as done: %n"); - System.out.println(" " + targetTask); - printDashLine(); - } - - static void deleteTask(String sentence) { - String[] words = sentence.split(" "); - int targetIndex = Integer.parseInt(words[1]) - 1; - Task deletedTask = Chatter.taskBank.removeTask(targetIndex); - printDashLine(); - System.out.printf("Noted. I've removed this task: %n"); - System.out.println(" " + deletedTask); - System.out.printf("Now you have " + taskBank.getTaskSize() + - " tasks in the list.%n"); - printDashLine(); - } - - static void printDashLine() { + System.out.println("Nice! I've marked this task as done: "); + System.out.println("[" + targetTask.getTaskType() + "]" + "[X] " + targetTask.getDescription()); System.out.printf("____________________________________________________________%n"); } } diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java index b90f04d7a..946898f59 100644 --- a/src/main/java/duke/exception/DukeException.java +++ b/src/main/java/duke/exception/DukeException.java @@ -1,12 +1,4 @@ package duke.exception; public class DukeException extends Exception { - public DukeException() { - super(); - } - - public DukeException(String message) { - super(message); - } - } diff --git a/src/main/java/duke/exception/EmptyInputException.java b/src/main/java/duke/exception/EmptyInputException.java deleted file mode 100644 index afdabb965..000000000 --- a/src/main/java/duke/exception/EmptyInputException.java +++ /dev/null @@ -1,13 +0,0 @@ -package duke.exception; - -public class EmptyInputException extends DukeException { - - public EmptyInputException() { - super(); - } - - public EmptyInputException(String mesagge) { - super(mesagge); - } - -} diff --git a/src/main/java/duke/exception/IrregularInputException.java b/src/main/java/duke/exception/IrregularInputException.java index 16a4c9740..27d98041a 100644 --- a/src/main/java/duke/exception/IrregularInputException.java +++ b/src/main/java/duke/exception/IrregularInputException.java @@ -1,11 +1,4 @@ package duke.exception; public class IrregularInputException extends DukeException { - public IrregularInputException() { - super(); - } - - public IrregularInputException(String message) { - super(message); - } } diff --git a/src/main/java/duke/exception/RepeatedCompletionException.java b/src/main/java/duke/exception/RepeatedCompletionException.java index 4e7c662bb..905cdd495 100644 --- a/src/main/java/duke/exception/RepeatedCompletionException.java +++ b/src/main/java/duke/exception/RepeatedCompletionException.java @@ -1,12 +1,4 @@ package duke.exception; public class RepeatedCompletionException extends DukeException{ - - public RepeatedCompletionException(){ - super(); - } - - public RepeatedCompletionException(String message){ - super(message); - } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 36bc9db24..5eb7d57b5 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -4,15 +4,14 @@ public class Deadline extends Task { private String deadlineDate; public Deadline(String description) { - //super(); int indexDivider = description.indexOf("/"); - int spaceIndex = description.indexOf(' '); String deadlineName = description.substring(0, indexDivider).trim(); String deadlineDateString = description.substring(indexDivider + 1).trim(); - //String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); + String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); + this.description = deadlineName; this.deadlineDate = deadlineDateString; - this.description = deadlineName.substring(spaceIndex + 1); - this.taskType = TaskType.DEADLINE; + this.taskType = "D"; + this.isDone = false; } public String getDeadLineDate() { @@ -21,6 +20,7 @@ public String getDeadLineDate() { @Override public String toString() { - return super.toString() + " (" + getDeadLineDate() + ")"; + return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + + " (" + getDeadLineDate() + ")"; } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index df2964d56..26506d217 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -4,15 +4,13 @@ public class Event extends Task { private String eventDate; public Event(String description) { - super(); int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); - int spaceIndex = description.indexOf(' '); String eventDateString = description.substring(indexDivider + 1).trim(); - //String eventDate = eventDateString.split(" ", 2)[1].trim(); - this.description = eventName.substring(spaceIndex + 1); + String eventDate = eventDateString.split(" ", 2)[1].trim(); + this.description = eventName; this.eventDate = eventDateString; - this.taskType = TaskType.EVENT; + this.taskType = "E"; } public String getEventDate() { @@ -21,6 +19,7 @@ public String getEventDate() { @Override public String toString() { - return super.toString()+ " (" + getEventDate() + ")"; + return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + + " (" + getEventDate() + ")"; } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index eced7ad26..d1038a704 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,24 +1,18 @@ package duke.task; -import duke.exception.RepeatedCompletionException; - -enum TaskType { - TO_DO, DEADLINE, EVENT; -} - public class Task { protected String description; protected boolean isDone; - protected TaskType taskType; + protected String taskType; public Task() { - this.isDone = false; + } public Task(String description) { - this(); int spaceIndex = description.indexOf(' '); this.description = description.substring(spaceIndex + 1); + this.isDone = false; } public String getStatusIcon() { @@ -33,24 +27,12 @@ public boolean getDone() { return this.isDone; } - public void markAsDone() throws RepeatedCompletionException{ - if (this.getDone()) { - throw new RepeatedCompletionException("This task has already been completed!\n"); - } + public void markAsDone() { this.isDone = true; } public String getTaskType() { - switch (this.taskType) { - case TO_DO: - return "T"; - case EVENT: - return "E"; - case DEADLINE: - return "D"; - default: - return "N"; // stands for unknown tasks - } + return this.taskType; } @Override diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index bbc6e175d..1784b9e4c 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,64 +1,49 @@ package duke.task; -import java.util.ArrayList; - public class TaskBank { - private ArrayList tasks; + private Task[] tasks; + private int taskIndex = 0; + private static final int MAX_TASK = 100; { - tasks = new ArrayList<>(); + tasks = new Task[MAX_TASK]; } - public Task addTask(String taskInput) { - Task newTask = new Task(taskInput); - tasks.add(newTask); - return newTask; + public void addTask(String taskInput) { + tasks[taskIndex++] = new Task(taskInput); } public Task addTodo(String todoInput) { - Task newTask = new ToDo(todoInput); - tasks.add(newTask); - return newTask; + tasks[taskIndex++] = new ToDo(todoInput); + return tasks[taskIndex - 1]; } public Task addEvent(String todoInput) { - Task newTask = new Event(todoInput); - tasks.add(newTask); - return newTask; + tasks[taskIndex++] = new Event(todoInput); + return tasks[taskIndex - 1]; } public Task addDeadline(String todoInput) { - Task newTask = new Deadline(todoInput); - tasks.add(newTask); - return newTask; + tasks[taskIndex++] = new Deadline(todoInput); + return tasks[taskIndex - 1]; } - public int getTaskSize() { - return tasks.size(); + public int getTaskIndex() { + return this.taskIndex; } public void printList() { - int i = 0; - for (Task task : tasks) { - System.out.printf("%d.%s%n", i + 1, task); - i++; + int i; + for (i = 0; i < taskIndex; i++) { + System.out.printf("%d.%s%n", i + 1, tasks[i]); } } // search the Task in the array by index - public Task searchTask(int taskIndex) throws IndexOutOfBoundsException { - if (taskIndex < 0 || taskIndex > this.getTaskSize()) { - throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); - } - return tasks.get(taskIndex); - } - - public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { - if (taskIndex < 0 || taskIndex > this.getTaskSize()) { - throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); + public Task searchTask(int taskIndex) { + if (taskIndex < 0 || taskIndex > this.taskIndex) { + return null; } - Task deletedTask = tasks.get(taskIndex); - tasks.remove(taskIndex); - return deletedTask; + return tasks[taskIndex]; } } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 605656f4a..95b2a43a2 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -4,7 +4,7 @@ public class ToDo extends Task { public ToDo(String description) { super(description); - this.taskType = TaskType.TO_DO; + this.taskType = "T"; } } From d0d4834c2646d9a3c2de5c9b2f205978bee08700 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Sun, 12 Sep 2021 21:01:29 +0800 Subject: [PATCH 18/28] Revert "Revert "Level 6."" This reverts commit 064df2dc6cef2fb18e4b377b79bf8b95df9fbb4e. --- src/main/java/Duke.java | 89 ++++++++++++------- .../java/duke/exception/DukeException.java | 8 ++ .../duke/exception/EmptyInputException.java | 13 +++ .../exception/IrregularInputException.java | 7 ++ .../RepeatedCompletionException.java | 8 ++ src/main/java/duke/task/Deadline.java | 12 +-- src/main/java/duke/task/Event.java | 11 +-- src/main/java/duke/task/Task.java | 28 ++++-- src/main/java/duke/task/TaskBank.java | 57 +++++++----- src/main/java/duke/task/ToDo.java | 2 +- 10 files changed, 165 insertions(+), 70 deletions(-) create mode 100644 src/main/java/duke/exception/EmptyInputException.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 145aab4e5..ae35a99f8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,4 @@ +import duke.exception.EmptyInputException; import duke.exception.IrregularInputException; import duke.exception.RepeatedCompletionException; import duke.task.Task; @@ -18,10 +19,10 @@ class Chatter { static TaskBank taskBank = new TaskBank(); static void greet() { - System.out.printf("____________________________________________________________%n" + - "Hello! I'm Duke, your task manager.%n" + - "Key in your tasks below!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.printf("Hello! I'm Duke, your task manager.%n" + + "Key in your tasks below!%n"); + printDashLine(); } static void talk(Scanner sc) { @@ -29,7 +30,9 @@ static void talk(Scanner sc) { while (true) { try { sentence = sc.nextLine(); - if (sentence.equals("bye")) { + if (sentence.isEmpty()) { + throw new EmptyInputException("Empty input! Try again (o|o)\n"); + } else if (sentence.equals("bye")) { Chatter.bye(); break; } else if (sentence.equals("list")) { @@ -45,58 +48,80 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); + } else if (sentence.startsWith("delete")) { + Chatter.deleteTask(sentence); } else { - throw new IrregularInputException(); + throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + + "\nPlease try again!"); } } catch (IrregularInputException e) { - System.out.printf("____________________________________________________________%n" + - "☹ OOPS!!! I'm sorry, but I don't know what that means :-(%n" + - "Please try again!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.println(e.getMessage()); + printDashLine(); } catch (IndexOutOfBoundsException e) { - System.out.printf("Ouch! Index is out of range. Try again!%n"); - System.out.printf("____________________________________________________________%n"); + System.out.println(e.getMessage()); + printDashLine(); } catch (RepeatedCompletionException e) { - System.out.println("Task is already completed"); - System.out.printf("____________________________________________________________%n"); + System.out.println(e.getMessage()); + printDashLine(); + } catch (EmptyInputException e) { + printDashLine(); + System.out.println(e.getMessage()); + printDashLine(); + } catch (NumberFormatException e) { + printDashLine(); + System.out.printf("Not a valid number. Try again%n"); + printDashLine(); } } + } static void add(Task newTask) { - System.out.printf("____________________________________________________________%n" + - "Got it. I've added this task: %n " + + printDashLine(); + System.out.printf("Got it. I've added this task: %n " + newTask + - "%nNow you have " + taskBank.getTaskIndex() + - " tasks in the list.%n" + - "____________________________________________________________%n"); + "%nNow you have " + taskBank.getTaskSize() + + " tasks in the list.%n"); + printDashLine(); } static void bye() { - System.out.printf("____________________________________________________________%n" + - "Bye. Hope to see you again soon!%n" + - "____________________________________________________________%n"); + printDashLine(); + System.out.printf("Bye. Hope to see you again soon!%n"); + printDashLine(); } static void list() { - System.out.printf("____________________________________________________________%n"); + printDashLine(); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); - System.out.printf("____________________________________________________________%n"); + printDashLine(); } - static void done(String sentence) throws IndexOutOfBoundsException, RepeatedCompletionException { + static void done(String sentence) throws RepeatedCompletionException, NumberFormatException { String[] words = sentence.split(" "); int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); - if (targetTask == null) { - throw new IndexOutOfBoundsException(); - } else if (targetTask.getDone()) { - throw new RepeatedCompletionException(); - } targetTask.markAsDone(); - System.out.println("Nice! I've marked this task as done: "); - System.out.println("[" + targetTask.getTaskType() + "]" + "[X] " + targetTask.getDescription()); + System.out.printf("Nice! I've marked this task as done: %n"); + System.out.println(" " + targetTask); + printDashLine(); + } + + static void deleteTask(String sentence) { + String[] words = sentence.split(" "); + int targetIndex = Integer.parseInt(words[1]) - 1; + Task deletedTask = Chatter.taskBank.removeTask(targetIndex); + printDashLine(); + System.out.printf("Noted. I've removed this task: %n"); + System.out.println(" " + deletedTask); + System.out.printf("Now you have " + taskBank.getTaskSize() + + " tasks in the list.%n"); + printDashLine(); + } + + static void printDashLine() { System.out.printf("____________________________________________________________%n"); } } diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java index 946898f59..b90f04d7a 100644 --- a/src/main/java/duke/exception/DukeException.java +++ b/src/main/java/duke/exception/DukeException.java @@ -1,4 +1,12 @@ package duke.exception; public class DukeException extends Exception { + public DukeException() { + super(); + } + + public DukeException(String message) { + super(message); + } + } diff --git a/src/main/java/duke/exception/EmptyInputException.java b/src/main/java/duke/exception/EmptyInputException.java new file mode 100644 index 000000000..afdabb965 --- /dev/null +++ b/src/main/java/duke/exception/EmptyInputException.java @@ -0,0 +1,13 @@ +package duke.exception; + +public class EmptyInputException extends DukeException { + + public EmptyInputException() { + super(); + } + + public EmptyInputException(String mesagge) { + super(mesagge); + } + +} diff --git a/src/main/java/duke/exception/IrregularInputException.java b/src/main/java/duke/exception/IrregularInputException.java index 27d98041a..16a4c9740 100644 --- a/src/main/java/duke/exception/IrregularInputException.java +++ b/src/main/java/duke/exception/IrregularInputException.java @@ -1,4 +1,11 @@ package duke.exception; public class IrregularInputException extends DukeException { + public IrregularInputException() { + super(); + } + + public IrregularInputException(String message) { + super(message); + } } diff --git a/src/main/java/duke/exception/RepeatedCompletionException.java b/src/main/java/duke/exception/RepeatedCompletionException.java index 905cdd495..4e7c662bb 100644 --- a/src/main/java/duke/exception/RepeatedCompletionException.java +++ b/src/main/java/duke/exception/RepeatedCompletionException.java @@ -1,4 +1,12 @@ package duke.exception; public class RepeatedCompletionException extends DukeException{ + + public RepeatedCompletionException(){ + super(); + } + + public RepeatedCompletionException(String message){ + super(message); + } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 5eb7d57b5..36bc9db24 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -4,14 +4,15 @@ public class Deadline extends Task { private String deadlineDate; public Deadline(String description) { + //super(); int indexDivider = description.indexOf("/"); + int spaceIndex = description.indexOf(' '); String deadlineName = description.substring(0, indexDivider).trim(); String deadlineDateString = description.substring(indexDivider + 1).trim(); - String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); - this.description = deadlineName; + //String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); this.deadlineDate = deadlineDateString; - this.taskType = "D"; - this.isDone = false; + this.description = deadlineName.substring(spaceIndex + 1); + this.taskType = TaskType.DEADLINE; } public String getDeadLineDate() { @@ -20,7 +21,6 @@ public String getDeadLineDate() { @Override public String toString() { - return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getDeadLineDate() + ")"; + return super.toString() + " (" + getDeadLineDate() + ")"; } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 26506d217..df2964d56 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -4,13 +4,15 @@ public class Event extends Task { private String eventDate; public Event(String description) { + super(); int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); + int spaceIndex = description.indexOf(' '); String eventDateString = description.substring(indexDivider + 1).trim(); - String eventDate = eventDateString.split(" ", 2)[1].trim(); - this.description = eventName; + //String eventDate = eventDateString.split(" ", 2)[1].trim(); + this.description = eventName.substring(spaceIndex + 1); this.eventDate = eventDateString; - this.taskType = "E"; + this.taskType = TaskType.EVENT; } public String getEventDate() { @@ -19,7 +21,6 @@ public String getEventDate() { @Override public String toString() { - return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getEventDate() + ")"; + return super.toString()+ " (" + getEventDate() + ")"; } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index d1038a704..eced7ad26 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,18 +1,24 @@ package duke.task; +import duke.exception.RepeatedCompletionException; + +enum TaskType { + TO_DO, DEADLINE, EVENT; +} + public class Task { protected String description; protected boolean isDone; - protected String taskType; + protected TaskType taskType; public Task() { - + this.isDone = false; } public Task(String description) { + this(); int spaceIndex = description.indexOf(' '); this.description = description.substring(spaceIndex + 1); - this.isDone = false; } public String getStatusIcon() { @@ -27,12 +33,24 @@ public boolean getDone() { return this.isDone; } - public void markAsDone() { + public void markAsDone() throws RepeatedCompletionException{ + if (this.getDone()) { + throw new RepeatedCompletionException("This task has already been completed!\n"); + } this.isDone = true; } public String getTaskType() { - return this.taskType; + switch (this.taskType) { + case TO_DO: + return "T"; + case EVENT: + return "E"; + case DEADLINE: + return "D"; + default: + return "N"; // stands for unknown tasks + } } @Override diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 1784b9e4c..bbc6e175d 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,49 +1,64 @@ package duke.task; +import java.util.ArrayList; + public class TaskBank { - private Task[] tasks; - private int taskIndex = 0; - private static final int MAX_TASK = 100; + private ArrayList tasks; { - tasks = new Task[MAX_TASK]; + tasks = new ArrayList<>(); } - public void addTask(String taskInput) { - tasks[taskIndex++] = new Task(taskInput); + public Task addTask(String taskInput) { + Task newTask = new Task(taskInput); + tasks.add(newTask); + return newTask; } public Task addTodo(String todoInput) { - tasks[taskIndex++] = new ToDo(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new ToDo(todoInput); + tasks.add(newTask); + return newTask; } public Task addEvent(String todoInput) { - tasks[taskIndex++] = new Event(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new Event(todoInput); + tasks.add(newTask); + return newTask; } public Task addDeadline(String todoInput) { - tasks[taskIndex++] = new Deadline(todoInput); - return tasks[taskIndex - 1]; + Task newTask = new Deadline(todoInput); + tasks.add(newTask); + return newTask; } - public int getTaskIndex() { - return this.taskIndex; + public int getTaskSize() { + return tasks.size(); } public void printList() { - int i; - for (i = 0; i < taskIndex; i++) { - System.out.printf("%d.%s%n", i + 1, tasks[i]); + int i = 0; + for (Task task : tasks) { + System.out.printf("%d.%s%n", i + 1, task); + i++; } } // search the Task in the array by index - public Task searchTask(int taskIndex) { - if (taskIndex < 0 || taskIndex > this.taskIndex) { - return null; + public Task searchTask(int taskIndex) throws IndexOutOfBoundsException { + if (taskIndex < 0 || taskIndex > this.getTaskSize()) { + throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); + } + return tasks.get(taskIndex); + } + + public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { + if (taskIndex < 0 || taskIndex > this.getTaskSize()) { + throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); } - return tasks[taskIndex]; + Task deletedTask = tasks.get(taskIndex); + tasks.remove(taskIndex); + return deletedTask; } } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 95b2a43a2..605656f4a 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -4,7 +4,7 @@ public class ToDo extends Task { public ToDo(String description) { super(description); - this.taskType = "T"; + this.taskType = TaskType.TO_DO; } } From a6241157cec4628767f4ce32e36e1c956677a47b Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 14 Sep 2021 17:00:10 +0800 Subject: [PATCH 19/28] Level 7 Added saver and loader for the tasks --- data/duke.txt | 2 + src/main/java/Duke.java | 29 +++++++++- src/main/java/duke/task/Deadline.java | 21 ++++--- src/main/java/duke/task/Event.java | 20 ++++--- src/main/java/duke/task/Task.java | 25 +++++++- src/main/java/duke/task/TaskBank.java | 83 +++++++++++++++++++++++++-- src/main/java/duke/task/ToDo.java | 5 +- 7 files changed, 162 insertions(+), 23 deletions(-) create mode 100644 data/duke.txt diff --git a/data/duke.txt b/data/duke.txt new file mode 100644 index 000000000..ec7d22f9c --- /dev/null +++ b/data/duke.txt @@ -0,0 +1,2 @@ +T | 0 | aaaa +D | 1 | bbbbb | June diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 145aab4e5..2db0d8236 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -3,12 +3,20 @@ import duke.task.Task; import duke.task.TaskBank; +import java.io.File; import java.util.Scanner; public class Duke { + static final String filePath = "./data/duke.txt"; + public static void main(String[] args) { try (Scanner sc = new Scanner(System.in)) { - Chatter.greet(); + File f = new File(filePath); + if (f.exists()) { + Chatter.load(); + } else { + Chatter.greet(); + } Chatter.talk(sc); } } @@ -20,10 +28,20 @@ class Chatter { static void greet() { System.out.printf("____________________________________________________________%n" + "Hello! I'm Duke, your task manager.%n" + + "It's the first time I see you!%n" + "Key in your tasks below!%n" + "____________________________________________________________%n"); } + static void load() { + System.out.printf("____________________________________________________________%n" + + "Hello! I'm Duke, your task manager.%n" + + "I have loaded the tasks you have keyed in the last time%n" + + "Continue to key in your tasks below!%n" + + "____________________________________________________________%n"); + taskBank.loadTasks(); + } + static void talk(Scanner sc) { String sentence; while (true) { @@ -45,6 +63,8 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); + } else if (sentence.startsWith("clear")) { + Chatter.clear(); } else { throw new IrregularInputException(); } @@ -70,6 +90,7 @@ static void add(Task newTask) { "%nNow you have " + taskBank.getTaskIndex() + " tasks in the list.%n" + "____________________________________________________________%n"); + taskBank.exportTasks(); } static void bye() { @@ -98,6 +119,12 @@ static void done(String sentence) throws IndexOutOfBoundsException, RepeatedComp System.out.println("Nice! I've marked this task as done: "); System.out.println("[" + targetTask.getTaskType() + "]" + "[X] " + targetTask.getDescription()); System.out.printf("____________________________________________________________%n"); + taskBank.exportTasks(); + } + + static void clear(){ + taskBank.clear(); + System.out.println("I have cleared all the tasks!"); } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 5eb7d57b5..38ccbbef1 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,26 +1,33 @@ package duke.task; public class Deadline extends Task { - private String deadlineDate; + //private String deadlineDate; + private String deadlineDateString; public Deadline(String description) { int indexDivider = description.indexOf("/"); String deadlineName = description.substring(0, indexDivider).trim(); String deadlineDateString = description.substring(indexDivider + 1).trim(); - String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); + //String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); this.description = deadlineName; - this.deadlineDate = deadlineDateString; - this.taskType = "D"; + this.deadlineDateString = deadlineDateString; + //this.deadlineDate = deadlineDate; + this.taskType = TaskType.DEADLINE; this.isDone = false; } - public String getDeadLineDate() { - return this.deadlineDate; + + public String getDeadlineDateString() { + return deadlineDateString; } @Override public String toString() { return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getDeadLineDate() + ")"; + " (" + getDeadlineDateString() + ")"; + } + + public String describe() { + return getDescription() + " | " + getDeadlineDateString(); } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 26506d217..6567fc220 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,25 +1,31 @@ package duke.task; public class Event extends Task { - private String eventDate; + //private String eventDate; + private String eventDateString; public Event(String description) { int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); String eventDateString = description.substring(indexDivider + 1).trim(); - String eventDate = eventDateString.split(" ", 2)[1].trim(); + //String eventDate = eventDateString.split(" ", 2)[1].trim(); this.description = eventName; - this.eventDate = eventDateString; - this.taskType = "E"; + this.eventDateString = eventDateString; + this.taskType = TaskType.EVENT; } - public String getEventDate() { - return eventDate; + public String getEventDateString(){ + return eventDateString; } @Override public String toString() { return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription() + - " (" + getEventDate() + ")"; + " (" + getEventDateString() + ")"; + } + + // for the use of exporting into a text + public String describe() { + return getDescription() + " | " + getEventDateString(); } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index d1038a704..7e1714ad2 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,14 +1,20 @@ package duke.task; -public class Task { +enum TaskType { + TO_DO, DEADLINE, EVENT; +} + +public abstract class Task { protected String description; protected boolean isDone; - protected String taskType; + protected TaskType taskType; public Task() { } + abstract String describe(); + public Task(String description) { int spaceIndex = description.indexOf(' '); this.description = description.substring(spaceIndex + 1); @@ -27,12 +33,25 @@ public boolean getDone() { return this.isDone; } + public void setDone(){ + this.isDone = true; + } + public void markAsDone() { this.isDone = true; } public String getTaskType() { - return this.taskType; + switch (this.taskType) { + case TO_DO: + return "T"; + case EVENT: + return "E"; + case DEADLINE: + return "D"; + default: + return "N"; + } } @Override diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 1784b9e4c..c790afc27 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,18 +1,21 @@ package duke.task; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; + public class TaskBank { private Task[] tasks; private int taskIndex = 0; private static final int MAX_TASK = 100; + private static final String filePath = "./data/duke.txt"; { tasks = new Task[MAX_TASK]; } - public void addTask(String taskInput) { - tasks[taskIndex++] = new Task(taskInput); - } - public Task addTodo(String todoInput) { tasks[taskIndex++] = new ToDo(todoInput); return tasks[taskIndex - 1]; @@ -46,4 +49,76 @@ public Task searchTask(int taskIndex) { } return tasks[taskIndex]; } + + public void exportTasks() { + + StringBuffer rawData = new StringBuffer(); + for (int i = 0; i < this.taskIndex; i++) { + rawData.append(tasks[i].getTaskType()); + rawData.append(" | "); + rawData.append(tasks[i].getDone() ? "1" : "0"); + rawData.append(" | "); + rawData.append(tasks[i].describe()); + rawData.append("\r\n"); + } + try { + FileWriter fw = new FileWriter(filePath); + fw.write(rawData.toString()); + fw.close(); + System.out.println("saved"); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + public void loadTasks() { + File f = new File(filePath); + try (Scanner sc = new Scanner(f)) { + while (sc.hasNext()) { + loadTaskLine(sc.nextLine()); + } + } catch (FileNotFoundException e) { + System.out.println("duke.txt is not found"); + } catch (IOException e) { + System.out.println(e.getMessage()); + ; + } + + } + + public void loadTaskLine(String taskLine) throws IOException { + String taskTypeString = taskLine.substring(0, 1); + int firstDivisor = taskLine.indexOf("|", 1); + int secondDivisor = taskLine.indexOf("|", firstDivisor+1); + int thirdDivisor = taskLine.indexOf("|", secondDivisor+1); + if (thirdDivisor == -1) { // todo type + addTodo(taskLine.substring(secondDivisor + 1).trim()); + } else { + if (taskTypeString.equals("D")) { + String deadLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); + + Task newTask = addDeadline(deadLineInput.replace("| ", "/")); + if(taskCompletionStatus.equals("1")){ + newTask.setDone(); + } + + } else if (taskTypeString.equals("E")) { + String eventLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, thirdDivisor).trim(); + + Task newTask = addEvent(eventLineInput.replace("| ", "/")); + if(taskCompletionStatus.equals("1")){ + newTask.setDone(); + } + } else { + throw new IOException("Wrong type from data loader"); + } + } + } + + public void clear(){ + tasks = new Task[MAX_TASK]; + exportTasks(); + } } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 95b2a43a2..4bb6903a4 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -4,7 +4,10 @@ public class ToDo extends Task { public ToDo(String description) { super(description); - this.taskType = "T"; + this.taskType = TaskType.TO_DO; } + public String describe() { + return getDescription(); + } } From 349dffe4da052ac6169f50debef1ad23a085929d Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 14 Sep 2021 17:29:49 +0800 Subject: [PATCH 20/28] Merge Level 6 with main. --- data/duke.txt | 2 + src/main/java/Duke.java | 32 ++++++++- src/main/java/duke/task/Deadline.java | 27 +++++--- src/main/java/duke/task/Event.java | 19 ++++-- src/main/java/duke/task/Task.java | 9 +-- src/main/java/duke/task/TaskBank.java | 98 +++++++++++++++++++++++++-- src/main/java/duke/task/ToDo.java | 3 + 7 files changed, 162 insertions(+), 28 deletions(-) create mode 100644 data/duke.txt diff --git a/data/duke.txt b/data/duke.txt new file mode 100644 index 000000000..30dc0f923 --- /dev/null +++ b/data/duke.txt @@ -0,0 +1,2 @@ +T | 0 | aaaa +E | 0 | bbbbb | June diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ae35a99f8..0656eeda9 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,12 +4,20 @@ import duke.task.Task; import duke.task.TaskBank; +import java.io.File; import java.util.Scanner; public class Duke { + static final String filePath = "./data/duke.txt"; + public static void main(String[] args) { try (Scanner sc = new Scanner(System.in)) { - Chatter.greet(); + File f = new File(filePath); + if (f.exists()) { + Chatter.load(); + } else { + Chatter.greet(); + } Chatter.talk(sc); } } @@ -21,10 +29,20 @@ class Chatter { static void greet() { printDashLine(); System.out.printf("Hello! I'm Duke, your task manager.%n" + + "Its the first time I see you%n" + "Key in your tasks below!%n"); printDashLine(); } + static void load() { + System.out.printf("____________________________________________________________%n" + + "Hello! I'm Duke, your task manager.%n" + + "I have loaded the tasks you have keyed in the last time%n" + + "Continue to key in your tasks below!%n" + + "____________________________________________________________%n"); + taskBank.loadTasks(); + } + static void talk(Scanner sc) { String sentence; while (true) { @@ -48,8 +66,12 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); + } else if (sentence.startsWith("delete")) { Chatter.deleteTask(sentence); + + } else if (sentence.startsWith("clear")) { + Chatter.clear(); } else { throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + "\nPlease try again!"); @@ -81,9 +103,10 @@ static void add(Task newTask) { printDashLine(); System.out.printf("Got it. I've added this task: %n " + newTask + - "%nNow you have " + taskBank.getTaskSize() + + "%nNow you have " + taskBank.getTaskSize() + " tasks in the list.%n"); printDashLine(); + taskBank.exportTasks(); } static void bye() { @@ -124,5 +147,10 @@ static void deleteTask(String sentence) { static void printDashLine() { System.out.printf("____________________________________________________________%n"); } + + static void clear() { + taskBank.clear(); + System.out.println("I have cleared all the tasks!"); + } } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 36bc9db24..555222182 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,26 +1,33 @@ package duke.task; public class Deadline extends Task { + //private String deadlineDate; + private String deadlineDateString; private String deadlineDate; public Deadline(String description) { - //super(); + + super(); int indexDivider = description.indexOf("/"); - int spaceIndex = description.indexOf(' '); - String deadlineName = description.substring(0, indexDivider).trim(); - String deadlineDateString = description.substring(indexDivider + 1).trim(); - //String deadlineDate = deadlineDateString.split(" ", 2)[1].trim(); - this.deadlineDate = deadlineDateString; - this.description = deadlineName.substring(spaceIndex + 1); + String eventName = description.substring(0, indexDivider).trim(); + String eventDateString = description.substring(indexDivider + 1).trim(); + //String eventDate = eventDateString.split(" ", 2)[1].trim(); + this.description = eventName; + this.deadlineDateString = deadlineDateString; this.taskType = TaskType.DEADLINE; } - public String getDeadLineDate() { - return this.deadlineDate; + + public String getDeadlineDateString() { + return deadlineDateString; } @Override public String toString() { - return super.toString() + " (" + getDeadLineDate() + ")"; + return super.toString() + " (" + getDeadlineDateString() + ")"; + } + + public String describe() { + return getDescription() + " | " + getDeadlineDateString(); } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index df2964d56..272c91908 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,26 +1,31 @@ package duke.task; public class Event extends Task { - private String eventDate; + //private String eventDate; + private String eventDateString; public Event(String description) { super(); int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); - int spaceIndex = description.indexOf(' '); String eventDateString = description.substring(indexDivider + 1).trim(); //String eventDate = eventDateString.split(" ", 2)[1].trim(); - this.description = eventName.substring(spaceIndex + 1); - this.eventDate = eventDateString; + this.description = eventName; + this.eventDateString = eventDateString; this.taskType = TaskType.EVENT; } - public String getEventDate() { - return eventDate; + public String getEventDateString(){ + return eventDateString; } @Override public String toString() { - return super.toString()+ " (" + getEventDate() + ")"; + return super.toString()+ " (" + getEventDateString() + ")"; + } + + // for the use of exporting into a text + public String describe() { + return getDescription() + " | " + getEventDateString(); } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index eced7ad26..e1dba7459 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,12 +1,12 @@ package duke.task; import duke.exception.RepeatedCompletionException; - enum TaskType { TO_DO, DEADLINE, EVENT; } -public class Task { + +public abstract class Task { protected String description; protected boolean isDone; protected TaskType taskType; @@ -15,6 +15,8 @@ public Task() { this.isDone = false; } + abstract String describe(); + public Task(String description) { this(); int spaceIndex = description.indexOf(' '); @@ -33,11 +35,10 @@ public boolean getDone() { return this.isDone; } - public void markAsDone() throws RepeatedCompletionException{ + public void markAsDone() throws RepeatedCompletionException { if (this.getDone()) { throw new RepeatedCompletionException("This task has already been completed!\n"); } - this.isDone = true; } public String getTaskType() { diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index bbc6e175d..478867f48 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,19 +1,26 @@ package duke.task; + +import duke.exception.RepeatedCompletionException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.Array; +import java.util.Scanner; import java.util.ArrayList; public class TaskBank { private ArrayList tasks; + private int taskIndex = 0; + private static final int MAX_TASK = 100; + private static final String filePath = "./data/duke.txt"; { tasks = new ArrayList<>(); } - public Task addTask(String taskInput) { - Task newTask = new Task(taskInput); - tasks.add(newTask); - return newTask; - } public Task addTodo(String todoInput) { Task newTask = new ToDo(todoInput); @@ -61,4 +68,85 @@ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { tasks.remove(taskIndex); return deletedTask; } + + public void exportTasks() { + + StringBuffer rawData = new StringBuffer(); + for (Task task : tasks) { + rawData.append(task.getTaskType()); + rawData.append(" | "); + rawData.append(task.getDone() ? "1" : "0"); + rawData.append(" | "); + rawData.append(task.describe()); + rawData.append("\r\n"); + } + try { + FileWriter fw = new FileWriter(filePath); + fw.write(rawData.toString()); + fw.close(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + public void loadTasks() { + File f = new File(filePath); + try (Scanner sc = new Scanner(f)) { + while (sc.hasNext()) { + loadTaskLine(sc.nextLine()); + } + } catch (FileNotFoundException e) { + System.out.println("duke.txt is not found"); + } catch (IOException e) { + System.out.println(e.getMessage()); + ; + } + + } + + public void loadTaskLine(String taskLine) throws IOException { + String taskTypeString = taskLine.substring(0, 1); + int firstDivisor = taskLine.indexOf("|", 1); + int secondDivisor = taskLine.indexOf("|", firstDivisor + 1); + int thirdDivisor = taskLine.indexOf("|", secondDivisor + 1); + if (thirdDivisor == -1) { // todo type + addTodo(taskLine.substring(secondDivisor + 1).trim()); + } else { + if (taskTypeString.equals("D")) { + String deadLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); + + Task newTask = addDeadline(deadLineInput.replace("| ", "/")); + if (taskCompletionStatus.equals("1")) { + try { + newTask.markAsDone(); + } catch(RepeatedCompletionException e){ + // This is left blank as from tasks are generated from + // local files, and will not complete repeatedly + } + } + + } else if (taskTypeString.equals("E")) { + String eventLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, thirdDivisor).trim(); + + Task newTask = addEvent(eventLineInput.replace("| ", "/")); + if (taskCompletionStatus.equals("1")) { + try { + newTask.markAsDone(); + } catch(RepeatedCompletionException e){ + // This is left blank as from tasks are generated from + // local files, and will not complete repeatedly + } + } + } else { + throw new IOException("Wrong type from data loader"); + } + } + } + + public void clear() { + tasks = new ArrayList<>(); + exportTasks(); + } } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 605656f4a..4bb6903a4 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -7,4 +7,7 @@ public ToDo(String description) { this.taskType = TaskType.TO_DO; } + public String describe() { + return getDescription(); + } } From 27f45b14a7a4f6d3db8866371ca5080b902e6e84 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Wed, 15 Sep 2021 11:17:27 +0800 Subject: [PATCH 21/28] Bug fixed. --- data/duke.txt | 2 +- src/main/java/Duke.java | 29 +++++++------ src/main/java/META-INF/MANIFEST.MF | 3 ++ .../java/duke/exception/DukeException.java | 1 - src/main/java/duke/task/Deadline.java | 11 ++--- src/main/java/duke/task/Event.java | 2 - src/main/java/duke/task/Task.java | 5 ++- src/main/java/duke/task/TaskBank.java | 41 ++++++++----------- src/main/java/duke/task/ToDo.java | 1 + 9 files changed, 45 insertions(+), 50 deletions(-) create mode 100644 src/main/java/META-INF/MANIFEST.MF diff --git a/data/duke.txt b/data/duke.txt index 30dc0f923..919cb32b1 100644 --- a/data/duke.txt +++ b/data/duke.txt @@ -1,2 +1,2 @@ T | 0 | aaaa -E | 0 | bbbbb | June +E | 1 | bbbbb | June diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 0656eeda9..43b4a87e4 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -8,11 +8,9 @@ import java.util.Scanner; public class Duke { - static final String filePath = "./data/duke.txt"; - public static void main(String[] args) { try (Scanner sc = new Scanner(System.in)) { - File f = new File(filePath); + File f = new File(TaskBank.filePath); if (f.exists()) { Chatter.load(); } else { @@ -26,6 +24,10 @@ public static void main(String[] args) { class Chatter { static TaskBank taskBank = new TaskBank(); + static void printDashLine() { + System.out.printf("____________________________________________________________%n"); + } + static void greet() { printDashLine(); System.out.printf("Hello! I'm Duke, your task manager.%n" + @@ -35,11 +37,11 @@ static void greet() { } static void load() { - System.out.printf("____________________________________________________________%n" + - "Hello! I'm Duke, your task manager.%n" + + printDashLine(); + System.out.printf("Hello! I'm Duke, your task manager.%n" + "I have loaded the tasks you have keyed in the last time%n" + - "Continue to key in your tasks below!%n" + - "____________________________________________________________%n"); + "Continue to key in your tasks below!%n"); + printDashLine(); taskBank.loadTasks(); } @@ -66,10 +68,8 @@ static void talk(Scanner sc) { } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); Chatter.add(newTask); - } else if (sentence.startsWith("delete")) { Chatter.deleteTask(sentence); - } else if (sentence.startsWith("clear")) { Chatter.clear(); } else { @@ -96,14 +96,13 @@ static void talk(Scanner sc) { printDashLine(); } } - } static void add(Task newTask) { printDashLine(); System.out.printf("Got it. I've added this task: %n " + newTask + - "%nNow you have " + taskBank.getTaskSize() + + "%nNow you have " + taskBank.getTaskSize() + " tasks in the list.%n"); printDashLine(); taskBank.exportTasks(); @@ -127,6 +126,7 @@ static void done(String sentence) throws RepeatedCompletionException, NumberForm int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); targetTask.markAsDone(); + taskBank.exportTasks(); System.out.printf("Nice! I've marked this task as done: %n"); System.out.println(" " + targetTask); printDashLine(); @@ -141,16 +141,15 @@ static void deleteTask(String sentence) { System.out.println(" " + deletedTask); System.out.printf("Now you have " + taskBank.getTaskSize() + " tasks in the list.%n"); + taskBank.exportTasks(); printDashLine(); } - static void printDashLine() { - System.out.printf("____________________________________________________________%n"); - } - static void clear() { taskBank.clear(); + taskBank.exportTasks(); System.out.println("I have cleared all the tasks!"); + printDashLine(); } } diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 000000000..9f37e4e0a --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Duke + diff --git a/src/main/java/duke/exception/DukeException.java b/src/main/java/duke/exception/DukeException.java index b90f04d7a..3e7ff435e 100644 --- a/src/main/java/duke/exception/DukeException.java +++ b/src/main/java/duke/exception/DukeException.java @@ -8,5 +8,4 @@ public DukeException() { public DukeException(String message) { super(message); } - } diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 555222182..ab97cd436 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -1,18 +1,14 @@ package duke.task; public class Deadline extends Task { - //private String deadlineDate; private String deadlineDateString; - private String deadlineDate; public Deadline(String description) { - super(); int indexDivider = description.indexOf("/"); - String eventName = description.substring(0, indexDivider).trim(); - String eventDateString = description.substring(indexDivider + 1).trim(); - //String eventDate = eventDateString.split(" ", 2)[1].trim(); - this.description = eventName; + String deadlineName = description.substring(0, indexDivider).trim(); + String deadlineDateString = description.substring(indexDivider + 1).trim(); + this.description = deadlineName; this.deadlineDateString = deadlineDateString; this.taskType = TaskType.DEADLINE; } @@ -27,6 +23,7 @@ public String toString() { return super.toString() + " (" + getDeadlineDateString() + ")"; } + // for the use of exporting into a text public String describe() { return getDescription() + " | " + getDeadlineDateString(); } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 272c91908..5d0c1c931 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -1,7 +1,6 @@ package duke.task; public class Event extends Task { - //private String eventDate; private String eventDateString; public Event(String description) { @@ -9,7 +8,6 @@ public Event(String description) { int indexDivider = description.indexOf("/"); String eventName = description.substring(0, indexDivider).trim(); String eventDateString = description.substring(indexDivider + 1).trim(); - //String eventDate = eventDateString.split(" ", 2)[1].trim(); this.description = eventName; this.eventDateString = eventDateString; this.taskType = TaskType.EVENT; diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index e1dba7459..93e99efde 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -1,6 +1,7 @@ package duke.task; import duke.exception.RepeatedCompletionException; + enum TaskType { TO_DO, DEADLINE, EVENT; } @@ -15,7 +16,7 @@ public Task() { this.isDone = false; } - abstract String describe(); + public abstract String describe(); public Task(String description) { this(); @@ -39,6 +40,7 @@ public void markAsDone() throws RepeatedCompletionException { if (this.getDone()) { throw new RepeatedCompletionException("This task has already been completed!\n"); } + this.isDone = true; } public String getTaskType() { @@ -58,4 +60,5 @@ public String getTaskType() { public String toString() { return "[" + getTaskType() + "][" + getStatusIcon() + "] " + getDescription(); } + } diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 478867f48..96a3a2853 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -7,15 +7,12 @@ import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; -import java.lang.reflect.Array; import java.util.Scanner; import java.util.ArrayList; public class TaskBank { private ArrayList tasks; - private int taskIndex = 0; - private static final int MAX_TASK = 100; - private static final String filePath = "./data/duke.txt"; + public static final String filePath = "./data/duke.txt"; { tasks = new ArrayList<>(); @@ -70,19 +67,18 @@ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { } public void exportTasks() { - - StringBuffer rawData = new StringBuffer(); + StringBuffer taskTextString = new StringBuffer(); for (Task task : tasks) { - rawData.append(task.getTaskType()); - rawData.append(" | "); - rawData.append(task.getDone() ? "1" : "0"); - rawData.append(" | "); - rawData.append(task.describe()); - rawData.append("\r\n"); + taskTextString.append(task.getTaskType()); + taskTextString.append(" | "); + taskTextString.append(task.getDone() ? "1" : "0"); + taskTextString.append(" | "); + taskTextString.append(task.describe()); + taskTextString.append("\r\n"); } try { FileWriter fw = new FileWriter(filePath); - fw.write(rawData.toString()); + fw.write(taskTextString.toString()); fw.close(); } catch (IOException e) { System.out.println(e.getMessage()); @@ -99,7 +95,6 @@ public void loadTasks() { System.out.println("duke.txt is not found"); } catch (IOException e) { System.out.println(e.getMessage()); - ; } } @@ -115,28 +110,28 @@ public void loadTaskLine(String taskLine) throws IOException { if (taskTypeString.equals("D")) { String deadLineInput = taskLine.substring(secondDivisor + 1).trim(); String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); - Task newTask = addDeadline(deadLineInput.replace("| ", "/")); if (taskCompletionStatus.equals("1")) { try { newTask.markAsDone(); - } catch(RepeatedCompletionException e){ - // This is left blank as from tasks are generated from - // local files, and will not complete repeatedly + } catch (RepeatedCompletionException e) { + // This is left blank intentinally + // as from tasks are generated from + // local files, and will not be completed repeatedly } } } else if (taskTypeString.equals("E")) { String eventLineInput = taskLine.substring(secondDivisor + 1).trim(); - String taskCompletionStatus = taskLine.substring(firstDivisor + 2, thirdDivisor).trim(); - + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); Task newTask = addEvent(eventLineInput.replace("| ", "/")); if (taskCompletionStatus.equals("1")) { try { newTask.markAsDone(); - } catch(RepeatedCompletionException e){ - // This is left blank as from tasks are generated from - // local files, and will not complete repeatedly + } catch (RepeatedCompletionException e) { + // This is left blank intentinally + // as from tasks are generated from + // local files, and will not be completed repeatedly } } } else { diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 4bb6903a4..6a015c98b 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -7,6 +7,7 @@ public ToDo(String description) { this.taskType = TaskType.TO_DO; } + // for the use of exporting into a text public String describe() { return getDescription(); } From 75ea4fd59761ef42660d6245f5619dffaa102d9c Mon Sep 17 00:00:00 2001 From: an ruyi Date: Thu, 16 Sep 2021 12:54:46 +0800 Subject: [PATCH 22/28] Bug Fixed. Suitable for .jar file build. --- src/main/java/Duke.java | 12 ++++++++++-- src/main/java/duke/task/TaskBank.java | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 43b4a87e4..59d9890d5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -5,6 +5,7 @@ import duke.task.TaskBank; import java.io.File; +import java.io.IOException; import java.util.Scanner; public class Duke { @@ -14,7 +15,7 @@ public static void main(String[] args) { if (f.exists()) { Chatter.load(); } else { - Chatter.greet(); + Chatter.greet(f); } Chatter.talk(sc); } @@ -28,7 +29,14 @@ static void printDashLine() { System.out.printf("____________________________________________________________%n"); } - static void greet() { + static void greet(File file) { + File filePath = new File(TaskBank.directoryPath); + filePath.mkdir(); + try { + file.createNewFile(); + } catch(IOException e){ + System.out.println(e.getMessage()); + } printDashLine(); System.out.printf("Hello! I'm Duke, your task manager.%n" + "Its the first time I see you%n" + diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 96a3a2853..7576e5a39 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -12,6 +12,7 @@ public class TaskBank { private ArrayList tasks; + public static final String directoryPath = "./data/"; public static final String filePath = "./data/duke.txt"; { From 94c0c8bba9290b9aa7c736324bd75d5dfcae6b1c Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 15:46:16 +0800 Subject: [PATCH 23/28] Change to a more OOP version. Introduce class Command, Parser, Storage and Ui and a new enum named Action. --- data/duke.txt | 3 +- src/main/java/Action.java | 4 + src/main/java/Command.java | 87 +++++++++++++++++++++ src/main/java/Duke.java | 73 +++++++++++++----- src/main/java/Parser.java | 37 +++++++++ src/main/java/Storage.java | 106 ++++++++++++++++++++++++++ src/main/java/Ui.java | 93 ++++++++++++++++++++++ src/main/java/duke/task/Deadline.java | 2 +- src/main/java/duke/task/Event.java | 2 +- src/main/java/duke/task/Task.java | 2 +- src/main/java/duke/task/TaskBank.java | 12 ++- src/main/java/duke/task/ToDo.java | 2 +- 12 files changed, 396 insertions(+), 27 deletions(-) create mode 100644 src/main/java/Action.java create mode 100644 src/main/java/Command.java create mode 100644 src/main/java/Parser.java create mode 100644 src/main/java/Storage.java create mode 100644 src/main/java/Ui.java diff --git a/data/duke.txt b/data/duke.txt index 919cb32b1..e1c0bc42e 100644 --- a/data/duke.txt +++ b/data/duke.txt @@ -1,2 +1 @@ -T | 0 | aaaa -E | 1 | bbbbb | June +T | 0 | aaa diff --git a/src/main/java/Action.java b/src/main/java/Action.java new file mode 100644 index 000000000..221b95eef --- /dev/null +++ b/src/main/java/Action.java @@ -0,0 +1,4 @@ +public enum Action{ + BYE, LIST, CREATE_TODO, CREATE_DEADLINE, CREATE_EVENT, + MARK_AS_DONE, DELETE, CLEAR +} \ No newline at end of file diff --git a/src/main/java/Command.java b/src/main/java/Command.java new file mode 100644 index 000000000..63ff7da71 --- /dev/null +++ b/src/main/java/Command.java @@ -0,0 +1,87 @@ +import duke.exception.DukeException; +import duke.exception.RepeatedCompletionException; +import duke.task.Task; +import duke.task.TaskBank; + +public class Command { + public static void perform(String sentence, Action action, Ui ui, Storage storage, TaskBank tb)throws DukeException { + switch (action) { + case CLEAR: + clear(tb); + ui.showClearMessage(); + storage.exportTasks(tb); + break; + case DELETE: + Task deletedTask = deleteTask(sentence, tb); + ui.showDeleteMessage(deletedTask, tb.getTaskSize()); + storage.exportTasks(tb); + break; + case BYE: + bye(); + ui.showByeMessage(); + break; + case LIST: + ui.showAllTaskMessage(); + listAllTask(tb); + break; + case CREATE_TODO: + case CREATE_DEADLINE: + case CREATE_EVENT: + Task createdTask = createTask(action, tb, sentence); + ui.showTaskAddedMessage(createdTask, tb.getTaskSize()); + storage.exportTasks(tb); + break; + case MARK_AS_DONE: + Task completedTask = completeTask(tb, sentence); + ui.showCompleteMessage(completedTask); + storage.exportTasks(tb); + break; + default: + System.out.println("ERROR IN PARSING"); + } + + } + + private static void clear(TaskBank tb) { + tb.clear(); + } + + private static Task deleteTask(String deleteStament, TaskBank tb) { + int targetIndex = Parser.parseIndex(deleteStament); + Task deletedTask = tb.removeTask(targetIndex); + return deletedTask; + } + + private static void bye() { + Duke.terminate(); + } + + private static void listAllTask(TaskBank tb) { + tb.printList(); + } + + private static Task createTask(Action action, TaskBank tb, String sentence) { + Task newTask; + switch (action) { + case CREATE_TODO: + newTask = tb.addTodo(sentence); + break; + case CREATE_DEADLINE: + newTask = tb.addDeadline(sentence); + break; + case CREATE_EVENT: + newTask = tb.addEvent(sentence); + break; + default: + newTask = null; + } + return newTask; + } + + private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCompletionException, NumberFormatException { + int targetIndex = Parser.parseIndex(sentence); + Task completedTask = tb.searchTask(targetIndex); + completedTask.markAsDone(); + return completedTask; + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 59d9890d5..35376b1b3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,4 @@ +import duke.exception.DukeException; import duke.exception.EmptyInputException; import duke.exception.IrregularInputException; import duke.exception.RepeatedCompletionException; @@ -9,17 +10,46 @@ import java.util.Scanner; public class Duke { - public static void main(String[] args) { - try (Scanner sc = new Scanner(System.in)) { - File f = new File(TaskBank.filePath); - if (f.exists()) { - Chatter.load(); - } else { - Chatter.greet(f); + private Storage storage; + private TaskBank taskBank; + private Ui ui; + private static boolean isTerminating; + + public Duke(String filePath) { + ui = new Ui(); + taskBank = new TaskBank(); + storage = new Storage(filePath, taskBank, ui); + } + + public void run() { + while (!isTerminating) { + try (Scanner sc = new Scanner(System.in)) { + String fullCommand; + while (true && !isTerminating) { + fullCommand = ui.readInput(sc); + ui.printDashLine(); + Action action = Parser.parseCommand(fullCommand); + Command.perform(fullCommand, action, ui, storage, taskBank); + ui.printDashLine(); + } + } catch (DukeException e) { + ui.showErrorMessage(e); } - Chatter.talk(sc); } } + + public static void main(String[] args) { + isTerminating = false; + /*try (Scanner sc = new Scanner(System.in)) { + Chatter.handleFile(); + Chatter.talk(sc); + }*/ + new Duke("./data/duke.txt").run(); + } + + public static void terminate() { + isTerminating = true; + } } class Chatter { @@ -34,7 +64,7 @@ static void greet(File file) { filePath.mkdir(); try { file.createNewFile(); - } catch(IOException e){ + } catch (IOException e) { System.out.println(e.getMessage()); } printDashLine(); @@ -53,6 +83,15 @@ static void load() { taskBank.loadTasks(); } + static void handleFile() { + File f = new File(TaskBank.filePath); + if (f.exists()) { + Chatter.load(); + } else { + Chatter.greet(f); + } + } + static void talk(Scanner sc) { String sentence; while (true) { @@ -64,18 +103,18 @@ static void talk(Scanner sc) { Chatter.bye(); break; } else if (sentence.equals("list")) { - Chatter.list(); + Chatter.listAllTask(); } else if (sentence.startsWith("done")) { - Chatter.done(sentence); + Chatter.completeTask(sentence); } else if (sentence.startsWith("todo")) { Task newTask = Chatter.taskBank.addTodo(sentence); - Chatter.add(newTask); + Chatter.addTask(newTask); } else if (sentence.startsWith("deadline")) { Task newTask = Chatter.taskBank.addDeadline(sentence); - Chatter.add(newTask); + Chatter.addTask(newTask); } else if (sentence.startsWith("event")) { Task newTask = Chatter.taskBank.addEvent(sentence); - Chatter.add(newTask); + Chatter.addTask(newTask); } else if (sentence.startsWith("delete")) { Chatter.deleteTask(sentence); } else if (sentence.startsWith("clear")) { @@ -106,7 +145,7 @@ static void talk(Scanner sc) { } } - static void add(Task newTask) { + static void addTask(Task newTask) { printDashLine(); System.out.printf("Got it. I've added this task: %n " + newTask + @@ -122,14 +161,14 @@ static void bye() { printDashLine(); } - static void list() { + static void listAllTask() { printDashLine(); System.out.printf("Here are the tasks in your list:%n"); taskBank.printList(); printDashLine(); } - static void done(String sentence) throws RepeatedCompletionException, NumberFormatException { + static void completeTask(String sentence) throws RepeatedCompletionException, NumberFormatException { String[] words = sentence.split(" "); int targetIndex = Integer.parseInt(words[1]) - 1; Task targetTask = taskBank.searchTask(targetIndex); diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java new file mode 100644 index 000000000..e91e44393 --- /dev/null +++ b/src/main/java/Parser.java @@ -0,0 +1,37 @@ +import duke.exception.DukeException; +import duke.exception.EmptyInputException; +import duke.exception.IrregularInputException; +import duke.task.Task; + +public class Parser { + public static Action parseCommand(String sentence) throws DukeException { + if (sentence.isEmpty()) { + throw new EmptyInputException("Empty input! Try again (o|o)\n"); + } else if (sentence.equals("bye")) { + return Action.BYE; + } else if (sentence.equals("list")) { + return Action.LIST; + } else if (sentence.startsWith("done")) { + return Action.MARK_AS_DONE; + } else if (sentence.startsWith("todo")) { + return Action.CREATE_TODO; + } else if (sentence.startsWith("deadline")) { + return Action.CREATE_DEADLINE; + } else if (sentence.startsWith("event")) { + return Action.CREATE_EVENT; + } else if (sentence.startsWith("delete")) { + return Action.DELETE; + } else if (sentence.startsWith("clear")) { + return Action.CLEAR; + } else { + throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + + "\nPlease try again!"); + } + } + + public static int parseIndex(String sentence) { + String[] words = sentence.split(" "); + int targetIndex = Integer.parseInt(words[1]) - 1; + return targetIndex; + } +} diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java new file mode 100644 index 000000000..55ddc1cfc --- /dev/null +++ b/src/main/java/Storage.java @@ -0,0 +1,106 @@ +import duke.exception.RepeatedCompletionException; +import duke.task.Task; +import duke.task.TaskBank; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; + +public class Storage { + private String filePath; + private File file; + + Storage(String filePath, TaskBank tb, Ui ui) { + this.filePath = filePath; + file = new File(filePath); + if (file.exists()) { + loadTasks(tb); + ui.showLoadMessage(); + } else { + File directoryPath = new File(filePath); + directoryPath.mkdir(); + try { + file.createNewFile(); + } catch(IOException e){ + System.out.println(e.getMessage()); + } + ui.showGreeting(); + } + } + + public void exportTasks(TaskBank tb) { + StringBuffer taskTextString = new StringBuffer(); + for (Task task : tb.getTasks()) { + taskTextString.append(task.getTaskType()); + taskTextString.append(" | "); + taskTextString.append(task.getDone() ? "1" : "0"); + taskTextString.append(" | "); + taskTextString.append(task.describeInFile()); + taskTextString.append("\r\n"); + } + try { + FileWriter fw = new FileWriter(filePath); + fw.write(taskTextString.toString()); + fw.close(); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + public void loadTasks(TaskBank tb) { + File f = new File(this.filePath); + try (Scanner sc = new Scanner(f)) { + while (sc.hasNext()) { + loadTaskLine(sc.nextLine(), tb); + } + } catch (FileNotFoundException e) { + System.out.println("duke.txt is not found"); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + public void loadTaskLine(String taskLine, TaskBank tb) throws IOException { + String taskTypeString = taskLine.substring(0, 1); + int firstDivisor = taskLine.indexOf("|", 1); + int secondDivisor = taskLine.indexOf("|", firstDivisor + 1); + int thirdDivisor = taskLine.indexOf("|", secondDivisor + 1); + if (thirdDivisor == -1) { // todo type + tb.addTodo(taskLine.substring(secondDivisor + 1).trim()); + } else { + if (taskTypeString.equals("D")) { + String deadLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); + Task newTask = tb.addDeadline(deadLineInput.replace("| ", "/")); + if (taskCompletionStatus.equals("1")) { + try { + newTask.markAsDone(); + } catch (RepeatedCompletionException e) { + + // This is left blank intentinally + // as from tasks are generated from + // local files, and will not be completed repeatedly + } + } + + } else if (taskTypeString.equals("E")) { + String eventLineInput = taskLine.substring(secondDivisor + 1).trim(); + String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); + Task newTask = tb.addEvent(eventLineInput.replace("| ", "/")); + if (taskCompletionStatus.equals("1")) { + try { + newTask.markAsDone(); + } catch (RepeatedCompletionException e) { + // This is left blank intentinally + // as from tasks are generated from + // local files, and will not be completed repeatedly + } + } + } else { + throw new IOException("Wrong type from data loader"); + } + } + } +} diff --git a/src/main/java/Ui.java b/src/main/java/Ui.java new file mode 100644 index 000000000..2230734da --- /dev/null +++ b/src/main/java/Ui.java @@ -0,0 +1,93 @@ +import duke.task.Task; +import duke.task.TaskBank; + +import java.util.Scanner; + +public class Ui { + Ui() { + } + + public void printDashLine() { + System.out.printf("____________________________________________________________%n"); + } + + public void showGreeting() { + printDashLine(); + System.out.printf("Hello! I'm Duke, your task manager.%n" + + "Its the first time I see you%n" + + "Key in your tasks below!%n"); + printDashLine(); + } + + public void showTaskAdded(Task newTask, TaskBank taskBank) { + printDashLine(); + System.out.printf("Got it. I've added this task: %n " + + newTask + + "%nNow you have " + taskBank.getTaskSize() + + " tasks in the list.%n"); + printDashLine(); + } + + public void showAllTask(TaskBank taskBank) { + printDashLine(); + System.out.printf("Here are the tasks in your list:%n"); + int i = 0; + for (Task task : taskBank.getTasks()) { + System.out.printf("%d.%s%n", i + 1, task); + i++; + } + printDashLine(); + } + + public void showTaskDone(Task targetTask, TaskBank testBank) { + System.out.printf("Nice! I've marked this task as done: %n"); + System.out.println(" " + targetTask); + printDashLine(); + } + + + public void showErrorMessage(Exception e) { + System.out.println(e.getMessage()); + } + + public void showClearMessage() { + System.out.println("I have cleared all the tasks!"); + } + + public void showDeleteMessage(Task deletedTask, int taskBankSize) { + System.out.printf("Noted. I've removed this task: %n"); + System.out.println(" " + deletedTask); + System.out.printf("Now you have " + taskBankSize + + " tasks in the list.%n"); + } + + public void showByeMessage() { + System.out.printf("Bye. Hope to see you again soon!%n"); + } + + public void showAllTaskMessage() { + System.out.printf("Here are the tasks in your list:%n"); + } + + public void showTaskAddedMessage(Task addedTask, int taskBankSize) { + System.out.printf("Got it. I've added this task: %n " + + addedTask + + "%nNow you have " + taskBankSize + + " tasks in the list.%n"); + } + + public void showCompleteMessage(Task completedTask){ + System.out.printf("Nice! I've marked this task as done: %n"); + System.out.println(" " + completedTask); + } + public String readInput(Scanner sc){ + return sc.nextLine(); + } + public void showLoadMessage(){ + printDashLine(); + System.out.printf("Hello! I'm Duke, your task manager.%n" + + "I have loaded the tasks you have keyed in the last time%n" + + "Continue to key in your tasks below!%n"); + printDashLine(); + } +} diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index ab97cd436..720521d91 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -24,7 +24,7 @@ public String toString() { } // for the use of exporting into a text - public String describe() { + public String describeInFile() { return getDescription() + " | " + getDeadlineDateString(); } } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 5d0c1c931..916f54c8c 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -23,7 +23,7 @@ public String toString() { } // for the use of exporting into a text - public String describe() { + public String describeInFile() { return getDescription() + " | " + getEventDateString(); } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index 93e99efde..acc42e03a 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -16,7 +16,7 @@ public Task() { this.isDone = false; } - public abstract String describe(); + public abstract String describeInFile(); public Task(String description) { this(); diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index 7576e5a39..eadfcb974 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -15,10 +15,14 @@ public class TaskBank { public static final String directoryPath = "./data/"; public static final String filePath = "./data/duke.txt"; - { + public TaskBank() { tasks = new ArrayList<>(); } + public ArrayList getTasks() { + return tasks; + } + public Task addTodo(String todoInput) { Task newTask = new ToDo(todoInput); @@ -74,7 +78,7 @@ public void exportTasks() { taskTextString.append(" | "); taskTextString.append(task.getDone() ? "1" : "0"); taskTextString.append(" | "); - taskTextString.append(task.describe()); + taskTextString.append(task.describeInFile()); taskTextString.append("\r\n"); } try { @@ -87,7 +91,7 @@ public void exportTasks() { } public void loadTasks() { - File f = new File(filePath); + File f = new File(this.filePath); try (Scanner sc = new Scanner(f)) { while (sc.hasNext()) { loadTaskLine(sc.nextLine()); @@ -97,7 +101,6 @@ public void loadTasks() { } catch (IOException e) { System.out.println(e.getMessage()); } - } public void loadTaskLine(String taskLine) throws IOException { @@ -116,6 +119,7 @@ public void loadTaskLine(String taskLine) throws IOException { try { newTask.markAsDone(); } catch (RepeatedCompletionException e) { + // This is left blank intentinally // as from tasks are generated from // local files, and will not be completed repeatedly diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index 6a015c98b..d58099fe1 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -8,7 +8,7 @@ public ToDo(String description) { } // for the use of exporting into a text - public String describe() { + public String describeInFile() { return getDescription(); } } From e12bbf011ba0e3d6311147b221f814925645c922 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 15:56:28 +0800 Subject: [PATCH 24/28] Remove unused functions. --- data/duke.txt | 2 +- src/main/java/Command.java | 13 ++- src/main/java/Duke.java | 160 +------------------------- src/main/java/Parser.java | 10 +- src/main/java/Storage.java | 3 +- src/main/java/Ui.java | 37 +----- src/main/java/duke/task/TaskBank.java | 85 -------------- 7 files changed, 23 insertions(+), 287 deletions(-) diff --git a/data/duke.txt b/data/duke.txt index e1c0bc42e..47879be7a 100644 --- a/data/duke.txt +++ b/data/duke.txt @@ -1 +1 @@ -T | 0 | aaa +D | 0 | deadline ba | by 6 diff --git a/src/main/java/Command.java b/src/main/java/Command.java index 63ff7da71..018fe005c 100644 --- a/src/main/java/Command.java +++ b/src/main/java/Command.java @@ -1,13 +1,14 @@ import duke.exception.DukeException; +import duke.exception.IrregularInputException; import duke.exception.RepeatedCompletionException; import duke.task.Task; import duke.task.TaskBank; public class Command { - public static void perform(String sentence, Action action, Ui ui, Storage storage, TaskBank tb)throws DukeException { + public static void perform(String sentence, Action action, Ui ui, Storage storage, TaskBank tb) throws DukeException { switch (action) { case CLEAR: - clear(tb); + clear(tb,storage); ui.showClearMessage(); storage.exportTasks(tb); break; @@ -42,18 +43,18 @@ public static void perform(String sentence, Action action, Ui ui, Storage storag } - private static void clear(TaskBank tb) { + private static void clear(TaskBank tb, Storage storage) { tb.clear(); } - private static Task deleteTask(String deleteStament, TaskBank tb) { + private static Task deleteTask(String deleteStament, TaskBank tb) throws IrregularInputException { int targetIndex = Parser.parseIndex(deleteStament); Task deletedTask = tb.removeTask(targetIndex); return deletedTask; } private static void bye() { - Duke.terminate(); + Duke.terminateDuke(); } private static void listAllTask(TaskBank tb) { @@ -78,7 +79,7 @@ private static Task createTask(Action action, TaskBank tb, String sentence) { return newTask; } - private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCompletionException, NumberFormatException { + private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCompletionException, NumberFormatException, IrregularInputException { int targetIndex = Parser.parseIndex(sentence); Task completedTask = tb.searchTask(targetIndex); completedTask.markAsDone(); diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 35376b1b3..593c09703 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,12 +1,6 @@ import duke.exception.DukeException; -import duke.exception.EmptyInputException; -import duke.exception.IrregularInputException; -import duke.exception.RepeatedCompletionException; -import duke.task.Task; import duke.task.TaskBank; -import java.io.File; -import java.io.IOException; import java.util.Scanner; public class Duke { @@ -25,7 +19,7 @@ public void run() { while (!isTerminating) { try (Scanner sc = new Scanner(System.in)) { String fullCommand; - while (true && !isTerminating) { + while (!isTerminating) { fullCommand = ui.readInput(sc); ui.printDashLine(); Action action = Parser.parseCommand(fullCommand); @@ -40,163 +34,13 @@ public void run() { public static void main(String[] args) { isTerminating = false; - /*try (Scanner sc = new Scanner(System.in)) { - Chatter.handleFile(); - Chatter.talk(sc); - }*/ new Duke("./data/duke.txt").run(); } - public static void terminate() { + public static void terminateDuke() { isTerminating = true; } } -class Chatter { - static TaskBank taskBank = new TaskBank(); - static void printDashLine() { - System.out.printf("____________________________________________________________%n"); - } - - static void greet(File file) { - File filePath = new File(TaskBank.directoryPath); - filePath.mkdir(); - try { - file.createNewFile(); - } catch (IOException e) { - System.out.println(e.getMessage()); - } - printDashLine(); - System.out.printf("Hello! I'm Duke, your task manager.%n" + - "Its the first time I see you%n" + - "Key in your tasks below!%n"); - printDashLine(); - } - - static void load() { - printDashLine(); - System.out.printf("Hello! I'm Duke, your task manager.%n" + - "I have loaded the tasks you have keyed in the last time%n" + - "Continue to key in your tasks below!%n"); - printDashLine(); - taskBank.loadTasks(); - } - - static void handleFile() { - File f = new File(TaskBank.filePath); - if (f.exists()) { - Chatter.load(); - } else { - Chatter.greet(f); - } - } - - static void talk(Scanner sc) { - String sentence; - while (true) { - try { - sentence = sc.nextLine(); - if (sentence.isEmpty()) { - throw new EmptyInputException("Empty input! Try again (o|o)\n"); - } else if (sentence.equals("bye")) { - Chatter.bye(); - break; - } else if (sentence.equals("list")) { - Chatter.listAllTask(); - } else if (sentence.startsWith("done")) { - Chatter.completeTask(sentence); - } else if (sentence.startsWith("todo")) { - Task newTask = Chatter.taskBank.addTodo(sentence); - Chatter.addTask(newTask); - } else if (sentence.startsWith("deadline")) { - Task newTask = Chatter.taskBank.addDeadline(sentence); - Chatter.addTask(newTask); - } else if (sentence.startsWith("event")) { - Task newTask = Chatter.taskBank.addEvent(sentence); - Chatter.addTask(newTask); - } else if (sentence.startsWith("delete")) { - Chatter.deleteTask(sentence); - } else if (sentence.startsWith("clear")) { - Chatter.clear(); - } else { - throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + - "\nPlease try again!"); - } - } catch (IrregularInputException e) { - printDashLine(); - System.out.println(e.getMessage()); - printDashLine(); - } catch (IndexOutOfBoundsException e) { - System.out.println(e.getMessage()); - printDashLine(); - } catch (RepeatedCompletionException e) { - System.out.println(e.getMessage()); - printDashLine(); - } catch (EmptyInputException e) { - printDashLine(); - System.out.println(e.getMessage()); - printDashLine(); - } catch (NumberFormatException e) { - printDashLine(); - System.out.printf("Not a valid number. Try again%n"); - printDashLine(); - } - } - } - - static void addTask(Task newTask) { - printDashLine(); - System.out.printf("Got it. I've added this task: %n " + - newTask + - "%nNow you have " + taskBank.getTaskSize() + - " tasks in the list.%n"); - printDashLine(); - taskBank.exportTasks(); - } - - static void bye() { - printDashLine(); - System.out.printf("Bye. Hope to see you again soon!%n"); - printDashLine(); - } - - static void listAllTask() { - printDashLine(); - System.out.printf("Here are the tasks in your list:%n"); - taskBank.printList(); - printDashLine(); - } - - static void completeTask(String sentence) throws RepeatedCompletionException, NumberFormatException { - String[] words = sentence.split(" "); - int targetIndex = Integer.parseInt(words[1]) - 1; - Task targetTask = taskBank.searchTask(targetIndex); - targetTask.markAsDone(); - taskBank.exportTasks(); - System.out.printf("Nice! I've marked this task as done: %n"); - System.out.println(" " + targetTask); - printDashLine(); - } - - static void deleteTask(String sentence) { - String[] words = sentence.split(" "); - int targetIndex = Integer.parseInt(words[1]) - 1; - Task deletedTask = Chatter.taskBank.removeTask(targetIndex); - printDashLine(); - System.out.printf("Noted. I've removed this task: %n"); - System.out.println(" " + deletedTask); - System.out.printf("Now you have " + taskBank.getTaskSize() + - " tasks in the list.%n"); - taskBank.exportTasks(); - printDashLine(); - } - - static void clear() { - taskBank.clear(); - taskBank.exportTasks(); - System.out.println("I have cleared all the tasks!"); - printDashLine(); - } -} diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index e91e44393..3e2e4e493 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -29,9 +29,13 @@ public static Action parseCommand(String sentence) throws DukeException { } } - public static int parseIndex(String sentence) { + public static int parseIndex(String sentence) throws IrregularInputException { String[] words = sentence.split(" "); - int targetIndex = Integer.parseInt(words[1]) - 1; - return targetIndex; + try { + int targetIndex = Integer.parseInt(words[1]) - 1; + return targetIndex; + } catch(NumberFormatException nfe){ + throw new IrregularInputException(); + } } } diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index 55ddc1cfc..4515a3391 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -62,7 +62,7 @@ public void loadTasks(TaskBank tb) { } } - public void loadTaskLine(String taskLine, TaskBank tb) throws IOException { + private void loadTaskLine(String taskLine, TaskBank tb) throws IOException { String taskTypeString = taskLine.substring(0, 1); int firstDivisor = taskLine.indexOf("|", 1); int secondDivisor = taskLine.indexOf("|", firstDivisor + 1); @@ -78,7 +78,6 @@ public void loadTaskLine(String taskLine, TaskBank tb) throws IOException { try { newTask.markAsDone(); } catch (RepeatedCompletionException e) { - // This is left blank intentinally // as from tasks are generated from // local files, and will not be completed repeatedly diff --git a/src/main/java/Ui.java b/src/main/java/Ui.java index 2230734da..e24a3be76 100644 --- a/src/main/java/Ui.java +++ b/src/main/java/Ui.java @@ -4,9 +4,6 @@ import java.util.Scanner; public class Ui { - Ui() { - } - public void printDashLine() { System.out.printf("____________________________________________________________%n"); } @@ -19,32 +16,6 @@ public void showGreeting() { printDashLine(); } - public void showTaskAdded(Task newTask, TaskBank taskBank) { - printDashLine(); - System.out.printf("Got it. I've added this task: %n " + - newTask + - "%nNow you have " + taskBank.getTaskSize() + - " tasks in the list.%n"); - printDashLine(); - } - - public void showAllTask(TaskBank taskBank) { - printDashLine(); - System.out.printf("Here are the tasks in your list:%n"); - int i = 0; - for (Task task : taskBank.getTasks()) { - System.out.printf("%d.%s%n", i + 1, task); - i++; - } - printDashLine(); - } - - public void showTaskDone(Task targetTask, TaskBank testBank) { - System.out.printf("Nice! I've marked this task as done: %n"); - System.out.println(" " + targetTask); - printDashLine(); - } - public void showErrorMessage(Exception e) { System.out.println(e.getMessage()); @@ -76,14 +47,16 @@ public void showTaskAddedMessage(Task addedTask, int taskBankSize) { " tasks in the list.%n"); } - public void showCompleteMessage(Task completedTask){ + public void showCompleteMessage(Task completedTask) { System.out.printf("Nice! I've marked this task as done: %n"); System.out.println(" " + completedTask); } - public String readInput(Scanner sc){ + + public String readInput(Scanner sc) { return sc.nextLine(); } - public void showLoadMessage(){ + + public void showLoadMessage() { printDashLine(); System.out.printf("Hello! I'm Duke, your task manager.%n" + "I have loaded the tasks you have keyed in the last time%n" + diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index eadfcb974..f1462d76d 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -1,19 +1,9 @@ package duke.task; - -import duke.exception.RepeatedCompletionException; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Scanner; import java.util.ArrayList; public class TaskBank { private ArrayList tasks; - public static final String directoryPath = "./data/"; - public static final String filePath = "./data/duke.txt"; public TaskBank() { tasks = new ArrayList<>(); @@ -71,82 +61,7 @@ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { return deletedTask; } - public void exportTasks() { - StringBuffer taskTextString = new StringBuffer(); - for (Task task : tasks) { - taskTextString.append(task.getTaskType()); - taskTextString.append(" | "); - taskTextString.append(task.getDone() ? "1" : "0"); - taskTextString.append(" | "); - taskTextString.append(task.describeInFile()); - taskTextString.append("\r\n"); - } - try { - FileWriter fw = new FileWriter(filePath); - fw.write(taskTextString.toString()); - fw.close(); - } catch (IOException e) { - System.out.println(e.getMessage()); - } - } - - public void loadTasks() { - File f = new File(this.filePath); - try (Scanner sc = new Scanner(f)) { - while (sc.hasNext()) { - loadTaskLine(sc.nextLine()); - } - } catch (FileNotFoundException e) { - System.out.println("duke.txt is not found"); - } catch (IOException e) { - System.out.println(e.getMessage()); - } - } - - public void loadTaskLine(String taskLine) throws IOException { - String taskTypeString = taskLine.substring(0, 1); - int firstDivisor = taskLine.indexOf("|", 1); - int secondDivisor = taskLine.indexOf("|", firstDivisor + 1); - int thirdDivisor = taskLine.indexOf("|", secondDivisor + 1); - if (thirdDivisor == -1) { // todo type - addTodo(taskLine.substring(secondDivisor + 1).trim()); - } else { - if (taskTypeString.equals("D")) { - String deadLineInput = taskLine.substring(secondDivisor + 1).trim(); - String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); - Task newTask = addDeadline(deadLineInput.replace("| ", "/")); - if (taskCompletionStatus.equals("1")) { - try { - newTask.markAsDone(); - } catch (RepeatedCompletionException e) { - - // This is left blank intentinally - // as from tasks are generated from - // local files, and will not be completed repeatedly - } - } - - } else if (taskTypeString.equals("E")) { - String eventLineInput = taskLine.substring(secondDivisor + 1).trim(); - String taskCompletionStatus = taskLine.substring(firstDivisor + 2, secondDivisor).trim(); - Task newTask = addEvent(eventLineInput.replace("| ", "/")); - if (taskCompletionStatus.equals("1")) { - try { - newTask.markAsDone(); - } catch (RepeatedCompletionException e) { - // This is left blank intentinally - // as from tasks are generated from - // local files, and will not be completed repeatedly - } - } - } else { - throw new IOException("Wrong type from data loader"); - } - } - } - public void clear() { tasks = new ArrayList<>(); - exportTasks(); } } From 09249fd7e8c3645f5cd8b564f1a3c0fe5658cf50 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 16:27:36 +0800 Subject: [PATCH 25/28] Level 9. Find Give users a way to find a task by searching for a keyword. --- src/main/java/Action.java | 2 +- src/main/java/Command.java | 28 ++++++++++++++++++++++----- src/main/java/Parser.java | 27 ++++++++++++++++++++++++-- src/main/java/Ui.java | 4 ++++ src/main/java/duke/task/Task.java | 3 +-- src/main/java/duke/task/TaskBank.java | 15 ++++++++++++++ 6 files changed, 69 insertions(+), 10 deletions(-) diff --git a/src/main/java/Action.java b/src/main/java/Action.java index 221b95eef..6e9b1e214 100644 --- a/src/main/java/Action.java +++ b/src/main/java/Action.java @@ -1,4 +1,4 @@ public enum Action{ BYE, LIST, CREATE_TODO, CREATE_DEADLINE, CREATE_EVENT, - MARK_AS_DONE, DELETE, CLEAR + MARK_AS_DONE, DELETE, CLEAR, FIND } \ No newline at end of file diff --git a/src/main/java/Command.java b/src/main/java/Command.java index 018fe005c..71dc4c2b1 100644 --- a/src/main/java/Command.java +++ b/src/main/java/Command.java @@ -4,11 +4,13 @@ import duke.task.Task; import duke.task.TaskBank; +import java.util.ArrayList; + public class Command { public static void perform(String sentence, Action action, Ui ui, Storage storage, TaskBank tb) throws DukeException { switch (action) { case CLEAR: - clear(tb,storage); + clear(tb, storage); ui.showClearMessage(); storage.exportTasks(tb); break; @@ -37,8 +39,13 @@ public static void perform(String sentence, Action action, Ui ui, Storage storag ui.showCompleteMessage(completedTask); storage.exportTasks(tb); break; + case FIND: + TaskBank matchedTaskBank = findTask(sentence, tb); + ui.showFindMessage(); + listAllTask(matchedTaskBank); + break; default: - System.out.println("ERROR IN PARSING"); + System.out.println("ERROR IN COMMMAND"); } } @@ -63,15 +70,16 @@ private static void listAllTask(TaskBank tb) { private static Task createTask(Action action, TaskBank tb, String sentence) { Task newTask; + String description = Parser.parseDescription(sentence); switch (action) { case CREATE_TODO: - newTask = tb.addTodo(sentence); + newTask = tb.addTodo(description); break; case CREATE_DEADLINE: - newTask = tb.addDeadline(sentence); + newTask = tb.addDeadline(description); break; case CREATE_EVENT: - newTask = tb.addEvent(sentence); + newTask = tb.addEvent(description); break; default: newTask = null; @@ -85,4 +93,14 @@ private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCo completedTask.markAsDone(); return completedTask; } + + private static TaskBank findTask(String input, TaskBank givenTaskBank) throws IrregularInputException{ + String keywordInput = Parser.parseKeyWord(input); + ArrayList matchingTasks = TaskBank.findMatchingTask(givenTaskBank, keywordInput); + if (matchingTasks.isEmpty()) { + return null; + } else { + return new TaskBank(matchingTasks); + } + } } diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index 3e2e4e493..bb61b6326 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -23,6 +23,8 @@ public static Action parseCommand(String sentence) throws DukeException { return Action.DELETE; } else if (sentence.startsWith("clear")) { return Action.CLEAR; + } else if (sentence.startsWith("find")) { + return Action.FIND; } else { throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + "\nPlease try again!"); @@ -34,8 +36,29 @@ public static int parseIndex(String sentence) throws IrregularInputException { try { int targetIndex = Integer.parseInt(words[1]) - 1; return targetIndex; - } catch(NumberFormatException nfe){ - throw new IrregularInputException(); + } catch (NumberFormatException nfe) { + throw new IrregularInputException("Not a number. Try again!"); } } + + public static String parseKeyWord(String sentence) throws IrregularInputException { + try { + int spaceIndex = sentence.indexOf(' '); + if (spaceIndex == -1) { + throw new IndexOutOfBoundsException(); + } + String keyWord = sentence.substring(spaceIndex + 1); + return keyWord; + } catch (NumberFormatException nfe) { + throw new IrregularInputException("Bad keyword!"); + } catch (IndexOutOfBoundsException ie) { + throw new IrregularInputException("You have not keyed in any keyword"); + } + } + + public static String parseDescription(String sentence) { + int spaceIndex = sentence.indexOf(' '); + String description = sentence.substring(spaceIndex + 1); + return description; + } } diff --git a/src/main/java/Ui.java b/src/main/java/Ui.java index e24a3be76..315d312c6 100644 --- a/src/main/java/Ui.java +++ b/src/main/java/Ui.java @@ -63,4 +63,8 @@ public void showLoadMessage() { "Continue to key in your tasks below!%n"); printDashLine(); } + + public void showFindMessage(){ + System.out.printf(" Here are the matching tasks in your list:%n"); + } } diff --git a/src/main/java/duke/task/Task.java b/src/main/java/duke/task/Task.java index acc42e03a..6fce1b3d0 100644 --- a/src/main/java/duke/task/Task.java +++ b/src/main/java/duke/task/Task.java @@ -20,8 +20,7 @@ public Task() { public Task(String description) { this(); - int spaceIndex = description.indexOf(' '); - this.description = description.substring(spaceIndex + 1); + this.description = description; } public String getStatusIcon() { diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index f1462d76d..c73f1552f 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -9,6 +9,10 @@ public TaskBank() { tasks = new ArrayList<>(); } + public TaskBank(ArrayList givenTasks){ + tasks = givenTasks; + } + public ArrayList getTasks() { return tasks; } @@ -64,4 +68,15 @@ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { public void clear() { tasks = new ArrayList<>(); } + + public static ArrayList findMatchingTask(TaskBank givenBank, String keyword) { + ArrayList matchingTasks = new ArrayList<>(); + for (Task task : givenBank.getTasks()) { + String lowercaseTaskDescription = task.getDescription().toLowerCase(); + if (lowercaseTaskDescription.contains(keyword)) { + matchingTasks.add(task); + } + } + return matchingTasks; + } } From d7d1d73b1d61be6c82499f8d1f113d46f9be99f7 Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 16:40:11 +0800 Subject: [PATCH 26/28] Bug fixed --- src/main/java/Action.java | 2 +- src/main/java/Command.java | 3 +++ src/main/java/Duke.java | 22 ++++++++++------------ src/main/java/Parser.java | 3 +-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/Action.java b/src/main/java/Action.java index 6e9b1e214..b7d70db06 100644 --- a/src/main/java/Action.java +++ b/src/main/java/Action.java @@ -1,4 +1,4 @@ public enum Action{ BYE, LIST, CREATE_TODO, CREATE_DEADLINE, CREATE_EVENT, - MARK_AS_DONE, DELETE, CLEAR, FIND + MARK_AS_DONE, DELETE, CLEAR, FIND, UNKNOWN_ACTION } \ No newline at end of file diff --git a/src/main/java/Command.java b/src/main/java/Command.java index 71dc4c2b1..8aa213225 100644 --- a/src/main/java/Command.java +++ b/src/main/java/Command.java @@ -9,6 +9,9 @@ public class Command { public static void perform(String sentence, Action action, Ui ui, Storage storage, TaskBank tb) throws DukeException { switch (action) { + case UNKNOWN_ACTION: + System.out.printf("☹ OOPS!!! I'm sorry, but I don't know what that means :-( %nPlease try again!%n"); + break; case CLEAR: clear(tb, storage); ui.showClearMessage(); diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 593c09703..b6113c311 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -16,19 +16,17 @@ public Duke(String filePath) { } public void run() { - while (!isTerminating) { - try (Scanner sc = new Scanner(System.in)) { - String fullCommand; - while (!isTerminating) { - fullCommand = ui.readInput(sc); - ui.printDashLine(); - Action action = Parser.parseCommand(fullCommand); - Command.perform(fullCommand, action, ui, storage, taskBank); - ui.printDashLine(); - } - } catch (DukeException e) { - ui.showErrorMessage(e); + try (Scanner sc = new Scanner(System.in)) { + String fullCommand; + while (!isTerminating) { + fullCommand = ui.readInput(sc); + ui.printDashLine(); + Action action = Parser.parseCommand(fullCommand); + Command.perform(fullCommand, action, ui, storage, taskBank); + ui.printDashLine(); } + } catch (DukeException e) { + ui.showErrorMessage(e); } } diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index bb61b6326..fe6774577 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -26,8 +26,7 @@ public static Action parseCommand(String sentence) throws DukeException { } else if (sentence.startsWith("find")) { return Action.FIND; } else { - throw new IrregularInputException("☹ OOPS!!! I'm sorry, but I don't know what that means :-(" + - "\nPlease try again!"); + return Action.UNKNOWN_ACTION; } } From a1f6eb4ebf94c0dae81a94557c5d28160b3ea2dc Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 18:08:35 +0800 Subject: [PATCH 27/28] Level 9 --- src/main/java/Command.java | 16 ++++++++-------- src/main/java/Ui.java | 15 ++++++++++++++- src/main/java/duke/task/TaskBank.java | 10 ++++++---- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/Command.java b/src/main/java/Command.java index 8aa213225..20ec771dc 100644 --- a/src/main/java/Command.java +++ b/src/main/java/Command.java @@ -90,14 +90,7 @@ private static Task createTask(Action action, TaskBank tb, String sentence) { return newTask; } - private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCompletionException, NumberFormatException, IrregularInputException { - int targetIndex = Parser.parseIndex(sentence); - Task completedTask = tb.searchTask(targetIndex); - completedTask.markAsDone(); - return completedTask; - } - - private static TaskBank findTask(String input, TaskBank givenTaskBank) throws IrregularInputException{ + private static TaskBank findTask(String input, TaskBank givenTaskBank) throws IrregularInputException { String keywordInput = Parser.parseKeyWord(input); ArrayList matchingTasks = TaskBank.findMatchingTask(givenTaskBank, keywordInput); if (matchingTasks.isEmpty()) { @@ -106,4 +99,11 @@ private static TaskBank findTask(String input, TaskBank givenTaskBank) throws Ir return new TaskBank(matchingTasks); } } + + private static Task completeTask(TaskBank tb, String sentence) throws RepeatedCompletionException, NumberFormatException, IrregularInputException { + int targetIndex = Parser.parseIndex(sentence); + Task completedTask = tb.searchTask(targetIndex); + completedTask.markAsDone(); + return completedTask; + } } diff --git a/src/main/java/Ui.java b/src/main/java/Ui.java index 315d312c6..d12b3fa17 100644 --- a/src/main/java/Ui.java +++ b/src/main/java/Ui.java @@ -1,6 +1,7 @@ import duke.task.Task; import duke.task.TaskBank; +import java.util.ArrayList; import java.util.Scanner; public class Ui { @@ -56,6 +57,18 @@ public String readInput(Scanner sc) { return sc.nextLine(); } + public static ArrayList findMatchingTask(TaskBank givenBank, String keyword) { + ArrayList matchingTasks = new ArrayList<>(); + for (Task task : givenBank.getTasks()) { + String lowercaseTaskDescription = task.getDescription().toLowerCase(); + if (lowercaseTaskDescription.contains(keyword)) { + matchingTasks.add(task); + } + } + return matchingTasks; + } + + public void showLoadMessage() { printDashLine(); System.out.printf("Hello! I'm Duke, your task manager.%n" + @@ -64,7 +77,7 @@ public void showLoadMessage() { printDashLine(); } - public void showFindMessage(){ + public void showFindMessage() { System.out.printf(" Here are the matching tasks in your list:%n"); } } diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index c73f1552f..ff4c2cdc3 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -65,10 +65,6 @@ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { return deletedTask; } - public void clear() { - tasks = new ArrayList<>(); - } - public static ArrayList findMatchingTask(TaskBank givenBank, String keyword) { ArrayList matchingTasks = new ArrayList<>(); for (Task task : givenBank.getTasks()) { @@ -79,4 +75,10 @@ public static ArrayList findMatchingTask(TaskBank givenBank, String keywor } return matchingTasks; } + + public void clear() { + tasks = new ArrayList<>(); + } + + } From 89ab1e11f14f13f3ae8a657a1403e2d26fcad1be Mon Sep 17 00:00:00 2001 From: an ruyi Date: Tue, 28 Sep 2021 20:38:18 +0800 Subject: [PATCH 28/28] Add java docs --- src/main/java/Duke.java | 11 +++++++ src/main/java/Parser.java | 23 ++++++++++++++ src/main/java/Storage.java | 8 +++++ src/main/java/duke/task/Deadline.java | 6 ++-- src/main/java/duke/task/Event.java | 4 ++- src/main/java/duke/task/TaskBank.java | 44 ++++++++++++++++++++++++--- src/main/java/duke/task/ToDo.java | 4 ++- 7 files changed, 91 insertions(+), 9 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b6113c311..bc08d48ff 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -9,12 +9,19 @@ public class Duke { private Ui ui; private static boolean isTerminating; + /** + * Instantiates Storage, TaskBank and Ui of the programme + * @param filePath the filePath which duke.txt is stored + */ public Duke(String filePath) { ui = new Ui(); taskBank = new TaskBank(); storage = new Storage(filePath, taskBank, ui); } + /** + * Runs Duke program + */ public void run() { try (Scanner sc = new Scanner(System.in)) { String fullCommand; @@ -35,6 +42,10 @@ public static void main(String[] args) { new Duke("./data/duke.txt").run(); } + /** + * Changes the variable isTerminating to true + * Used to end the while loop that continuously read user input + */ public static void terminateDuke() { isTerminating = true; } diff --git a/src/main/java/Parser.java b/src/main/java/Parser.java index fe6774577..e958344d8 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/Parser.java @@ -4,6 +4,12 @@ import duke.task.Task; public class Parser { + /** Parses user input to corresponding command enum based on user input. + * + * @param sentence Raw String taken from user input + * @return an action to be taken by Command + * @throws DukeException including illegal inputs and empty inputs + */ public static Action parseCommand(String sentence) throws DukeException { if (sentence.isEmpty()) { throw new EmptyInputException("Empty input! Try again (o|o)\n"); @@ -30,6 +36,12 @@ public static Action parseCommand(String sentence) throws DukeException { } } + /** Parse the index of the tasks the user wants to done / delete + * + * @param sentence the raw String from user input of "done" and "delete" + * @return targetIndex, + * @throws IrregularInputException if an int cannot be parsed + */ public static int parseIndex(String sentence) throws IrregularInputException { String[] words = sentence.split(" "); try { @@ -40,6 +52,12 @@ public static int parseIndex(String sentence) throws IrregularInputException { } } + /** Parse the keyword of the looks for + * + * @param sentence, raw user input + * @return the keyword that the user looks for + * @throws IrregularInputException if bad keyword or no keyword is keyyed in + */ public static String parseKeyWord(String sentence) throws IrregularInputException { try { int spaceIndex = sentence.indexOf(' '); @@ -55,6 +73,11 @@ public static String parseKeyWord(String sentence) throws IrregularInputExceptio } } + /** Parse the description of task from user input + * + * @param sentence raw user input + * @return the description of the task + */ public static String parseDescription(String sentence) { int spaceIndex = sentence.indexOf(' '); String description = sentence.substring(spaceIndex + 1); diff --git a/src/main/java/Storage.java b/src/main/java/Storage.java index 4515a3391..55ecd305e 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/Storage.java @@ -30,6 +30,10 @@ public class Storage { } } + /** Exports the content in the TaskBank to duke.txt + * + * @param tb - the TaskBank which tasks are exported from + */ public void exportTasks(TaskBank tb) { StringBuffer taskTextString = new StringBuffer(); for (Task task : tb.getTasks()) { @@ -49,6 +53,10 @@ public void exportTasks(TaskBank tb) { } } + /** Loads taks from file to target TaskBank + * + * @param tb TaskBank which tasks are loaded to + */ public void loadTasks(TaskBank tb) { File f = new File(this.filePath); try (Scanner sc = new Scanner(f)) { diff --git a/src/main/java/duke/task/Deadline.java b/src/main/java/duke/task/Deadline.java index 720521d91..795474769 100644 --- a/src/main/java/duke/task/Deadline.java +++ b/src/main/java/duke/task/Deadline.java @@ -13,7 +13,6 @@ public Deadline(String description) { this.taskType = TaskType.DEADLINE; } - public String getDeadlineDateString() { return deadlineDateString; } @@ -23,7 +22,10 @@ public String toString() { return super.toString() + " (" + getDeadlineDateString() + ")"; } - // for the use of exporting into a text + + /** Returns a formatted String that to be stored in file, duke.txt + * @return the formatted String + */ public String describeInFile() { return getDescription() + " | " + getDeadlineDateString(); } diff --git a/src/main/java/duke/task/Event.java b/src/main/java/duke/task/Event.java index 916f54c8c..46d0a5416 100644 --- a/src/main/java/duke/task/Event.java +++ b/src/main/java/duke/task/Event.java @@ -22,7 +22,9 @@ public String toString() { return super.toString()+ " (" + getEventDateString() + ")"; } - // for the use of exporting into a text + /** Returns a formatted String that to be stored in file, duke.txt + * @return the formatted String + */ public String describeInFile() { return getDescription() + " | " + getEventDateString(); } diff --git a/src/main/java/duke/task/TaskBank.java b/src/main/java/duke/task/TaskBank.java index ff4c2cdc3..d151137a3 100644 --- a/src/main/java/duke/task/TaskBank.java +++ b/src/main/java/duke/task/TaskBank.java @@ -18,20 +18,38 @@ public ArrayList getTasks() { } + /** Adds a todo to taskbank + * + * Creates a new todo task from the raw String input + * @param todoInput + * @return the newly created todo Task + */ public Task addTodo(String todoInput) { Task newTask = new ToDo(todoInput); tasks.add(newTask); return newTask; } - public Task addEvent(String todoInput) { - Task newTask = new Event(todoInput); + /** Adds an event to taskbank + * + * Creates a new event task from the raw String input + * @param eventInput + * @return the newly created event Task + */ + public Task addEvent(String eventInput) { + Task newTask = new Event(eventInput); tasks.add(newTask); return newTask; } - public Task addDeadline(String todoInput) { - Task newTask = new Deadline(todoInput); + /** Adds a deadline to taskbank + * + * Creates a new event task from the raw String input + * @param deadlilneInput + * @return the newly created deadline Task + */ + public Task addDeadline(String deadlilneInput) { + Task newTask = new Deadline(deadlilneInput); tasks.add(newTask); return newTask; } @@ -40,6 +58,9 @@ public int getTaskSize() { return tasks.size(); } + /** Prints all tasks in TaskBank + * + */ public void printList() { int i = 0; for (Task task : tasks) { @@ -48,7 +69,12 @@ public void printList() { } } - // search the Task in the array by index + /** Returns the target task from the TaskBank by specific index + * + * @param taskIndex the index of target task + * @return the target index + * @throws IndexOutOfBoundsException if index provided is out of bound + */ public Task searchTask(int taskIndex) throws IndexOutOfBoundsException { if (taskIndex < 0 || taskIndex > this.getTaskSize()) { throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); @@ -56,6 +82,12 @@ public Task searchTask(int taskIndex) throws IndexOutOfBoundsException { return tasks.get(taskIndex); } + /** Removes the target task from the TaskBank + * + * @param taskIndex the index of target task + * @return the removed Task + * @throws IndexOutOfBoundsException if index provided is out of bound + */ public Task removeTask(int taskIndex) throws IndexOutOfBoundsException { if (taskIndex < 0 || taskIndex > this.getTaskSize()) { throw new IndexOutOfBoundsException("Ouch! Index is out of range. Try again!\n"); @@ -76,6 +108,8 @@ public static ArrayList findMatchingTask(TaskBank givenBank, String keywor return matchingTasks; } + /** Clears the content of the the Task Bank + */ public void clear() { tasks = new ArrayList<>(); } diff --git a/src/main/java/duke/task/ToDo.java b/src/main/java/duke/task/ToDo.java index d58099fe1..3d0fc5f3b 100644 --- a/src/main/java/duke/task/ToDo.java +++ b/src/main/java/duke/task/ToDo.java @@ -7,7 +7,9 @@ public ToDo(String description) { this.taskType = TaskType.TO_DO; } - // for the use of exporting into a text + /** Returns a formatted String that to be stored in file, duke.txt + * @return the formatted String + */ public String describeInFile() { return getDescription(); }