From a6eb81e3aab1561c43ecdfed2b466b8093dd0385 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sat, 24 Aug 2019 23:38:34 +0800 Subject: [PATCH 001/251] Level-1: Greet, Echo,Exit duke greets user, and echoes commands to exit, type "bye" (not case sensitive) --- build.gradle | 2 +- src/main/java/Duke.java | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ce97c7ba2e..37f9ec886a 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ repositories { application { // Change this to your main class. - mainClassName = "seedu.duke.Duke" + mainClassName = "Duke.class" } run { diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 5d313334cc..ceda152375 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,7 @@ +import java.util.Scanner; + public class Duke { + public static final String LINE_BREAK = "___________________________"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -6,5 +9,27 @@ public static void main(String[] args) { + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + System.out.println("How may I help you?"); + System.out.println(LINE_BREAK); + boolean isExit = false; + Scanner userInput = new Scanner(System.in); + + // begin repeated inputs of commands + while (!isExit) { + String temp = userInput.nextLine(); + if (temp.toLowerCase().equals("bye")) { + // user indicated bye to exit duke + isExit = true; + System.out.println(LINE_BREAK); + System.out.println(temp); + System.out.println(LINE_BREAK); + userInput.close(); + } else { + // user is not exiting duke, echo back the command + System.out.println(LINE_BREAK); + System.out.println(temp); + System.out.println(LINE_BREAK); + } + } } } From 3516d020f2df1595ea094235799e59a23114a3b7 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sat, 24 Aug 2019 23:48:11 +0800 Subject: [PATCH 002/251] Level-2: Add, List duke now allows adding of items to a list enter anything to add to the list type "list" to show list of items --- src/main/java/Duke.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ceda152375..56c62f69c4 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,4 @@ +import java.util.ArrayList; import java.util.Scanner; public class Duke { @@ -13,6 +14,7 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); boolean isExit = false; Scanner userInput = new Scanner(System.in); + ArrayList toDoList = new ArrayList<>(); // begin repeated inputs of commands while (!isExit) { @@ -24,10 +26,20 @@ public static void main(String[] args) { System.out.println(temp); System.out.println(LINE_BREAK); userInput.close(); + } else if (temp.toLowerCase().equals("list")) { + // user indicates to list items, iterate through toDoList and print + int listCount = 1; + System.out.println(LINE_BREAK); + for (String output : toDoList) { + System.out.println(listCount + ". " + output); + listCount += 1; + } + System.out.println(LINE_BREAK); } else { - // user is not exiting duke, echo back the command + // user is not exiting duke, indicate item has been added + toDoList.add(temp); System.out.println(LINE_BREAK); - System.out.println(temp); + System.out.println("added: " + temp); System.out.println(LINE_BREAK); } } From 72cd2cb62b7e321cc58df9a51135cdee8986c0a0 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 00:03:07 +0800 Subject: [PATCH 003/251] Level-3: Mark as Done duke allows for marking as done for items type "done" followed by a valid number in the list to mark the item as done --- src/main/java/Duke.java | 25 ++++++++++++++++++------- src/main/java/Task.java | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 src/main/java/Task.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 56c62f69c4..43d662a951 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,7 +2,7 @@ import java.util.Scanner; public class Duke { - public static final String LINE_BREAK = "___________________________"; + public static final String LINE_BREAK = " ___________________________"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -14,7 +14,7 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); boolean isExit = false; Scanner userInput = new Scanner(System.in); - ArrayList toDoList = new ArrayList<>(); + ArrayList toDoList = new ArrayList<>(); // begin repeated inputs of commands while (!isExit) { @@ -23,23 +23,34 @@ public static void main(String[] args) { // user indicated bye to exit duke isExit = true; System.out.println(LINE_BREAK); - System.out.println(temp); + System.out.println(" " + temp); System.out.println(LINE_BREAK); userInput.close(); } else if (temp.toLowerCase().equals("list")) { // user indicates to list items, iterate through toDoList and print int listCount = 1; System.out.println(LINE_BREAK); - for (String output : toDoList) { - System.out.println(listCount + ". " + output); + for (Task output : toDoList) { + System.out.println(" " + listCount + ". " + output.getStatusIcon() + output.getDescription()); listCount += 1; } System.out.println(LINE_BREAK); + } else if (temp.toLowerCase().contains("done")) { + // user indicates item is done, mark item as done + String[] splitTemp = temp.split(" "); + int index = Integer.parseInt(splitTemp[1]) - 1; // reduce by 1 to match entries in toDoList + toDoList.get(index).setDone(); + Task tempTask = toDoList.get(index); + System.out.println(LINE_BREAK); + System.out.println(" " + "Nice!, I've marked this task as done"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + System.out.println(LINE_BREAK); } else { // user is not exiting duke, indicate item has been added - toDoList.add(temp); + Task newTask = new Task(temp); + toDoList.add(newTask); System.out.println(LINE_BREAK); - System.out.println("added: " + temp); + System.out.println(" added: " + temp); System.out.println(LINE_BREAK); } } diff --git a/src/main/java/Task.java b/src/main/java/Task.java new file mode 100644 index 0000000000..ae1d0ed9ce --- /dev/null +++ b/src/main/java/Task.java @@ -0,0 +1,21 @@ +public class Task { + private String description; + private boolean isDone; + + public Task(String description) { + this.description = description; + this.isDone = false; + } + + public String getStatusIcon() { + return (isDone ? "[\u2713] " : "[\u2718] "); //return tick or X symbols + } + + public String getDescription() { + return description; + } + + public void setDone() { + isDone = true; + } +} From e119ff5a887efa43f2ba757858dcf26c98eac0c6 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 14:16:43 +0800 Subject: [PATCH 004/251] Level-4: Todo, Event, Deadline duke requires specification of task type, between ToDo, Event or Deadline type "todo" followed by the task to add a ToDo type task to the list e.g: todo read book type "event" or "deadline" followed by the event or dealine name and the time it should be done by, split with a "/" to add an Event or Deadline to the list e.g: event meeting / monday e.g: deadline homework / tuesday --- src/main/java/Duke.java | 101 +++++++++++++------- src/main/java/Model_Classes/Deadline.java | 15 +++ src/main/java/Model_Classes/Event.java | 14 +++ src/main/java/{ => Model_Classes}/Task.java | 6 ++ src/main/java/Model_Classes/ToDo.java | 7 ++ 5 files changed, 109 insertions(+), 34 deletions(-) create mode 100644 src/main/java/Model_Classes/Deadline.java create mode 100644 src/main/java/Model_Classes/Event.java rename src/main/java/{ => Model_Classes}/Task.java (79%) create mode 100644 src/main/java/Model_Classes/ToDo.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 43d662a951..4504089758 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,3 +1,8 @@ +import Model_Classes.Deadline; +import Model_Classes.Event; +import Model_Classes.Task; +import Model_Classes.ToDo; + import java.util.ArrayList; import java.util.Scanner; @@ -18,40 +23,68 @@ public static void main(String[] args) { // begin repeated inputs of commands while (!isExit) { - String temp = userInput.nextLine(); - if (temp.toLowerCase().equals("bye")) { - // user indicated bye to exit duke - isExit = true; - System.out.println(LINE_BREAK); - System.out.println(" " + temp); - System.out.println(LINE_BREAK); - userInput.close(); - } else if (temp.toLowerCase().equals("list")) { - // user indicates to list items, iterate through toDoList and print - int listCount = 1; - System.out.println(LINE_BREAK); - for (Task output : toDoList) { - System.out.println(" " + listCount + ". " + output.getStatusIcon() + output.getDescription()); - listCount += 1; - } - System.out.println(LINE_BREAK); - } else if (temp.toLowerCase().contains("done")) { - // user indicates item is done, mark item as done - String[] splitTemp = temp.split(" "); - int index = Integer.parseInt(splitTemp[1]) - 1; // reduce by 1 to match entries in toDoList - toDoList.get(index).setDone(); - Task tempTask = toDoList.get(index); - System.out.println(LINE_BREAK); - System.out.println(" " + "Nice!, I've marked this task as done"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); - System.out.println(LINE_BREAK); - } else { - // user is not exiting duke, indicate item has been added - Task newTask = new Task(temp); - toDoList.add(newTask); - System.out.println(LINE_BREAK); - System.out.println(" added: " + temp); - System.out.println(LINE_BREAK); + String temp = userInput.next().toLowerCase(); + switch (temp) { + case "bye" : + // user indicated bye to exit duke + isExit = true; + System.out.println(LINE_BREAK); + System.out.println(" " + temp); + System.out.println(LINE_BREAK); + userInput.close(); + break; + case "list" : + // user indicates to list items, iterate through toDoList and print + int listCount = 1; + System.out.println(LINE_BREAK); + for (Task output : toDoList) { + System.out.println(" " + listCount + ". " + output.getStatusIcon() + output.getDescription()); + listCount += 1; + } + System.out.println(LINE_BREAK); + break; + case "done" : + String indexString = userInput.next(); + int index = Integer.parseInt(indexString) - 1; + toDoList.get(index).setDone(); + Task tempTask = toDoList.get(index); + System.out.println(LINE_BREAK); + System.out.println(" " + "Nice! I've marked this task as done"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + System.out.println(LINE_BREAK); + break; + case "todo" : + temp = userInput.nextLine(); + ToDo newToDo = new ToDo(temp); + toDoList.add(newToDo); + System.out.println(LINE_BREAK); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newToDo.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + System.out.println(LINE_BREAK); + break; + case "deadline" : + temp = userInput.nextLine(); + String[] splitDeadline = temp.split("/"); + Deadline newDeadline = new Deadline(splitDeadline[0], splitDeadline[1]); + toDoList.add(newDeadline); + System.out.println(LINE_BREAK); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newDeadline.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + System.out.println(LINE_BREAK); + break; + case "event" : + temp = userInput.nextLine(); + String[] splitEvent = temp.split("/"); + Event newEvent = new Event(splitEvent[0], splitEvent[1]); + toDoList.add(newEvent); + System.out.println(LINE_BREAK); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newEvent.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + System.out.println(LINE_BREAK); + break; } } } diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java new file mode 100644 index 0000000000..d141fb8148 --- /dev/null +++ b/src/main/java/Model_Classes/Deadline.java @@ -0,0 +1,15 @@ +package Model_Classes; + +public class Deadline extends Task { + private String by; + + public Deadline(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")"; + } +} diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java new file mode 100644 index 0000000000..69cecf7d02 --- /dev/null +++ b/src/main/java/Model_Classes/Event.java @@ -0,0 +1,14 @@ +package Model_Classes; + +public class Event extends Task { + private String by; + public Event(String description, String by) { + super(description); + this.by = by; + } + + @Override + public String toString() { + return "[E]" + super.toString() + " (by: " + by + ")"; + } +} diff --git a/src/main/java/Task.java b/src/main/java/Model_Classes/Task.java similarity index 79% rename from src/main/java/Task.java rename to src/main/java/Model_Classes/Task.java index ae1d0ed9ce..0a52e28c52 100644 --- a/src/main/java/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,3 +1,5 @@ +package Model_Classes; + public class Task { private String description; private boolean isDone; @@ -18,4 +20,8 @@ public String getDescription() { public void setDone() { isDone = true; } + + public String toString() { + return getStatusIcon() + getDescription(); + } } diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java new file mode 100644 index 0000000000..df4e60882a --- /dev/null +++ b/src/main/java/Model_Classes/ToDo.java @@ -0,0 +1,7 @@ +package Model_Classes; + +public class ToDo extends Task { + public ToDo(String description) { + super(description); + } +} From 2f3f85fe55638bc9732fb0ac36cd33dc493550cf Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 15:06:43 +0800 Subject: [PATCH 005/251] level-5: Error Handling duke now checks for input error by user wrong inputs will result in prompts for correct inputs --- src/main/java/Duke.java | 60 ++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 4504089758..ea1f0be0fd 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -7,7 +7,7 @@ import java.util.Scanner; public class Duke { - public static final String LINE_BREAK = " ___________________________"; + public static final String LINE_BREAK = " -----------------------------------------------------------"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -29,7 +29,7 @@ public static void main(String[] args) { // user indicated bye to exit duke isExit = true; System.out.println(LINE_BREAK); - System.out.println(" " + temp); + System.out.println(" Goodbye! See you next time!"); System.out.println(LINE_BREAK); userInput.close(); break; @@ -44,34 +44,49 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); break; case "done" : - String indexString = userInput.next(); - int index = Integer.parseInt(indexString) - 1; - toDoList.get(index).setDone(); - Task tempTask = toDoList.get(index); + temp = userInput.nextLine(); System.out.println(LINE_BREAK); - System.out.println(" " + "Nice! I've marked this task as done"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + try { + int index = Integer.parseInt(temp.substring(1)) - 1; + toDoList.get(index).setDone(); + Task tempTask = toDoList.get(index); + System.out.println(" " + "Nice! I've marked this task as done"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + } catch (StringIndexOutOfBoundsException S) { + System.out.println(" Sorry, please enter the number of the task completed"); + System.out.println(" Input the description in this manner :\n" + " done 1 "); + } System.out.println(LINE_BREAK); break; case "todo" : temp = userInput.nextLine(); - ToDo newToDo = new ToDo(temp); - toDoList.add(newToDo); System.out.println(LINE_BREAK); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newToDo.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + if (!temp.equals("")) { + ToDo newToDo = new ToDo(temp); + toDoList.add(newToDo); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newToDo.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } else { + System.out.println(" Sorry, please enter the description of the task"); + System.out.println(" Input the description in this manner :\n" + " todo Example Task "); + } System.out.println(LINE_BREAK); break; case "deadline" : temp = userInput.nextLine(); - String[] splitDeadline = temp.split("/"); - Deadline newDeadline = new Deadline(splitDeadline[0], splitDeadline[1]); - toDoList.add(newDeadline); System.out.println(LINE_BREAK); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newDeadline.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + String[] splitDeadline = temp.split("/"); + try { + Deadline newDeadline = new Deadline(splitDeadline[0], splitDeadline[1]); + toDoList.add(newDeadline); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newDeadline.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (ArrayIndexOutOfBoundsException A) { + System.out.println(" Sorry, the description of the deadline is wrongly set"); + System.out.println(" Input the description in this manner :\n" + " deadline Example Task / Date to be finished"); + } System.out.println(LINE_BREAK); break; case "event" : @@ -85,6 +100,13 @@ public static void main(String[] args) { System.out.println(" You now have " + toDoList.size() + " tasks in the list"); System.out.println(LINE_BREAK); break; + default: + // invalid command, prompt for a correct command + System.out.println(LINE_BREAK); + System.out.println(" I'm sorry, I don't understand this command...."); + System.out.println(" Try typing todo, deadline or event followed by the task description!"); + System.out.println(LINE_BREAK); + break; } } } From a2ba4d643e6666524b41f863c59fb5e5852c7764 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 15:15:38 +0800 Subject: [PATCH 006/251] Level-6: delete duke now allows users to delete items in the list type "delete", followed by the number of the task in the list --- src/main/java/Duke.java | 17 +++++++++++++++++ src/main/java/Model_Classes/ToDo.java | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ea1f0be0fd..a91f80c4a6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -52,12 +52,29 @@ public static void main(String[] args) { Task tempTask = toDoList.get(index); System.out.println(" " + "Nice! I've marked this task as done"); System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); } catch (StringIndexOutOfBoundsException S) { System.out.println(" Sorry, please enter the number of the task completed"); System.out.println(" Input the description in this manner :\n" + " done 1 "); } System.out.println(LINE_BREAK); break; + case "delete" : + temp = userInput.nextLine(); + System.out.println(LINE_BREAK); + try { + int index = Integer.parseInt(temp.substring(1)) - 1; + Task tempTask = toDoList.get(index); + System.out.println(" " + "Noted. I've deleted this task"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + toDoList.remove(index); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (StringIndexOutOfBoundsException S) { + System.out.println(" Sorry, please enter the number of the task to be deleted"); + System.out.println(" Input the description in this manner :\n" + " delete 1 "); + } + System.out.println(LINE_BREAK); + break; case "todo" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index df4e60882a..f414649169 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -4,4 +4,8 @@ public class ToDo extends Task { public ToDo(String description) { super(description); } + @Override + public String toString() { + return "[T]" + super.toString(); + } } From a6268d36cc1a9bbdb6d197470b5b5ea77f9969be Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 15:22:01 +0800 Subject: [PATCH 007/251] Level-6: Delete added error handling for wrong indices for delete and done commands --- src/main/java/Duke.java | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a91f80c4a6..a1b644dccd 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -48,11 +48,15 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); try { int index = Integer.parseInt(temp.substring(1)) - 1; - toDoList.get(index).setDone(); - Task tempTask = toDoList.get(index); - System.out.println(" " + "Nice! I've marked this task as done"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + try { + toDoList.get(index).setDone(); + Task tempTask = toDoList.get(index); + System.out.println(" " + "Nice! I've marked this task as done"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (IndexOutOfBoundsException A) { + System.out.println(" The index you've entered does not exist in your list of tasks!"); + } } catch (StringIndexOutOfBoundsException S) { System.out.println(" Sorry, please enter the number of the task completed"); System.out.println(" Input the description in this manner :\n" + " done 1 "); @@ -64,11 +68,15 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); try { int index = Integer.parseInt(temp.substring(1)) - 1; - Task tempTask = toDoList.get(index); - System.out.println(" " + "Noted. I've deleted this task"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); - toDoList.remove(index); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + try { + Task tempTask = toDoList.get(index); + System.out.println(" " + "Noted. I've deleted this task"); + System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); + toDoList.remove(index); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (IndexOutOfBoundsException A){ + System.out.println(" The index you've entered does not exist in your list of tasks!"); + } } catch (StringIndexOutOfBoundsException S) { System.out.println(" Sorry, please enter the number of the task to be deleted"); System.out.println(" Input the description in this manner :\n" + " delete 1 "); From 1d54aa8dfde30a2677515d935a9943a2f733e896 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Sun, 25 Aug 2019 18:08:24 +0800 Subject: [PATCH 008/251] Level-7: Save duke now has persistent memory of items stored in data.txt file in the project --- .gitignore | 3 + data.txt | 1 + src/main/java/Duke.java | 94 ++++++++++++++++++++++++--- src/main/java/Model_Classes/Task.java | 2 + 4 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 data.txt diff --git a/.gitignore b/.gitignore index 99712178bf..430a4d8f76 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ src/main/resources/docs/ .DS_Store *.iml bin/ + +#data files from program +/data.txt/ \ No newline at end of file diff --git a/data.txt b/data.txt new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/data.txt @@ -0,0 +1 @@ + diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a1b644dccd..dea391ed0f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -3,11 +3,12 @@ import Model_Classes.Task; import Model_Classes.ToDo; +import java.io.*; import java.util.ArrayList; import java.util.Scanner; public class Duke { - public static final String LINE_BREAK = " -----------------------------------------------------------"; + private static final String LINE_BREAK = " -----------------------------------------------------------"; public static void main(String[] args) { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -20,6 +21,7 @@ public static void main(String[] args) { boolean isExit = false; Scanner userInput = new Scanner(System.in); ArrayList toDoList = new ArrayList<>(); + readFromFile(toDoList); // begin repeated inputs of commands while (!isExit) { @@ -31,18 +33,21 @@ public static void main(String[] args) { System.out.println(LINE_BREAK); System.out.println(" Goodbye! See you next time!"); System.out.println(LINE_BREAK); + writeToFile(toDoList); userInput.close(); break; + case "list" : // user indicates to list items, iterate through toDoList and print int listCount = 1; System.out.println(LINE_BREAK); for (Task output : toDoList) { - System.out.println(" " + listCount + ". " + output.getStatusIcon() + output.getDescription()); + System.out.println(" " + listCount + ". " + output.toString()); listCount += 1; } System.out.println(LINE_BREAK); break; + case "done" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); @@ -63,6 +68,7 @@ public static void main(String[] args) { } System.out.println(LINE_BREAK); break; + case "delete" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); @@ -83,6 +89,7 @@ public static void main(String[] args) { } System.out.println(LINE_BREAK); break; + case "todo" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); @@ -98,10 +105,12 @@ public static void main(String[] args) { } System.out.println(LINE_BREAK); break; + case "deadline" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); String[] splitDeadline = temp.split("/"); + splitDeadline[1] = splitDeadline[1].replaceAll("\\s+", ""); try { Deadline newDeadline = new Deadline(splitDeadline[0], splitDeadline[1]); toDoList.add(newDeadline); @@ -114,17 +123,25 @@ public static void main(String[] args) { } System.out.println(LINE_BREAK); break; + case "event" : temp = userInput.nextLine(); - String[] splitEvent = temp.split("/"); - Event newEvent = new Event(splitEvent[0], splitEvent[1]); - toDoList.add(newEvent); System.out.println(LINE_BREAK); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newEvent.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + String[] splitEvent = temp.split("/"); + splitEvent[1] = splitEvent[1].replaceAll("\\s+", ""); + try { + Event newEvent = new Event(splitEvent[0], splitEvent[1]); + toDoList.add(newEvent); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newEvent.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (ArrayIndexOutOfBoundsException e) { + System.out.println(" Sorry, the description of the event is wrongly set"); + System.out.println(" Input the description in this manner :\n" + " event Example Task / Date to be finished"); + } System.out.println(LINE_BREAK); break; + default: // invalid command, prompt for a correct command System.out.println(LINE_BREAK); @@ -135,4 +152,65 @@ public static void main(String[] args) { } } } + + public static void writeToFile (ArrayList list) { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt")); + for (Task s : list) { + String done = s.getStatusIcon().equals("[\u2713] ") ? "y" : "n"; + String type = String.valueOf(s.toString().charAt(1)); + String description = s.getDescription(); + String[] tempString = s.toString().split(":"); + String time = ""; + if (!type.equals("T")) { + time = tempString[1].substring(1, tempString[1].length()-1); + } + String out = type + "#" + done + "#" + description + "#" + time; + writer.write(out); + writer.newLine(); + } + writer.close(); + } catch (IOException e) { + e.getStackTrace(); + } + } + + public static void readFromFile (ArrayList taskArrayList) { + try { + BufferedReader bufferedReader = new BufferedReader(new FileReader("data.txt")); + String line = ""; + ArrayList tempList = new ArrayList<>(); + while ((line = bufferedReader.readLine()) != null) { + tempList.add(line); + } + for (String list : tempList) { + String[] temp = list.split("#", 4); + switch (temp[0]) { + case "T" : + ToDo tempToDo = new ToDo(temp[2]); + if (temp[1].equals("y")) { + tempToDo.setDone(); + } + taskArrayList.add(tempToDo); + break; + case "E" : + Event tempEvent = new Event(temp[2], temp[3]); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); + break; + case "D" : + Deadline tempDeadline = new Deadline(temp[2], temp[3]); + if (temp[1].equals("y")) { + tempDeadline.setDone(); + } + taskArrayList.add(tempDeadline); + break; + } + } + } catch (IOException e) { + e.getStackTrace(); + } + } } diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 0a52e28c52..d2c3e4fda9 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,5 +1,6 @@ package Model_Classes; + public class Task { private String description; private boolean isDone; @@ -24,4 +25,5 @@ public void setDone() { public String toString() { return getStatusIcon() + getDescription(); } + } From 288ee4415d5416dcff64391ce3390f11ab35d36d Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 27 Aug 2019 22:29:57 +0800 Subject: [PATCH 009/251] Level-8: Date Duke now formats your dates to english specific format of date to be entered is dd/mm/yyyy hh:mm example: 12/12/2019 18:00 becomes: Thu Dec 2019 6:00PM --- .gitignore | 3 +- data.txt | 1 - src/main/java/Duke.java | 68 +++++++++++++++++------ src/main/java/Model_Classes/Deadline.java | 5 ++ src/main/java/Model_Classes/Event.java | 2 +- 5 files changed, 58 insertions(+), 21 deletions(-) delete mode 100644 data.txt diff --git a/.gitignore b/.gitignore index 430a4d8f76..9f38af3ca8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ src/main/resources/docs/ bin/ #data files from program -/data.txt/ \ No newline at end of file +/data.txt/ +data.txt diff --git a/data.txt b/data.txt deleted file mode 100644 index 8b13789179..0000000000 --- a/data.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index dea391ed0f..a5686a9a15 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -4,19 +4,25 @@ import Model_Classes.ToDo; import java.io.*; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.Scanner; +import java.util.spi.AbstractResourceBundleProvider; public class Duke { private static final String LINE_BREAK = " -----------------------------------------------------------"; - public static void main(String[] args) { + public static void main(String[] args) throws ParseException { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); - System.out.println("How may I help you?"); + System.out.println("How may I serve you?"); + //System.out.println("~~ type 'help' to show commands ~~"); System.out.println(LINE_BREAK); boolean isExit = false; Scanner userInput = new Scanner(System.in); @@ -109,17 +115,30 @@ public static void main(String[] args) { case "deadline" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); - String[] splitDeadline = temp.split("/"); - splitDeadline[1] = splitDeadline[1].replaceAll("\\s+", ""); + String[] splitDeadline = temp.split("/", 2); try { - Deadline newDeadline = new Deadline(splitDeadline[0], splitDeadline[1]); - toDoList.add(newDeadline); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newDeadline.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + try { + Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(splitDeadline[1]); + DateFormat dateFormat = new SimpleDateFormat("EE MMM yyyy h:mma"); + String by = dateFormat.format(date); + try { + Deadline newDeadline = new Deadline(splitDeadline[0], by); + toDoList.add(newDeadline); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newDeadline.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (IllegalArgumentException e) { + System.out.println(" please input date format as dd/mm/yyyy HH:mm"); + System.out.println(" example: deadline meeting/30/12/2019 18:00"); + } + } catch (ParseException e) { + System.out.println(" please input date format as dd/mm/yyyy HH:mm"); + System.out.println(" example: deadline meeting/30/12/2019 18:00"); + } } catch (ArrayIndexOutOfBoundsException A) { System.out.println(" Sorry, the description of the deadline is wrongly set"); - System.out.println(" Input the description in this manner :\n" + " deadline Example Task / Date to be finished"); + System.out.println(" Input the description in this manner :\n" + " deadline Example Task/dd/mm/yyyy HH:mm"); + System.out.println(" example: deadline project/29/02/2000 18:00"); } System.out.println(LINE_BREAK); break; @@ -127,17 +146,30 @@ public static void main(String[] args) { case "event" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); - String[] splitEvent = temp.split("/"); - splitEvent[1] = splitEvent[1].replaceAll("\\s+", ""); + String[] splitEvent = temp.split("/", 2); try { - Event newEvent = new Event(splitEvent[0], splitEvent[1]); - toDoList.add(newEvent); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newEvent.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + try { + Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(splitEvent[1]); + DateFormat dateFormat = new SimpleDateFormat("EE MMM yyyy h:mma"); + String by = dateFormat.format(date); + try { + Event newEvent = new Event(splitEvent[0], by); + toDoList.add(newEvent); + System.out.println(" " + "Got it. I've added this task to the list"); + System.out.println(" " + newEvent.toString()); + System.out.println(" You now have " + toDoList.size() + " tasks in the list"); + } catch (ArrayIndexOutOfBoundsException e) { + System.out.println(" Sorry, the description of the event is wrongly set"); + System.out.println(" Input the description in this manner :\n" + " event Example Task / Date to be finished"); + } + } catch (ParseException e) { + System.out.println(" please input date format as dd/mm/yyyy HH:mm"); + System.out.println(" example: deadline meeting/30/12/2019 18:00"); + } } catch (ArrayIndexOutOfBoundsException e) { System.out.println(" Sorry, the description of the event is wrongly set"); - System.out.println(" Input the description in this manner :\n" + " event Example Task / Date to be finished"); + System.out.println(" Input the description in this manner :\n" + " event Example Task/dd/mm/yyyy HH:mm"); + System.out.println(" example: event project/29/02/2000 18:00"); } System.out.println(LINE_BREAK); break; diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index d141fb8148..12dcf243e8 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -1,5 +1,10 @@ package Model_Classes; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + public class Deadline extends Task { private String by; diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 69cecf7d02..edffd4ac4b 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -9,6 +9,6 @@ public Event(String description, String by) { @Override public String toString() { - return "[E]" + super.toString() + " (by: " + by + ")"; + return "[E]" + super.toString() + " (on: " + by + ")"; } } From 960dd34a19d23f88282861669ee5d8d4678f17bd Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 27 Aug 2019 22:43:52 +0800 Subject: [PATCH 010/251] Level-8: Date bugfix for date entry into data.txt file --- src/main/java/Duke.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a5686a9a15..13f798c880 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -192,7 +192,7 @@ public static void writeToFile (ArrayList list) { String done = s.getStatusIcon().equals("[\u2713] ") ? "y" : "n"; String type = String.valueOf(s.toString().charAt(1)); String description = s.getDescription(); - String[] tempString = s.toString().split(":"); + String[] tempString = s.toString().split("[(]"); String time = ""; if (!type.equals("T")) { time = tempString[1].substring(1, tempString[1].length()-1); From 96a1bd13843ff5f00396d54abeed4c1541cbb757 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 27 Aug 2019 22:50:56 +0800 Subject: [PATCH 011/251] Level-9: Find duke now looks for keywords the user specifies inside the to do list type "find" followed by the keyword e.g: find homework --- src/main/java/Duke.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 13f798c880..bddd4cfdd1 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -54,6 +54,22 @@ public static void main(String[] args) throws ParseException { System.out.println(LINE_BREAK); break; + case "find" : + temp = userInput.nextLine(); + System.out.println(LINE_BREAK); + int queryCount = 1; + for (Task query : toDoList) { + if (query.toString().toLowerCase().contains(temp)) { + System.out.println(" " + queryCount + ". " + query.toString()); + } + queryCount += 1; + } + if (queryCount == 1) { + System.out.println(" This search returned nothing.... Try searching with a new keyword!"); + } + System.out.println(LINE_BREAK); + break; + case "done" : temp = userInput.nextLine(); System.out.println(LINE_BREAK); From 3bb7e1c9da0b0968b8fd7017da6dd60611aea608 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 27 Aug 2019 23:11:07 +0800 Subject: [PATCH 012/251] added tooltip for unkown commands --- src/main/java/Duke.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index bddd4cfdd1..3380066120 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -194,7 +194,8 @@ public static void main(String[] args) throws ParseException { // invalid command, prompt for a correct command System.out.println(LINE_BREAK); System.out.println(" I'm sorry, I don't understand this command...."); - System.out.println(" Try typing todo, deadline or event followed by the task description!"); + System.out.println(" Try typing todo, deadline or event followed by the task description to add tasks to your todo list"); + System.out.println(" Type list, find, done, delete to perform operations on your todo list"); System.out.println(LINE_BREAK); break; } From fc0571e2c4a9b0b188c1310d3dd6f9f597453498 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 12 Sep 2019 17:11:46 +0800 Subject: [PATCH 013/251] Abstracted into different classes for more OOP --- build.gradle | 2 +- .../java/CustomExceptions/DukeException.java | 7 + src/main/java/Duke.java | 283 +++++------------- src/main/java/Model_Classes/Deadline.java | 10 +- src/main/java/Model_Classes/Event.java | 12 +- src/main/java/Model_Classes/Parser.java | 47 +++ src/main/java/Model_Classes/Storage.java | 87 ++++++ src/main/java/Model_Classes/Task.java | 5 +- src/main/java/Model_Classes/TaskList.java | 44 +++ src/main/java/Model_Classes/ToDo.java | 2 + src/main/java/Model_Classes/Ui.java | 55 ++++ 11 files changed, 335 insertions(+), 219 deletions(-) create mode 100644 src/main/java/CustomExceptions/DukeException.java create mode 100644 src/main/java/Model_Classes/Parser.java create mode 100644 src/main/java/Model_Classes/Storage.java create mode 100644 src/main/java/Model_Classes/TaskList.java create mode 100644 src/main/java/Model_Classes/Ui.java diff --git a/build.gradle b/build.gradle index 37f9ec886a..5ca4f90444 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ repositories { application { // Change this to your main class. - mainClassName = "Duke.class" + mainClassName = "Duke" } run { diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java new file mode 100644 index 0000000000..84832a4c21 --- /dev/null +++ b/src/main/java/CustomExceptions/DukeException.java @@ -0,0 +1,7 @@ +package CustomExceptions; + +public class DukeException extends Exception { + public DukeException(){ + System.out.println(); + } +} diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 3380066120..16e565929f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,9 +1,8 @@ -import Model_Classes.Deadline; -import Model_Classes.Event; -import Model_Classes.Task; -import Model_Classes.ToDo; +import CustomExceptions.DukeException; +import Model_Classes.*; import java.io.*; +import java.lang.reflect.Array; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -13,253 +12,111 @@ import java.util.spi.AbstractResourceBundleProvider; public class Duke { - private static final String LINE_BREAK = " -----------------------------------------------------------"; - public static void main(String[] args) throws ParseException { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - System.out.println("How may I serve you?"); - //System.out.println("~~ type 'help' to show commands ~~"); - System.out.println(LINE_BREAK); - boolean isExit = false; - Scanner userInput = new Scanner(System.in); - ArrayList toDoList = new ArrayList<>(); - readFromFile(toDoList); + private Ui ui; + private Storage storage; + private TaskList taskList; + private Parser parser; - // begin repeated inputs of commands + public Duke() { + ui = new Ui(); + ui.startUp(); + storage = new Storage(); + parser = new Parser(); + try { + taskList = new TaskList(storage.loadFile()); + } catch (DukeException e) { + ui.showLoadError(); + ArrayList emptyList = new ArrayList<>(); + taskList = new TaskList(emptyList); + } + } + + public void run() { + boolean isExit = false; while (!isExit) { - String temp = userInput.next().toLowerCase(); - switch (temp) { - case "bye" : - // user indicated bye to exit duke - isExit = true; - System.out.println(LINE_BREAK); - System.out.println(" Goodbye! See you next time!"); - System.out.println(LINE_BREAK); - writeToFile(toDoList); - userInput.close(); - break; + String command = parser.getCommand(); + switch (command) { case "list" : - // user indicates to list items, iterate through toDoList and print - int listCount = 1; - System.out.println(LINE_BREAK); - for (Task output : toDoList) { - System.out.println(" " + listCount + ". " + output.toString()); - listCount += 1; - } - System.out.println(LINE_BREAK); + ui.showList(); + taskList.list(); break; - case "find" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); - int queryCount = 1; - for (Task query : toDoList) { - if (query.toString().toLowerCase().contains(temp)) { - System.out.println(" " + queryCount + ". " + query.toString()); - } - queryCount += 1; - } - if (queryCount == 1) { - System.out.println(" This search returned nothing.... Try searching with a new keyword!"); + case "bye" : + isExit = true; + try { + storage.writeFile(taskList.currentList()); + } catch (DukeException e) { + ui.showWriteError(); } - System.out.println(LINE_BREAK); break; case "done" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); try { - int index = Integer.parseInt(temp.substring(1)) - 1; - try { - toDoList.get(index).setDone(); - Task tempTask = toDoList.get(index); - System.out.println(" " + "Nice! I've marked this task as done"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); - } catch (IndexOutOfBoundsException A) { - System.out.println(" The index you've entered does not exist in your list of tasks!"); - } - } catch (StringIndexOutOfBoundsException S) { - System.out.println(" Sorry, please enter the number of the task completed"); - System.out.println(" Input the description in this manner :\n" + " done 1 "); + ui.showDone(); + taskList.done(parser.getIndex()); + } catch (DukeException e) { + ui.showIndexError(); } - System.out.println(LINE_BREAK); break; case "delete" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); try { - int index = Integer.parseInt(temp.substring(1)) - 1; - try { - Task tempTask = toDoList.get(index); - System.out.println(" " + "Noted. I've deleted this task"); - System.out.println(" " + tempTask.getStatusIcon() + " " + tempTask.getDescription()); - toDoList.remove(index); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); - } catch (IndexOutOfBoundsException A){ - System.out.println(" The index you've entered does not exist in your list of tasks!"); - } - } catch (StringIndexOutOfBoundsException S) { - System.out.println(" Sorry, please enter the number of the task to be deleted"); - System.out.println(" Input the description in this manner :\n" + " delete 1 "); + int index = parser.getIndex(); + taskList.delete(index); + ui.showDeleted(index); + } catch (DukeException e) { + ui.showIndexError(); } - System.out.println(LINE_BREAK); + break; + + case "find" : + ui.showFind(); + taskList.find(parser.getKey()); break; case "todo" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); - if (!temp.equals("")) { - ToDo newToDo = new ToDo(temp); - toDoList.add(newToDo); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newToDo.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); - } else { - System.out.println(" Sorry, please enter the description of the task"); - System.out.println(" Input the description in this manner :\n" + " todo Example Task "); + try { + ui.showAdd(); + ToDo temp = new ToDo(parser.getDescription()); + taskList.add(temp); + } catch (DukeException e) { + ui.showEmptyDescriptionError(); } - System.out.println(LINE_BREAK); break; case "deadline" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); - String[] splitDeadline = temp.split("/", 2); try { - try { - Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(splitDeadline[1]); - DateFormat dateFormat = new SimpleDateFormat("EE MMM yyyy h:mma"); - String by = dateFormat.format(date); - try { - Deadline newDeadline = new Deadline(splitDeadline[0], by); - toDoList.add(newDeadline); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newDeadline.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); - } catch (IllegalArgumentException e) { - System.out.println(" please input date format as dd/mm/yyyy HH:mm"); - System.out.println(" example: deadline meeting/30/12/2019 18:00"); - } - } catch (ParseException e) { - System.out.println(" please input date format as dd/mm/yyyy HH:mm"); - System.out.println(" example: deadline meeting/30/12/2019 18:00"); - } - } catch (ArrayIndexOutOfBoundsException A) { - System.out.println(" Sorry, the description of the deadline is wrongly set"); - System.out.println(" Input the description in this manner :\n" + " deadline Example Task/dd/mm/yyyy HH:mm"); - System.out.println(" example: deadline project/29/02/2000 18:00"); + ui.showAdd(); + String[] deadlineArray = parser.getDescriptionWithDate(); + Date by = parser.formatDate(deadlineArray[1]); + Deadline temp = new Deadline(deadlineArray[0], by); + taskList.add(temp); + } catch (DukeException e) { + ui.showDateError(); } - System.out.println(LINE_BREAK); break; case "event" : - temp = userInput.nextLine(); - System.out.println(LINE_BREAK); - String[] splitEvent = temp.split("/", 2); try { - try { - Date date = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(splitEvent[1]); - DateFormat dateFormat = new SimpleDateFormat("EE MMM yyyy h:mma"); - String by = dateFormat.format(date); - try { - Event newEvent = new Event(splitEvent[0], by); - toDoList.add(newEvent); - System.out.println(" " + "Got it. I've added this task to the list"); - System.out.println(" " + newEvent.toString()); - System.out.println(" You now have " + toDoList.size() + " tasks in the list"); - } catch (ArrayIndexOutOfBoundsException e) { - System.out.println(" Sorry, the description of the event is wrongly set"); - System.out.println(" Input the description in this manner :\n" + " event Example Task / Date to be finished"); - } - } catch (ParseException e) { - System.out.println(" please input date format as dd/mm/yyyy HH:mm"); - System.out.println(" example: deadline meeting/30/12/2019 18:00"); - } - } catch (ArrayIndexOutOfBoundsException e) { - System.out.println(" Sorry, the description of the event is wrongly set"); - System.out.println(" Input the description in this manner :\n" + " event Example Task/dd/mm/yyyy HH:mm"); - System.out.println(" example: event project/29/02/2000 18:00"); + ui.showAdd(); + String[] eventArray = parser.getDescriptionWithDate(); + Date by = parser.formatDate(eventArray[1]); + Event temp = new Event(eventArray[0], by); + taskList.add(temp); + } catch (DukeException e) { + ui.showDateError(); } - System.out.println(LINE_BREAK); break; default: - // invalid command, prompt for a correct command - System.out.println(LINE_BREAK); - System.out.println(" I'm sorry, I don't understand this command...."); - System.out.println(" Try typing todo, deadline or event followed by the task description to add tasks to your todo list"); - System.out.println(" Type list, find, done, delete to perform operations on your todo list"); - System.out.println(LINE_BREAK); + ui.showCommandError(); break; } } } - public static void writeToFile (ArrayList list) { - try { - BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt")); - for (Task s : list) { - String done = s.getStatusIcon().equals("[\u2713] ") ? "y" : "n"; - String type = String.valueOf(s.toString().charAt(1)); - String description = s.getDescription(); - String[] tempString = s.toString().split("[(]"); - String time = ""; - if (!type.equals("T")) { - time = tempString[1].substring(1, tempString[1].length()-1); - } - String out = type + "#" + done + "#" + description + "#" + time; - writer.write(out); - writer.newLine(); - } - writer.close(); - } catch (IOException e) { - e.getStackTrace(); - } - } - - public static void readFromFile (ArrayList taskArrayList) { - try { - BufferedReader bufferedReader = new BufferedReader(new FileReader("data.txt")); - String line = ""; - ArrayList tempList = new ArrayList<>(); - while ((line = bufferedReader.readLine()) != null) { - tempList.add(line); - } - for (String list : tempList) { - String[] temp = list.split("#", 4); - switch (temp[0]) { - case "T" : - ToDo tempToDo = new ToDo(temp[2]); - if (temp[1].equals("y")) { - tempToDo.setDone(); - } - taskArrayList.add(tempToDo); - break; - case "E" : - Event tempEvent = new Event(temp[2], temp[3]); - if (temp[1].equals("y")) { - tempEvent.setDone(); - } - taskArrayList.add(tempEvent); - break; - case "D" : - Deadline tempDeadline = new Deadline(temp[2], temp[3]); - if (temp[1].equals("y")) { - tempDeadline.setDone(); - } - taskArrayList.add(tempDeadline); - break; - } - } - } catch (IOException e) { - e.getStackTrace(); - } + public static void main(String[] args) { + new Duke().run(); } } diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 12dcf243e8..f6cbb67d99 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -1,14 +1,16 @@ package Model_Classes; +import CustomExceptions.DukeException; + import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Deadline extends Task { - private String by; + private Date by; - public Deadline(String description, String by) { + public Deadline (String description, Date by) { super(description); this.by = by; } @@ -17,4 +19,8 @@ public Deadline(String description, String by) { public String toString() { return "[D]" + super.toString() + " (by: " + by + ")"; } + + public Date getBy() { + return by; + } } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index edffd4ac4b..5ec87d1b0e 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -1,8 +1,12 @@ package Model_Classes; +import CustomExceptions.DukeException; + +import java.util.Date; + public class Event extends Task { - private String by; - public Event(String description, String by) { + private Date by; + public Event(String description, Date by) { super(description); this.by = by; } @@ -11,4 +15,8 @@ public Event(String description, String by) { public String toString() { return "[E]" + super.toString() + " (on: " + by + ")"; } + + public Date getBy() { + return by; + } } diff --git a/src/main/java/Model_Classes/Parser.java b/src/main/java/Model_Classes/Parser.java new file mode 100644 index 0000000000..d56c3c8bd2 --- /dev/null +++ b/src/main/java/Model_Classes/Parser.java @@ -0,0 +1,47 @@ +package Model_Classes; + +import CustomExceptions.DukeException; + +import java.io.IOException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Scanner; + +public class Parser { + private Scanner scanner = new Scanner(System.in); + public Parser() { + } + public String getCommand() { + String command = scanner.next().toLowerCase(); + return command; + } + public Integer getIndex() { + String temp = scanner.nextLine().trim(); + int index = Integer.parseInt(temp); + return index; + } + public String getDescription() throws DukeException { + String temp = scanner.nextLine().trim(); + if (temp.equals("")) { + throw new DukeException(); + } + return temp; + } + public String[] getDescriptionWithDate() { + String[] array = scanner.nextLine().trim().split("/", 2); + return array; + } + public Date formatDate(String by) throws DukeException{ + try { + return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(by); + } catch (ParseException e) { + throw new DukeException(); + } + } + public String getKey() { + String key = scanner.nextLine().toLowerCase(); + return key; + } +} diff --git a/src/main/java/Model_Classes/Storage.java b/src/main/java/Model_Classes/Storage.java new file mode 100644 index 0000000000..13822f518c --- /dev/null +++ b/src/main/java/Model_Classes/Storage.java @@ -0,0 +1,87 @@ +package Model_Classes; + +import CustomExceptions.DukeException; + +import java.io.*; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class Storage { + private Parser parser; + public Storage() { + } + + public ArrayList loadFile() throws DukeException { + ArrayList taskArrayList = new ArrayList<>(); + try { + BufferedReader bufferedReader = new BufferedReader(new FileReader("data.txt")); + String line = ""; + ArrayList tempList = new ArrayList<>(); + while ((line = bufferedReader.readLine()) != null) { + tempList.add(line); + } + parser = new Parser(); + for (String list : tempList) { + String[] temp = list.split("#", 4); + switch (temp[0]) { + case "T": + ToDo tempToDo = new ToDo(temp[2]); + if (temp[1].equals("y")) { + tempToDo.setDone(); + } + taskArrayList.add(tempToDo); + break; + case "E": + Date by = parser.formatDate(temp[3]); + Event tempEvent = new Event(temp[2], by); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); + break; + case "D": + Date deadlineBy = parser.formatDate(temp[3]); + Deadline tempDeadline = new Deadline(temp[2], deadlineBy); + if (temp[1].equals("y")) { + tempDeadline.setDone(); + } + taskArrayList.add(tempDeadline); + break; + } + } + } catch (IOException e) { + throw new DukeException(); + } + return (taskArrayList); + } + + public void writeFile(ArrayList list) throws DukeException { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt")); + for (Task s : list) { + String done = s.getDone() ? "y" : "n"; + String type = String.valueOf(s.toString().charAt(1)); + String description = s.getDescription(); + String[] tempString = s.toString().split("\\s+"); + String time = ""; + if (!type.equals("T")) { + tempString[8] = tempString[8].substring(0, tempString[8].length()-1); + Date date = new SimpleDateFormat("MMM").parse(tempString[4]); + DateFormat dateFormat = new SimpleDateFormat("MM"); + String dateOut = dateFormat.format(date); + String[] timeArray = tempString[6].split(":", 3); + time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1]; + } + String out = type + "#" + done + "#" + description + "#" + time; + writer.write(out); + writer.newLine(); + } + writer.close(); + } catch (IOException | ParseException e) { + throw new DukeException(); + } + } +} diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index d2c3e4fda9..6cdcb23a72 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,7 +1,7 @@ package Model_Classes; -public class Task { +public class Task{ private String description; private boolean isDone; @@ -9,6 +9,9 @@ public Task(String description) { this.description = description; this.isDone = false; } + public boolean getDone() { + return isDone; + } public String getStatusIcon() { return (isDone ? "[\u2713] " : "[\u2718] "); //return tick or X symbols diff --git a/src/main/java/Model_Classes/TaskList.java b/src/main/java/Model_Classes/TaskList.java new file mode 100644 index 0000000000..1943ea11df --- /dev/null +++ b/src/main/java/Model_Classes/TaskList.java @@ -0,0 +1,44 @@ +package Model_Classes; + +import CustomExceptions.DukeException; + +import java.awt.desktop.SystemSleepEvent; +import java.util.ArrayList; + +public class TaskList { + private ArrayList tasks; + public TaskList(ArrayList tasks) { + this.tasks = tasks; + } + public void add(Task newTask) { + tasks.add(newTask); + } + public void delete(int index) throws DukeException { + tasks.remove(index - 1); + } + public void list() { + int listCount = 1; + for (Task output : tasks) { + System.out.println(" " + listCount + ". " + output.toString()); + listCount += 1; + } + } + public void done(int index) throws DukeException{ + tasks.get(index - 1).setDone(); + } + public void find (String key) { + int queryCount = 1; + for (Task query : tasks) { + if (query.toString().toLowerCase().contains(key)) { + System.out.println(" " + queryCount + ". " + query.toString()); + } + queryCount += 1; + } + if (queryCount == 1) { + System.out.println(" Your search returned no results.... Try searching with another keyword!"); + } + } + public ArrayList currentList() { + return tasks; + } +} diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index f414649169..8ca32c82f4 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -1,5 +1,7 @@ package Model_Classes; +import CustomExceptions.DukeException; + public class ToDo extends Task { public ToDo(String description) { super(description); diff --git a/src/main/java/Model_Classes/Ui.java b/src/main/java/Model_Classes/Ui.java new file mode 100644 index 0000000000..38001f2055 --- /dev/null +++ b/src/main/java/Model_Classes/Ui.java @@ -0,0 +1,55 @@ +package Model_Classes; + +public class Ui { + public Ui () { + } + public void startUp() { + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + System.out.println("How may I serve you?"); + } + public void showLoadError () { + System.out.println("Error in loading data file, initialising empty task list..."); + } + public void showDeleted (int index) { + System.out.println("Deleted task!"); + } + public void showFind () { + System.out.println("Searching for item in task list..."); + } + public void showDone () { + System.out.println("Completed task! Updating task list..."); + } + public void showAdd () { + System.out.println("Adding new task to list..."); + } + public void showBye() { + System.out.println("Goodbye!"); + } + public void showList() { + System.out.println("Listing tasks in your task list..."); + } + public void showWriteError() { + System.out.println("Error in writing file, cancelling write process..."); + } + public void showIndexError() { + System.out.println("Index you've entered doesn't exist, try with another index!"); + } + public void showCommandError() { + System.out.println("Sorry, I don't understand this command..."); + System.out.println("Try typing todo, deadline or event followed by the task description to add tasks to your todo list"); + System.out.println(" Type list, find, done, delete to perform operations on your todo list"); + } + public void showEmptyDescriptionError() { + System.out.println("Looks like your task descriptor is empty! Please add an item description!"); + } + public void showDateError() { + System.out.println("please input date format as dd/mm/yyyy HH:mm"); + System.out.println("example: deadline meeting/30/12/2019 18:00"); + System.out.println("example: event concert/30/12/2019 18:00"); + } +} From 1cb19563e1fc646b9283ed36c13605e3b6d9e174 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 18 Sep 2019 21:15:12 +0800 Subject: [PATCH 014/251] Added text ui testing --- text-ui-test/EXPECTED.txt | 8 ++++++++ text-ui-test/input.txt | 1 + text-ui-test/runtest.bat | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 text-ui-test/EXPECTED.txt create mode 100644 text-ui-test/input.txt create mode 100644 text-ui-test/runtest.bat diff --git a/text-ui-test/EXPECTED.txt b/text-ui-test/EXPECTED.txt new file mode 100644 index 0000000000..c7c91965c1 --- /dev/null +++ b/text-ui-test/EXPECTED.txt @@ -0,0 +1,8 @@ +Hello from + ____ _ +| _ \ _ _| | _____ +| | | | | | | |/ / _ \ +| |_| | |_| | < __/ +|____/ \__,_|_|\_\___| + +How may I serve you? \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt new file mode 100644 index 0000000000..b023018cab --- /dev/null +++ b/text-ui-test/input.txt @@ -0,0 +1 @@ +bye diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat new file mode 100644 index 0000000000..cce4731c3b --- /dev/null +++ b/text-ui-test/runtest.bat @@ -0,0 +1,21 @@ +@ECHO OFF + +REM create bin directory if it doesn't exist +if not exist ..\bin mkdir ..\bin + +REM delete output from previous run +del ACTUAL.TXT + +REM compile the code into the bin folder +javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\Duke.java +IF ERRORLEVEL 1 ( + echo ********** BUILD FAILURE ********** + exit /b 1 +) +REM no error here, errorlevel == 0 + +REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT +java -classpath ..\bin Duke < input.txt > ACTUAL.TXT + +REM compare the output to the expected output +FC ACTUAL.TXT EXPECTED.TXT \ No newline at end of file From 5405db8a20b5d7af240c834b805c93460fd8b308 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 18 Sep 2019 22:24:10 +0800 Subject: [PATCH 015/251] Added javadoc for classes --- src/main/java/Duke.java | 12 +++++ src/main/java/Model_Classes/Deadline.java | 18 +++++-- src/main/java/Model_Classes/Event.java | 19 +++++-- src/main/java/Model_Classes/Parser.java | 43 +++++++++++++++ src/main/java/Model_Classes/Storage.java | 22 ++++++++ src/main/java/Model_Classes/Task.java | 29 +++++++++- src/main/java/Model_Classes/TaskList.java | 43 +++++++++++++++ src/main/java/Model_Classes/ToDo.java | 12 +++++ src/main/java/Model_Classes/Ui.java | 65 +++++++++++++++++++++-- 9 files changed, 251 insertions(+), 12 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 16e565929f..012fb9ddd6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -11,12 +11,19 @@ import java.util.Scanner; import java.util.spi.AbstractResourceBundleProvider; +/** + * main class of the Duke program + */ public class Duke { private Ui ui; private Storage storage; private TaskList taskList; private Parser parser; + /** + * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run + * Also loads the ArrayList of tasks from the data.txt file + */ public Duke() { ui = new Ui(); ui.startUp(); @@ -31,6 +38,9 @@ public Duke() { } } + /** + * Deals with the operation flow of Duke. + */ public void run() { boolean isExit = false; while (!isExit) { @@ -46,8 +56,10 @@ public void run() { isExit = true; try { storage.writeFile(taskList.currentList()); + ui.showBye(); } catch (DukeException e) { ui.showWriteError(); + ui.showBye(); } break; diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index f6cbb67d99..7b45b2d8ef 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -7,20 +7,30 @@ import java.text.SimpleDateFormat; import java.util.Date; +/** + * An object class representing types of tasks with deadlines. + * Stores the description and when the task should be done by. + */ public class Deadline extends Task { private Date by; + /** + * Constructor for the Deadline object. + * Takes in inputs for description and date/time the tasks should be done by. + * @param description Description of the task + * @param by The time the tasks should be done by. + */ public Deadline (String description, Date by) { super(description); this.by = by; } + /** + * Returns the full description including the deadline of the task. + * @return A string indicating the task type, description, and when it should be done by. + */ @Override public String toString() { return "[D]" + super.toString() + " (by: " + by + ")"; } - - public Date getBy() { - return by; - } } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 5ec87d1b0e..85d120234f 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -3,20 +3,31 @@ import CustomExceptions.DukeException; import java.util.Date; - +/** + * An object class representing types of tasks that are events. + * Stores the description and when the event happens. + */ public class Event extends Task { private Date by; + + /** + * Constructor for Event object + * Takes in inputs for description of the event and the time the event occurs + * @param description Description of the event + * @param by Time the event happens + */ public Event(String description, Date by) { super(description); this.by = by; } + /** + * Returns a string that has the full description of the vent including the occurrence time + * @return A string indicating the task type, description and the occurrence of the task + */ @Override public String toString() { return "[E]" + super.toString() + " (on: " + by + ")"; } - public Date getBy() { - return by; - } } diff --git a/src/main/java/Model_Classes/Parser.java b/src/main/java/Model_Classes/Parser.java index d56c3c8bd2..e65661d6bb 100644 --- a/src/main/java/Model_Classes/Parser.java +++ b/src/main/java/Model_Classes/Parser.java @@ -9,19 +9,43 @@ import java.util.Date; import java.util.Scanner; +/** + * A class for handling all parsing for Duke. Makes sure that inputs by the user + * are properly formatted as parameters for other classes. + */ public class Parser { private Scanner scanner = new Scanner(System.in); + + /** + * Constructor for the Parser object + */ public Parser() { } + + /** + * Returns the command that the user has given Duke. + * @return command The command given by the user to Duke. + */ public String getCommand() { String command = scanner.next().toLowerCase(); return command; } + + /** + * Returns the index number requested by the user for commands like 'done' and 'deleted' + * @return index Index the user wishes to perform operations on. + */ public Integer getIndex() { String temp = scanner.nextLine().trim(); int index = Integer.parseInt(temp); return index; } + + /** + * Returns the description the user inputs for tasks. Will not accept empty descriptions + * @return temp The description that the user has specified for the task. Cannot be null. + * @throws DukeException If temp is empty. + */ public String getDescription() throws DukeException { String temp = scanner.nextLine().trim(); if (temp.equals("")) { @@ -29,10 +53,24 @@ public String getDescription() throws DukeException { } return temp; } + + /** + * Returns an array of strings that stores the raw description and date Strings to be stored in Duke. + * @return array An array of String containing the description and date information. Index 0 stores the description, + * index 1 stores the date String. + */ public String[] getDescriptionWithDate() { String[] array = scanner.nextLine().trim().split("/", 2); return array; } + + /** + * Returns a Date object from a raw date that is stored as a String. + * If the format of the input string is unacceptable, will throw a DukeException and will not return anything. + * @param by Input String containing the date information. + * @return A Date object containing the appropriately formatted date. + * @throws DukeException If by is not in dd/MM/yyyy HH:mm format + */ public Date formatDate(String by) throws DukeException{ try { return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(by); @@ -40,6 +78,11 @@ public Date formatDate(String by) throws DukeException{ throw new DukeException(); } } + + /** + * Returns the keyword to be searched for. + * @return key A string of the keyword to be searched for + */ public String getKey() { String key = scanner.nextLine().toLowerCase(); return key; diff --git a/src/main/java/Model_Classes/Storage.java b/src/main/java/Model_Classes/Storage.java index 13822f518c..bb155830bd 100644 --- a/src/main/java/Model_Classes/Storage.java +++ b/src/main/java/Model_Classes/Storage.java @@ -9,11 +9,25 @@ import java.util.ArrayList; import java.util.Date; +/** + * Performs storage operations such as writing and reading from a .txt file + */ public class Storage { private Parser parser; + + /** + * Constructor for the Storage class + */ public Storage() { } + /** + * Returns an ArrayList of Tasks from a .txt file. + * Extracts the relevant information from the data.txt file in Duke to create the tasks. + * Populates an ArrayList with these created tasks. + * @return taskArrayList An ArrayList of Tasks that is created from the .txt file. + * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. + */ public ArrayList loadFile() throws DukeException { ArrayList taskArrayList = new ArrayList<>(); try { @@ -58,6 +72,14 @@ public ArrayList loadFile() throws DukeException { return (taskArrayList); } + /** + * Rewrites the data.txt file with a task list. + * Formats all task information into a style that the loadFile() method is able to understand + * Writes all the formatted information into a data.txt file for storage + * Will not write any information if the there are mistakes in the ArrayList information. + * @param list ArrayList of Tasks to be stored on data.txt + * @throws DukeException If there are parsing errors in the ArrayList. + */ public void writeFile(ArrayList list) throws DukeException { try { BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt")); diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 6cdcb23a72..8ef7e1c926 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,30 +1,57 @@ package Model_Classes; - +/** + * Parent class for all other types of tasks + */ public class Task{ private String description; private boolean isDone; + /** + * Constructor for the task object. takes in the description of the task + * @param description Description of the task + */ public Task(String description) { this.description = description; this.isDone = false; } + + /** + * returns whether the task has been done + * @return isDone The state of completion of the task. + */ public boolean getDone() { return isDone; } + /** + * Returns the status of the completion of the task. + * shows a tick if done, and a cross if not done. + * @return A String showing a tick or X symbol. + */ public String getStatusIcon() { return (isDone ? "[\u2713] " : "[\u2718] "); //return tick or X symbols } + /** + * Returns the description of the task + * @return description Description of the task + */ public String getDescription() { return description; } + /** + * Sets the task to be done + */ public void setDone() { isDone = true; } + /** + * Returns both the status icon and the description of the task. + * @return + */ public String toString() { return getStatusIcon() + getDescription(); } diff --git a/src/main/java/Model_Classes/TaskList.java b/src/main/java/Model_Classes/TaskList.java index 1943ea11df..bbefd03d6c 100644 --- a/src/main/java/Model_Classes/TaskList.java +++ b/src/main/java/Model_Classes/TaskList.java @@ -5,17 +5,42 @@ import java.awt.desktop.SystemSleepEvent; import java.util.ArrayList; +/** + * A class to perform operations on the task list in Duke + */ public class TaskList { private ArrayList tasks; + + /** + * Constructor for the TaskList class. + * takes in an ArrayList as the list of tasks to be operated on. + * @param tasks ArrayList of Task objects to be operated on. + */ public TaskList(ArrayList tasks) { this.tasks = tasks; } + + /** + * Adds a new task into the task list + * @param newTask Task object to be added into the list of tasks + */ public void add(Task newTask) { tasks.add(newTask); } + + /** + * Deletes a task from the list. Task to be deleted is specified by the index that is input into this method + * Will not perform any operations if the index does not exist in the list. + * @param index Index of task in the list to be deleted + * @throws DukeException If the index cannot be found in the list of tasks. + */ public void delete(int index) throws DukeException { tasks.remove(index - 1); } + + /** + * Lists out all tasks in the current list in the order they were added into the list. + */ public void list() { int listCount = 1; for (Task output : tasks) { @@ -23,9 +48,22 @@ public void list() { listCount += 1; } } + + /** + * Sets a task in the list as 'done' to mark that the user has completed the task. + * Will not perform any operations if the index does not exist in the list. + * @param index Index of the task to be marked as done. + * @throws DukeException If the index cannot be found in the list of tasks. + */ public void done(int index) throws DukeException{ tasks.get(index - 1).setDone(); } + + /** + * Searches for tasks that has the specified keyword and prints them to the console. + * Will prompt that the search has no results if keyword does not exist in the list. + * @param key Keyword of the search. + */ public void find (String key) { int queryCount = 1; for (Task query : tasks) { @@ -38,6 +76,11 @@ public void find (String key) { System.out.println(" Your search returned no results.... Try searching with another keyword!"); } } + + /** + * Returns the entire ArrayList of tasks + * @return tasks The ArrayList of Task objects that is being operated on. + */ public ArrayList currentList() { return tasks; } diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index 8ca32c82f4..d6ab009c25 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -2,10 +2,22 @@ import CustomExceptions.DukeException; +/** + * An object class that stores the description of tasks that needs to be done with no deadline. + */ public class ToDo extends Task { + /** + * Constructor of the class. Takes in the description of the task + * @param description Description of the task. + */ public ToDo(String description) { super(description); } + + /** + * Returns a string with the full description of the task + * @return A string with the task type and its description. + */ @Override public String toString() { return "[T]" + super.toString(); diff --git a/src/main/java/Model_Classes/Ui.java b/src/main/java/Model_Classes/Ui.java index 38001f2055..8093ed9255 100644 --- a/src/main/java/Model_Classes/Ui.java +++ b/src/main/java/Model_Classes/Ui.java @@ -1,8 +1,18 @@ package Model_Classes; +/** + * class to tell user about errors and completion of operations + */ public class Ui { + /** + * Constructor for Ui class + */ public Ui () { } + + /** + * Shows the startup logo for Duke + */ public void startUp() { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" @@ -12,41 +22,90 @@ public void startUp() { System.out.println("Hello from\n" + logo); System.out.println("How may I serve you?"); } + + /** + * Prints an error message telling the user that the data file cannot be loaded and an empty list is generated instead + */ public void showLoadError () { System.out.println("Error in loading data file, initialising empty task list..."); } + + /** + * Prints a message telling the user that the task at the index has been deleted. + * @param index Index of task to be deleted. + */ public void showDeleted (int index) { - System.out.println("Deleted task!"); + System.out.println("Deleted task number " + index + " !"); } + + /** + * Tells the user that the search operation is executing + */ public void showFind () { System.out.println("Searching for item in task list..."); } + + /** + * Tells the user that the task of index has been done and the list has been updated. + */ public void showDone () { - System.out.println("Completed task! Updating task list..."); + System.out.println("Completed task! Your task list has been updated"); } + + /** + * tells the user that a task has been added into the list + */ public void showAdd () { - System.out.println("Adding new task to list..."); + System.out.println("Your task has been added into the list!"); } + + /** + * tells the user goodbye + */ public void showBye() { System.out.println("Goodbye!"); } + + /** + * tells the user that Duke is listing the tasks + */ public void showList() { System.out.println("Listing tasks in your task list..."); } + + /** + * tells the user that there is an error in writing the data.txt file. + */ public void showWriteError() { System.out.println("Error in writing file, cancelling write process..."); } + + /** + * tells the user that the index specified doesn't exist + */ public void showIndexError() { System.out.println("Index you've entered doesn't exist, try with another index!"); } + + /** + * Tells the user that an invalid command has been input into Duke. + */ public void showCommandError() { System.out.println("Sorry, I don't understand this command..."); System.out.println("Try typing todo, deadline or event followed by the task description to add tasks to your todo list"); System.out.println(" Type list, find, done, delete to perform operations on your todo list"); } + + /** + * reminds user to put description for tasks + */ public void showEmptyDescriptionError() { System.out.println("Looks like your task descriptor is empty! Please add an item description!"); } + + /** + * tells user how to format date due to error in date format + */ public void showDateError() { System.out.println("please input date format as dd/mm/yyyy HH:mm"); System.out.println("example: deadline meeting/30/12/2019 18:00"); From 55c1ee529238aabf1fd1f9d21ab47388aa35f151 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 18 Sep 2019 22:56:11 +0800 Subject: [PATCH 016/251] Added some JUnit testing --- build.gradle | 7 +++++++ test/java/DeadlineTest.java | 14 ++++++++++++++ test/java/EventTest.java | 13 +++++++++++++ test/java/ToDoTest.java | 11 +++++++++++ 4 files changed, 45 insertions(+) create mode 100644 test/java/DeadlineTest.java create mode 100644 test/java/EventTest.java create mode 100644 test/java/ToDoTest.java diff --git a/build.gradle b/build.gradle index 5ca4f90444..e3274bbf89 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,13 @@ application { // Change this to your main class. mainClassName = "Duke" } +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter:5.5.0' +} + +test { + useJUnitPlatform() +} run { standardInput = System.in diff --git a/test/java/DeadlineTest.java b/test/java/DeadlineTest.java new file mode 100644 index 0000000000..bb2fb04f40 --- /dev/null +++ b/test/java/DeadlineTest.java @@ -0,0 +1,14 @@ +public class DeadlineTest { + private static final Parser parser = new Parser(); + private static final Date by = parser.formatDate("22/12/2019 18:00"); + private static final Deadline DEADLINE1 = new Deadline("homework", by); + private static final Deadline DEADLINE2 = new Deadline("", by); + + public static Deadline deadline1() { + return DEADLINE1; + } + + public static Deadline deadline2() { + return DEADLINE2; + } +} \ No newline at end of file diff --git a/test/java/EventTest.java b/test/java/EventTest.java new file mode 100644 index 0000000000..06ffcc5958 --- /dev/null +++ b/test/java/EventTest.java @@ -0,0 +1,13 @@ +public class EventTest { + private static final Parser parser = new Parser(); + private static final Date by = parser.formatDate("22/12/2019 18:00"); + private static final Event EVENT1= new Event("homework", by); + private static final Event EVENT2= new Event("", by); + + public static Event event1() { + return EVENT1; + } + public static Event event2() { + return EVENT2; + } +} \ No newline at end of file diff --git a/test/java/ToDoTest.java b/test/java/ToDoTest.java new file mode 100644 index 0000000000..0601608209 --- /dev/null +++ b/test/java/ToDoTest.java @@ -0,0 +1,11 @@ +public class ToDoTest { + private static final ToDo TEST1 = new ToDo("testing JUnit"); + private static final ToDo TEST2 = new ToDo(""); + + public static ToDo test1() { + return TEST1; + } + public static ToDo test2() { + return TEST2; + } +} \ No newline at end of file From 281f62e5f0cd725237c0091eb751780339a18780 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 18 Sep 2019 23:03:17 +0800 Subject: [PATCH 017/251] refactored to organise code --- src/main/java/Duke.java | 11 ++++------- .../java/{Model_Classes => Operations}/Parser.java | 2 +- .../java/{Model_Classes => Operations}/Storage.java | 3 ++- .../java/{Model_Classes => Operations}/TaskList.java | 3 ++- src/main/java/{Model_Classes => Operations}/Ui.java | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) rename src/main/java/{Model_Classes => Operations}/Parser.java (99%) rename src/main/java/{Model_Classes => Operations}/Storage.java (99%) rename src/main/java/{Model_Classes => Operations}/TaskList.java (98%) rename src/main/java/{Model_Classes => Operations}/Ui.java (99%) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 012fb9ddd6..89514b0a8c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,15 +1,12 @@ import CustomExceptions.DukeException; import Model_Classes.*; +import Operations.Parser; +import Operations.Storage; +import Operations.TaskList; +import Operations.Ui; -import java.io.*; -import java.lang.reflect.Array; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.Scanner; -import java.util.spi.AbstractResourceBundleProvider; /** * main class of the Duke program diff --git a/src/main/java/Model_Classes/Parser.java b/src/main/java/Operations/Parser.java similarity index 99% rename from src/main/java/Model_Classes/Parser.java rename to src/main/java/Operations/Parser.java index e65661d6bb..dcc978940c 100644 --- a/src/main/java/Model_Classes/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -1,4 +1,4 @@ -package Model_Classes; +package Operations; import CustomExceptions.DukeException; diff --git a/src/main/java/Model_Classes/Storage.java b/src/main/java/Operations/Storage.java similarity index 99% rename from src/main/java/Model_Classes/Storage.java rename to src/main/java/Operations/Storage.java index bb155830bd..1a84077110 100644 --- a/src/main/java/Model_Classes/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -1,6 +1,7 @@ -package Model_Classes; +package Operations; import CustomExceptions.DukeException; +import Model_Classes.*; import java.io.*; import java.text.DateFormat; diff --git a/src/main/java/Model_Classes/TaskList.java b/src/main/java/Operations/TaskList.java similarity index 98% rename from src/main/java/Model_Classes/TaskList.java rename to src/main/java/Operations/TaskList.java index bbefd03d6c..aef0751b8c 100644 --- a/src/main/java/Model_Classes/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -1,6 +1,7 @@ -package Model_Classes; +package Operations; import CustomExceptions.DukeException; +import Model_Classes.Task; import java.awt.desktop.SystemSleepEvent; import java.util.ArrayList; diff --git a/src/main/java/Model_Classes/Ui.java b/src/main/java/Operations/Ui.java similarity index 99% rename from src/main/java/Model_Classes/Ui.java rename to src/main/java/Operations/Ui.java index 8093ed9255..fa0cc219cf 100644 --- a/src/main/java/Model_Classes/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -1,4 +1,4 @@ -package Model_Classes; +package Operations; /** * class to tell user about errors and completion of operations From c86198c7d21fb0ab7b85cb0a1a2c2c9eaabf74ec Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 19 Sep 2019 20:19:45 +0800 Subject: [PATCH 018/251] added JUnit testing --- test/java/DeadlineTest.java | 27 ++++++++++++++++++++------- test/java/EventTest.java | 29 ++++++++++++++++++++++------- test/java/ToDoTest.java | 18 ++++++++++-------- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/test/java/DeadlineTest.java b/test/java/DeadlineTest.java index bb2fb04f40..978e746e58 100644 --- a/test/java/DeadlineTest.java +++ b/test/java/DeadlineTest.java @@ -1,14 +1,27 @@ +package java; + +import CustomExceptions.DukeException; +import Model_Classes.Deadline; +import Operations.Parser; +import org.junit.jupiter.api.Test; +import java.util.Date; + +import static org.junit.jupiter.api.Assertions.assertEquals; + public class DeadlineTest { private static final Parser parser = new Parser(); - private static final Date by = parser.formatDate("22/12/2019 18:00"); - private static final Deadline DEADLINE1 = new Deadline("homework", by); - private static final Deadline DEADLINE2 = new Deadline("", by); + private static Date by; - public static Deadline deadline1() { - return DEADLINE1; + static { + try { + by = parser.formatDate("22/12/2019 18:00"); + } catch (DukeException e) { + e.printStackTrace(); + } } - public static Deadline deadline2() { - return DEADLINE2; + @Test + public void testStringConversion() { + assertEquals("[D][\u2718] homework (by: Sun Dec 22 18:00:00 SGT 2019)", new Deadline("homework", by).toString()); } } \ No newline at end of file diff --git a/test/java/EventTest.java b/test/java/EventTest.java index 06ffcc5958..ec336410be 100644 --- a/test/java/EventTest.java +++ b/test/java/EventTest.java @@ -1,13 +1,28 @@ +package java; + +import CustomExceptions.DukeException; +import Model_Classes.Deadline; +import Operations.Parser; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Date; + + + public class EventTest { private static final Parser parser = new Parser(); - private static final Date by = parser.formatDate("22/12/2019 18:00"); - private static final Event EVENT1= new Event("homework", by); - private static final Event EVENT2= new Event("", by); + private static Date by; - public static Event event1() { - return EVENT1; + static { + try { + by = parser.formatDate("22/12/2019 18:00"); + } catch (DukeException e) { + e.printStackTrace(); + } } - public static Event event2() { - return EVENT2; + + @Test + public void testStringConversion() { + assertEquals("[D][\u2718] homework (by: Sun Dec 22 18:00:00 SGT 2019)", new Deadline("homework", by).toString()); } } \ No newline at end of file diff --git a/test/java/ToDoTest.java b/test/java/ToDoTest.java index 0601608209..1bc240d84f 100644 --- a/test/java/ToDoTest.java +++ b/test/java/ToDoTest.java @@ -1,11 +1,13 @@ -public class ToDoTest { - private static final ToDo TEST1 = new ToDo("testing JUnit"); - private static final ToDo TEST2 = new ToDo(""); +package java; - public static ToDo test1() { - return TEST1; - } - public static ToDo test2() { - return TEST2; +import Model_Classes.ToDo; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + + +public class ToDoTest { + @Test + public void testStringConversion() { + assertEquals("[T][\u2718] homework", new ToDo("homework").toString()); } } \ No newline at end of file From a870f9b536a910c18b8e0a75f8418e310e3cbdad Mon Sep 17 00:00:00 2001 From: sprsadist Date: Sat, 21 Sep 2019 13:33:40 +0800 Subject: [PATCH 019/251] Added Tasktype enum --- src/main/java/Duke.java | 21 +++++++++++---------- src/main/java/Enums/Tasktype.java | 5 +++++ 2 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 src/main/java/Enums/Tasktype.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 89514b0a8c..da4d1e6fd4 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,4 +1,5 @@ import CustomExceptions.DukeException; +import Enums.Tasktype; import Model_Classes.*; import Operations.Parser; import Operations.Storage; @@ -42,14 +43,14 @@ public void run() { boolean isExit = false; while (!isExit) { String command = parser.getCommand(); - switch (command) { - - case "list" : + Tasktype type = Tasktype.valueOf(command); + switch (type) { + case list : ui.showList(); taskList.list(); break; - case "bye" : + case bye : isExit = true; try { storage.writeFile(taskList.currentList()); @@ -60,7 +61,7 @@ public void run() { } break; - case "done" : + case done : try { ui.showDone(); taskList.done(parser.getIndex()); @@ -69,7 +70,7 @@ public void run() { } break; - case "delete" : + case delete : try { int index = parser.getIndex(); taskList.delete(index); @@ -79,12 +80,12 @@ public void run() { } break; - case "find" : + case find : ui.showFind(); taskList.find(parser.getKey()); break; - case "todo" : + case todo : try { ui.showAdd(); ToDo temp = new ToDo(parser.getDescription()); @@ -94,7 +95,7 @@ public void run() { } break; - case "deadline" : + case deadline : try { ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); @@ -106,7 +107,7 @@ public void run() { } break; - case "event" : + case event : try { ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java new file mode 100644 index 0000000000..1a9646dfdb --- /dev/null +++ b/src/main/java/Enums/Tasktype.java @@ -0,0 +1,5 @@ +package Enums; + +public enum Tasktype { + todo, list, deadline, event, done, delete, find, bye +} From 7a948a4c4f085c799427d07047de5f840713be09 Mon Sep 17 00:00:00 2001 From: sprsadist Date: Sat, 21 Sep 2019 13:39:49 +0800 Subject: [PATCH 020/251] Added Savetype enum --- src/main/java/Enums/Savetype.java | 5 +++++ src/main/java/Operations/Storage.java | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 src/main/java/Enums/Savetype.java diff --git a/src/main/java/Enums/Savetype.java b/src/main/java/Enums/Savetype.java new file mode 100644 index 0000000000..4169edd8e7 --- /dev/null +++ b/src/main/java/Enums/Savetype.java @@ -0,0 +1,5 @@ +package Enums; + +public enum Savetype { + T, E, D +} diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 1a84077110..b8ac68788e 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -1,6 +1,7 @@ package Operations; import CustomExceptions.DukeException; +import Enums.Savetype; import Model_Classes.*; import java.io.*; @@ -41,15 +42,16 @@ public ArrayList loadFile() throws DukeException { parser = new Parser(); for (String list : tempList) { String[] temp = list.split("#", 4); - switch (temp[0]) { - case "T": + Savetype type = Savetype.valueOf(temp[0]); + switch (type) { + case T : ToDo tempToDo = new ToDo(temp[2]); if (temp[1].equals("y")) { tempToDo.setDone(); } taskArrayList.add(tempToDo); break; - case "E": + case E : Date by = parser.formatDate(temp[3]); Event tempEvent = new Event(temp[2], by); if (temp[1].equals("y")) { @@ -57,7 +59,7 @@ public ArrayList loadFile() throws DukeException { } taskArrayList.add(tempEvent); break; - case "D": + case D : Date deadlineBy = parser.formatDate(temp[3]); Deadline tempDeadline = new Deadline(temp[2], deadlineBy); if (temp[1].equals("y")) { From c6fbc62f3038796a4cffcc3a516a9ec680b8cd34 Mon Sep 17 00:00:00 2001 From: sprsadist Date: Sat, 21 Sep 2019 15:57:11 +0800 Subject: [PATCH 021/251] Check for Time clashes --- .../java/CustomExceptions/DukeException.java | 12 ++++++++++++ src/main/java/Duke.java | 16 +++++++++------- src/main/java/Enums/ExceptionType.java | 5 +++++ src/main/java/Model_Classes/Event.java | 15 ++++++++++----- src/main/java/Operations/CheckAnomaly.java | 18 ++++++++++++++++++ src/main/java/Operations/TaskList.java | 4 ++-- 6 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 src/main/java/Enums/ExceptionType.java create mode 100644 src/main/java/Operations/CheckAnomaly.java diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 84832a4c21..322d963550 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -1,7 +1,19 @@ package CustomExceptions; +import Enums.ExceptionType; + public class DukeException extends Exception { + public String anomaly = "Anomaly Detected"; + public DukeException(){ System.out.println(); } + + public DukeException(ExceptionType type){ + switch(type) { + default: + System.out.println(anomaly); + break; + } + } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index da4d1e6fd4..c15456acee 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,10 +1,8 @@ import CustomExceptions.DukeException; +import Enums.ExceptionType; import Enums.Tasktype; import Model_Classes.*; -import Operations.Parser; -import Operations.Storage; -import Operations.TaskList; -import Operations.Ui; +import Operations.*; import java.util.ArrayList; import java.util.Date; @@ -111,9 +109,13 @@ public void run() { try { ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); - Date by = parser.formatDate(eventArray[1]); - Event temp = new Event(eventArray[0], by); - taskList.add(temp); + Date at = parser.formatDate(eventArray[1]); + if(CheckAnomaly.checkTime(at, TaskList.currentList())){ + Event temp = new Event(eventArray[0], at); + taskList.add(temp); + } else { + throw new DukeException(ExceptionType.timeClash); + } } catch (DukeException e) { ui.showDateError(); } diff --git a/src/main/java/Enums/ExceptionType.java b/src/main/java/Enums/ExceptionType.java new file mode 100644 index 0000000000..078eab30d9 --- /dev/null +++ b/src/main/java/Enums/ExceptionType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum ExceptionType { + timeClash +} diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 85d120234f..3e77b319f8 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -1,6 +1,9 @@ package Model_Classes; import CustomExceptions.DukeException; +import Enums.ExceptionType; +import Operations.CheckAnomaly; +import Operations.TaskList; import java.util.Date; /** @@ -8,26 +11,28 @@ * Stores the description and when the event happens. */ public class Event extends Task { - private Date by; + private Date at; /** * Constructor for Event object * Takes in inputs for description of the event and the time the event occurs * @param description Description of the event - * @param by Time the event happens + * @param at Time the event happens */ - public Event(String description, Date by) { + public Event(String description, Date at) { super(description); - this.by = by; + this.at = at; } + public Date checkDate() { return this.at; } + /** * Returns a string that has the full description of the vent including the occurrence time * @return A string indicating the task type, description and the occurrence of the task */ @Override public String toString() { - return "[E]" + super.toString() + " (on: " + by + ")"; + return "[E]" + super.toString() + " (on: " + at + ")"; } } diff --git a/src/main/java/Operations/CheckAnomaly.java b/src/main/java/Operations/CheckAnomaly.java new file mode 100644 index 0000000000..d033b2b858 --- /dev/null +++ b/src/main/java/Operations/CheckAnomaly.java @@ -0,0 +1,18 @@ +package Operations; + +import Model_Classes.Event; +import Model_Classes.Task; + +import java.util.ArrayList; +import java.util.Date; + +public class CheckAnomaly { + public static Boolean checkTime(Date at, ArrayList tasks){ + for( int i = 0; i tasks; + private static ArrayList tasks; /** * Constructor for the TaskList class. @@ -82,7 +82,7 @@ public void find (String key) { * Returns the entire ArrayList of tasks * @return tasks The ArrayList of Task objects that is being operated on. */ - public ArrayList currentList() { + public static ArrayList currentList() { return tasks; } } From 3d71229fe6c154f7bd9c0b54ac9a09d845e11ec3 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Mon, 23 Sep 2019 20:09:11 +0800 Subject: [PATCH 022/251] Completed fixed tasks duration --- src/main/java/Duke.java | 23 ++++++++++++++++++ src/main/java/Enums/Tasktype.java | 2 +- .../java/Model_Classes/FixedDuration.java | 17 +++++++++++++ src/main/java/Operations/Parser.java | 24 ++++++++++++++++++- 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Model_Classes/FixedDuration.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c15456acee..a0d12d30d2 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -6,6 +6,8 @@ import java.util.ArrayList; import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; /** * main class of the Duke program @@ -109,7 +111,9 @@ public void run() { try { ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); + System.out.println(eventArray[1]); Date at = parser.formatDate(eventArray[1]); + System.out.println(at); if(CheckAnomaly.checkTime(at, TaskList.currentList())){ Event temp = new Event(eventArray[0], at); taskList.add(temp); @@ -121,6 +125,25 @@ public void run() { } break; + case time : + ui.showAdd(); + String[] ti = parser.getDescriptionWithDuration(); + String[] ar = parser.getDuration(ti); +// String[] ar = ti[0].trim().split("/", 2); + int duration = Integer.parseInt(ar[1]); + FixedDuration fixedDuration = new FixedDuration(ar[0], ar[1]); + taskList.add(fixedDuration); + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + " is completed"); + timer.cancel(); + } + } + RemindTask rt = new RemindTask(); + timer.schedule(rt, duration * 1000); + break; + default: ui.showCommandError(); break; diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java index 1a9646dfdb..68f7602e4a 100644 --- a/src/main/java/Enums/Tasktype.java +++ b/src/main/java/Enums/Tasktype.java @@ -1,5 +1,5 @@ package Enums; public enum Tasktype { - todo, list, deadline, event, done, delete, find, bye + todo, list, deadline, event, done, delete, find, bye, time } diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java new file mode 100644 index 0000000000..81cc93fc38 --- /dev/null +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -0,0 +1,17 @@ +package Model_Classes; + +public class FixedDuration extends Task { + private String duration; + + + public FixedDuration(String name, String duration) { + super(name); + this.duration = duration; + } + + + @Override + public String toString() { + return "[TT] " + super.toString() + " (done in: " + duration + " seconds )"; + } +} diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index dcc978940c..e9c7f9ba0e 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -60,7 +60,28 @@ public String getDescription() throws DukeException { * index 1 stores the date String. */ public String[] getDescriptionWithDate() { - String[] array = scanner.nextLine().trim().split("/", 2); + String[] array = scanner.nextLine().split("/", 2); + return array; + } + + /** + * Returns an array with the task description stored as well as the duration of the task + * @return array An array of Strings with description and duration both in index 0 of the array + */ + + public String[] getDescriptionWithDuration() { + String[] array = scanner.nextLine().split(" ", 1); + return array; + } + + /** + * Takes in the array containing both the description as well as the duration and splitting + * them up + * @param ar An array containing botht the description and the duration + * @return array An array containing the description in the 0th index and the duration in the 1st index + */ + public String[] getDuration(String[] ar) { + String[] array = ar[0].trim().split("/", 2); return array; } @@ -79,6 +100,7 @@ public Date formatDate(String by) throws DukeException{ } } + /** * Returns the keyword to be searched for. * @return key A string of the keyword to be searched for From d62b62ebdb717622501797e48bf1a1ea64276049 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 24 Sep 2019 21:54:07 +0800 Subject: [PATCH 023/251] intermediate step to recurring lists --- recurringData.txt | 0 src/main/java/Duke.java | 33 +++++++--- .../Enums/{Savetype.java => SaveType.java} | 2 +- src/main/java/Enums/TaskType.java | 5 ++ src/main/java/Enums/Tasktype.java | 5 -- src/main/java/Model_Classes/Task.java | 4 ++ src/main/java/Operations/Parser.java | 1 + src/main/java/Operations/RecurHandler.java | 63 +++++++++++++++++++ src/main/java/Operations/Storage.java | 12 ++-- src/main/java/Operations/Ui.java | 16 +++++ 10 files changed, 121 insertions(+), 20 deletions(-) create mode 100644 recurringData.txt rename src/main/java/Enums/{Savetype.java => SaveType.java} (56%) create mode 100644 src/main/java/Enums/TaskType.java delete mode 100644 src/main/java/Enums/Tasktype.java create mode 100644 src/main/java/Operations/RecurHandler.java diff --git a/recurringData.txt b/recurringData.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index c15456acee..51b0490981 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,6 +1,6 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; -import Enums.Tasktype; +import Enums.TaskType; import Model_Classes.*; import Operations.*; @@ -13,9 +13,9 @@ public class Duke { private Ui ui; private Storage storage; - private TaskList taskList; + private TaskList taskList, recurringTaskList; private Parser parser; - + private RecurHandler recurHandler; /** * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run * Also loads the ArrayList of tasks from the data.txt file @@ -26,7 +26,15 @@ public Duke() { storage = new Storage(); parser = new Parser(); try { - taskList = new TaskList(storage.loadFile()); + recurringTaskList = new TaskList(storage.loadFile("recurringData.txt")); + } catch (DukeException e) { + ui.showLoadError(); + ArrayList emptyList = new ArrayList<>(); + recurringTaskList = new TaskList(emptyList); + } + recurHandler = new RecurHandler(recurringTaskList); + try { + taskList = new TaskList(storage.loadFile("data.txt")); } catch (DukeException e) { ui.showLoadError(); ArrayList emptyList = new ArrayList<>(); @@ -41,7 +49,7 @@ public void run() { boolean isExit = false; while (!isExit) { String command = parser.getCommand(); - Tasktype type = Tasktype.valueOf(command); + TaskType type = TaskType.valueOf(command); switch (type) { case list : ui.showList(); @@ -51,12 +59,16 @@ public void run() { case bye : isExit = true; try { - storage.writeFile(taskList.currentList()); - ui.showBye(); + storage.writeFile(TaskList.currentList(), "data.txt"); } catch (DukeException e) { ui.showWriteError(); - ui.showBye(); } + try { + storage.writeFile(TaskList.currentList(), "recurringData.txt"); + } catch (DukeException e) { + ui.showWriteError(); + } + ui.showBye(); break; case done : @@ -121,6 +133,11 @@ public void run() { } break; + case recurring: + ui.promptRecurringActions(); + + break; + default: ui.showCommandError(); break; diff --git a/src/main/java/Enums/Savetype.java b/src/main/java/Enums/SaveType.java similarity index 56% rename from src/main/java/Enums/Savetype.java rename to src/main/java/Enums/SaveType.java index 4169edd8e7..ec975740e1 100644 --- a/src/main/java/Enums/Savetype.java +++ b/src/main/java/Enums/SaveType.java @@ -1,5 +1,5 @@ package Enums; -public enum Savetype { +public enum SaveType { T, E, D } diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java new file mode 100644 index 0000000000..b4b844c38e --- /dev/null +++ b/src/main/java/Enums/TaskType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum TaskType { + todo, list, deadline, event, done, delete, find, bye, recurring +} diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java deleted file mode 100644 index 1a9646dfdb..0000000000 --- a/src/main/java/Enums/Tasktype.java +++ /dev/null @@ -1,5 +0,0 @@ -package Enums; - -public enum Tasktype { - todo, list, deadline, event, done, delete, find, bye -} diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 8ef7e1c926..345bd17a42 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -48,6 +48,10 @@ public void setDone() { isDone = true; } + public void setNotDone() { + isDone = false; + } + /** * Returns both the status icon and the description of the task. * @return diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index dcc978940c..f5ea4e823c 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -87,4 +87,5 @@ public String getKey() { String key = scanner.nextLine().toLowerCase(); return key; } + } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java new file mode 100644 index 0000000000..9f25befd40 --- /dev/null +++ b/src/main/java/Operations/RecurHandler.java @@ -0,0 +1,63 @@ +package Operations; + +import CustomExceptions.DukeException; +import Enums.ExceptionType; +import Enums.TaskType; +import Model_Classes.Deadline; +import Model_Classes.Event; +import Model_Classes.ToDo; + +import java.util.ArrayList; +import java.util.Date; + +public class RecurHandler { + private TaskList recurringList; + private Ui ui = new Ui(); + private Parser parser = new Parser(); + public RecurHandler(TaskList recurringList) { + this.recurringList = recurringList; + } + + public void addBasedOnOperation(String command) { + TaskType taskType = TaskType.valueOf(command); + switch (taskType) { + case todo: + try { + ui.showAdd(); + ToDo temp = new ToDo(parser.getDescription()); + recurringList.add(temp); + } catch (DukeException e) { + ui.showEmptyDescriptionError(); + } + break; + + case deadline: + try { + ui.showAdd(); + String[] deadlineArray = parser.getDescriptionWithDate(); + Date by = parser.formatDate(deadlineArray[1]); + Deadline temp = new Deadline(deadlineArray[0], by); + recurringList.add(temp); + } catch (DukeException e) { + ui.showDateError(); + } + break; + + case event: + try { + ui.showAdd(); + String[] eventArray = parser.getDescriptionWithDate(); + Date at = parser.formatDate(eventArray[1]); + if(CheckAnomaly.checkTime(at, TaskList.currentList())){ + Event temp = new Event(eventArray[0], at); + recurringList.add(temp); + } else { + throw new DukeException(ExceptionType.timeClash); + } + } catch (DukeException e) { + ui.showDateError(); + } + break; + } + } +} diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index b8ac68788e..217b83ce3d 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -1,7 +1,7 @@ package Operations; import CustomExceptions.DukeException; -import Enums.Savetype; +import Enums.SaveType; import Model_Classes.*; import java.io.*; @@ -30,10 +30,10 @@ public Storage() { * @return taskArrayList An ArrayList of Tasks that is created from the .txt file. * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. */ - public ArrayList loadFile() throws DukeException { + public ArrayList loadFile(String fileName) throws DukeException { ArrayList taskArrayList = new ArrayList<>(); try { - BufferedReader bufferedReader = new BufferedReader(new FileReader("data.txt")); + BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName)); String line = ""; ArrayList tempList = new ArrayList<>(); while ((line = bufferedReader.readLine()) != null) { @@ -42,7 +42,7 @@ public ArrayList loadFile() throws DukeException { parser = new Parser(); for (String list : tempList) { String[] temp = list.split("#", 4); - Savetype type = Savetype.valueOf(temp[0]); + SaveType type = SaveType.valueOf(temp[0]); switch (type) { case T : ToDo tempToDo = new ToDo(temp[2]); @@ -83,9 +83,9 @@ public ArrayList loadFile() throws DukeException { * @param list ArrayList of Tasks to be stored on data.txt * @throws DukeException If there are parsing errors in the ArrayList. */ - public void writeFile(ArrayList list) throws DukeException { + public void writeFile(ArrayList list, String fileName) throws DukeException { try { - BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt")); + BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); for (Task s : list) { String done = s.getDone() ? "y" : "n"; String type = String.valueOf(s.toString().charAt(1)); diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index fa0cc219cf..5e7b3a18f7 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -111,4 +111,20 @@ public void showDateError() { System.out.println("example: deadline meeting/30/12/2019 18:00"); System.out.println("example: event concert/30/12/2019 18:00"); } + + public void promptRecurringActions() { + System.out.println("You are now accessing and performing operations on the Recurring Task List"); + System.out.println("Tasks that appear here will appear based on when you want it to appear again"); + System.out.println("Please input your intended action\n"); + System.out.println("To add a new task into the recurring task list,\ninput a new tasks as you would with any other task," + + " followed by recurrence by month or day of the week, separated by a '#'."); + System.out.println("\tE.g : todo buy groceries#monday"); + System.out.println("\tE.g : todo buy groceries#month"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00#monday"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00#month"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00#monday"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00#month"); + System.out.println("\tTo delete a task in the recurring task list, input 'delete'."); + System.out.println("\tTo perform other operations in the recurring task list, input 'find' or 'list'"); + } } From dc7d3953d32b4526aca7eacec2b52c3c74c8d5f2 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 24 Sep 2019 21:55:07 +0800 Subject: [PATCH 024/251] editted gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 9f38af3ca8..1096feb854 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ bin/ #data files from program /data.txt/ data.txt +/recurringData.txt/ +recurringData.txt From 95e7ce92028e7f206f4a935fd44b1bb613535ce5 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Tue, 24 Sep 2019 22:09:38 +0800 Subject: [PATCH 025/251] Complete Fixed d --- src/main/java/Duke.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a0d12d30d2..68a600a8d8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -129,14 +129,13 @@ public void run() { ui.showAdd(); String[] ti = parser.getDescriptionWithDuration(); String[] ar = parser.getDuration(ti); -// String[] ar = ti[0].trim().split("/", 2); int duration = Integer.parseInt(ar[1]); FixedDuration fixedDuration = new FixedDuration(ar[0], ar[1]); taskList.add(fixedDuration); Timer timer = new Timer(); class RemindTask extends TimerTask { public void run() { - System.out.println(ar[0] + " is completed"); + System.out.println(ar[0] + "is completed"); timer.cancel(); } } From 2a58026d4b904df95fa6059f96a18716e054d5a6 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Tue, 24 Sep 2019 22:47:26 +0800 Subject: [PATCH 026/251] Changed parser changed getDescriptionwithDate & added getDate --- src/main/java/Duke.java | 12 ++++++------ src/main/java/Operations/Parser.java | 7 ++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 68a600a8d8..53f38cbb10 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -99,8 +99,9 @@ public void run() { try { ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); - Date by = parser.formatDate(deadlineArray[1]); - Deadline temp = new Deadline(deadlineArray[0], by); + String[] ar = parser.getDate(deadlineArray); + Date by = parser.formatDate(ar[1]); + Deadline temp = new Deadline(ar[0], by); taskList.add(temp); } catch (DukeException e) { ui.showDateError(); @@ -111,11 +112,10 @@ public void run() { try { ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); - System.out.println(eventArray[1]); - Date at = parser.formatDate(eventArray[1]); - System.out.println(at); + String[] ar = parser.getDate(eventArray); + Date at = parser.formatDate(ar[1]); if(CheckAnomaly.checkTime(at, TaskList.currentList())){ - Event temp = new Event(eventArray[0], at); + Event temp = new Event(ar[0], at); taskList.add(temp); } else { throw new DukeException(ExceptionType.timeClash); diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index e9c7f9ba0e..73f4a62ee3 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -60,7 +60,12 @@ public String getDescription() throws DukeException { * index 1 stores the date String. */ public String[] getDescriptionWithDate() { - String[] array = scanner.nextLine().split("/", 2); + String[] array = scanner.nextLine().split(" ", 1); + return array; + } + + public String[] getDate(String[] ar) { + String[] array = ar[0].trim().split("/", 2); return array; } From 346b47ec2f1db312d77ec518d7ad1a19bd8d7cd0 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Tue, 24 Sep 2019 22:50:23 +0800 Subject: [PATCH 027/251] Added snooze function --- TeamProject.ipr | 68 +++++++++++++++ TeamProject.iws | 82 ++++++++++++++++++ .../CustomExceptions/DukeException$1.class | Bin 0 -> 457 bytes .../java/CustomExceptions/DukeException.class | Bin 0 -> 805 bytes src/main/java/Duke$1.class | Bin 0 -> 899 bytes src/main/java/Duke.class | Bin 0 -> 3551 bytes src/main/java/Duke.java | 9 ++ src/main/java/Enums/ExceptionType.class | Bin 0 -> 795 bytes src/main/java/Enums/Savetype.class | Bin 0 -> 840 bytes src/main/java/Enums/Tasktype.class | Bin 0 -> 1146 bytes src/main/java/Enums/Tasktype.java | 2 +- src/main/java/Enums/TimeType.class | Bin 0 -> 945 bytes src/main/java/Enums/TimeType.java | 5 ++ src/main/java/Model_Classes/Deadline.class | Bin 0 -> 1495 bytes src/main/java/Model_Classes/Deadline.java | 25 ++++++ src/main/java/Model_Classes/Event.class | Bin 0 -> 1565 bytes src/main/java/Model_Classes/Event.java | 26 ++++++ src/main/java/Model_Classes/Task.class | Bin 0 -> 1488 bytes src/main/java/Model_Classes/Task.java | 40 +++++++++ src/main/java/Model_Classes/ToDo.class | Bin 0 -> 763 bytes src/main/java/Operations/CheckAnomaly.class | Bin 0 -> 813 bytes src/main/java/Operations/Parser.class | Bin 0 -> 1801 bytes src/main/java/Operations/Parser.java | 17 +++- src/main/java/Operations/Storage$1.class | Bin 0 -> 639 bytes src/main/java/Operations/Storage.class | Bin 0 -> 4021 bytes src/main/java/Operations/TaskList$1.class | Bin 0 -> 743 bytes src/main/java/Operations/TaskList.class | Bin 0 -> 2894 bytes src/main/java/Operations/TaskList.java | 32 +++++++ src/main/java/Operations/Ui.class | Bin 0 -> 3002 bytes src/main/java/Operations/Ui.java | 14 +++ 30 files changed, 318 insertions(+), 2 deletions(-) create mode 100644 TeamProject.ipr create mode 100644 TeamProject.iws create mode 100644 src/main/java/CustomExceptions/DukeException$1.class create mode 100644 src/main/java/CustomExceptions/DukeException.class create mode 100644 src/main/java/Duke$1.class create mode 100644 src/main/java/Duke.class create mode 100644 src/main/java/Enums/ExceptionType.class create mode 100644 src/main/java/Enums/Savetype.class create mode 100644 src/main/java/Enums/Tasktype.class create mode 100644 src/main/java/Enums/TimeType.class create mode 100644 src/main/java/Enums/TimeType.java create mode 100644 src/main/java/Model_Classes/Deadline.class create mode 100644 src/main/java/Model_Classes/Event.class create mode 100644 src/main/java/Model_Classes/Task.class create mode 100644 src/main/java/Model_Classes/ToDo.class create mode 100644 src/main/java/Operations/CheckAnomaly.class create mode 100644 src/main/java/Operations/Parser.class create mode 100644 src/main/java/Operations/Storage$1.class create mode 100644 src/main/java/Operations/Storage.class create mode 100644 src/main/java/Operations/TaskList$1.class create mode 100644 src/main/java/Operations/TaskList.class create mode 100644 src/main/java/Operations/Ui.class diff --git a/TeamProject.ipr b/TeamProject.ipr new file mode 100644 index 0000000000..f7e7b18a17 --- /dev/null +++ b/TeamProject.ipr @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TeamProject.iws b/TeamProject.iws new file mode 100644 index 0000000000..83339b2fea --- /dev/null +++ b/TeamProject.iws @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1569318784512 + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/CustomExceptions/DukeException$1.class b/src/main/java/CustomExceptions/DukeException$1.class new file mode 100644 index 0000000000000000000000000000000000000000..35692206ef5fbeb408027d41b7fd69079cab7773 GIT binary patch literal 457 zcmaJ-O;5r=5Pb_sp%$p%2YN8X^Z*wdPaZU0Dn=5(1H=obQZ`U5yM*1M{w(9g7{d?n zM;WJ>keC=Z*?Ifsy94*kd?$dXJ$FCLMq7G(|j9PV*_? za~(?2f1Y!O)S$(Xy9}aGg!+mhU2ohoWIQ>dV5uDn-i>ENzUceIh&*Ob#*2X8gb68M z#}9m?cRKZ#KGifu5J?q^afj=P92wZB23@Z7tyJ2;frTm#Eo>pnQ1fD?Xd3NbXaUxl*HwNuLQZDQo ztujNaWp*|BZ}LJ823>|cu@l1Nm~UXK5AzkN7h<#}ve|X4K=s?iQm{}U%%DiNwDuIS MOK4JFnhfgc5Pj>UaqKuGO$n5*l0w=hDa7=EI20kFv`CfGs*2b-6sqygDh2XG%t|4SL!h=U0!>h#L)Ubti46Rf83bbyrlCc zsS*)s7iWs0Iny_Y-9r*rk;H;WB=M~N)iBLvtdl}X7ifF$0_C5Pg6+Iwd)}tjn8A3x zNBMCw3M3EnNs-^|{5{U@F;;0!Y}y<~FR4c-gHEI`*+uf6=0334`wG@;7++BMgyIwn zA9GNHYy(BIWwIrrvIuJD6iXKrBcd=UW8+VX(&iLq{{w~d@*vXQXB4I=Yhr^)fg4yL u>s%05X_sqQr$5&zS_At<0mFo4(pCcnO4q=fSf+20YF7xV+4YH@digh+t*xa1 literal 0 HcmV?d00001 diff --git a/src/main/java/Duke$1.class b/src/main/java/Duke$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5dad72d8986e3d799977414e1dff0bebe3d07f00 GIT binary patch literal 899 zcmZvaZBNrs7>4g|UAxXQDxi+}hB9HGZZcm`K@$Tb64@}>q96ET*B+rz&RN=S20xkT z4=^$Q20yEbF~;x%{87f|Sxkm6>2lxaI?qdcp0gi6za0Wt#JwEO;H-r_&RMiN&p2h` z0>ed?X_gYpC6*bMS(Y-(oQZi8S2RqPS}%gc+iAGnQeF1;<5Js=_mYFI(2&|%*N|QI z!axSeeGTdI+!GD@it;Hqx)Dgx?Cp0%)OI@|?ToY%*W05;zd6@Zy~q=50SB$s-kzxJ zx_y^Q>(UEV9LVj4NOqKO;wrtTDdOaziW3tR8&zDh;o!K91=MU@#|;fduC9iz+^#lN ztLN>k1tRq8QKTXpH#zMV%OcBdmOCtWS(aFqQPW`Xca#=1*y~b?XeD&xSi~BfVe`$- zuJ95%D5q-355`g*j>YJ^VUKIZ%X3>Be@2(6EDU0*cK(f+D)IyAhJ#7cXw#ho>aY7s zk{P}TMZ)|%kUm+Wd_`mNh3nG=P#`1vLQ-cVmP)-8&JB>Ncik#w8+ zNd5@3HK_jxi=GLbLIwp)V}^VdHM++PUE>3+lGpJVE%G*=!6Wz4MNFRH6<(9S!CSl| zPvHa|(-<7Kf|InaV(h6&k;Z?d$$NhZbovlbqXH($breZY4|a;UOrE3Wd2%?}U+@8~ Ap8x;= literal 0 HcmV?d00001 diff --git a/src/main/java/Duke.class b/src/main/java/Duke.class new file mode 100644 index 0000000000000000000000000000000000000000..f7338ec04c7ab1850480c15ac7b1fa55187b2517 GIT binary patch literal 3551 zcmaJ^YjjlA75>g-GB|``!te>B{P?bhWj-I{^DZNyU=zNq0#3Py)*TTW}- zOsB21LLd`UsO;R5vK-TmCGB*>wpf#bmUfelIbMEl{WmGXB$JiNR#@J+Ek%Zn`I#^Mdlj$@8V z>J6Mg*1$9PmVsySZ3ExIa|XVPZUfKD@PZgRDTYqT^0W*u%5Vlb4dVvR3jg=;l7R_9 ze_x;<$Z$@UFN^Z?_@RLxdGU8~gW`MhmDA9hY)cyWvG8;W&nx(efuD-ptN59LpW^~| zq*$cQG6&<_UXl2PfnTCq!>=gBbav zxc(>n*}z|L(ZE}R`>VJalA2fc?235O9Q5m~wtlH!jm3M$!k<$=EkP=EMtV4TsFOO{ z9Vf}o(T6OzHJM15_8>cPQe$C#)A~U(p0T#!uj4>+}0__k= zJ{V6;Thb=2jB$0?gVtf59z{`g*se8XIrMVo)ZXQh6pPvJc8QkTJm@J3)^|wWJX@Z^ zysZ#R)snp_7cbhp1yks`uqh_l4AF(n))+PI_trJjC6B7TfSLy>Q9+3|D;;%WUY{~M zrl4!pvgw^W5wYE#NV#JLVtEH=7c1KlbBFz6Vm_v=I(>iANtmwBH2qE&*Clg! z^)xXR)Sl?_9QDdhR(a=Y3(l?9VJkY?Y$p?DoXHADW!W1`Ftv?^b?oUX(0%!kYRb2P zSClQuWZW|C;_b~Nc{L6A`afHOdeqzVQxipBAKyyJd_ib=zJ^HtW96VB#vrB>AYM`eMiUtl0|v-lydfN%CEyJ zLFQZ8%Q6=6R&L>ACdjLrw+x|xTqoYli@}?Di*PQ1;>p*|aSK=HDN(|C&$4l-WfKVW zjiclYg3De+Fo#lNLd0liP)0CJP(Oomf<_-X%5s=7j*2s=%wl1uFEVoi)nuF1Fh^Sa+>-yhCZ`o-Mps)Gw4xy4p($7KZ}~~Q<%LXhuW3T0_yM7 zr1*vTt>!10OYwW0-z)qsl3dP@8B)*tan0dWnL{M2P6yW!E|c|+vzVL1JfCBJRz1;} zPuzztqwe*g1;Wmc{w&Pl${ZGD)yO3GRav!XindmCRMs&4iwOh;sLQJL1ggPgMCWT6hG}AJ!uBDFUsK5%$ z!b-N%D)g{;cCwUr^BujH|08VNKpX35Se!3H}>+25o#( zZK4Oa@Nu-6Z=6p0vW4Ds;SCn^MOuEF+TY=yhJRuk-bEiiz)n?xepQP-^l6uxkKJl9 z_Npa_sudViYhkHY>{nYcr1~+!NQTuu#MBT*)d-U608;7*4ygO#sK=02Ps3HuA){Wv zK{bIRjQFrRk1_QsZc`U}G}NiLOlX2{ zA0^IK(TeQ`Cd}-anR90L{p0Bsz$(lbG>mghAf+R&W0HeoN}6;Oot!Sy5;3h~h9MTX z6|w2r^;3raLf#K6^-TWK5$Azh_4lsMMV3LIIoK%d=Zg#jM{OXH3)>4tongqd+F`WK z>ak$xF1Wtf2`eR0+p|j^Mf67U?g@is7S8MoJLB1YIa3U3u3yet?ONts-woD?REwl- z>wvTs-Lh{7VU2pIri?^$j`y84-_%LU&b4f_M)G;F8rB@Kd7~;P&C7hwd@v1)6?=!6?V!Nd?;RM8CrCFm~S3TPV`5S%wKC`!jFrNY4pw+TJhYlNjUpjc>>=Bv3h|JZP-V(e)Fzeq zSI|iefk1oaMdN!K49c-@dZy3E^uFHp7H$KKehhhEgLyYVoH`VD7J zqh=5V@wUM79Q-TiNFd_|{m6@xA(dBc_884x_&2LE)r3cF{@-DnMmF6+GVJ*;17^7R zZx>rk&%zQfwq)Tkwgj@**JYuMx`o?VwU9&JLV-mQc|u+d$2kJ2UO0%Te#v&GIPG_j z{a#EQo=uOp7kZ;nV+wY;pX*f{J5T94v-B3UoiZ~3ND~REi3gBh;RzUl3~pc<0yoL3 zkmh4fAih93hx&;ufmBIPeJ7mCw-zJ literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/Tasktype.class b/src/main/java/Enums/Tasktype.class new file mode 100644 index 0000000000000000000000000000000000000000..53befa77148ea9e362b1fb0f609c9bb81bdab210 GIT binary patch literal 1146 zcmZuvT~8B16g|^!yVIr6@-5#`Dz>0hR77b-5J62Ec~~Ub__S>ovbbzbyCveU(vpb5 zXn6Jq_;ZZ+P8Eu)LnsHsna{(==R;mKY;)dTisOPrr z`n%xhy_2UE&#eanvf|hk&-ERFh;!)pl+r3yrqPPyIRSlWyRKgm2$zmHTlcHgkMyCZ zch-t;HcWx;w^!Aphql*n>H@u)>@~~UdbL6ti6U+Mx^Yl)YTI_nV^#Iv)~-N0Q{1-? z?VM-(dpR?xx&B^0d(B1#*LQ;zfq`r4UuAa$Vy3(2+d-p7^5G0;WT8wQtG`lhoA8JV z|L?FuqcY5DqgHk{U3S>{Z-(=1FOHjhhBI+&U{j#$@|fe8!;3iXU_Oo!jK(p>VVuJR zhe-}o98w&nIixX4Iv1_8BArdyQ-{)*$+kJ(D(ySvfE+HiH^1)L^?JUo?0kBcRr9M0 zbWeuqQW~p6><=I$iweo5LNcn5yecHS3dylTGOdt&1Ib~Y2PtZZ;TAFw$P!Bt@?$h1 zz94jl@F!vdvlOFhEll-uxP4w9Qdy%%oBfK&8MLeQAs#D2N`C@jdI5cQZuA7v&sW5A zlnLQ3Bo-*PO#LF0{G5J+X7%Xd6Ubx46frbKIuwaV6zNo?E2>CBk)*Cjw<0}KkzPgm zlC8Ra#RmQs4k~sd*{U2$#=g_e;U?WsOKYOTv?5J(npU)lglXwbbeooJqSv&Nl=90sj;u-$ySYcV9>&E~2nwih}hhIFZX!?m(AIHVf!rt3Rz!hXjY zw(O3_tBSn+_YB2S^VmMIYo6`*YF03G{a(F%L!*Z4yTK+y_J;V^v+j9e|?E2^4KtO z4+RrxWK1k@ljUZSnY8vXGUJs)*znQH+ENsd5LB#=Z2Bwauv$7iDq1yS6>3K(t^D-iNyOu)WCI*0s; z7{eX1s<@LWK99SX@sjWwDW&oik#i`s@e*GVBvC&PnLa?Ptgf6v{XA3rK6xY*q2mGB z3sE0QBtO0HP}(U?K7)RWs33+S$ebW%M39&u^Qs_mK@yrEN&N>^kSFwN+R6lTRy#65 j%xbF>#I3eALDD(}yAoxP6uzNt(k$UZ+Cw}dpM=sM;5D{T literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/TimeType.java b/src/main/java/Enums/TimeType.java new file mode 100644 index 0000000000..4271e8be97 --- /dev/null +++ b/src/main/java/Enums/TimeType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum TimeType { + year,month,day,hour,minute +} diff --git a/src/main/java/Model_Classes/Deadline.class b/src/main/java/Model_Classes/Deadline.class new file mode 100644 index 0000000000000000000000000000000000000000..cf62d189e46f42982e74b0cc81f43349f438ca7a GIT binary patch literal 1495 zcmaKr>rN9v6vzKlE?bszzk_m-f^E4}K~X8*Xho`AOduLVj85ALEG)aEJ0-y<@i8<} zNci9b_)x}kx=Vz%>4!ag&dmAEocYh0KYuTO19*gYCOR?Ef)3mx$2nEpl{uS6OwV!Muj-?cMaqh0Il0vz+jJd$ zAkgAR8A+uC+3RkJvLiv7<&-q76xOa^fIx37UR@T^JH+MHn#CKpWt1$~RL(q~E`lCB zjGznM29_cuOI)1R1;%=-(s}?9XXidY(>yAXDRls z;xNqwDu!t=a5hN2%(P>Kik#&dO~FM9XI`H<{&}x<@MLHGj7?nb&Ud z%)l0P=7#GYl}@O*tmCL+ptZoa>m>wh_?NUUor0~rs1F9+TiwssH}}EavlCS#eec>q zwsVInuT$5%G1xmTZF|R}$7Eoeo>A5LYSkt%T0ajH^zb|B0n^LnUM9~VzX!c!`zV^B z@do<0CT1=m60^S$`cY2rC)-}08blL@U}Bh%0SpG<9LrN9v6vzKlpe@VF9l0YYU@t&XxhOZ40)lc;AsR!B4rM}@mR-`FlHim07@8;~ zeDDE$DC0T13zkayVb7eIIlnV!{xh?`|6Ke6Fpakc8gZ`{4Hz^qgkd)K*~Hky*(BH` z*^ICmWi!Sm#q4-9<(Y_JGJ+|AkkkT=>xc40ri$9irK*PFatIguko+|9fy*!Q7X0j@iTau?&(W_38qRk-8vWuKPsvW;Vf!52FO6w+io4AZxvA8m0 z`9#@zjQ4J$1=A*)&>X>I6HhQ>VisK{=GdEOZ-Kq1>^)=eIeUxjrP;fKe$sK#akQ%o z@_0k(th4Vngs~LGvWXSE5NO#TiSnP)dFi^!O?j)6Cf7%Iq?;3HyFqox`n{#IV-e)EdOR!WPy^@CVfA<9$fqqrWtPRiXd@ literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 3e77b319f8..9188a8a332 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -5,6 +5,7 @@ import Operations.CheckAnomaly; import Operations.TaskList; +import java.util.Calendar; import java.util.Date; /** * An object class representing types of tasks that are events. @@ -26,6 +27,31 @@ public Event(String description, Date at) { public Date checkDate() { return this.at; } + @Override + public void snoozeYear(int amount) { + this.at.setYear(this.at.getYear() + amount);; + } + + @Override + public void snoozeMonth(int amount) { + this.at.setMonth(this.at.getMonth() + amount);; + } + + @Override + public void snoozeDay(int amount) { + this.at.setDate(this.at.getDate() + amount);; + } + + @Override + public void snoozeHour(int amount){ + this.at.setHours(this.at.getHours() + amount); + } + + @Override + public void snoozeMinute(int amount){ + this.at.setMinutes(this.at.getMinutes() + amount); + } + /** * Returns a string that has the full description of the vent including the occurrence time * @return A string indicating the task type, description and the occurrence of the task diff --git a/src/main/java/Model_Classes/Task.class b/src/main/java/Model_Classes/Task.class new file mode 100644 index 0000000000000000000000000000000000000000..99542dcde923ce230c145b3e4858cf10dce84b49 GIT binary patch literal 1488 zcmah|T~8B16g|@dTgpPAiijuz0=7j3{6wn=LI@;OO(1>|qeGd%(z4rhrzH3{e8I$b zUwqI+F!8}3;Lq@f7|(P!P%M!&y)*aDx#ymHXZF{hA3p)y!E_vP3^k(}!^T{WAr(V9 z&TYn+kt9*07RD@$3$&~$KVNoA+VNb0mZL@Ku8%J1vg5921)3ax)^nABctz*F z<2rg$pfgpEO+OQ8nDN$#O)NUDdR*CBRpn*5T4cmpS32N{rqX0;rN5-5uJ{XiQ~Pu( zUC&4uG5JDHmZ~%st_!pordrvSUqej|ao_d4cj~2*WeQ3y7+ozvEa$m;L!deEX64QS zdfuxLZHF+&t!RplX)l-qVM_$$)tqCRXy#7A)K~3Lgjz z9*S|?ZLgrhXA;z#lX>lxcPu<)_lurasFXO-1=m&OuqT1tS`i^fFpPQWt`(I(7$j!v zmDNO!Brfli)G_dt8hkLhY;A8L#f&T#mmICK7N!J->iRoQn?UdXap>oV7Uy>s;g3(F zy5sBM+5&zYXs7LRM{8=`oai!un2zJteIFWY`PB1`eh(9Jbt+*=O7Puzny0{5z(%h~iSU*+Jar8Yjm+ ROd`t>T%jMMf0h4he*u5HELH#j literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 8ef7e1c926..8341ada540 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -48,6 +48,46 @@ public void setDone() { isDone = true; } + /** + * Snooze the task in year + * @param amount number of years to snooze + */ + public void snoozeYear(int amount) { + return; + } + + /** + * Snooze the task in month + * @param amount number of months to snooze + */ + public void snoozeMonth(int amount) { + return; + } + + /** + * Snooze the task in day + * @param amount number of days to snooze + */ + public void snoozeDay(int amount) { + return; + } + + /** + * Snooze the task in hour + * @param amount number of hours to snooze + */ + public void snoozeHour(int amount) { + return; + } + + /** + * Snooze the task in minute + * @param amount number of minutes to snooze + */ + public void snoozeMinute(int amount) { + return; + } + /** * Returns both the status icon and the description of the task. * @return diff --git a/src/main/java/Model_Classes/ToDo.class b/src/main/java/Model_Classes/ToDo.class new file mode 100644 index 0000000000000000000000000000000000000000..9f7c1ce5a8bd27c499e47862f215a98365a5bd54 GIT binary patch literal 763 zcmaJ<(M}ps5IsY6mu|OW5vA5@t)&fMB9A`M^r0AI6Ko$K`d}J!fg4>|?j?IKB>YJ~ z!#{060X!!!lOlBa>xd%|*_|I>GrIsK9<9 ztQYHDF%p$fsH;lDMuEDjmd*%EHQkYfOg&KY`>@}VQB$-+M$%SKX@p#{lnf?#4Lyw7 z@;Hd;&zt&4AH*emIB{9BibK_wgE=gzPC74=-z>Fh-h6 zoFWMd)AR5KTdeh>`I89wzUaxCR&8O=1AEPuu|iox__V0Wq;wZ=V*$H_!oQgWYNUH| zHkxVnW6`!c8oSuzLDseI4F?4On^H2GNhbW7FFDIG?e#>cPAE-b8dy!rm_z;xY>o$V z0sUf*|D)BFZCjoHEwdCg5r&Px%BqVGgpY~-7HK2wJk7&xO}GB+hae) zU#Gl(3;N9#Zvvm*1YL>Okr7^nM?SH|_vKrp?(ht_d5m!;H+cqq#!`5RcauznZLYtA OO{}t?X4Wfyvws1uSHnL5 literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/CheckAnomaly.class b/src/main/java/Operations/CheckAnomaly.class new file mode 100644 index 0000000000000000000000000000000000000000..79dc1aa595ac6e7617b3c273e7f3e88ae948cc10 GIT binary patch literal 813 zcma)4O>fgc5PfUAapRhP(iBPxl&{)NsUeMKyQc4MTohmr-1`hf$CF9p`Qkc!K*?hBM8WyWM?$bV}Tm9iPWZ zNW_o+i+H=fPfdDHY95aw5jia$b*nr7xXx$>N$83PG96;BmJYG&2R-f`Z>BStFfgTK z)x;HCHE|8s85aJgzuy;rY~lvibXX>Atm~+l*uYJOrN)s6c`O4za`M~^vzbEK?2Y!J zaAV>fi}pt(Qaq9`sWp;+k8DR!;-a;e*KSx((hYZz3eGTZjZ(%-V3;1?Fw8257YX;G zlrp!B5utrRij3PFt%yPIb1xB%XAC9lAm7O860wR&dSB_MfTaqOHR-fMo{^tee-HMK z0Ii#BAqy6%WEwM6lBNdaRq|WvopNOWd%DklEQynQR#IdZ-D;iegSksZlXKGp3kk|1! zHZ&A86a}$DKJ{FUAftE zD$?J!Ds@`)JsB)}j$^qsfyqoZ3Rbt=J+mD6w!6nzar)%ln%ozd>hZ|Cf!vcmT~c&e zkG|g8wqV=-Z z@~d*qRy-xQEWauJYl>?FGk9HK{0#3JN(Q#@g>v}Pz(u@fpo}>K+iLj=a~kd&cz}ln zcJRo+W6TM_z}NUjV0O9H3_PbxlDX1)Dvyr>!Zh$Lz7x0@CJy9&V3uvCQJ1RSwU8cx zv0BY67R>|xU0z?mkZle{@U0M$Lo$d_r)QeEAE}J9ifmiT;lK!&Q zF}uZ(?=Q{xc1Ddw`6IT(#zye%DgM$xXP-&5GqIh*s|)> zX-~MQ`NixbfuUxjZZln`Pr7`61^0yNd|ay8p|E&(*g#$1155Z5V<47c7DUaAqIcP(61rv64w+4xSpqLn!jlRE;DcxAj@Zr zZ%1-3Fx19y8(Lxh`7u;oW56XO2@!Y$Z+2ie_*6lsj$!e_{7WS6%)Er&g-4k)gl92^ z96?u@ITn__#it5B8-+-=!4PSqjgg;`JVI*c5Tk#ErNmeOSot8=1;)CLN#4RUyq4dh zB@XcqW;EWb@9?DPNbx_zj8TUs3sre0x_Q!LY<2u>pZ741CBkx;?-aQ~a7f+}(mUyi zLrl)MG4;Iosy;fCJ7zpbK$q(xEt?ocDXef9VpF5X$@;GT-vr1*p9wr<+dEA5F0OUj wy2__&YwXknexXf-r9`u{h^)|J;=K;?^vKoV&Ua@P!FI{(9s%z&Tnr!l2YWz$r2qf` literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index dcc978940c..becc728971 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -1,6 +1,7 @@ package Operations; import CustomExceptions.DukeException; +import Enums.TimeType; import java.io.IOException; import java.text.DateFormat; @@ -36,7 +37,7 @@ public String getCommand() { * @return index Index the user wishes to perform operations on. */ public Integer getIndex() { - String temp = scanner.nextLine().trim(); + String temp = scanner.next().trim(); int index = Integer.parseInt(temp); return index; } @@ -87,4 +88,18 @@ public String getKey() { String key = scanner.nextLine().toLowerCase(); return key; } + + /** + * Returns the amount of time + * @return + */ + public int getAmount(){ + String temp = scanner.next().trim(); + return Integer.parseInt(temp); + } + + public TimeType getTimeType(){ + String temp = scanner.next(); + return TimeType.valueOf(temp); + } } diff --git a/src/main/java/Operations/Storage$1.class b/src/main/java/Operations/Storage$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dd80360b82347d716e4e1c7b5822775268d90440 GIT binary patch literal 639 zcmZWmO>fgc5Ph4tc4FMtw1KAOtF$IfKxzaM;sD}OQc=+)2Ul?DY2&PtE$(h)uYz&(<6r3izJmwnwJdKcIPdFbD+mmTs@Xb z42tuS$WHhuC1yD`Jb6z-m)MVWktO0#+F}qJo$-m-KjU*w-9440I+tqF7iOx*9`4gs z1Cg88IyWA60_-9R;Nx0=2WSP@Lz`jCc6U>*Cf$LKi)4BzMLO3a)xjrHXNOa#4xN~ZDd#}ed#WIapycOtipP`b9(%L z^*IAOA?>TQr?atCJS}}BV_A>Zt8kl!RHvb_uxbC+X2b+orno}r6RMQaP=A13{PMq{ z^3{IT?{J*qXE<+4=n`C7K#!nX!Y|ZbM*|yJLX$jgQQX55Jf&E{Dha!#{60d;ufu)k gQKkQHgF__f=o;23IwS?$D47QCQS{6AQWDnw0**a{)&Kwi literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/Storage.class b/src/main/java/Operations/Storage.class new file mode 100644 index 0000000000000000000000000000000000000000..da3865e970a33c8c0fd69e709400e1c75407d25a GIT binary patch literal 4021 zcmb_fd2kcg9sbsq^j7P&0g-^05RPEt3#{NKC6Nh6OwXZ3$_R0X0d_v`w4R`wVIS=pUWwblPb<(@slqzqgW%gw_1fsWtnK z-+RCN`@Q%4+=Vkw16YsWYS@f@0{b=8$=(zgQIXUTL`p*dmWl(iAC>E40%;98_Jz@p zgOW1dfIEDHirc6 z*054eR?5k11YWCQwKVE=0k$HgA>Fx2br$oV-KD zJ7xba*}PleJu2R-(P7G1kN2r~zlIOsgDO50VI1y{K*0l2`h&9hh-^M8@G*gp3p^z7 z2?hFqZClyCjOn_Ts~|LKW?d_*VBz4lNh@o5X~%Y>xBJ8%E^kQNX>X%~`nL8R3Icsj z%2F_IFl}2yxrq@gyWJegkfLTBGqoixhl|_V2M?N4W;ExeGtu5`);uzpc0CGfOn7E; zJZ?_{n>1wNxd+k7}_P5RmugcIpe+w^i-id$P-+=jt8P08#lITGD&y5l_? zsU&iP8ip*_i(4`z zu8v!A8zWjH3JMna)U*@blsj<1%37&AEi)w(5GgN6+si~XWqM|pci59MKP#JK3W&JR z;Sn8=;xPpa=A=!>Rt)I)Jieggi#V?1ahy;v-xr@T?a^q$%ckv71Bp2SHV zc}(j#h10a;lF&N+4mTgsaR!g+DBw07U&d2(uzKI-Da-cle41WXFZI*M3^7v<3f&*r zHk)w;%ldMz=S<8}+-QGp+?t)%h}uq>fGHj)EnA>^$qR7fqxmCNoyQNr*Yw3DYB2JRaBa zoD4`^JTCBE9pA(A6cJ<4H#v^ydRcQaZh2!)%AFU&_f?$L@dNx&#gAnFV;w({sr{*p z>(3-`nlGyJ3$Y>&k&0}W09cjUZ6gP*B#pXk?!K0FWsLcSIl%ClgfLUGyI3U^*kBzs zZMJh0ZZu&|S>BOJX0FM%%IB5tms9C;Rakg=sj4ca$>Ld9qBHeHaQ8^6nk6#iX+o3B zg5xe*qV ze|9Zu8yKjmDCl2kgww?$s;t&fF>Du8H4EsT8saqk9KWDqCCc9lRy41-33J@)bL^z) z?M!=P9J!upd(4ep!=t&C^}kVS*hVlYtNfpWJ^we=H5CQ@JCzD;>rk;+gUO8JS^~e6 zC)f*&rXOuT*DWsXC&Y~#)K();)X?B~N2e3sS8 zYnh{Zj`==dJIL8e_Po&%?3jjf!rvHYE8nERVm?@#xjckzWaIX_9N)7|l(wOOy5VWm z4;By@E+9A@2~9&xLybqmL#4G?U`-y{@X)hpGy-e$XxMpd=Fc4k=wxg>i6$eE$Glk3 z2%g4#z8Y~(jut4qBO|ep5sEAnd0Z9~hN$m8h09~=6If)Zc`WXFl&10TI6rB6J-?;= z`uW{mK=ZI6g5A?FVqrrBx+6>SxZ(k*MmUe9owB7Jusfcl0V33$$CWXyfMq_Dp-p3X ztf7jnA&(WE23yItzLHHZU}cd_pTZMv|3fV zlyzuflx4KS73ACtq1^EID+iL9Ks17?hekF#Bpj6IL z5^2H>! zNa-PkxN0!8JT}C1@`So0H-;p>8x2+MHYAB%V?Dn>_Ze&iq&g#L2qSz3H*u=1k=!@4 zrh1Rfbg|o1iK-JaSojnELI@T6K2jvO_Ogt@Xf0s8IwtESzeFWBi zg3!dh7{NnG@_C=aNmw|GQM`yT{0?b?>LC7raq6(CC4;|W0{?>J17|nHzp+T5mAO8T z6#|{TO!*A%gI3P4Tq4~^0wGjH5&vhL!4;^V-Bg4{Is1yhuDQwIO(^W4OLcT$FMA1$ iEx3iF2x(i`W4?-C;T(R=YPy%xCerWYt`Ga|(fi)q1 literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/TaskList$1.class b/src/main/java/Operations/TaskList$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c0fd35658107dd1e890ad3ed9a7e03834d910d70 GIT binary patch literal 743 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 Date: Tue, 24 Sep 2019 23:40:41 +0800 Subject: [PATCH 028/251] seperate lists for recurring tasks created --- recurringData.txt | 0 src/main/java/Duke.java | 40 ++++++++++++++---- src/main/java/Enums/SaveType.java | 2 +- src/main/java/Enums/TaskType.java | 2 +- src/main/java/Operations/RecurHandler.java | 42 +++++++++++++++---- src/main/java/Operations/RecurList.java | 47 ++++++++++++++++++++++ src/main/java/Operations/Storage.java | 12 +++++- src/main/java/Operations/TaskList.java | 1 - src/main/java/Operations/Ui.java | 34 +++++++++++----- 9 files changed, 151 insertions(+), 29 deletions(-) delete mode 100644 recurringData.txt create mode 100644 src/main/java/Operations/RecurList.java diff --git a/recurringData.txt b/recurringData.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 51b0490981..144d8c610c 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -13,7 +13,8 @@ public class Duke { private Ui ui; private Storage storage; - private TaskList taskList, recurringTaskList; + private TaskList taskList; + private RecurList recurringTaskList; private Parser parser; private RecurHandler recurHandler; /** @@ -26,12 +27,13 @@ public Duke() { storage = new Storage(); parser = new Parser(); try { - recurringTaskList = new TaskList(storage.loadFile("recurringData.txt")); + recurringTaskList = new RecurList(storage.loadFile("recurringData.txt")); } catch (DukeException e) { ui.showLoadError(); ArrayList emptyList = new ArrayList<>(); - recurringTaskList = new TaskList(emptyList); + recurringTaskList = new RecurList(emptyList); } + recurringTaskList.list(); recurHandler = new RecurHandler(recurringTaskList); try { taskList = new TaskList(storage.loadFile("data.txt")); @@ -40,6 +42,7 @@ public Duke() { ArrayList emptyList = new ArrayList<>(); taskList = new TaskList(emptyList); } + recurringTaskList.list(); } /** @@ -47,9 +50,15 @@ public Duke() { */ public void run() { boolean isExit = false; + boolean isExitRecur = false; while (!isExit) { String command = parser.getCommand(); - TaskType type = TaskType.valueOf(command); + TaskType type; + try { + type = TaskType.valueOf(command); + } catch (IllegalArgumentException e) { + type = TaskType.others; + } switch (type) { case list : ui.showList(); @@ -64,7 +73,7 @@ public void run() { ui.showWriteError(); } try { - storage.writeFile(TaskList.currentList(), "recurringData.txt"); + storage.writeFile(recurringTaskList.currentList(), "recurringData.txt"); } catch (DukeException e) { ui.showWriteError(); } @@ -133,9 +142,26 @@ public void run() { } break; - case recurring: + case recur: ui.promptRecurringActions(); - + while (!isExitRecur) { + String temp = parser.getCommand(); + if (temp.equals("delete")) { + recurHandler.deleteRecurring(parser.getIndex()); + } else if (temp.equals("list")) { + recurHandler.listRecurring(); + } else if (temp.equals("find")) { + recurHandler.findRecurring(parser.getKey()); + } else if (temp.equals("exit")){ + isExitRecur = true; + ui.showExit(); + } else if (temp.equals("add")) { + recurHandler.addBasedOnOperation(); + } else { + ui.showCommandError(); + } + } + isExitRecur = false; break; default: diff --git a/src/main/java/Enums/SaveType.java b/src/main/java/Enums/SaveType.java index ec975740e1..120619dbc5 100644 --- a/src/main/java/Enums/SaveType.java +++ b/src/main/java/Enums/SaveType.java @@ -1,5 +1,5 @@ package Enums; public enum SaveType { - T, E, D + T, E, D, empty } diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index b4b844c38e..0ad9b0698f 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - todo, list, deadline, event, done, delete, find, bye, recurring + todo, list, deadline, event, done, delete, find, bye, recur, others } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 9f25befd40..2fe7878399 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -7,25 +7,30 @@ import Model_Classes.Event; import Model_Classes.ToDo; -import java.util.ArrayList; import java.util.Date; public class RecurHandler { - private TaskList recurringList; + private RecurList recurringList; private Ui ui = new Ui(); private Parser parser = new Parser(); - public RecurHandler(TaskList recurringList) { + public RecurHandler(RecurList recurringList) { this.recurringList = recurringList; } - public void addBasedOnOperation(String command) { - TaskType taskType = TaskType.valueOf(command); + public void addBasedOnOperation() { + String command = parser.getCommand(); + TaskType taskType; + try { + taskType = TaskType.valueOf(command); + } catch (IllegalArgumentException e) { + taskType = TaskType.others; + } switch (taskType) { case todo: try { - ui.showAdd(); ToDo temp = new ToDo(parser.getDescription()); recurringList.add(temp); + ui.showAddRecur(); } catch (DukeException e) { ui.showEmptyDescriptionError(); } @@ -33,11 +38,11 @@ public void addBasedOnOperation(String command) { case deadline: try { - ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); Date by = parser.formatDate(deadlineArray[1]); Deadline temp = new Deadline(deadlineArray[0], by); recurringList.add(temp); + ui.showAddRecur(); } catch (DukeException e) { ui.showDateError(); } @@ -45,12 +50,12 @@ public void addBasedOnOperation(String command) { case event: try { - ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); Date at = parser.formatDate(eventArray[1]); if(CheckAnomaly.checkTime(at, TaskList.currentList())){ Event temp = new Event(eventArray[0], at); recurringList.add(temp); + ui.showAddRecur(); } else { throw new DukeException(ExceptionType.timeClash); } @@ -58,6 +63,27 @@ public void addBasedOnOperation(String command) { ui.showDateError(); } break; + default: + System.out.println("please enter a todo, deadline or event task type!"); + break; + } + } + + public void deleteRecurring(int index) { + try { + recurringList.delete(index); + ui.showDeletedRecur(index); + } catch (DukeException e) { + ui.showIndexError(); } } + + public void listRecurring() { + ui.showListRecur(); + recurringList.list(); + } + public void findRecurring(String key) { + ui.showListRecur(); + recurringList.find(key); + } } diff --git a/src/main/java/Operations/RecurList.java b/src/main/java/Operations/RecurList.java new file mode 100644 index 0000000000..4c0202ee58 --- /dev/null +++ b/src/main/java/Operations/RecurList.java @@ -0,0 +1,47 @@ +package Operations; + +import CustomExceptions.DukeException; +import Model_Classes.Task; + +import java.util.ArrayList; + +public class RecurList { + private static ArrayList tasks; + + public RecurList(ArrayList tasks) { + this.tasks = tasks; + } + + public void add(Task newTask) { + tasks.add(newTask); + } + + public void list() { + int listCount = 1; + for (Task output : tasks) { + System.out.println(" " + listCount + ". " + output.toString()); + listCount += 1; + } + } + + public void find (String key) { + int queryCount = 1; + for (Task query : tasks) { + if (query.toString().toLowerCase().contains(key)) { + System.out.println(" " + queryCount + ". " + query.toString()); + } + queryCount += 1; + } + if (queryCount == 1) { + System.out.println(" Your search returned no results.... Try searching with another keyword!"); + } + } + + public static ArrayList currentList() { + return tasks; + } + + public void delete(int index) throws DukeException { + tasks.remove(index - 1); + } +} diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 217b83ce3d..8b61af5eb3 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -31,6 +31,9 @@ public Storage() { * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. */ public ArrayList loadFile(String fileName) throws DukeException { + if (fileName.equals("recurringData.txt")) { + System.out.println("recurring data text file"); + } ArrayList taskArrayList = new ArrayList<>(); try { BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName)); @@ -42,7 +45,12 @@ public ArrayList loadFile(String fileName) throws DukeException { parser = new Parser(); for (String list : tempList) { String[] temp = list.split("#", 4); - SaveType type = SaveType.valueOf(temp[0]); + SaveType type; + try { + type = SaveType.valueOf(temp[0]); + } catch (IllegalArgumentException e) { + type = SaveType.empty; + } switch (type) { case T : ToDo tempToDo = new ToDo(temp[2]); @@ -67,6 +75,8 @@ public ArrayList loadFile(String fileName) throws DukeException { } taskArrayList.add(tempDeadline); break; + default: + throw new DukeException(); } } } catch (IOException e) { diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 71babf7862..c70bbf59a0 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -3,7 +3,6 @@ import CustomExceptions.DukeException; import Model_Classes.Task; -import java.awt.desktop.SystemSleepEvent; import java.util.ArrayList; /** diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 5e7b3a18f7..0a6961db1d 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -35,16 +35,20 @@ public void showLoadError () { * @param index Index of task to be deleted. */ public void showDeleted (int index) { - System.out.println("Deleted task number " + index + " !"); + System.out.println("Deleted task number " + index + "!"); + } + public void showDeletedRecur (int index) { + System.out.println("Deleted recurring task number " + index + "!"); } - /** * Tells the user that the search operation is executing */ public void showFind () { System.out.println("Searching for item in task list..."); } - + public void showFindRecur () { + System.out.println("Searching for item in recurring task list..."); + } /** * Tells the user that the task of index has been done and the list has been updated. */ @@ -59,20 +63,27 @@ public void showAdd () { System.out.println("Your task has been added into the list!"); } + public void showAddRecur () { + System.out.println("Your task has been added into the recurring list!"); + } /** * tells the user goodbye */ public void showBye() { System.out.println("Goodbye!"); } - + public void showExit() { + System.out.println("You have exited recurring list mode"); + } /** * tells the user that Duke is listing the tasks */ public void showList() { System.out.println("Listing tasks in your task list..."); } - + public void showListRecur() { + System.out.println("Listing tasks in your recurring task list..."); + } /** * tells the user that there is an error in writing the data.txt file. */ @@ -113,18 +124,21 @@ public void showDateError() { } public void promptRecurringActions() { + System.out.println("You have accessed Recurring Mode"); System.out.println("You are now accessing and performing operations on the Recurring Task List"); System.out.println("Tasks that appear here will appear based on when you want it to appear again"); System.out.println("Please input your intended action\n"); - System.out.println("To add a new task into the recurring task list,\ninput a new tasks as you would with any other task," + - " followed by recurrence by month or day of the week, separated by a '#'."); + System.out.println("To add a new task into the recurring task list, input 'add',\n Then input a new tasks as you would with any other task," + + "\nfollowed by recurrence by month or day of the week, separated by a '#'."); System.out.println("\tE.g : todo buy groceries#monday"); System.out.println("\tE.g : todo buy groceries#month"); System.out.println("\tE.g : deadline homework 22/12/2019 18:00#monday"); System.out.println("\tE.g : deadline homework 22/12/2019 18:00#month"); System.out.println("\tE.g : event meeting 22/12/2019 18:00#monday"); - System.out.println("\tE.g : event meeting 22/12/2019 18:00#month"); - System.out.println("\tTo delete a task in the recurring task list, input 'delete'."); - System.out.println("\tTo perform other operations in the recurring task list, input 'find' or 'list'"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00#month\n"); + System.out.println("To perform operations like delete, find or list, do it similar to how you would do it normally"); + System.out.println("\tE.g : delete 1"); + System.out.println("\tE.g : find homework"); + System.out.println("\tE.g : list"); } } From 559525b9cf112c135ad03c56df254706910239de Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 24 Sep 2019 23:41:39 +0800 Subject: [PATCH 029/251] no message --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 9f38af3ca8..c69970c702 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ bin/ #data files from program /data.txt/ data.txt +/recurringData.txt/ +recurringData.txt \ No newline at end of file From 84481b16674b7e58d128f54f46d45745bb055641 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Tue, 24 Sep 2019 23:51:28 +0800 Subject: [PATCH 030/251] cleanup on current code base --- src/main/java/Duke.java | 44 ++++++++++++++++---------- src/main/java/Enums/RecurTaskType.java | 5 +++ src/main/java/Operations/Storage.java | 3 -- 3 files changed, 33 insertions(+), 19 deletions(-) create mode 100644 src/main/java/Enums/RecurTaskType.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 144d8c610c..b0ecb12df8 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,5 +1,6 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; +import Enums.RecurTaskType; import Enums.TaskType; import Model_Classes.*; import Operations.*; @@ -33,7 +34,6 @@ public Duke() { ArrayList emptyList = new ArrayList<>(); recurringTaskList = new RecurList(emptyList); } - recurringTaskList.list(); recurHandler = new RecurHandler(recurringTaskList); try { taskList = new TaskList(storage.loadFile("data.txt")); @@ -42,7 +42,6 @@ public Duke() { ArrayList emptyList = new ArrayList<>(); taskList = new TaskList(emptyList); } - recurringTaskList.list(); } /** @@ -73,7 +72,7 @@ public void run() { ui.showWriteError(); } try { - storage.writeFile(recurringTaskList.currentList(), "recurringData.txt"); + storage.writeFile(RecurList.currentList(), "recurringData.txt"); } catch (DukeException e) { ui.showWriteError(); } @@ -146,19 +145,32 @@ public void run() { ui.promptRecurringActions(); while (!isExitRecur) { String temp = parser.getCommand(); - if (temp.equals("delete")) { - recurHandler.deleteRecurring(parser.getIndex()); - } else if (temp.equals("list")) { - recurHandler.listRecurring(); - } else if (temp.equals("find")) { - recurHandler.findRecurring(parser.getKey()); - } else if (temp.equals("exit")){ - isExitRecur = true; - ui.showExit(); - } else if (temp.equals("add")) { - recurHandler.addBasedOnOperation(); - } else { - ui.showCommandError(); + RecurTaskType recurType; + try { + recurType = RecurTaskType.valueOf(temp); + } catch (IllegalArgumentException e) { + recurType = RecurTaskType.others; + } + switch (recurType) { + case delete: + recurHandler.deleteRecurring(parser.getIndex()); + break; + case list: + recurHandler.listRecurring(); + break; + case find: + recurHandler.findRecurring(parser.getKey()); + break; + case exit: + isExitRecur = true; + ui.showExit(); + break; + case add: + recurHandler.addBasedOnOperation(); + break; + default: + ui.showCommandError(); + break; } } isExitRecur = false; diff --git a/src/main/java/Enums/RecurTaskType.java b/src/main/java/Enums/RecurTaskType.java new file mode 100644 index 0000000000..7727828d9d --- /dev/null +++ b/src/main/java/Enums/RecurTaskType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum RecurTaskType { + list, delete, find, others, add, exit +} diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 8b61af5eb3..1eea124ca8 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -31,9 +31,6 @@ public Storage() { * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. */ public ArrayList loadFile(String fileName) throws DukeException { - if (fileName.equals("recurringData.txt")) { - System.out.println("recurring data text file"); - } ArrayList taskArrayList = new ArrayList<>(); try { BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName)); From 3c3d826d1b9bd5f5fac662037e8997a96d3b6e05 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Wed, 25 Sep 2019 09:39:35 +0800 Subject: [PATCH 031/251] Added Snooze function - 2 --- TeamProject.ipr | 121 ++++++++++++++++++ src/main/java/Duke.class | Bin 3551 -> 3551 bytes src/main/java/Duke.java | 6 +- src/main/java/Enums/TimeUnit.class | Bin 0 -> 945 bytes .../Enums/{TimeType.java => TimeUnit.java} | 2 +- src/main/java/Model_Classes/Deadline.class | Bin 1495 -> 1495 bytes src/main/java/Model_Classes/Deadline.java | 17 +-- src/main/java/Model_Classes/Event.class | Bin 1565 -> 1565 bytes src/main/java/Model_Classes/Event.java | 18 +-- src/main/java/Model_Classes/Task.class | Bin 1488 -> 1488 bytes src/main/java/Model_Classes/Task.java | 16 +-- src/main/java/Operations/Parser.class | Bin 1801 -> 1801 bytes src/main/java/Operations/Parser.java | 18 +-- src/main/java/Operations/TaskList$1.class | Bin 743 -> 743 bytes src/main/java/Operations/TaskList.class | Bin 2894 -> 2894 bytes src/main/java/Operations/TaskList.java | 9 +- 16 files changed, 165 insertions(+), 42 deletions(-) create mode 100644 src/main/java/Enums/TimeUnit.class rename src/main/java/Enums/{TimeType.java => TimeUnit.java} (68%) diff --git a/TeamProject.ipr b/TeamProject.ipr index f7e7b18a17..e3385b5a23 100644 --- a/TeamProject.ipr +++ b/TeamProject.ipr @@ -6,6 +6,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/Duke.class b/src/main/java/Duke.class index f7338ec04c7ab1850480c15ac7b1fa55187b2517..0a269af2a27a628ff8ca52c5cbcea6886630c473 100644 GIT binary patch delta 46 xcmcaFeP4P*CWl05US#w#D*$j@4_*KO delta 46 xcmcaFeP4P*CWk~wWkD(#w#D*$mC4`cuU diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 1c645e4fb7..6256810c72 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,7 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; import Enums.Tasktype; -import Enums.TimeType; +import Enums.TimeUnit; import Model_Classes.*; import Operations.*; @@ -126,8 +126,8 @@ public void run() { int index = parser.getIndex(); ui.showSnooze(); int amount = parser.getAmount(); - TimeType timeType = parser.getTimeType(); - taskList.snooze(index, amount, timeType); + TimeUnit timeUnit = parser.getTimeUnit(); + taskList.snooze(index, amount, timeUnit); ui.showSnoozeComplete(); break; default: diff --git a/src/main/java/Enums/TimeUnit.class b/src/main/java/Enums/TimeUnit.class new file mode 100644 index 0000000000000000000000000000000000000000..adbb903cbdd5dbaaaf79f40a22dd1cba606e0b02 GIT binary patch literal 945 zcmZuvZBNrs6n<{owO#4hD+4Av9aFcVo2ZD%76KuVm@M+4K(g?u8+DX)U9znteD)7% zNyKP0eD+5f&%G!Nw>CLXo^#L3bI!fLet-K3U>$FxP*65d!HR~QhGzy+c+O2#N7|sn zDvzk?nB(|DN0#HNj(LtRbu4gvrQtP$a_-mzhD3A64|>DezT0ySe0Nl5i1hmY=!8K& zw$CZ#7Qj>V8Xn#@(tY%g$z4CzvN%CWNDKc*V-rt3TJgI?Pi z?AvXRR~31C9~g?I=Ba&V*F4+r)~wOM^}F@*ltvAg)NU|jr^LT2A2LKOx9i)ZU_j;N z68Gqhj`ugKFxG@Gpz(i)4O)a@(dZp#*X0Uh|29J{Q9loven6|NEL}qVJW+g^JQ9k~@tEwj zsE;I)f8Fm;S}9GwgnogjAci8yj38!2keDE|svvPe5}F`M{RdT$LwYqWCB%%?iiC(+ iEj2{kYH1;o)&Pv_4Yoo6 literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/TimeType.java b/src/main/java/Enums/TimeUnit.java similarity index 68% rename from src/main/java/Enums/TimeType.java rename to src/main/java/Enums/TimeUnit.java index 4271e8be97..212a73cffb 100644 --- a/src/main/java/Enums/TimeType.java +++ b/src/main/java/Enums/TimeUnit.java @@ -1,5 +1,5 @@ package Enums; -public enum TimeType { +public enum TimeUnit { year,month,day,hour,minute } diff --git a/src/main/java/Model_Classes/Deadline.class b/src/main/java/Model_Classes/Deadline.class index cf62d189e46f42982e74b0cc81f43349f438ca7a..9f9871d62316395a270d495feeed2a2f51cf2d79 100644 GIT binary patch delta 355 zcmX|+OHRU26o&s>+d{Y(Z5$MB)kLwN2nr4W1z-4x4s`Ae6A2DXYM@&naVWW4aE=Dz zKsVuxi7Rjwo}0b2E2JPDTLhs#!U7v6SfY?R}uC{(c%!>&RNb%i~63j1saY=>+| zYz?+!wiC8fc=}nK>CkBFZ_%@3IHxBKzl@&HkCs}V%8g*W!vtRF9|T;YO?P00I8UcP zO-~O@S7zbRhYR?>ttj&}7ieCX>;#r8OVqZhElygKTA5mf+R|V1lYa9J)35(;OTZwn S(NP92orrXHNVL<~H{i95_=0(S#pi z!pxap;XcTqtLv1{F& zO+`hW3=TaUq2-~CqKA%HSL|5qMC??oCw3-wF1C)q+$+6!k;SElD_omb)i)2;!2GJG zbOtw!!>Kh;rf;uoF8GgMNPPlO(4+&447kt+%PNYdXP3-dO1mLj#8#TOAGRu6jm@98 zz}9XQpg diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 91bad69d18..797181a071 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -25,6 +25,15 @@ public Deadline (String description, Date by) { this.by = by; } + /** + * Returns the full description including the deadline of the task. + * @return A string indicating the task type, description, and when it should be done by. + */ + @Override + public String toString() { + return "[D]" + super.toString() + " (by: " + by + ")"; + } + @Override public void snoozeYear(int amount) { this.by.setYear(this.by.getYear() + amount);; @@ -50,12 +59,4 @@ public void snoozeMinute(int amount){ this.by.setMinutes(this.by.getMinutes() + amount); } - /** - * Returns the full description including the deadline of the task. - * @return A string indicating the task type, description, and when it should be done by. - */ - @Override - public String toString() { - return "[D]" + super.toString() + " (by: " + by + ")"; - } } diff --git a/src/main/java/Model_Classes/Event.class b/src/main/java/Model_Classes/Event.class index 9615135045175aee00111ec5b7cbdb4f6ac8fa42..c586071bf24dce2ccf62c7fc48ee3c6295d9c84c 100644 GIT binary patch delta 385 zcmX|-O;5r=5Qg7fXd&&2jfW-zexaaLfhrz~AE;C%exUK_O%sjYYNUU`i;0P(XRe+x z8cjUeFhyD-hZgMy-8#TA4(W#q6elU3r8V~p^)@uw delta 377 zcmXYs$w~u36h&`!(n;);K@L2x7fg-gMv*1=zhCWzB9EDk%thIf+;~+5DO}TX~B$OR#5fOhq-Kd!?HP$3GB&|!@khCdjOVYNarlc{H?6opIJ2~uX>|x)&tERnj zZmjEEX0m8eK7KnLWk1}3AXPkjM*0DOf+0OPWQhv}G)4IK&Gqe9+T=sJh;F#+%C5=B zbQQXhuDhVC%4g_CyYAjK=Sy_Ubli;`eSv!eHzOxUNq%riQD$EHWKKq(%?XTQ%#$lw_1G;K7#U<4eSv!eH{)b6MlVi|lKkM3qRhPX&2fwo%#5;=6Id14Ef^RX%Ju-V W6``&K-Yv?v^k4&zx#1|(O&d+AtqzhKo)BTN+@$Ym#(DA-N5fiu=DfY zW^mCyU)=HAtzkzWQq49|Lnef}i9PI_XrM_I`C4kwt9-BPLF=;P`2ig(NA#|ALnGB3 z-6;t=QzPn+rmI%1Bviy;V;mA@kfAqif)6}fhiz!Ds+(1Tdc3{Q4U^bz+8e-Z;SOUj6&LSJGdyv14% t7OJ$axheh${ikc}uG5W{PK|aw{!SX%4)}gZFPdweK!?wBi%iIHzX81DLYn{p delta 358 zcmeC=>*SlDE1Cl*mwc?NCduGU{yG7&v^icQA0; z%Isj^+Q7g7R4ET6`52giqy|u(CW8Qj)?|NH85VA!+R6E>%Dl!vVG{-s22%zZ2J^}D zSxpo{QbGc(+ZY6Wv=N2?Jqa|#fkBYLaq<^d7fxTGv3?Bv4E~cH*^H!tde|{lM*z)^ ooZQDIFAZ_m8n}}nrX>R9lO~^FGvZHU;9y7xI@b`Wf{DQh07HvG)c^nh diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index becc728971..562d2308d9 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -1,10 +1,8 @@ package Operations; import CustomExceptions.DukeException; -import Enums.TimeType; +import Enums.TimeUnit; -import java.io.IOException; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -37,7 +35,7 @@ public String getCommand() { * @return index Index the user wishes to perform operations on. */ public Integer getIndex() { - String temp = scanner.next().trim(); + String temp = scanner.nextLine().trim(); int index = Integer.parseInt(temp); return index; } @@ -90,16 +88,20 @@ public String getKey() { } /** - * Returns the amount of time - * @return + * Returns the amount of time the customer request to snooze + * @return the amount of time the customer request to snooze */ public int getAmount(){ String temp = scanner.next().trim(); return Integer.parseInt(temp); } - public TimeType getTimeType(){ + /** + * Returns the unit of time the customer request to snooze + * @return the unit of time the customer request to snooze + */ + public TimeUnit getTimeUnit(){ String temp = scanner.next(); - return TimeType.valueOf(temp); + return TimeUnit.valueOf(temp); } } diff --git a/src/main/java/Operations/TaskList$1.class b/src/main/java/Operations/TaskList$1.class index c0fd35658107dd1e890ad3ed9a7e03834d910d70..88c856f0f0fe1fc40f902f4bfeb43b345b2f16fd 100644 GIT binary patch delta 65 zcmaFP`kZw_FiU7&X355IMMf}Vat))D97x2Pk%6T$HL-}1LBPi~uQaznc1~;q3lmFdUS`Q=4yOOiQXm#115>moBLkmnUTJQzen@6+Dp+2T?I0tkC<67z`P77>pS78H|CX$>d8M z?yR;9{0w%J692k5UoEdz9B7O`33;~n(bKW z5NC*HkYI>qaAAmN2w_NI2xmxQNM}f9$YMxksA5QCsAb4t=w--cn81+Duz(?N@?|ay K#?r|=+)enc1~;q3lmF7WkKp@4yOOiQXm#115>moBLkmnUTJQzen@6+Dp+2T?I0tk7y}D~ zI0F}h#N^lPW~}lI91IGR)i?}THGyJUlcPD3L=7027z`O?7>pQn7>pV88BBmI)5(`O z+*$1y_!;ac%W*a+x&zgCFvv1^0@Zji*fRJqI57A!I5YSGMg1897y>8n=e%zk1ymmm zv@M1~f+3E Date: Wed, 25 Sep 2019 11:41:03 +0800 Subject: [PATCH 032/251] Revert "Add Snooze function" --- TeamProject.ipr | 189 ------------------ TeamProject.iws | 82 -------- .../CustomExceptions/DukeException$1.class | Bin 457 -> 0 bytes .../java/CustomExceptions/DukeException.class | Bin 805 -> 0 bytes src/main/java/Duke$1.class | Bin 899 -> 0 bytes src/main/java/Duke.class | Bin 3551 -> 0 bytes src/main/java/Duke.java | 28 ++- src/main/java/Enums/ExceptionType.class | Bin 795 -> 0 bytes src/main/java/Enums/Savetype.class | Bin 840 -> 0 bytes src/main/java/Enums/Tasktype.class | Bin 1146 -> 0 bytes src/main/java/Enums/Tasktype.java | 2 +- src/main/java/Enums/TimeType.class | Bin 945 -> 0 bytes src/main/java/Enums/TimeUnit.class | Bin 945 -> 0 bytes src/main/java/Enums/TimeUnit.java | 5 - src/main/java/Model_Classes/Deadline.class | Bin 1495 -> 0 bytes src/main/java/Model_Classes/Deadline.java | 26 --- src/main/java/Model_Classes/Event.class | Bin 1565 -> 0 bytes src/main/java/Model_Classes/Event.java | 26 --- src/main/java/Model_Classes/Task.class | Bin 1488 -> 0 bytes src/main/java/Model_Classes/Task.java | 40 ---- src/main/java/Model_Classes/ToDo.class | Bin 763 -> 0 bytes src/main/java/Operations/CheckAnomaly.class | Bin 813 -> 0 bytes src/main/java/Operations/Parser.class | Bin 1801 -> 0 bytes src/main/java/Operations/Parser.java | 21 +- src/main/java/Operations/Storage$1.class | Bin 639 -> 0 bytes src/main/java/Operations/Storage.class | Bin 4021 -> 0 bytes src/main/java/Operations/TaskList$1.class | Bin 743 -> 0 bytes src/main/java/Operations/TaskList.class | Bin 2894 -> 0 bytes src/main/java/Operations/TaskList.java | 33 +-- src/main/java/Operations/Ui.class | Bin 3002 -> 0 bytes src/main/java/Operations/Ui.java | 14 -- 31 files changed, 22 insertions(+), 444 deletions(-) delete mode 100644 TeamProject.ipr delete mode 100644 TeamProject.iws delete mode 100644 src/main/java/CustomExceptions/DukeException$1.class delete mode 100644 src/main/java/CustomExceptions/DukeException.class delete mode 100644 src/main/java/Duke$1.class delete mode 100644 src/main/java/Duke.class delete mode 100644 src/main/java/Enums/ExceptionType.class delete mode 100644 src/main/java/Enums/Savetype.class delete mode 100644 src/main/java/Enums/Tasktype.class delete mode 100644 src/main/java/Enums/TimeType.class delete mode 100644 src/main/java/Enums/TimeUnit.class delete mode 100644 src/main/java/Enums/TimeUnit.java delete mode 100644 src/main/java/Model_Classes/Deadline.class delete mode 100644 src/main/java/Model_Classes/Event.class delete mode 100644 src/main/java/Model_Classes/Task.class delete mode 100644 src/main/java/Model_Classes/ToDo.class delete mode 100644 src/main/java/Operations/CheckAnomaly.class delete mode 100644 src/main/java/Operations/Parser.class delete mode 100644 src/main/java/Operations/Storage$1.class delete mode 100644 src/main/java/Operations/Storage.class delete mode 100644 src/main/java/Operations/TaskList$1.class delete mode 100644 src/main/java/Operations/TaskList.class delete mode 100644 src/main/java/Operations/Ui.class diff --git a/TeamProject.ipr b/TeamProject.ipr deleted file mode 100644 index e3385b5a23..0000000000 --- a/TeamProject.ipr +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 11 - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TeamProject.iws b/TeamProject.iws deleted file mode 100644 index 83339b2fea..0000000000 --- a/TeamProject.iws +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1569318784512 - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/CustomExceptions/DukeException$1.class b/src/main/java/CustomExceptions/DukeException$1.class deleted file mode 100644 index 35692206ef5fbeb408027d41b7fd69079cab7773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmaJ-O;5r=5Pb_sp%$p%2YN8X^Z*wdPaZU0Dn=5(1H=obQZ`U5yM*1M{w(9g7{d?n zM;WJ>keC=Z*?Ifsy94*kd?$dXJ$FCLMq7G(|j9PV*_? za~(?2f1Y!O)S$(Xy9}aGg!+mhU2ohoWIQ>dV5uDn-i>ENzUceIh&*Ob#*2X8gb68M z#}9m?cRKZ#KGifu5J?q^afj=P92wZB23@Z7tyJ2;frTm#Eo>pnQ1fD?Xd3NbXaUxl*HwNuLQZDQo ztujNaWp*|BZ}LJ823>|cu@l1Nm~UXK5AzkN7h<#}ve|X4K=s?iQm{}U%%DiNwDuIS MOK4JFnhfgc5Pj>UaqKuGO$n5*l0w=hDa7=EI20kFv`CfGs*2b-6sqygDh2XG%t|4SL!h=U0!>h#L)Ubti46Rf83bbyrlCc zsS*)s7iWs0Iny_Y-9r*rk;H;WB=M~N)iBLvtdl}X7ifF$0_C5Pg6+Iwd)}tjn8A3x zNBMCw3M3EnNs-^|{5{U@F;;0!Y}y<~FR4c-gHEI`*+uf6=0334`wG@;7++BMgyIwn zA9GNHYy(BIWwIrrvIuJD6iXKrBcd=UW8+VX(&iLq{{w~d@*vXQXB4I=Yhr^)fg4yL u>s%05X_sqQr$5&zS_At<0mFo4(pCcnO4q=fSf+20YF7xV+4YH@digh+t*xa1 diff --git a/src/main/java/Duke$1.class b/src/main/java/Duke$1.class deleted file mode 100644 index 5dad72d8986e3d799977414e1dff0bebe3d07f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmZvaZBNrs7>4g|UAxXQDxi+}hB9HGZZcm`K@$Tb64@}>q96ET*B+rz&RN=S20xkT z4=^$Q20yEbF~;x%{87f|Sxkm6>2lxaI?qdcp0gi6za0Wt#JwEO;H-r_&RMiN&p2h` z0>ed?X_gYpC6*bMS(Y-(oQZi8S2RqPS}%gc+iAGnQeF1;<5Js=_mYFI(2&|%*N|QI z!axSeeGTdI+!GD@it;Hqx)Dgx?Cp0%)OI@|?ToY%*W05;zd6@Zy~q=50SB$s-kzxJ zx_y^Q>(UEV9LVj4NOqKO;wrtTDdOaziW3tR8&zDh;o!K91=MU@#|;fduC9iz+^#lN ztLN>k1tRq8QKTXpH#zMV%OcBdmOCtWS(aFqQPW`Xca#=1*y~b?XeD&xSi~BfVe`$- zuJ95%D5q-355`g*j>YJ^VUKIZ%X3>Be@2(6EDU0*cK(f+D)IyAhJ#7cXw#ho>aY7s zk{P}TMZ)|%kUm+Wd_`mNh3nG=P#`1vLQ-cVmP)-8&JB>Ncik#w8+ zNd5@3HK_jxi=GLbLIwp)V}^VdHM++PUE>3+lGpJVE%G*=!6Wz4MNFRH6<(9S!CSl| zPvHa|(-<7Kf|InaV(h6&k;Z?d$$NhZbovlbqXH($breZY4|a;UOrE3Wd2%?}U+@8~ Ap8x;= diff --git a/src/main/java/Duke.class b/src/main/java/Duke.class deleted file mode 100644 index 0a269af2a27a628ff8ca52c5cbcea6886630c473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3551 zcmaJ^Yjjjs75>g-GBNeJHwqj zK&ZB*Z(6OkTKn)Vm8sR*0%d}YQq*b{U)9?BqV`{Z=nwy>U0thGzkTn7%($|gweC6l z?DyVh?{m&v_~4~;0ItW|IyPdLhTS>>*cHYG>=9_MhJ89hKE~8Apd;)rq8bK;V(Boj zUj&9U42w)m!-$Sq*d@H9I(iWgqZJ8(Y+*=>NJ@qSqQMbdS_W5!jEEi7aR`TnWlV5K z1iDS2Pss2|VYyv!cgXTi4MzoYmyQP9E$Dj$eXro|li_|159nBlV}gEA$3ys(j!)xZ z4WH3*9gcoq1hA(RPl7i7;+m_QB zH`8e=tq{n>6e>Hnq%6mDV@W&RxGmPKprzfUV-8sgR}|8Ed@LEtTr)k|8B4ngHH93# zc{Eut}t$ZKPE%w4ZgQs1y$A=sK6q`At@m~C}u5(AdgYYxPTnbG5# z(a|n5m0y=Q8C%1bHGDWfs415E}#n{sZI&h1^g4PU^ooGKCwNm~Lh=-S#2EHlQtG&oFZY@WDPunZy9(N-!||aJZIp$=r-`Y3@?bGlVa$UEKkeuq6}w{(=cw}tnhyiFBzB+ z^!Ek&fehzl`LZZKj~^QNkr#g#Hz>Y0UpbAv$+o0{9}7>H@VtVb82G8ky^5b1_&F|c zM~X$-EORi( zcbp_UM<24>)?^}K+Jo%GNsWc|P3s5Ec*feYU!g9qxRBn^SsWDYN9uYG#oXvHTdK|@ z)=fnm=b>+a+3V^Ps0FSl=Oe^K5wv z^R_}PRZI4!T)b%W7EGb%!lsyHGej3QTVvF;-&@yAmprQW0%{qgLh%3dCt>IpEjYJYhpp&ni=9lEaV9Gqm1S=%!PGVt*0HCnK=rmtcWN424JUaqFTqvL+A{m)atH3|C<{ z>NrE>|3jkE7%zvadDP6)*^j2=H1%l=eP+qpc~1pq(4+DkuIO5J7B$_cFnf6pwJV+l z)ZeK|@eA`?#ZNMq;`cbeSNL5dxtt#}q@MTVn!~9whe%eP4z49!ChHw%F*k>KKF9p5 zdZHIV{SmkxA~WvTDy1ZH?%ttYP{W69@`WmsRTum{$ot zhpUB;A9XIt;hL<9`1tw>G|2W4&t1LN6ReC-U|AObo>a3ui@)XBebyBor92W0uFj#c zsdNG>`y#=T)sfP1tZE98sWKAsbex*hu{w(r|5rz(lnFYE59jcaC$V4x*Im}QrbuJO z1giQ@;remh@NyPg3-oXDos*n-d0`Yc`lzNgr9RN?tEvgsl!}A0IpkWGh3-S^vzPvL zl27fu$lx#w=ph{EQ>Tj0nAh++=XX`Dnu{v6MD?pZoJZ7zIwyrDg-VJv(^9UkrH*B& zz;aY$1zTw)dRRO=S<1Wlj^4}v5jJk1jkUCLBaWa6N70N2u#Og6@Fa1|s>L4qv`fv$ zZnYSD)e=P2atx|9uv9DdtF0JP{TN{+!)hO5Y6zoh1W9!ODRl$~)ctVOV@Ru~;i~75 zQ7_=2n!pi8d{~{wn0ghrsSCJWy@@;2TewrbgQMynxJ$i{y8|V-ClJDYff+a!sKSF@ zL*9g%_YqK+(4nD6LvPhicI7M?%J<1oJ0RmB87`q+!!`}u--EtU5Y6u)6krqXz{mXt z#x=~dG-mk(Ht-a=DTkJmTq^I(kiQ||Ul$z@^UUfa9ANtUIS0wn%A|rcf%vN``!CY} Bdf5N~ diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index f19a95a208..53f38cbb10 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,7 +1,6 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; import Enums.Tasktype; -import Enums.TimeUnit; import Model_Classes.*; import Operations.*; @@ -125,16 +124,25 @@ public void run() { ui.showDateError(); } break; - - case snooze : - int index = parser.getIndex(); - ui.showSnooze(); - int amount = parser.getAmount(); - TimeUnit timeUnit = parser.getTimeUnit(); - taskList.snooze(index, amount, timeUnit); - ui.showSnoozeComplete(); + + case time : + ui.showAdd(); + String[] ti = parser.getDescriptionWithDuration(); + String[] ar = parser.getDuration(ti); + int duration = Integer.parseInt(ar[1]); + FixedDuration fixedDuration = new FixedDuration(ar[0], ar[1]); + taskList.add(fixedDuration); + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + "is completed"); + timer.cancel(); + } + } + RemindTask rt = new RemindTask(); + timer.schedule(rt, duration * 1000); break; - + default: ui.showCommandError(); break; diff --git a/src/main/java/Enums/ExceptionType.class b/src/main/java/Enums/ExceptionType.class deleted file mode 100644 index f572758133e5027130ff4e2d50eafea77ad013d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmZ`%+e*Vg5Ivj3rd?yz*88nmZ;67%2l1gr6saH-eW(iJQySMANmFSP(ZBKnDvIK> zA0^IK(TeQ`Cd}-anR90L{p0Bsz$(lbG>mghAf+R&W0HeoN}6;Oot!Sy5;3h~h9MTX z6|w2r^;3raLf#K6^-TWK5$Azh_4lsMMV3LIIoK%d=Zg#jM{OXH3)>4tongqd+F`WK z>ak$xF1Wtf2`eR0+p|j^Mf67U?g@is7S8MoJLB1YIa3U3u3yet?ONts-woD?REwl- z>wvTs-Lh{7VU2pIri?^$j`y84-_%LU&b4f_M)G;F8rB@Kd7~;P&C7hwd@v1)6?=!6?V!Nd?;RM8CrCFm~S3TPV`5S%wKC`!jFrNY4pw+TJhYlNjUpjc>>=Bv3h|JZP-V(e)Fzeq zSI|iefk1oaMdN!K49c-@dZy3E^uFHp7H$KKehhhEgLyYVoH`VD7J zqh=5V@wUM79Q-TiNFd_|{m6@xA(dBc_884x_&2LE)r3cF{@-DnMmF6+GVJ*;17^7R zZx>rk&%zQfwq)Tkwgj@**JYuMx`o?VwU9&JLV-mQc|u+d$2kJ2UO0%Te#v&GIPG_j z{a#EQo=uOp7kZ;nV+wY;pX*f{J5T94v-B3UoiZ~3ND~REi3gBh;RzUl3~pc<0yoL3 zkmh4fAih93hx&;ufmBIPeJ7mCw-zJ diff --git a/src/main/java/Enums/Tasktype.class b/src/main/java/Enums/Tasktype.class deleted file mode 100644 index 53befa77148ea9e362b1fb0f609c9bb81bdab210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmZuvT~8B16g|^!yVIr6@-5#`Dz>0hR77b-5J62Ec~~Ub__S>ovbbzbyCveU(vpb5 zXn6Jq_;ZZ+P8Eu)LnsHsna{(==R;mKY;)dTisOPrr z`n%xhy_2UE&#eanvf|hk&-ERFh;!)pl+r3yrqPPyIRSlWyRKgm2$zmHTlcHgkMyCZ zch-t;HcWx;w^!Aphql*n>H@u)>@~~UdbL6ti6U+Mx^Yl)YTI_nV^#Iv)~-N0Q{1-? z?VM-(dpR?xx&B^0d(B1#*LQ;zfq`r4UuAa$Vy3(2+d-p7^5G0;WT8wQtG`lhoA8JV z|L?FuqcY5DqgHk{U3S>{Z-(=1FOHjhhBI+&U{j#$@|fe8!;3iXU_Oo!jK(p>VVuJR zhe-}o98w&nIixX4Iv1_8BArdyQ-{)*$+kJ(D(ySvfE+HiH^1)L^?JUo?0kBcRr9M0 zbWeuqQW~p6><=I$iweo5LNcn5yecHS3dylTGOdt&1Ib~Y2PtZZ;TAFw$P!Bt@?$h1 zz94jl@F!vdvlOFhEll-uxP4w9Qdy%%oBfK&8MLeQAs#D2N`C@jdI5cQZuA7v&sW5A zlnLQ3Bo-*PO#LF0{G5J+X7%Xd6Ubx46frbKIuwaV6zNo?E2>CBk)*Cjw<0}KkzPgm zlC8Ra#RmQs4k~sd*{U2$#=g_e;U?WsOKYOTv?5J(npU)lglXwbbeooJqSv&Nl=90sj;u-$ySYcV9>&E~2nwih}hhIFZX!?m(AIHVf!rt3Rz!hXjY zw(O3_tBSn+_YB2S^VmMIYo6`*YF03G{a(F%L!*Z4yTK+y_J;V^v+j9e|?E2^4KtO z4+RrxWK1k@ljUZSnY8vXGUJs)*znQH+ENsd5LB#=Z2Bwauv$7iDq1yS6>3K(t^D-iNyOu)WCI*0s; z7{eX1s<@LWK99SX@sjWwDW&oik#i`s@e*GVBvC&PnLa?Ptgf6v{XA3rK6xY*q2mGB z3sE0QBtO0HP}(U?K7)RWs33+S$ebW%M39&u^Qs_mK@yrEN&N>^kSFwN+R6lTRy#65 j%xbF>#I3eALDD(}yAoxP6uzNt(k$UZ+Cw}dpM=sM;5D{T diff --git a/src/main/java/Enums/TimeUnit.class b/src/main/java/Enums/TimeUnit.class deleted file mode 100644 index adbb903cbdd5dbaaaf79f40a22dd1cba606e0b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmZuvZBNrs6n<{owO#4hD+4Av9aFcVo2ZD%76KuVm@M+4K(g?u8+DX)U9znteD)7% zNyKP0eD+5f&%G!Nw>CLXo^#L3bI!fLet-K3U>$FxP*65d!HR~QhGzy+c+O2#N7|sn zDvzk?nB(|DN0#HNj(LtRbu4gvrQtP$a_-mzhD3A64|>DezT0ySe0Nl5i1hmY=!8K& zw$CZ#7Qj>V8Xn#@(tY%g$z4CzvN%CWNDKc*V-rt3TJgI?Pi z?AvXRR~31C9~g?I=Ba&V*F4+r)~wOM^}F@*ltvAg)NU|jr^LT2A2LKOx9i)ZU_j;N z68Gqhj`ugKFxG@Gpz(i)4O)a@(dZp#*X0Uh|29J{Q9loven6|NEL}qVJW+g^JQ9k~@tEwj zsE;I)f8Fm;S}9GwgnogjAci8yj38!2keDE|svvPe5}F`M{RdT$LwYqWCB%%?iiC(+ iEj2{kYH1;o)&Pv_4Yoo6 diff --git a/src/main/java/Enums/TimeUnit.java b/src/main/java/Enums/TimeUnit.java deleted file mode 100644 index 212a73cffb..0000000000 --- a/src/main/java/Enums/TimeUnit.java +++ /dev/null @@ -1,5 +0,0 @@ -package Enums; - -public enum TimeUnit { - year,month,day,hour,minute -} diff --git a/src/main/java/Model_Classes/Deadline.class b/src/main/java/Model_Classes/Deadline.class deleted file mode 100644 index 9f9871d62316395a270d495feeed2a2f51cf2d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1495 zcmaKr`%e==5XZk;9#@Xz{RTxq9&LG4P(dl8(u$xwOduFTjBa5A2ge=hZAtJi@z2mi zA>jxA0RJfCOz%)=oBnWfGqdxVot>Ti{paczfH}M~(Tu@5G+~If`>o_1GZ90aMS{gR ziwPE!ET&i_Sv+7d&0@yDLj#WlBH43+=CvbvCX;z>JIRdHDkV_6V7s; zl3O}wy9cS_@c52Eb=uok0!?eSt2Xi{S(V$CS%*AP?FE=Xdn{g>Ou+PA&-TLAD7o)YIa7Q(3vGC8 zp#`lLy3kFBUh+Kc>zq7YSNhP~_nT@l8^xT3CwOXL-a-ls7M`Kk!Xj(WS$o0SOV*ZH zOS6_??G<_jI@hTQ&Zo2^eP8*>>jDH?Z!c_1|5%`-Ol#viCYJG**T!6j71;;Ur)*LIXv!mEgq zGgLXA$0djiG>+t}p~5&aR88g!cSL@ZGX#c#6>j&Mz;L0M!jReSnRl$hSqqN5EcdjR zJ2$XFley-3$N5w0(5maIT-a-YuQ&S;<_KQhPdebFRa^)6#LaY-6|Jd5X z>JZ7E0?C_AQoacNTR5J-3)J*|zCi8&EzLr}7}Xpjw679sFd8jJCkUM+^iCzTj#0B1 zohEdK(7Tn;dPc2cbe7OLLi;PB4U9GxqbWics4@4bF%b;lE&WYOwTgATq2>*f9VL5& GzR|zEO-ro+ diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 797181a071..7b45b2d8ef 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -33,30 +33,4 @@ public Deadline (String description, Date by) { public String toString() { return "[D]" + super.toString() + " (by: " + by + ")"; } - - @Override - public void snoozeYear(int amount) { - this.by.setYear(this.by.getYear() + amount);; - } - - @Override - public void snoozeMonth(int amount) { - this.by.setMonth(this.by.getMonth() + amount);; - } - - @Override - public void snoozeDay(int amount) { - this.by.setDate(this.by.getDate() + amount);; - } - - @Override - public void snoozeHour(int amount){ - this.by.setHours(this.by.getHours() + amount); - } - - @Override - public void snoozeMinute(int amount){ - this.by.setMinutes(this.by.getMinutes() + amount); - } - } diff --git a/src/main/java/Model_Classes/Event.class b/src/main/java/Model_Classes/Event.class deleted file mode 100644 index c586071bf24dce2ccf62c7fc48ee3c6295d9c84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1565 zcmaJ>>rN9v6#k}Mwk&J83vyA=f^E4}1-XMt0YSN_5R4&4hcbbsWtViPB={sgh9(LL zKYRcm%6Lw9!M2kA*fVF&eBYci-<;Xse=dIkn7}&|jd)Op21MEGZ>DJ6L;{0shS&_V z8DW!T^N7u3Hc!}$vKce*)WEnvNNRz`wIg{dlX-1tlZ#TT8G+ha+p+b$K!40%%u44V zxutWqb1+j5kM9Unr`&xd(6DAZY9oKVr*hkJFH4cS^r1>;cw2$ySiGDo5Z120uR!b7 zdT}-Z({o(+i~68sjuORIIbXdWTX!9ONJ;$JqCC4suefi$SY}kpb<$G5xAh@;o|caG1jcXJrCk5uLP`aXl=g#waiFv>e^o3_ zB^ch-JWMOWC4?y$xQzF&oRPlANWK&*jFEwBGQV&;6gPPXe`4SjYrP>5EfiBI&~{GU zj0)P&Kk~9nYd3dh;0-nHn(JorC#2A-a0?Q*8owE91~d|Aa>R8_=WX zMkX&zehXU3w$W^m;#D-(Ck8Jd5<@=``d)zFCL1X%b)bgY-$W--+R+gZduSAdsY(1m z=-V}=wh-(lOD~2j=NOi%P{r^|R0HLlC}Fz5Oy&$z>JW`hjOXthHC><2QTwkt zvjB+G@e)MpsYErH8ZM`f5H(5EyOpSQOf}1?qeLAe>b*+TdZt?C)JdXF5w*7x^%hej j<+u(a$p-6;wF4PP+v z-4`D;QA~L72lzAmA;z=a4HQcxP4CRTbMCq4-kJUN=in!RyO=g%Vz3EK81l{4I8t$> zO>Q&3xt1hq*uaQ^QGw>X@^WRnq;1y`NG@*49XVW-&c^VvF5AvVR-n=LW?e@Kh}U!` zZO7IR13T-Oh{+X}WT{GH;FdtE&r~bh@M@^3A+Fs(y@2UCuKP~CQnE~KsRdtRa}Zl{9la^g z6nL|8_YghrR*1GjnC(>xs zo4vJO3ukf8LKn^nv^{oR?dh^CEh)X}=DkEC#^M;aa2t0x{w2&6!L=FuIM7DhPH(J=01}xW5SeS=5y?cqBl?v`d=9ip#AsV-6Qpe8uAL`m&=C^! za1}%}WWFK#`7o`q8az+S$4Bee8t3Xm6F&3<;>p-2G$b3oFchiQ3X=NJ$%ui7HEqCW z;L8meYKukuyg*}+m!@|C-66D}oPM#!Ozc=cCgZ>e8ZgT9i-*)hA-*-U&zyZ22Z#gz z)|g;U4=#l@y2#|SiKB4^Ql<#Fd^&8Nu-?;Q&j{-~9rlv2{?lP^5yh3N@BvJ6HJNrF Q50T}ZuhWmyzrp{_zaL91S^xk5 diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 4bf0fd5019..8ef7e1c926 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -56,44 +56,4 @@ public String toString() { return getStatusIcon() + getDescription(); } - /** - * Snooze the task in year - * @param amount number of years to snooze - */ - public void snoozeYear(int amount) { - return; - } - - /** - * Snooze the task in month - * @param amount number of months to snooze - */ - public void snoozeMonth(int amount) { - return; - } - - /** - * Snooze the task in day - * @param amount number of days to snooze - */ - public void snoozeDay(int amount) { - return; - } - - /** - * Snooze the task in hour - * @param amount number of hours to snooze - */ - public void snoozeHour(int amount) { - return; - } - - /** - * Snooze the task in minute - * @param amount number of minutes to snooze - */ - public void snoozeMinute(int amount) { - return; - } - } diff --git a/src/main/java/Model_Classes/ToDo.class b/src/main/java/Model_Classes/ToDo.class deleted file mode 100644 index 9f7c1ce5a8bd27c499e47862f215a98365a5bd54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmaJ<(M}ps5IsY6mu|OW5vA5@t)&fMB9A`M^r0AI6Ko$K`d}J!fg4>|?j?IKB>YJ~ z!#{060X!!!lOlBa>xd%|*_|I>GrIsK9<9 ztQYHDF%p$fsH;lDMuEDjmd*%EHQkYfOg&KY`>@}VQB$-+M$%SKX@p#{lnf?#4Lyw7 z@;Hd;&zt&4AH*emIB{9BibK_wgE=gzPC74=-z>Fh-h6 zoFWMd)AR5KTdeh>`I89wzUaxCR&8O=1AEPuu|iox__V0Wq;wZ=V*$H_!oQgWYNUH| zHkxVnW6`!c8oSuzLDseI4F?4On^H2GNhbW7FFDIG?e#>cPAE-b8dy!rm_z;xY>o$V z0sUf*|D)BFZCjoHEwdCg5r&Px%BqVGgpY~-7HK2wJk7&xO}GB+hae) zU#Gl(3;N9#Zvvm*1YL>Okr7^nM?SH|_vKrp?(ht_d5m!;H+cqq#!`5RcauznZLYtA OO{}t?X4Wfyvws1uSHnL5 diff --git a/src/main/java/Operations/CheckAnomaly.class b/src/main/java/Operations/CheckAnomaly.class deleted file mode 100644 index 79dc1aa595ac6e7617b3c273e7f3e88ae948cc10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcma)4O>fgc5PfUAapRhP(iBPxl&{)NsUeMKyQc4MTohmr-1`hf$CF9p`Qkc!K*?hBM8WyWM?$bV}Tm9iPWZ zNW_o+i+H=fPfdDHY95aw5jia$b*nr7xXx$>N$83PG96;BmJYG&2R-f`Z>BStFfgTK z)x;HCHE|8s85aJgzuy;rY~lvibXX>Atm~+l*uYJOrN)s6c`O4za`M~^vzbEK?2Y!J zaAV>fi}pt(Qaq9`sWp;+k8DR!;-a;e*KSx((hYZz3eGTZjZ(%-V3;1?Fw8257YX;G zlrp!B5utrRij3PFt%yPIb1xB%XAC9lAm7O860wR&dSB_MfTaqOHR-fMo{^tee-HMK z0Ii#BAqy6%WEwM6lBNdaRq|WvopNOW&SFl(Ckb4~r#fP| zk-!8#Q@hV~T*OVan^(JAI&Nb@EqCJhLRs!=xThn9xj1s_yr^L*j%6Kbe5sZd4S5}3 zVO2vxLs3Ahmo3+ozQ9P~nf1al8-ZOlOObJ2p#PTb+QEWAPiAIIpf~4Lq`+XocI8^b z*_HmLwOge{-;+Vka~#X92#jWCqF`0a-7`ypZ@YVp6{k<$t;l_Wu?~;C8^}HB(7o^|AZB>jtqA>z=Q~yq zIbFz{c4?I!@}RsF2~4so4+Ik2+;zN$8-#@91(LLE+K#+WmITslYsqamb@PplXuae$ z{IXoO6;H_x%dboSisIV9B;FMmKE=C+bpsptS~+}U;2hpDP{Oo(yQYlv^X2<7UsIg%cD1@9;6=d3zM z5LZSeV9J@&WcX+TVO=dL(yOKh#iNo^7nN}K+6$}Nkn2yV!c6|8;@f)emp?YFDs|cs zBWiwr=7B(8y;fDq$#lt)@2=pEP_2(kHQN_f%x|bufdbuC-sv@uX|Gcr8w>q z+*6@kr+At}FL%Jm>>3BSbL z8GSTzt(Zs;dNFE`zbBMv$VJR`FF4C+YxXM`9Fv`X!c@uv~OB~`K zOlrJWFY%=4Nb#S6>P%5&vQU+0q@5={#8!t-_ql*!+#zfh*;bLO1gk#J93j1v9y!El zwu!Nq#W(fQncOksI00?0S7|9=5XG>?2%hwRM?K v)z;AQ;GzlqLYoLniDvhR$j7vp__&39d*o_xXWBE1U{A@bO~6%#i{aXTDmZ<4 diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 59dc374d8a..73f4a62ee3 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -1,8 +1,9 @@ package Operations; import CustomExceptions.DukeException; -import Enums.TimeUnit; +import java.io.IOException; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -113,22 +114,4 @@ public String getKey() { String key = scanner.nextLine().toLowerCase(); return key; } - - /** - * Returns the amount of time the customer request to snooze - * @return the amount of time the customer request to snooze - */ - public int getAmount(){ - String temp = scanner.next().trim(); - return Integer.parseInt(temp); - } - - /** - * Returns the unit of time the customer request to snooze - * @return the unit of time the customer request to snooze - */ - public TimeUnit getTimeUnit(){ - String temp = scanner.next(); - return TimeUnit.valueOf(temp); - } } diff --git a/src/main/java/Operations/Storage$1.class b/src/main/java/Operations/Storage$1.class deleted file mode 100644 index dd80360b82347d716e4e1c7b5822775268d90440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmZWmO>fgc5Ph4tc4FMtw1KAOtF$IfKxzaM;sD}OQc=+)2Ul?DY2&PtE$(h)uYz&(<6r3izJmwnwJdKcIPdFbD+mmTs@Xb z42tuS$WHhuC1yD`Jb6z-m)MVWktO0#+F}qJo$-m-KjU*w-9440I+tqF7iOx*9`4gs z1Cg88IyWA60_-9R;Nx0=2WSP@Lz`jCc6U>*Cf$LKi)4BzMLO3a)xjrHXNOa#4xN~ZDd#}ed#WIapycOtipP`b9(%L z^*IAOA?>TQr?atCJS}}BV_A>Zt8kl!RHvb_uxbC+X2b+orno}r6RMQaP=A13{PMq{ z^3{IT?{J*qXE<+4=n`C7K#!nX!Y|ZbM*|yJLX$jgQQX55Jf&E{Dha!#{60d;ufu)k gQKkQHgF__f=o;23IwS?$D47QCQS{6AQWDnw0**a{)&Kwi diff --git a/src/main/java/Operations/Storage.class b/src/main/java/Operations/Storage.class deleted file mode 100644 index da3865e970a33c8c0fd69e709400e1c75407d25a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4021 zcmb_fd2kcg9sbsq^j7P&0g-^05RPEt3#{NKC6Nh6OwXZ3$_R0X0d_v`w4R`wVIS=pUWwblPb<(@slqzqgW%gw_1fsWtnK z-+RCN`@Q%4+=Vkw16YsWYS@f@0{b=8$=(zgQIXUTL`p*dmWl(iAC>E40%;98_Jz@p zgOW1dfIEDHirc6 z*054eR?5k11YWCQwKVE=0k$HgA>Fx2br$oV-KD zJ7xba*}PleJu2R-(P7G1kN2r~zlIOsgDO50VI1y{K*0l2`h&9hh-^M8@G*gp3p^z7 z2?hFqZClyCjOn_Ts~|LKW?d_*VBz4lNh@o5X~%Y>xBJ8%E^kQNX>X%~`nL8R3Icsj z%2F_IFl}2yxrq@gyWJegkfLTBGqoixhl|_V2M?N4W;ExeGtu5`);uzpc0CGfOn7E; zJZ?_{n>1wNxd+k7}_P5RmugcIpe+w^i-id$P-+=jt8P08#lITGD&y5l_? zsU&iP8ip*_i(4`z zu8v!A8zWjH3JMna)U*@blsj<1%37&AEi)w(5GgN6+si~XWqM|pci59MKP#JK3W&JR z;Sn8=;xPpa=A=!>Rt)I)Jieggi#V?1ahy;v-xr@T?a^q$%ckv71Bp2SHV zc}(j#h10a;lF&N+4mTgsaR!g+DBw07U&d2(uzKI-Da-cle41WXFZI*M3^7v<3f&*r zHk)w;%ldMz=S<8}+-QGp+?t)%h}uq>fGHj)EnA>^$qR7fqxmCNoyQNr*Yw3DYB2JRaBa zoD4`^JTCBE9pA(A6cJ<4H#v^ydRcQaZh2!)%AFU&_f?$L@dNx&#gAnFV;w({sr{*p z>(3-`nlGyJ3$Y>&k&0}W09cjUZ6gP*B#pXk?!K0FWsLcSIl%ClgfLUGyI3U^*kBzs zZMJh0ZZu&|S>BOJX0FM%%IB5tms9C;Rakg=sj4ca$>Ld9qBHeHaQ8^6nk6#iX+o3B zg5xe*qV ze|9Zu8yKjmDCl2kgww?$s;t&fF>Du8H4EsT8saqk9KWDqCCc9lRy41-33J@)bL^z) z?M!=P9J!upd(4ep!=t&C^}kVS*hVlYtNfpWJ^we=H5CQ@JCzD;>rk;+gUO8JS^~e6 zC)f*&rXOuT*DWsXC&Y~#)K();)X?B~N2e3sS8 zYnh{Zj`==dJIL8e_Po&%?3jjf!rvHYE8nERVm?@#xjckzWaIX_9N)7|l(wOOy5VWm z4;By@E+9A@2~9&xLybqmL#4G?U`-y{@X)hpGy-e$XxMpd=Fc4k=wxg>i6$eE$Glk3 z2%g4#z8Y~(jut4qBO|ep5sEAnd0Z9~hN$m8h09~=6If)Zc`WXFl&10TI6rB6J-?;= z`uW{mK=ZI6g5A?FVqrrBx+6>SxZ(k*MmUe9owB7Jusfcl0V33$$CWXyfMq_Dp-p3X ztf7jnA&(WE23yItzLHHZU}cd_pTZMv|3fV zlyzuflx4KS73ACtq1^EID+iL9Ks17?hekF#Bpj6IL z5^2H>! zNa-PkxN0!8JT}C1@`So0H-;p>8x2+MHYAB%V?Dn>_Ze&iq&g#L2qSz3H*u=1k=!@4 zrh1Rfbg|o1iK-JaSojnELI@T6K2jvO_Ogt@Xf0s8IwtESzeFWBi zg3!dh7{NnG@_C=aNmw|GQM`yT{0?b?>LC7raq6(CC4;|W0{?>J17|nHzp+T5mAO8T z6#|{TO!*A%gI3P4Tq4~^0wGjH5&vhL!4;^V-Bg4{Is1yhuDQwIO(^W4OLcT$FMA1$ iEx3iF2x(i`W4?-C;T(R=YPy%xCerWYt`Ga|(fi)q1 diff --git a/src/main/java/Operations/TaskList$1.class b/src/main/java/Operations/TaskList$1.class deleted file mode 100644 index 88c856f0f0fe1fc40f902f4bfeb43b345b2f16fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmZvZ+iuf95QhIvoH#LV8whRFmO}y4CIxDW1YCfSP)S8a4oFVnqT*s>ubOS0b>%}* zpNMNfst`hb03Hf4Yk@38t@S_i?d;6%&i?%M{T#qkY*}bwsSXRvb@Em;UNdoB!woGr zwXABnW#YC8hhfR_KFZXe^!c&VRoOIgMsh0lluQ{)`@0Oa=YA*&Uoe#0op%hzb`%JP zxt>&FkWI%T9`SKVGc#Vw{Ua*$hb=G4VqfgYJUHUXQBNl6<{>}fl-^Z-7$s62^hG*} z0uy&>uYpL?*HMz1ShKN?whbFIHagg_aS!(ymUXrpa&_PiA}{kNJ5q!}H;$v&#sj@< zQ;VzRAvPH1hsPr3sf<+O{yl=T#bEC$CF1RnCy7WH8b#gV_)z$C`{o6i46}KY+@eX< z6CP%|M6=!5@BJHnM%_9UJf`~pN6aV=q~c-TS88-+8mV+b6!25Zn^5x@s#B@5R5VuU zQ7_RWvqnp|M0==V7IS19L}w_I2kdl d2AZ^_M8)UH8dxA*%x4y8BhalG{q!|zzX5<9n5X~% diff --git a/src/main/java/Operations/TaskList.class b/src/main/java/Operations/TaskList.class deleted file mode 100644 index a8386ab9ca85f92a81871ea5527f0ba2adeea77a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2894 zcmaJ@TXz#x6#h;Kog^J-Z7CF5AV`6fLL(MMC?JqhT1X3+LIp&aCWmH7Ium9lg?dHB z`we}PH}s`z`J}j3UGm`4NBs%@6J2=u&dl^4oUF6woPGA~+h^}H`Td`VKLgl@FB53T zp*Y%bIDzMJM3JM49IMA3WEAPsa6FEFoJb&sfhMYD6Bxpfz)H_>OMJIvuN#v_ zy6Tzb^ijt#rn08%^$Nsu=D1~eRYwYR)si`w9kL6ud?mD)9-+P7!_=%hXj-OsSfDjk zORu-{yg)QVU4e$IY02U0#F%tOjIlB~-8FR{<4ajuVH64i>r%C%QTug_QF^o-O%1Ab z;`pt+tazqvxf;gEE)y@!q}1lBoM+@qLq^4qMnj(a1=~{E*G!9kTEg(khBcnfd5&p~ z`*`YH%eG&kTuW+jFnippPPpk2b3&eDCVYYVeARKJ<*Dqda64eoyVWXns1{{ILW47(No?}#oq*t^HZbKd17(5+SOlr8P;}-Vnm{P`HL0ZGBI$ndL z<8{0ta4N~?0)tMv(s1&{q$62mmMkPKn{&5X_S|kh$q{EN6k(E+H%+gYG%VXIN+(&8 zQ#Wm=uw{9)cAqVo4BpvEgf&;9UXVjrQ=;i-c#g#MLs~6 zK=bK}bPT^j{GtwytkG{1|J+ZHU6*;DVoMFdjy(dKGF8{JC*}(+-B&Hixh12XZ@EEF z`LdbT=6U8^A1*1lz;SQqMV7TAC+x|f;KEv35F5KNX3kk&yQrpSJyJ$18t$;X6_h`X zMlFA_W>$W&#RVD2O}UOW7b^h z_4%E>5SHK2>>JO{+BbPw8ZI*&%iES`m=>dGTiE`YqT%G^jjFWr(m#{+9XXb1zR3Hd z!@mMLX0HH&$fZGn)r&6%M!_mJEu-w;KNLs=rFwy#!6<^o5WN?99|x;GV`@%pfL+9U zJrpyoswXvktlIE1fsXllHLXdzB*W_}$Zo%pXVFb*xXV(?+IFd05%_8$x=<--@d3js zl%?AdNcJvI`vT4)#gVCstRa4Bf&6SyFJOfxGDf+aV;T2q_(EXYGC;LrWB2{P9JcT~ z+|Cay)2MDkzPE4{!IS)63SN>OoNptii>nCV^*eur*g4wu10vu1YTHRyV+CmoqF75a z>p~MdsFFe_sWPyQ>dHX;0U}*9STQ=Up71v|(c@+c@1(E5=MI|neNv?@T9`p}nNo`W zIICj#D<_)3FNh64K)h}D3=$7f56nQn zBgFK-f2i0ZP|!A@jx^2HQ_RyIx_X+c9@4$!06HRnBQ7-T`HNr$`LogQ3ZrkFjeZsV z&0zIX+=tMB!;2vF&~}itZ)jsBy_}663Lp&c4k7I2B!F-rx;{z(GiYF18}DHaA+`Ig zIZP2^`mH^BANAa8dV(kc!)&*7e@kn8ZgU6@g|UNUAIC|K z%N&(C8_Zk#4AxE~yM(oF8vB>9TBosn32Xf{nwPLP%;P`6>IE+F5H7NEFQJvr`)~y# zxQbDXVH|n>ACUZZU*jjch)-eSE=sr$%g;$1T5DGmp9Us!AD&|(Rk^qOxLB6-{2kZA yuckVmTMZjzKg;s~_af-ULB3T9Z^S0fn#kM8HyUI31fSFCdL9e>o;*pZQ~v?cNwvKI diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index bf00489f84..71babf7862 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -1,10 +1,9 @@ package Operations; import CustomExceptions.DukeException; -import Enums.TimeUnit; import Model_Classes.Task; -import Model_Classes.ToDo; +import java.awt.desktop.SystemSleepEvent; import java.util.ArrayList; /** @@ -79,36 +78,6 @@ public void find (String key) { } } - /** - * Snooze a specific task indicated by user - * @param index the index of the task to be snoozed - * @param amount the amount of time to snooze - * @param timeUnit unit for snooze time: year, month, day, hour, minute - */ - public void snooze (int index, int amount, TimeUnit timeUnit){ - if (tasks.get(index - 1) instanceof ToDo){ - System.out.println("Todo cannot be snoozed"); - return; - } - switch (timeUnit) { - case year: - tasks.get(index - 1).snoozeYear(amount); - break; - case month: - tasks.get(index - 1).snoozeMonth(amount); - break; - case day: - tasks.get(index - 1).snoozeDay(amount); - break; - case hour: - tasks.get(index - 1).snoozeHour(amount); - break; - case minute: - tasks.get(index - 1).snoozeMinute(amount); - break; - } - } - /** * Returns the entire ArrayList of tasks * @return tasks The ArrayList of Task objects that is being operated on. diff --git a/src/main/java/Operations/Ui.class b/src/main/java/Operations/Ui.class deleted file mode 100644 index 5a18ea8dda892bafea6f88e0f811d2a40257925a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3002 zcmaJ@ZCBJr6u#pN8`ni}eL<_WgH-`t37}SGu~tB2Eh=_Fv{JXTn?WK;W=}E;ZVzq$ zM*l|pp*_bB{Q><^J$)t#yX+yS*+V9|bD!tlx%Zg~|NQ&uZz8%&@ALE-Oi67@x5R<_A$bm6u=4acm#nVe}q#5Onu^K4# z6YRzA%bfC?hMv(0V_XYeEz{t!p%OUqV`>;Q9su|v*h}!dF+KL1x;-zWM(8%RtAf-$ zUd+7c@a3zj6*lC88?SlQ9seM?;o|AldC2c_UgPWd!???LW3L*Ax#wqd z+qfBX?3LU(p8=|7=XVXa&DU$SQVmn!crM&)?D+zq&g&bh&R?g%aT2G&`E z)zz->+{oCaDHPWt+TyV2@$qqs-kKomj4oHD2pgNmZ9|0|ZSW1{erHDZUb~!lVwk@{ zNxMFLQ$)NjWx!ia7)^ERx&u|lg^5er5J5wFo-vpS$(x~S$S8`lD#wB~G=^0MT83Dwqhu6}Xf8iu zVI{7^Hs5jeCKrK11yF6Hax8qTs=}~cLW3P;{9CYx*qs6DZSrm;;*TTMSHPm%&A3j= zQ6=t3;UF!^(LcG3*yyC^sU0Lxhbu}Qchl+a6jK*;Bds%Dk~)Je?h2y{gwI#n&7?~u zh$?Up2s_?{GaJ`XG-U|Q_*~&Zm>n2#wb!$KTuVx!o1VKBHzw`pUN%N^QKHacp0?Jc zCW1tZdwyU?p-MP3lIAyC+UQ*x)%xfr6zDj%@7rx$d~tEw_ZeN6AB8z*rn@!rr8GUY zZ%x>fQ})!v_YD?Nle#tr(L_@2vog`BjpVDxBL8)&h=C=rI-_*SH*@e=V*h`)dTCx%8k*b|M#O| zI*wgjZ9S@+wJx_@JnPNFhhoyaW}b+ zrNR3Fx$p_oCUQ4o0=q^98Uf(T>`2ElAU8oZ4#<^kNInB{8<0DIT+N0Y&w!KxnE~Wl zHl&aNnFVAHkdbUie+Hxi$WuT@vmqxkAj^Qf1Y|55GLQjT1LQRz*Rvsm8IX5?)Bw4W z4LO+sk$`LfQtCh+q@p=*L{kLBjHlA^bPq+MKMxc>Bp*P13RE{cR6Y7T(*sR})BQFkK>!C=Z?}FlIME?cRf5lF)A>u Date: Wed, 25 Sep 2019 12:20:47 +0800 Subject: [PATCH 033/251] Added Snooze function-3 --- src/main/java/Duke.java | 20 +++++++++++++++++++- src/main/java/Enums/Tasktype.java | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index f19a95a208..317b562e05 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -125,7 +125,25 @@ public void run() { ui.showDateError(); } break; - + + case time : + ui.showAdd(); + String[] ti = parser.getDescriptionWithDuration(); + String[] ar = parser.getDuration(ti); + int duration = Integer.parseInt(ar[1]); + FixedDuration fixedDuration = new FixedDuration(ar[0], ar[1]); + taskList.add(fixedDuration); + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + "is completed"); + timer.cancel(); + } + } + RemindTask rt = new RemindTask(); + timer.schedule(rt, duration * 1000); + break; + case snooze : int index = parser.getIndex(); ui.showSnooze(); diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java index e0fef2d754..c407d8dcff 100644 --- a/src/main/java/Enums/Tasktype.java +++ b/src/main/java/Enums/Tasktype.java @@ -1,5 +1,5 @@ package Enums; public enum Tasktype { - todo, list, deadline, event, done, delete, find, bye, snooze + todo, list, deadline, event, done, delete, find, bye, time, snooze } From e800e4df0420f028b452a02ff300167295d5a930 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 12:29:52 +0800 Subject: [PATCH 034/251] renew structure for recurring tasks, can load and write recurring tasks --- .gitignore | 2 - src/main/java/Duke.java | 19 +-- src/main/java/Enums/RecurTaskType.java | 2 +- src/main/java/Model_Classes/Event.java | 1 - .../java/Model_Classes/RecurringDeadline.java | 23 ++++ .../java/Model_Classes/RecurringEvent.java | 23 ++++ .../java/Model_Classes/RecurringToDo.java | 19 +++ src/main/java/Operations/Parser.java | 3 + src/main/java/Operations/RecurHandler.java | 63 +++++---- src/main/java/Operations/RecurList.java | 47 ------- src/main/java/Operations/Storage.java | 126 +++++++++++++----- src/main/java/Operations/Ui.java | 11 ++ 12 files changed, 213 insertions(+), 126 deletions(-) create mode 100644 src/main/java/Model_Classes/RecurringDeadline.java create mode 100644 src/main/java/Model_Classes/RecurringEvent.java create mode 100644 src/main/java/Model_Classes/RecurringToDo.java delete mode 100644 src/main/java/Operations/RecurList.java diff --git a/.gitignore b/.gitignore index 1096feb854..9f38af3ca8 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,3 @@ bin/ #data files from program /data.txt/ data.txt -/recurringData.txt/ -recurringData.txt diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b0ecb12df8..00833770f6 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -15,7 +15,6 @@ public class Duke { private Ui ui; private Storage storage; private TaskList taskList; - private RecurList recurringTaskList; private Parser parser; private RecurHandler recurHandler; /** @@ -27,14 +26,6 @@ public Duke() { ui.startUp(); storage = new Storage(); parser = new Parser(); - try { - recurringTaskList = new RecurList(storage.loadFile("recurringData.txt")); - } catch (DukeException e) { - ui.showLoadError(); - ArrayList emptyList = new ArrayList<>(); - recurringTaskList = new RecurList(emptyList); - } - recurHandler = new RecurHandler(recurringTaskList); try { taskList = new TaskList(storage.loadFile("data.txt")); } catch (DukeException e) { @@ -42,6 +33,8 @@ public Duke() { ArrayList emptyList = new ArrayList<>(); taskList = new TaskList(emptyList); } + recurHandler = new RecurHandler(taskList); + recurHandler.checkRecurrence(taskList); } /** @@ -71,11 +64,6 @@ public void run() { } catch (DukeException e) { ui.showWriteError(); } - try { - storage.writeFile(RecurList.currentList(), "recurringData.txt"); - } catch (DukeException e) { - ui.showWriteError(); - } ui.showBye(); break; @@ -152,9 +140,6 @@ public void run() { recurType = RecurTaskType.others; } switch (recurType) { - case delete: - recurHandler.deleteRecurring(parser.getIndex()); - break; case list: recurHandler.listRecurring(); break; diff --git a/src/main/java/Enums/RecurTaskType.java b/src/main/java/Enums/RecurTaskType.java index 7727828d9d..6312ed2e51 100644 --- a/src/main/java/Enums/RecurTaskType.java +++ b/src/main/java/Enums/RecurTaskType.java @@ -1,5 +1,5 @@ package Enums; public enum RecurTaskType { - list, delete, find, others, add, exit + list, find, others, add, exit } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 3e77b319f8..a431054d17 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -34,5 +34,4 @@ public Event(String description, Date at) { public String toString() { return "[E]" + super.toString() + " (on: " + at + ")"; } - } diff --git a/src/main/java/Model_Classes/RecurringDeadline.java b/src/main/java/Model_Classes/RecurringDeadline.java new file mode 100644 index 0000000000..4542c10f3d --- /dev/null +++ b/src/main/java/Model_Classes/RecurringDeadline.java @@ -0,0 +1,23 @@ +package Model_Classes; + +import java.util.Date; + +public class RecurringDeadline extends Deadline { + private String recurrence; + /** + * Constructor for the Deadline object. + * Takes in inputs for description and date/time the tasks should be done by. + * + * @param description Description of the task + * @param by The time the tasks should be done by. + */ + public RecurringDeadline(String description, Date by, String recurrence) { + super(description, by); + this.recurrence = recurrence; + } + + @Override + public String toString() { + return super.toString() + " (R: " + recurrence + ")"; + } +} diff --git a/src/main/java/Model_Classes/RecurringEvent.java b/src/main/java/Model_Classes/RecurringEvent.java new file mode 100644 index 0000000000..1cbc08105b --- /dev/null +++ b/src/main/java/Model_Classes/RecurringEvent.java @@ -0,0 +1,23 @@ +package Model_Classes; + +import java.util.Date; + +public class RecurringEvent extends Event { + private String recurrence; + /** + * Constructor for Event object + * Takes in inputs for description of the event and the time the event occurs + * + * @param description Description of the event + * @param at Time the event happens + */ + public RecurringEvent(String description, Date at, String recurrence) { + super(description, at); + this.recurrence = recurrence; + } + + @Override + public String toString() { + return super.toString() + " (R: " + recurrence + ")"; + } +} diff --git a/src/main/java/Model_Classes/RecurringToDo.java b/src/main/java/Model_Classes/RecurringToDo.java new file mode 100644 index 0000000000..73a50ec79a --- /dev/null +++ b/src/main/java/Model_Classes/RecurringToDo.java @@ -0,0 +1,19 @@ +package Model_Classes; + +public class RecurringToDo extends ToDo { + private String recurrence; + /** + * Constructor of the class. Takes in the description of the task + * + * @param description Description of the task. + */ + public RecurringToDo(String description, String recurrence) { + super(description); + this.recurrence = recurrence; + } + + @Override + public String toString() { + return super.toString() + " (R: " + recurrence + ")"; + } +} diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index f5ea4e823c..31fda3e045 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -88,4 +88,7 @@ public String getKey() { return key; } + public String getRecurrence() { + return scanner.nextLine().trim().toLowerCase(); + } } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 2fe7878399..4c04c6621f 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -3,21 +3,24 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; import Enums.TaskType; -import Model_Classes.Deadline; -import Model_Classes.Event; -import Model_Classes.ToDo; +import Model_Classes.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; public class RecurHandler { - private RecurList recurringList; + private TaskList taskList; private Ui ui = new Ui(); private Parser parser = new Parser(); - public RecurHandler(RecurList recurringList) { - this.recurringList = recurringList; + public RecurHandler(TaskList recurringList) { + this.taskList = recurringList; } public void addBasedOnOperation() { + ui.promptForRecurrence(); + String recurrence = parser.getRecurrence(); + ui.promptForTask(); String command = parser.getCommand(); TaskType taskType; try { @@ -28,8 +31,8 @@ public void addBasedOnOperation() { switch (taskType) { case todo: try { - ToDo temp = new ToDo(parser.getDescription()); - recurringList.add(temp); + RecurringToDo temp = new RecurringToDo(parser.getDescription(), recurrence); + taskList.add(temp); ui.showAddRecur(); } catch (DukeException e) { ui.showEmptyDescriptionError(); @@ -40,8 +43,8 @@ public void addBasedOnOperation() { try { String[] deadlineArray = parser.getDescriptionWithDate(); Date by = parser.formatDate(deadlineArray[1]); - Deadline temp = new Deadline(deadlineArray[0], by); - recurringList.add(temp); + RecurringDeadline temp = new RecurringDeadline(deadlineArray[0], by, recurrence); + taskList.add(temp); ui.showAddRecur(); } catch (DukeException e) { ui.showDateError(); @@ -53,8 +56,8 @@ public void addBasedOnOperation() { String[] eventArray = parser.getDescriptionWithDate(); Date at = parser.formatDate(eventArray[1]); if(CheckAnomaly.checkTime(at, TaskList.currentList())){ - Event temp = new Event(eventArray[0], at); - recurringList.add(temp); + RecurringEvent temp = new RecurringEvent(eventArray[0], at, recurrence); + taskList.add(temp); ui.showAddRecur(); } else { throw new DukeException(ExceptionType.timeClash); @@ -69,21 +72,35 @@ public void addBasedOnOperation() { } } - public void deleteRecurring(int index) { - try { - recurringList.delete(index); - ui.showDeletedRecur(index); - } catch (DukeException e) { - ui.showIndexError(); - } - } - public void listRecurring() { ui.showListRecur(); - recurringList.list(); + int listCount = 1; + for (Task output : TaskList.currentList()) { + if (output.toString().contains("(R:")) { + System.out.println("\t" + listCount + ". " + output.toString()); + listCount += 1; + } + } } + public void findRecurring(String key) { ui.showListRecur(); - recurringList.find(key); + int queryCount = 1; + for (Task query : TaskList.currentList()) { + if (query.toString().toLowerCase().contains(key) && query.toString().contains("(R:")) { + System.out.println("\t" + queryCount + ". " + query.toString()); + } + queryCount += 1; + } + if (queryCount == 1) { + System.out.println("\tYour search returned no results.... Try searching with another keyword!"); + } + } + + public void checkRecurrence(TaskList taskList) { + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + String time = now.format(dateTimeFormatter); + } } diff --git a/src/main/java/Operations/RecurList.java b/src/main/java/Operations/RecurList.java deleted file mode 100644 index 4c0202ee58..0000000000 --- a/src/main/java/Operations/RecurList.java +++ /dev/null @@ -1,47 +0,0 @@ -package Operations; - -import CustomExceptions.DukeException; -import Model_Classes.Task; - -import java.util.ArrayList; - -public class RecurList { - private static ArrayList tasks; - - public RecurList(ArrayList tasks) { - this.tasks = tasks; - } - - public void add(Task newTask) { - tasks.add(newTask); - } - - public void list() { - int listCount = 1; - for (Task output : tasks) { - System.out.println(" " + listCount + ". " + output.toString()); - listCount += 1; - } - } - - public void find (String key) { - int queryCount = 1; - for (Task query : tasks) { - if (query.toString().toLowerCase().contains(key)) { - System.out.println(" " + queryCount + ". " + query.toString()); - } - queryCount += 1; - } - if (queryCount == 1) { - System.out.println(" Your search returned no results.... Try searching with another keyword!"); - } - } - - public static ArrayList currentList() { - return tasks; - } - - public void delete(int index) throws DukeException { - tasks.remove(index - 1); - } -} diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 1eea124ca8..126b0379ca 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -27,6 +27,7 @@ public Storage() { * Returns an ArrayList of Tasks from a .txt file. * Extracts the relevant information from the data.txt file in Duke to create the tasks. * Populates an ArrayList with these created tasks. + * * @return taskArrayList An ArrayList of Tasks that is created from the .txt file. * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. */ @@ -41,39 +42,68 @@ public ArrayList loadFile(String fileName) throws DukeException { } parser = new Parser(); for (String list : tempList) { - String[] temp = list.split("#", 4); + String[] temp = list.split("#"); SaveType type; try { type = SaveType.valueOf(temp[0]); } catch (IllegalArgumentException e) { type = SaveType.empty; } - switch (type) { - case T : - ToDo tempToDo = new ToDo(temp[2]); - if (temp[1].equals("y")) { - tempToDo.setDone(); - } - taskArrayList.add(tempToDo); - break; - case E : - Date by = parser.formatDate(temp[3]); - Event tempEvent = new Event(temp[2], by); - if (temp[1].equals("y")) { - tempEvent.setDone(); - } - taskArrayList.add(tempEvent); - break; - case D : - Date deadlineBy = parser.formatDate(temp[3]); - Deadline tempDeadline = new Deadline(temp[2], deadlineBy); - if (temp[1].equals("y")) { - tempDeadline.setDone(); - } - taskArrayList.add(tempDeadline); - break; - default: - throw new DukeException(); + if (list.contains("#week") || list.contains("#day") || list.contains("#month")) { + switch (type) { + case T: + RecurringToDo tempToDo = new RecurringToDo(temp[2], temp[3]); + if (temp[1].equals("y")) { + tempToDo.setDone(); + } + taskArrayList.add(tempToDo); + break; + + case E: + Date by = parser.formatDate(temp[3]); + RecurringEvent tempEvent = new RecurringEvent(temp[2], by, temp[4]); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); + break; + case D: + Date deadlineBy = parser.formatDate(temp[3]); + RecurringDeadline tempDeadline = new RecurringDeadline(temp[2], deadlineBy, temp[4]); + if (temp[1].equals("y")) { + tempDeadline.setDone(); + } + taskArrayList.add(tempDeadline); + break; + } + } else { + switch (type) { + case T: + ToDo tempToDo = new ToDo(temp[2]); + if (temp[1].equals("y")) { + tempToDo.setDone(); + } + taskArrayList.add(tempToDo); + break; + case E: + Date by = parser.formatDate(temp[3]); + Event tempEvent = new Event(temp[2], by); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); + break; + case D: + Date deadlineBy = parser.formatDate(temp[3]); + Deadline tempDeadline = new Deadline(temp[2], deadlineBy); + if (temp[1].equals("y")) { + tempDeadline.setDone(); + } + taskArrayList.add(tempDeadline); + break; + default: + throw new DukeException(); + } } } } catch (IOException e) { @@ -87,6 +117,7 @@ public ArrayList loadFile(String fileName) throws DukeException { * Formats all task information into a style that the loadFile() method is able to understand * Writes all the formatted information into a data.txt file for storage * Will not write any information if the there are mistakes in the ArrayList information. + * * @param list ArrayList of Tasks to be stored on data.txt * @throws DukeException If there are parsing errors in the ArrayList. */ @@ -97,22 +128,47 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio String done = s.getDone() ? "y" : "n"; String type = String.valueOf(s.toString().charAt(1)); String description = s.getDescription(); - String[] tempString = s.toString().split("\\s+"); - String time = ""; + String time = convertForStorage(s); + String out = type + "#" + done + "#" + description + "#" + time; + writer.write(out); + writer.newLine(); + } + writer.close(); + } catch (IOException e) { + throw new DukeException(); + } + } + + private String convertForStorage(Task task) throws DukeException { + try { + String type = String.valueOf(task.toString().charAt(1)); + String time = ""; + if (!task.toString().contains("(R:")) { + String[] tempString = task.toString().split("\\s+"); if (!type.equals("T")) { - tempString[8] = tempString[8].substring(0, tempString[8].length()-1); + tempString[8] = tempString[8].substring(0, tempString[8].length() - 1); Date date = new SimpleDateFormat("MMM").parse(tempString[4]); DateFormat dateFormat = new SimpleDateFormat("MM"); String dateOut = dateFormat.format(date); String[] timeArray = tempString[6].split(":", 3); time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1]; } - String out = type + "#" + done + "#" + description + "#" + time; - writer.write(out); - writer.newLine(); + } else { + String[] tempString = task.toString().split("\\s+"); + if (!type.equals("T")) { + tempString[8] = tempString[8].substring(0, tempString[8].length() - 1); + Date date = new SimpleDateFormat("MMM").parse(tempString[4]); + DateFormat dateFormat = new SimpleDateFormat("MM"); + String dateOut = dateFormat.format(date); + String[] timeArray = tempString[6].split(":", 3); + String recurringFrame = tempString[10].substring(0, tempString[10].length() - 1); + time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1] + "#" + recurringFrame; + } else { + time = tempString[3].substring(0, tempString[3].length() - 1); + } } - writer.close(); - } catch (IOException | ParseException e) { + return time; + } catch (ParseException e) { throw new DukeException(); } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 0a6961db1d..67765988f3 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -141,4 +141,15 @@ public void promptRecurringActions() { System.out.println("\tE.g : find homework"); System.out.println("\tE.g : list"); } + + public void promptForRecurrence() { + System.out.println("Please enter the recurrence of the task, either by day, week or month"); + System.out.println("\tE.g : Day"); + System.out.println("\tE.g : Week"); + System.out.println("\tE.g : Month"); + } + + public void promptForTask() { + System.out.println("now enter your desired task as usual!"); + } } From 3a587bfbdffa200dc45601ae20b2f0fb0b3da760 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 15:47:15 +0800 Subject: [PATCH 035/251] added recurrence --- src/main/java/Enums/RecurrenceScheduleType.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/Enums/RecurrenceScheduleType.java diff --git a/src/main/java/Enums/RecurrenceScheduleType.java b/src/main/java/Enums/RecurrenceScheduleType.java new file mode 100644 index 0000000000..102ac6cf83 --- /dev/null +++ b/src/main/java/Enums/RecurrenceScheduleType.java @@ -0,0 +1,4 @@ +package Enums; + +public enum RecurrenceScheduleType { +} From f0ed8fc51ee559b54a4a0af0f18e53361f98ba55 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 15:47:25 +0800 Subject: [PATCH 036/251] added recurrence --- src/main/java/Duke.java | 6 +- .../java/Enums/RecurrenceScheduleType.java | 1 + src/main/java/Model_Classes/Task.java | 12 ++ src/main/java/Operations/RecurHandler.java | 155 +++++++++++++++++- src/main/java/Operations/Storage.java | 2 +- src/main/java/Operations/TaskList.java | 4 + src/main/java/Operations/Ui.java | 4 + 7 files changed, 179 insertions(+), 5 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 00833770f6..07fe333eff 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -34,7 +34,11 @@ public Duke() { taskList = new TaskList(emptyList); } recurHandler = new RecurHandler(taskList); - recurHandler.checkRecurrence(taskList); + if (recurHandler.checkRecurrence(taskList)) { + ui.showChangeInTaskList(); + taskList.list(); + } + } /** diff --git a/src/main/java/Enums/RecurrenceScheduleType.java b/src/main/java/Enums/RecurrenceScheduleType.java index 102ac6cf83..442c890f57 100644 --- a/src/main/java/Enums/RecurrenceScheduleType.java +++ b/src/main/java/Enums/RecurrenceScheduleType.java @@ -1,4 +1,5 @@ package Enums; public enum RecurrenceScheduleType { + day, week, month } diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 345bd17a42..88c9f174ed 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,11 +1,16 @@ package Model_Classes; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; + /** * Parent class for all other types of tasks */ public class Task{ private String description; private boolean isDone; + private String created; /** * Constructor for the task object. takes in the description of the task @@ -14,6 +19,13 @@ public class Task{ public Task(String description) { this.description = description; this.isDone = false; + DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + LocalDateTime now = LocalDateTime.now(); + this.created = now.format(dateTimeFormatterNow); + } + + public String getCreated() { + return this.created; } /** diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 4c04c6621f..f822400aa0 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -2,11 +2,14 @@ import CustomExceptions.DukeException; import Enums.ExceptionType; +import Enums.RecurrenceScheduleType; import Enums.TaskType; import Model_Classes.*; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Calendar; import java.util.Date; public class RecurHandler { @@ -97,10 +100,156 @@ public void findRecurring(String key) { } } - public void checkRecurrence(TaskList taskList) { + public boolean checkRecurrence(TaskList taskList) { LocalDateTime now = LocalDateTime.now(); - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); - String time = now.format(dateTimeFormatter); + DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + String currentTime = now.format(dateTimeFormatterNow); + int index = 0; + boolean isEdited = false; + for (Task check : TaskList.currentList()) { + if (check.toString().contains("(R:")) { + String temp = check.toString(); + String[] array = temp.split("\\s+"); + String recurrenceSchedule; + RecurrenceScheduleType type; + Calendar calendar = Calendar.getInstance(); + String description = check.getDescription(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy 18:00"); + if (check.toString().contains("[T]")) { + recurrenceSchedule = array[3].substring(0, array[3].length() - 1); + type = RecurrenceScheduleType.valueOf(recurrenceSchedule); + switch (type) { + case day: + try { + Date current = parser.formatDate(currentTime); + Date created = parser.formatDate(check.getCreated()); + calendar.setTime(created); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + RecurringToDo recurringToDo = new RecurringToDo(description, "day"); + taskList.replace(index, recurringToDo); + isEdited = true; + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + case week: + try { + Date current = parser.formatDate(currentTime); + Date created = parser.formatDate(check.getCreated()); + calendar.setTime(created); + calendar.add(Calendar.DAY_OF_WEEK, 7); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + RecurringToDo recurringToDo = new RecurringToDo(description, "week"); + taskList.replace(index, recurringToDo); + isEdited = true; + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + case month: + try { + Date current = parser.formatDate(currentTime); + Date created = parser.formatDate(check.getCreated()); + calendar.setTime(created); + calendar.add(Calendar.MONTH, 1); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + RecurringToDo recurringToDo = new RecurringToDo(description, "month"); + taskList.replace(index, recurringToDo); + isEdited = true; + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + } + } else { + recurrenceSchedule = array[10].substring(0, array[10].length() - 1); + type = RecurrenceScheduleType.valueOf(recurrenceSchedule); + switch (type) { + case week: + try { + Date current = parser.formatDate(currentTime); + String date = new Storage().convertForStorage(check); + date = date.substring(0, 16); + Date storedDate = parser.formatDate(date); + calendar.setTime(storedDate); + calendar.add(Calendar.DAY_OF_MONTH, 7); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + if (check.toString().contains("[D]")) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "week"); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "week"); + taskList.replace(index, recurringEvent); + isEdited = true; + } + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + case day: + try { + Date current = parser.formatDate(currentTime); + String date = new Storage().convertForStorage(check); + date = date.substring(0, 16); + Date storedDate = parser.formatDate(date); + calendar.setTime(storedDate); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + if (check.toString().contains("[D]")) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "day"); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "day"); + taskList.replace(index, recurringEvent); + isEdited = true; + } + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + case month: + try { + Date current = parser.formatDate(currentTime); + String date = new Storage().convertForStorage(check); + date = date.substring(0, 16); + Date storedDate = parser.formatDate(date); + calendar.setTime(storedDate); + calendar.add(Calendar.MONTH, 1); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) > 0) { + if (check.toString().contains("[D]")) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "month"); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "month"); + taskList.replace(index, recurringEvent); + isEdited = true; + } + } + } catch (DukeException e) { + e.printStackTrace(); + } + break; + } + } + } + index += 1; + } + return isEdited; } } diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 126b0379ca..e38a09902c 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -139,7 +139,7 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio } } - private String convertForStorage(Task task) throws DukeException { + public String convertForStorage(Task task) throws DukeException { try { String type = String.valueOf(task.toString().charAt(1)); String time = ""; diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index c70bbf59a0..cb7b7dacc1 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -84,4 +84,8 @@ public void find (String key) { public static ArrayList currentList() { return tasks; } + + public void replace(int index, Task replacement) { + tasks.set(index, replacement); + } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 67765988f3..2d014841f1 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -152,4 +152,8 @@ public void promptForRecurrence() { public void promptForTask() { System.out.println("now enter your desired task as usual!"); } + + public void showChangeInTaskList() { + System.out.println("You have some recurring tasks that need to be cleared, please check them:"); + } } From a7d44cfb3a7638717aa3c1f637c90562fa2ec81e Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 16:09:07 +0800 Subject: [PATCH 037/251] no message --- src/main/java/Enums/TaskType.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 0ad9b0698f..433f0b2623 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,4 @@ package Enums; public enum TaskType { - todo, list, deadline, event, done, delete, find, bye, recur, others } From 40381ea812c1c04859900bb778cbcc7cc05feaef Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 16:09:12 +0800 Subject: [PATCH 038/251] no message --- src/main/java/Enums/TaskType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 433f0b2623..8d1b06661f 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,4 +1,5 @@ package Enums; public enum TaskType { + list, bye, find, done , delete, todo, deadline, other, event, recur, timer, snooze, others } From 7ff1b5389a766ff9352a414f3d9e3ec5bdcdb046 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 16:24:41 +0800 Subject: [PATCH 039/251] no message --- src/main/java/Duke.java | 6 ++-- src/main/java/Enums/Tasktype.java | 2 +- src/main/java/Enums/TimeUnit.java | 5 ++++ src/main/java/Model_Classes/Task.java | 39 ++++++++++++++++++++++++++ src/main/java/Operations/Parser.java | 19 +++++++++++++ src/main/java/Operations/TaskList.java | 32 +++++++++++++++++++++ src/main/java/Operations/Ui.java | 12 ++++++++ 7 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 src/main/java/Enums/TimeUnit.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 7678632a67..1f3d042913 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -9,6 +9,7 @@ import java.util.Date; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.TimeUnit; /** * main class of the Duke program @@ -137,7 +138,6 @@ public void run() { } break; -<<<<<<< HEAD case recur: ui.promptRecurringActions(); while (!isExitRecur) { @@ -168,7 +168,8 @@ public void run() { } } isExitRecur = false; -======= + break; + case time : ui.showAdd(); String[] ti = parser.getDescriptionWithDuration(); @@ -194,7 +195,6 @@ public void run() { TimeUnit timeUnit = parser.getTimeUnit(); taskList.snooze(index, amount, timeUnit); ui.showSnoozeComplete(); ->>>>>>> 3551a62b695b05af1cad37967151b5e9f821236b break; default: diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java index 8d1b06661f..25235bdf56 100644 --- a/src/main/java/Enums/Tasktype.java +++ b/src/main/java/Enums/Tasktype.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, timer, snooze, others + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others } diff --git a/src/main/java/Enums/TimeUnit.java b/src/main/java/Enums/TimeUnit.java new file mode 100644 index 0000000000..212a73cffb --- /dev/null +++ b/src/main/java/Enums/TimeUnit.java @@ -0,0 +1,5 @@ +package Enums; + +public enum TimeUnit { + year,month,day,hour,minute +} diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 88c9f174ed..26b18bbb12 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -71,5 +71,44 @@ public void setNotDone() { public String toString() { return getStatusIcon() + getDescription(); } + /** + * Snooze the task in year + * @param amount number of years to snooze + */ + public void snoozeYear(int amount) { + return; + } + + /** + * Snooze the task in month + * @param amount number of months to snooze + */ + public void snoozeMonth(int amount) { + return; + } + + /** + * Snooze the task in day + * @param amount number of days to snooze + */ + public void snoozeDay(int amount) { + return; + } + + /** + * Snooze the task in hour + * @param amount number of hours to snooze + */ + public void snoozeHour(int amount) { + return; + } + + /** + * Snooze the task in minute + * @param amount number of minutes to snooze + */ + public void snoozeMinute(int amount) { + return; + } } diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index d7a2d6ee47..82849bf5db 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -8,6 +8,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; +import java.util.concurrent.TimeUnit; /** * A class for handling all parsing for Duke. Makes sure that inputs by the user @@ -118,4 +119,22 @@ public String getKey() { public String getRecurrence() { return scanner.nextLine().trim().toLowerCase(); } + + /** + * Returns the amount of time the customer request to snooze + * @return the amount of time the customer request to snooze + */ + public int getAmount(){ + String temp = scanner.next().trim(); + return Integer.parseInt(temp); + } + + /** + * Returns the unit of time the customer request to snooze + * @return the unit of time the customer request to snooze + */ + public TimeUnit getTimeUnit(){ + String temp = scanner.next(); + return TimeUnit.valueOf(temp); + } } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index cb7b7dacc1..9a4b836732 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -2,6 +2,8 @@ import CustomExceptions.DukeException; import Model_Classes.Task; +import Model_Classes.ToDo; +import Enums.TimeUnit; import java.util.ArrayList; @@ -88,4 +90,34 @@ public static ArrayList currentList() { public void replace(int index, Task replacement) { tasks.set(index, replacement); } + + /** + * Snooze a specific task indicated by user + * @param index the index of the task to be snoozed + * @param amount the amount of time to snooze + * @param timeUnit unit for snooze time: year, month, day, hour, minute + */ + public void snooze (int index, int amount, TimeUnit timeUnit){ + if (tasks.get(index - 1) instanceof ToDo){ + System.out.println("Todo cannot be snoozed"); + return; + } + switch (timeUnit) { + case year: + tasks.get(index - 1).snoozeYear(amount); + break; + case month: + tasks.get(index - 1).snoozeMonth(amount); + break; + case day: + tasks.get(index - 1).snoozeDay(amount); + break; + case hour: + tasks.get(index - 1).snoozeHour(amount); + break; + case minute: + tasks.get(index - 1).snoozeMinute(amount); + break; + } + } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 2d014841f1..51dd92fa6f 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -156,4 +156,16 @@ public void promptForTask() { public void showChangeInTaskList() { System.out.println("You have some recurring tasks that need to be cleared, please check them:"); } + + public void showSnooze() { + System.out.println("Please indicate the amount of time you want to snooze this task"); + } + + /** + * tells the user that the requested task has been snoozed + */ + public void showSnoozeComplete() { + System.out.println("Great I've snoozed your task"); + } + } From cb40b4e530711ee166dd803a1fb5cdfc7b4ec480 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 16:27:06 +0800 Subject: [PATCH 040/251] no message --- src/main/java/Enums/Tasktype.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java index 25235bdf56..8d1b06661f 100644 --- a/src/main/java/Enums/Tasktype.java +++ b/src/main/java/Enums/Tasktype.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others + list, bye, find, done , delete, todo, deadline, other, event, recur, timer, snooze, others } From bb1c2c8cf21eded597c622fb9aec5cef1d104269 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 20:21:08 +0800 Subject: [PATCH 041/251] Cleanup on merge process --- src/main/java/Duke.java | 2 +- src/main/java/Enums/TaskType.java | 2 +- src/main/java/Enums/Tasktype.java | 5 ----- .../Tasktype.java~3551a62b695b05af1cad37967151b5e9f821236b | 5 ----- src/main/java/Enums/TimeUnit.java | 2 +- src/main/java/Operations/Parser.java | 2 +- src/main/java/Operations/RecurHandler.java | 2 +- src/main/java/Operations/TaskList.java | 2 +- 8 files changed, 6 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/Enums/Tasktype.java delete mode 100644 src/main/java/Enums/Tasktype.java~3551a62b695b05af1cad37967151b5e9f821236b diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 1f3d042913..ad437fa040 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -2,6 +2,7 @@ import Enums.ExceptionType; import Enums.RecurTaskType; import Enums.TaskType; +import Enums.TimeUnit; import Model_Classes.*; import Operations.*; @@ -9,7 +10,6 @@ import java.util.Date; import java.util.Timer; import java.util.TimerTask; -import java.util.concurrent.TimeUnit; /** * main class of the Duke program diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 8d1b06661f..25235bdf56 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, timer, snooze, others + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others } diff --git a/src/main/java/Enums/Tasktype.java b/src/main/java/Enums/Tasktype.java deleted file mode 100644 index 8d1b06661f..0000000000 --- a/src/main/java/Enums/Tasktype.java +++ /dev/null @@ -1,5 +0,0 @@ -package Enums; - -public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, timer, snooze, others -} diff --git a/src/main/java/Enums/Tasktype.java~3551a62b695b05af1cad37967151b5e9f821236b b/src/main/java/Enums/Tasktype.java~3551a62b695b05af1cad37967151b5e9f821236b deleted file mode 100644 index c407d8dcff..0000000000 --- a/src/main/java/Enums/Tasktype.java~3551a62b695b05af1cad37967151b5e9f821236b +++ /dev/null @@ -1,5 +0,0 @@ -package Enums; - -public enum Tasktype { - todo, list, deadline, event, done, delete, find, bye, time, snooze -} diff --git a/src/main/java/Enums/TimeUnit.java b/src/main/java/Enums/TimeUnit.java index 212a73cffb..1d894ca22b 100644 --- a/src/main/java/Enums/TimeUnit.java +++ b/src/main/java/Enums/TimeUnit.java @@ -1,5 +1,5 @@ package Enums; public enum TimeUnit { - year,month,day,hour,minute + year, month, day, hour, minute } diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 82849bf5db..96af433b51 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -8,7 +8,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; -import java.util.concurrent.TimeUnit; +import Enums.TimeUnit; /** * A class for handling all parsing for Duke. Makes sure that inputs by the user diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index f822400aa0..bfaca60e8b 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -250,6 +250,6 @@ public boolean checkRecurrence(TaskList taskList) { } index += 1; } - return isEdited; + return false; } } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 9a4b836732..3a95d6a975 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -3,9 +3,9 @@ import CustomExceptions.DukeException; import Model_Classes.Task; import Model_Classes.ToDo; -import Enums.TimeUnit; import java.util.ArrayList; +import Enums.TimeUnit; /** * A class to perform operations on the task list in Duke From 854e09886c444604731c6145e20d0e79a6986586 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 20:29:18 +0800 Subject: [PATCH 042/251] Fixed bug in logic for RecurHandler class --- src/main/java/Operations/RecurHandler.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index bfaca60e8b..e6752dca1a 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -114,7 +114,6 @@ public boolean checkRecurrence(TaskList taskList) { RecurrenceScheduleType type; Calendar calendar = Calendar.getInstance(); String description = check.getDescription(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy 18:00"); if (check.toString().contains("[T]")) { recurrenceSchedule = array[3].substring(0, array[3].length() - 1); type = RecurrenceScheduleType.valueOf(recurrenceSchedule); @@ -126,7 +125,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(created); calendar.add(Calendar.DAY_OF_MONTH, 1); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { RecurringToDo recurringToDo = new RecurringToDo(description, "day"); taskList.replace(index, recurringToDo); isEdited = true; @@ -142,7 +141,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(created); calendar.add(Calendar.DAY_OF_WEEK, 7); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { RecurringToDo recurringToDo = new RecurringToDo(description, "week"); taskList.replace(index, recurringToDo); isEdited = true; @@ -158,7 +157,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(created); calendar.add(Calendar.MONTH, 1); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { RecurringToDo recurringToDo = new RecurringToDo(description, "month"); taskList.replace(index, recurringToDo); isEdited = true; @@ -181,7 +180,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(storedDate); calendar.add(Calendar.DAY_OF_MONTH, 7); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { if (check.toString().contains("[D]")) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "week"); taskList.replace(index, recurringDeadline); @@ -205,7 +204,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(storedDate); calendar.add(Calendar.DAY_OF_MONTH, 1); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { if (check.toString().contains("[D]")) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "day"); taskList.replace(index, recurringDeadline); @@ -230,7 +229,7 @@ public boolean checkRecurrence(TaskList taskList) { calendar.setTime(storedDate); calendar.add(Calendar.MONTH, 1); Date newDate = calendar.getTime(); - if (newDate.compareTo(current) > 0) { + if (newDate.compareTo(current) < 0) { if (check.toString().contains("[D]")) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "month"); taskList.replace(index, recurringDeadline); @@ -250,6 +249,6 @@ public boolean checkRecurrence(TaskList taskList) { } index += 1; } - return false; + return isEdited; } } From e46be6929a259a932f14619da6dcb59fe64ee868 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 20:39:23 +0800 Subject: [PATCH 043/251] Added JAR support --- build.gradle | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build.gradle b/build.gradle index e3274bbf89..8740e72d95 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id 'java' id 'application' + id 'com.github.johnrengelman.shadow' version '5.1.0' } group 'seedu.duke' @@ -10,6 +11,13 @@ repositories { mavenCentral() } +shadowJar { + archiveBaseName = "duke" + archiveVersion = "0.1.3" + archiveClassifier = null + archiveAppendix = null +} + application { // Change this to your main class. mainClassName = "Duke" From 6b4a2e958aee33e9a712d86930a314c3aaae15b1 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Wed, 25 Sep 2019 20:43:35 +0800 Subject: [PATCH 044/251] Added checkstyle --- build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.gradle b/build.gradle index 8740e72d95..4f521833b4 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ plugins { id 'java' id 'application' id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'checkstyle' } group 'seedu.duke' @@ -11,6 +12,10 @@ repositories { mavenCentral() } +checkstyle { + toolVersion = '8.23' +} + shadowJar { archiveBaseName = "duke" archiveVersion = "0.1.3" From f736c3f51854f11f91e191900333f777f4e64773 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 26 Sep 2019 17:19:07 +0800 Subject: [PATCH 045/251] Added JavaDoc for Recurring task type classes Added JavaDoc for Duke, Parser, RecurHandler, Storage and Ui Added Cleanup on RecurHandler --- src/main/java/Duke.java | 2 +- .../java/Model_Classes/RecurringDeadline.java | 9 +- .../java/Model_Classes/RecurringEvent.java | 9 +- .../java/Model_Classes/RecurringToDo.java | 9 +- src/main/java/Operations/Parser.java | 3 - src/main/java/Operations/RecurHandler.java | 394 +++++++++++------- src/main/java/Operations/Storage.java | 11 +- src/main/java/Operations/Ui.java | 35 +- 8 files changed, 292 insertions(+), 180 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ad437fa040..d7fefc8dc5 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -37,7 +37,7 @@ public Duke() { taskList = new TaskList(emptyList); } recurHandler = new RecurHandler(taskList); - if (recurHandler.checkRecurrence(taskList)) { + if (recurHandler.checkRecurrence()) { ui.showChangeInTaskList(); taskList.list(); } diff --git a/src/main/java/Model_Classes/RecurringDeadline.java b/src/main/java/Model_Classes/RecurringDeadline.java index 4542c10f3d..3301145754 100644 --- a/src/main/java/Model_Classes/RecurringDeadline.java +++ b/src/main/java/Model_Classes/RecurringDeadline.java @@ -5,7 +5,7 @@ public class RecurringDeadline extends Deadline { private String recurrence; /** - * Constructor for the Deadline object. + * Constructor for the RecurringDeadline object. * Takes in inputs for description and date/time the tasks should be done by. * * @param description Description of the task @@ -16,6 +16,13 @@ public RecurringDeadline(String description, Date by, String recurrence) { this.recurrence = recurrence; } + /** + * Returns the full descriptor of the task + * will show the type of task, whether it has been done, + * the description of the task, the time it should be done by, + * and the recurrence schedule of the task + * @return A String with all the information listed above. + */ @Override public String toString() { return super.toString() + " (R: " + recurrence + ")"; diff --git a/src/main/java/Model_Classes/RecurringEvent.java b/src/main/java/Model_Classes/RecurringEvent.java index 1cbc08105b..d81399c8f2 100644 --- a/src/main/java/Model_Classes/RecurringEvent.java +++ b/src/main/java/Model_Classes/RecurringEvent.java @@ -5,7 +5,7 @@ public class RecurringEvent extends Event { private String recurrence; /** - * Constructor for Event object + * Constructor for RecurringEvent object * Takes in inputs for description of the event and the time the event occurs * * @param description Description of the event @@ -16,6 +16,13 @@ public RecurringEvent(String description, Date at, String recurrence) { this.recurrence = recurrence; } + /** + * Returns the full descriptor of the task + * will show the type of task, whether it has been done, + * the description of the task, the time it should be done by, + * and the recurrence schedule of the task + * @return A String with all the information listed above. + */ @Override public String toString() { return super.toString() + " (R: " + recurrence + ")"; diff --git a/src/main/java/Model_Classes/RecurringToDo.java b/src/main/java/Model_Classes/RecurringToDo.java index 73a50ec79a..6e5224fb86 100644 --- a/src/main/java/Model_Classes/RecurringToDo.java +++ b/src/main/java/Model_Classes/RecurringToDo.java @@ -3,7 +3,7 @@ public class RecurringToDo extends ToDo { private String recurrence; /** - * Constructor of the class. Takes in the description of the task + * Constructor of the RecurringTodo class. Takes in the description of the task * * @param description Description of the task. */ @@ -12,6 +12,13 @@ public RecurringToDo(String description, String recurrence) { this.recurrence = recurrence; } + /** + * Returns the full descriptor of the task + * will show the type of task, whether it has been done, + * the description of the task, + * and the recurrence schedule of the task + * @return A String with all the information listed above. + */ @Override public String toString() { return super.toString() + " (R: " + recurrence + ")"; diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 96af433b51..6a4fc598ac 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -2,8 +2,6 @@ import CustomExceptions.DukeException; -import java.io.IOException; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -74,7 +72,6 @@ public String[] getDate(String[] ar) { * Returns an array with the task description stored as well as the duration of the task * @return array An array of Strings with description and duration both in index 0 of the array */ - public String[] getDescriptionWithDuration() { String[] array = scanner.nextLine().split(" ", 1); return array; diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index e6752dca1a..7d04fd8005 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -6,24 +6,50 @@ import Enums.TaskType; import Model_Classes.*; -import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; +/** + * This class deals with operations for Recurring Tasks + * will perform operations such as add, list, find + * also checks for recurrence of tasks + */ public class RecurHandler { + private static final String ENTER_TASK_TYPE = "please enter a todo, deadline or event task type!"; + private static final String RECURRENCE_SYMBOL = "(R:"; + private static final String EMPTY_SEARCH = "\tYour search returned no results.... Try searching with another keyword!"; + private static final String TODO_MARKER = "[T]"; + private static final String DAY = "day"; + private static final String WEEK = "week"; + private static final String MONTH = "month"; + private static final String DEADLINE_MARKER = "[D]"; + public static final String DATE_ERROR_GENERATE_NEW_RECURRING_TASK = "Error in parsing dates, generating new recurring task"; + public static final String DATE_ERROR_SET_AS_NOT_DONE = "Error in parsing date, will be setting the task to not done instead"; private TaskList taskList; private Ui ui = new Ui(); private Parser parser = new Parser(); + + /** + * Constructor for RecurHandler class + * @param recurringList The TaskList to be operated on using RecurHandler + */ public RecurHandler(TaskList recurringList) { this.taskList = recurringList; } + /** + * Constructs and adds a Recurring type task into the task list + * Creates new types of tasks called RecurringDeadline, RecurringToDo, RecurringEvent + * and adds them into the task list + * Will prompt user on the recurrence schedule before any creation of tasks. + */ public void addBasedOnOperation() { ui.promptForRecurrence(); String recurrence = parser.getRecurrence(); ui.promptForTask(); + //get the command to create a recurring task String command = parser.getCommand(); TaskType taskType; try { @@ -32,223 +58,267 @@ public void addBasedOnOperation() { taskType = TaskType.others; } switch (taskType) { - case todo: - try { - RecurringToDo temp = new RecurringToDo(parser.getDescription(), recurrence); - taskList.add(temp); - ui.showAddRecur(); - } catch (DukeException e) { - ui.showEmptyDescriptionError(); - } - break; + case todo: + try { + RecurringToDo temp = new RecurringToDo(parser.getDescription(), recurrence); + taskList.add(temp); + ui.showAddRecur(); + } catch (DukeException e) { + ui.showEmptyDescriptionError(); + } + break; - case deadline: - try { - String[] deadlineArray = parser.getDescriptionWithDate(); - Date by = parser.formatDate(deadlineArray[1]); - RecurringDeadline temp = new RecurringDeadline(deadlineArray[0], by, recurrence); + case deadline: + try { + String[] deadlineArray = parser.getDescriptionWithDate(); + Date by = parser.formatDate(deadlineArray[1]); + RecurringDeadline temp = new RecurringDeadline(deadlineArray[0], by, recurrence); + taskList.add(temp); + ui.showAddRecur(); + } catch (DukeException e) { + ui.showDateError(); + } + break; + case event: + try { + String[] eventArray = parser.getDescriptionWithDate(); + Date at = parser.formatDate(eventArray[1]); + if(CheckAnomaly.checkTime(at, TaskList.currentList())){ + RecurringEvent temp = new RecurringEvent(eventArray[0], at, recurrence); taskList.add(temp); ui.showAddRecur(); - } catch (DukeException e) { - ui.showDateError(); - } - break; - - case event: - try { - String[] eventArray = parser.getDescriptionWithDate(); - Date at = parser.formatDate(eventArray[1]); - if(CheckAnomaly.checkTime(at, TaskList.currentList())){ - RecurringEvent temp = new RecurringEvent(eventArray[0], at, recurrence); - taskList.add(temp); - ui.showAddRecur(); - } else { - throw new DukeException(ExceptionType.timeClash); - } - } catch (DukeException e) { - ui.showDateError(); + } else { + throw new DukeException(ExceptionType.timeClash); } - break; - default: - System.out.println("please enter a todo, deadline or event task type!"); - break; + } catch (DukeException e) { + ui.showDateError(); + } + break; + + default: + System.out.println(ENTER_TASK_TYPE); + break; } } + /** + * Lists out all recurring tasks in the task list + */ public void listRecurring() { ui.showListRecur(); int listCount = 1; for (Task output : TaskList.currentList()) { - if (output.toString().contains("(R:")) { + if (output.toString().contains(RECURRENCE_SYMBOL)) { System.out.println("\t" + listCount + ". " + output.toString()); listCount += 1; } } } + /** + * Finds all recurring tasks with any mention of the keyword + * Lists all these tasks to the user. + * @param key keyword that is being queried in all the recurring tasks + */ public void findRecurring(String key) { ui.showListRecur(); int queryCount = 1; for (Task query : TaskList.currentList()) { - if (query.toString().toLowerCase().contains(key) && query.toString().contains("(R:")) { + if (query.toString().toLowerCase().contains(key) && query.toString().contains(RECURRENCE_SYMBOL)) { + // task contains the keyword and is a recurring task. System.out.println("\t" + queryCount + ". " + query.toString()); } queryCount += 1; } if (queryCount == 1) { - System.out.println("\tYour search returned no results.... Try searching with another keyword!"); + System.out.println(EMPTY_SEARCH); } } - public boolean checkRecurrence(TaskList taskList) { + /** + * Checks for recurrences based on the date. + * if there is a recurrence, replaces the old recurring task with a new one + * new recurring task will have an updated recurrence date. + * Returns a boolean value that determines if there was any recurrence triggered. + * @return A boolean value where true indicates a recurrence was triggered, and false being otherwise. + */ + public boolean checkRecurrence() { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); String currentTime = now.format(dateTimeFormatterNow); int index = 0; boolean isEdited = false; for (Task check : TaskList.currentList()) { - if (check.toString().contains("(R:")) { + if (check.toString().contains(RECURRENCE_SYMBOL)) { String temp = check.toString(); String[] array = temp.split("\\s+"); String recurrenceSchedule; RecurrenceScheduleType type; - Calendar calendar = Calendar.getInstance(); String description = check.getDescription(); - if (check.toString().contains("[T]")) { + if (check.toString().contains(TODO_MARKER)) { + // extract the recurrence schedule. recurrenceSchedule = array[3].substring(0, array[3].length() - 1); type = RecurrenceScheduleType.valueOf(recurrenceSchedule); switch (type) { - case day: - try { - Date current = parser.formatDate(currentTime); - Date created = parser.formatDate(check.getCreated()); - calendar.setTime(created); - calendar.add(Calendar.DAY_OF_MONTH, 1); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - RecurringToDo recurringToDo = new RecurringToDo(description, "day"); - taskList.replace(index, recurringToDo); - isEdited = true; - } - } catch (DukeException e) { - e.printStackTrace(); - } - break; - case week: - try { - Date current = parser.formatDate(currentTime); - Date created = parser.formatDate(check.getCreated()); - calendar.setTime(created); - calendar.add(Calendar.DAY_OF_WEEK, 7); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - RecurringToDo recurringToDo = new RecurringToDo(description, "week"); - taskList.replace(index, recurringToDo); - isEdited = true; - } - } catch (DukeException e) { - e.printStackTrace(); - } - break; - case month: - try { - Date current = parser.formatDate(currentTime); - Date created = parser.formatDate(check.getCreated()); - calendar.setTime(created); - calendar.add(Calendar.MONTH, 1); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - RecurringToDo recurringToDo = new RecurringToDo(description, "month"); - taskList.replace(index, recurringToDo); - isEdited = true; - } - } catch (DukeException e) { - e.printStackTrace(); - } - break; + case day: + if (dateHasPassedToDo(currentTime, check.getCreated(), DAY, description, index, isEdited)) { + RecurringToDo recurringToDo = new RecurringToDo(description, DAY); + taskList.replace(index, recurringToDo); + isEdited = true; + } + break; + + case week: + if (dateHasPassedToDo(currentTime, check.getCreated(), WEEK, description, index, isEdited)) { + RecurringToDo recurringToDo = new RecurringToDo(description, WEEK); + taskList.replace(index, recurringToDo); + isEdited = true; + } + break; + + case month: + if (dateHasPassedToDo(currentTime, check.getCreated(), MONTH, description, index, isEdited)) { + RecurringToDo recurringToDo = new RecurringToDo(description, MONTH); + taskList.replace(index, recurringToDo); + isEdited = true; + } + break; } } else { + // handling for deadline and event recurrences recurrenceSchedule = array[10].substring(0, array[10].length() - 1); type = RecurrenceScheduleType.valueOf(recurrenceSchedule); switch (type) { - case week: - try { - Date current = parser.formatDate(currentTime); - String date = new Storage().convertForStorage(check); - date = date.substring(0, 16); - Date storedDate = parser.formatDate(date); - calendar.setTime(storedDate); - calendar.add(Calendar.DAY_OF_MONTH, 7); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - if (check.toString().contains("[D]")) { - RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "week"); - taskList.replace(index, recurringDeadline); - isEdited = true; - } else { - RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "week"); - taskList.replace(index, recurringEvent); - isEdited = true; - } - } - } catch (DukeException e) { - e.printStackTrace(); + case week: + if (dateHasPassedOthers(currentTime, check, isEdited )) { + if (check.toString().contains(DEADLINE_MARKER)) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), WEEK); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, getNewDate(check), WEEK); + taskList.replace(index, recurringEvent); + isEdited = true; } - break; - case day: - try { - Date current = parser.formatDate(currentTime); - String date = new Storage().convertForStorage(check); - date = date.substring(0, 16); - Date storedDate = parser.formatDate(date); - calendar.setTime(storedDate); - calendar.add(Calendar.DAY_OF_MONTH, 1); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - if (check.toString().contains("[D]")) { - RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "day"); - taskList.replace(index, recurringDeadline); - isEdited = true; - } else { - RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "day"); - taskList.replace(index, recurringEvent); - isEdited = true; - } - } - } catch (DukeException e) { - e.printStackTrace(); + } + break; + + case day: + if (dateHasPassedOthers(currentTime, check, isEdited )) { + if (check.toString().contains(DEADLINE_MARKER)) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), DAY); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, getNewDate(check), DAY); + taskList.replace(index, recurringEvent); + isEdited = true; } - break; - - case month: - try { - Date current = parser.formatDate(currentTime); - String date = new Storage().convertForStorage(check); - date = date.substring(0, 16); - Date storedDate = parser.formatDate(date); - calendar.setTime(storedDate); - calendar.add(Calendar.MONTH, 1); - Date newDate = calendar.getTime(); - if (newDate.compareTo(current) < 0) { - if (check.toString().contains("[D]")) { - RecurringDeadline recurringDeadline = new RecurringDeadline(description, newDate, "month"); - taskList.replace(index, recurringDeadline); - isEdited = true; - } else { - RecurringEvent recurringEvent = new RecurringEvent(description, newDate, "month"); - taskList.replace(index, recurringEvent); - isEdited = true; - } - } - } catch (DukeException e) { - e.printStackTrace(); + } + break; + + case month: + if (dateHasPassedOthers(currentTime, check, isEdited )) { + if (check.toString().contains(DEADLINE_MARKER)) { + RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), MONTH); + taskList.replace(index, recurringDeadline); + isEdited = true; + } else { + RecurringEvent recurringEvent = new RecurringEvent(description, getNewDate(check), MONTH); + taskList.replace(index, recurringEvent); + isEdited = true; } - break; + } + break; } } } + // move on to next item in the task list index += 1; } return isEdited; } + + /** + * checks if the recurrence date has passed for a RecurringToDo object + * if date has passed, returns true + * if date has not passed, returns false. + * @param currentTime current time of the computer system as a string + * @param createdTime time the RecurringToDo object was created + * @param recurrence recurrence schedule of the object + * @param description description of the task + * @param index index the task is stored in the task list + * @param isEdited boolean variable describing if the task list has been edited in anyway + * @return + */ + private boolean dateHasPassedToDo(String currentTime, String createdTime, String recurrence, + String description, int index, boolean isEdited) { + boolean isPassed = false; + try{ + Date current = parser.formatDate(currentTime); + Date created = parser.formatDate(createdTime); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(created); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date newDate = calendar.getTime(); + if (newDate.compareTo(current) < 0) { + // date has passed + isPassed = true; + } + } catch (DukeException e) { + System.out.println(DATE_ERROR_GENERATE_NEW_RECURRING_TASK); + RecurringToDo recurringToDo = new RecurringToDo(description, recurrence); + taskList.replace(index, recurringToDo); + isEdited = true; + } + return isPassed; + } + + /** + * Returns a new Date object with the date stored in the task object class + * If any error occurs, the Date object will be set to the current date instead. + * @param check Task object containing the Date information to be extracted + * @return newDate, containing a the date information of the task object class. + */ + private Date getNewDate(Task check) { + Date newDate = new Date(); + try { + Calendar calendar = Calendar.getInstance(); + String date = new Storage().convertForStorage(check); + date = date.substring(0, 16); + Date storedDate = parser.formatDate(date); + calendar.setTime(storedDate); + calendar.add(Calendar.MONTH, 1); + newDate = calendar.getTime(); + } catch (DukeException e) { + System.out.println(); + } + return newDate; + } + + /** + * checks if the recurrence date has passed for a RecurringDeadline or RecurringEvent object + * if date has passed, returns true + * if date has not passed, returns false. + * @param currentTime current time of the system as a string + * @param check Task to be time checked + * @param isEdited boolean variable describing if the task list has been edited in anyway + * @return + */ + private boolean dateHasPassedOthers(String currentTime, Task check, boolean isEdited) { + boolean isPassed = false; + try { + Date current = parser.formatDate(currentTime); + Date newDate = getNewDate(check); + if (newDate.compareTo(current) < 0) { + // date has passed + isPassed = true; + } + } catch (DukeException e) { + System.out.println(DATE_ERROR_SET_AS_NOT_DONE); + check.setNotDone(); + isEdited = true; + } + return isPassed; + } } diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index e38a09902c..19ad791819 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -139,7 +139,16 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio } } - public String convertForStorage(Task task) throws DukeException { + /** + * Extracts and converts all the information in the task object for storage + * will format the time information for deadline and event tasks + * Additional formatting will be done for recurring tasks to include recurrence schedule + * returns a string with all the relevant information. + * @param task task object to be converted + * @return time A String containing all the relevant information + * @throws DukeException If there is any error in parsing the Date information. + */ + String convertForStorage(Task task) throws DukeException { try { String type = String.valueOf(task.toString().charAt(1)); String time = ""; diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 51dd92fa6f..f3b5e2e735 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -123,25 +123,25 @@ public void showDateError() { System.out.println("example: event concert/30/12/2019 18:00"); } + /** + * Tells the user that they are in recurring mode to add or perform operations on recurring tasks + * + */ public void promptRecurringActions() { System.out.println("You have accessed Recurring Mode"); System.out.println("You are now accessing and performing operations on the Recurring Task List"); System.out.println("Tasks that appear here will appear based on when you want it to appear again"); System.out.println("Please input your intended action\n"); - System.out.println("To add a new task into the recurring task list, input 'add',\n Then input a new tasks as you would with any other task," + - "\nfollowed by recurrence by month or day of the week, separated by a '#'."); - System.out.println("\tE.g : todo buy groceries#monday"); - System.out.println("\tE.g : todo buy groceries#month"); - System.out.println("\tE.g : deadline homework 22/12/2019 18:00#monday"); - System.out.println("\tE.g : deadline homework 22/12/2019 18:00#month"); - System.out.println("\tE.g : event meeting 22/12/2019 18:00#monday"); - System.out.println("\tE.g : event meeting 22/12/2019 18:00#month\n"); - System.out.println("To perform operations like delete, find or list, do it similar to how you would do it normally"); - System.out.println("\tE.g : delete 1"); + System.out.println("To add a new task into the recurring task list, input 'add'"); + System.out.println("To perform operations like find or list, do it similar to how you would do it normally"); System.out.println("\tE.g : find homework"); System.out.println("\tE.g : list"); + System.out.println("To quit recurring mode, input 'exit'."); } + /** + * Prompts the user to describe the recurrence schedule of the task + */ public void promptForRecurrence() { System.out.println("Please enter the recurrence of the task, either by day, week or month"); System.out.println("\tE.g : Day"); @@ -149,14 +149,29 @@ public void promptForRecurrence() { System.out.println("\tE.g : Month"); } + /** + * Prompts the user on how to add new recurring tasks + */ public void promptForTask() { System.out.println("now enter your desired task as usual!"); + System.out.println("\tE.g : todo buy groceries#monday"); + System.out.println("\tE.g : todo buy groceries#month"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00#monday"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00#month"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00#monday"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00#month\n"); } + /** + * tells the user that recurring tasks have appeared. + */ public void showChangeInTaskList() { System.out.println("You have some recurring tasks that need to be cleared, please check them:"); } + /** + * tells the user to input the amount of time to snooze the task + */ public void showSnooze() { System.out.println("Please indicate the amount of time you want to snooze this task"); } From 966740437b4f33464b0014adc247dfff26d10c3d Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Mon, 30 Sep 2019 22:48:51 +0800 Subject: [PATCH 046/251] Added Snooze function - 2 Re-edited --- TeamProject.ipr | 68 +++++++++++++++++ TeamProject.iws | 69 ++++++++++++++++++ .../CustomExceptions/DukeException$1.class | Bin 0 -> 457 bytes .../java/CustomExceptions/DukeException.class | Bin 0 -> 805 bytes src/main/java/Duke$1.class | Bin 0 -> 1312 bytes src/main/java/Duke$1RemindTask.class | Bin 0 -> 1205 bytes src/main/java/Duke.class | Bin 0 -> 5449 bytes src/main/java/Duke.java | 23 ++++-- src/main/java/Enums/ExceptionType.class | Bin 0 -> 795 bytes src/main/java/Enums/RecurTaskType.class | Bin 0 -> 979 bytes .../java/Enums/RecurrenceScheduleType.class | Bin 0 -> 947 bytes src/main/java/Enums/SaveType.class | Bin 0 -> 888 bytes src/main/java/Enums/TaskType.class | Bin 0 -> 1346 bytes src/main/java/Enums/TimeUnit.class | Bin 0 -> 945 bytes src/main/java/Model_Classes/Deadline.class | Bin 0 -> 1495 bytes src/main/java/Model_Classes/Deadline.java | 22 ++++++ src/main/java/Model_Classes/Event.class | Bin 0 -> 1565 bytes src/main/java/Model_Classes/Event.java | 25 +++++++ .../java/Model_Classes/FixedDuration.class | Bin 0 -> 928 bytes .../Model_Classes/RecurringDeadline.class | Bin 0 -> 955 bytes .../java/Model_Classes/RecurringEvent.class | Bin 0 -> 946 bytes .../java/Model_Classes/RecurringToDo.class | Bin 0 -> 910 bytes src/main/java/Model_Classes/Task.class | Bin 0 -> 1960 bytes src/main/java/Model_Classes/ToDo.class | Bin 0 -> 763 bytes src/main/java/Operations/CheckAnomaly.class | Bin 0 -> 813 bytes src/main/java/Operations/Parser.class | Bin 0 -> 2141 bytes src/main/java/Operations/RecurHandler$1.class | Bin 0 -> 994 bytes src/main/java/Operations/RecurHandler.class | Bin 0 -> 7113 bytes src/main/java/Operations/Storage$1.class | Bin 0 -> 639 bytes src/main/java/Operations/Storage.class | Bin 0 -> 5540 bytes src/main/java/Operations/TaskList$1.class | Bin 0 -> 743 bytes src/main/java/Operations/TaskList.class | Bin 0 -> 3041 bytes src/main/java/Operations/Ui.class | Bin 0 -> 5317 bytes src/main/java/Operations/Ui.java | 7 ++ 34 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 TeamProject.ipr create mode 100644 TeamProject.iws create mode 100644 src/main/java/CustomExceptions/DukeException$1.class create mode 100644 src/main/java/CustomExceptions/DukeException.class create mode 100644 src/main/java/Duke$1.class create mode 100644 src/main/java/Duke$1RemindTask.class create mode 100644 src/main/java/Duke.class create mode 100644 src/main/java/Enums/ExceptionType.class create mode 100644 src/main/java/Enums/RecurTaskType.class create mode 100644 src/main/java/Enums/RecurrenceScheduleType.class create mode 100644 src/main/java/Enums/SaveType.class create mode 100644 src/main/java/Enums/TaskType.class create mode 100644 src/main/java/Enums/TimeUnit.class create mode 100644 src/main/java/Model_Classes/Deadline.class create mode 100644 src/main/java/Model_Classes/Event.class create mode 100644 src/main/java/Model_Classes/FixedDuration.class create mode 100644 src/main/java/Model_Classes/RecurringDeadline.class create mode 100644 src/main/java/Model_Classes/RecurringEvent.class create mode 100644 src/main/java/Model_Classes/RecurringToDo.class create mode 100644 src/main/java/Model_Classes/Task.class create mode 100644 src/main/java/Model_Classes/ToDo.class create mode 100644 src/main/java/Operations/CheckAnomaly.class create mode 100644 src/main/java/Operations/Parser.class create mode 100644 src/main/java/Operations/RecurHandler$1.class create mode 100644 src/main/java/Operations/RecurHandler.class create mode 100644 src/main/java/Operations/Storage$1.class create mode 100644 src/main/java/Operations/Storage.class create mode 100644 src/main/java/Operations/TaskList$1.class create mode 100644 src/main/java/Operations/TaskList.class create mode 100644 src/main/java/Operations/Ui.class diff --git a/TeamProject.ipr b/TeamProject.ipr new file mode 100644 index 0000000000..5c7eb2192e --- /dev/null +++ b/TeamProject.ipr @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TeamProject.iws b/TeamProject.iws new file mode 100644 index 0000000000..55da9f84fc --- /dev/null +++ b/TeamProject.iws @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1569553030419 + + + + + + + \ No newline at end of file diff --git a/src/main/java/CustomExceptions/DukeException$1.class b/src/main/java/CustomExceptions/DukeException$1.class new file mode 100644 index 0000000000000000000000000000000000000000..35692206ef5fbeb408027d41b7fd69079cab7773 GIT binary patch literal 457 zcmaJ-O;5r=5Pb_sp%$p%2YN8X^Z*wdPaZU0Dn=5(1H=obQZ`U5yM*1M{w(9g7{d?n zM;WJ>keC=Z*?Ifsy94*kd?$dXJ$FCLMq7G(|j9PV*_? za~(?2f1Y!O)S$(Xy9}aGg!+mhU2ohoWIQ>dV5uDn-i>ENzUceIh&*Ob#*2X8gb68M z#}9m?cRKZ#KGifu5J?q^afj=P92wZB23@Z7tyJ2;frTm#Eo>pnQ1fD?Xd3NbXaUxl*HwNuLQZDQo ztujNaWp*|BZ}LJ823>|cu@l1Nm~UXK5AzkN7h<#}ve|X4K=s?iQm{}U%%DiNwDuIS MOK4JFnhfgc5Pj>UaqKuGO$n5*l0w=hDa7=EI20kFv`CfGs*2b-6sqygDh2XG%t|4SL!h=U0!>h#L)Ubti46Rf83bbyrlCc zsS*)s7iWs0Iny_Y-9r*rk;H;WB=M~N)iBLvtdl}X7ifF$0_C5Pg6+Iwd)}tjn8A3x zNBMCw3M3EnNs-^|{5{U@F;;0!Y}y<~FR4c-gHEI`*+uf6=0334`wG@;7++BMgyIwn zA9GNHYy(BIWwIrrvIuJD6iXKrBcd=UW8+VX(&iLq{{w~d@*vXQXB4I=Yhr^)fg4yL u>s%05X_sqQr$5&zS_At<0mFo4(pCcnO4q=fSf+20YF7xV+4YH@digh+t*xa1 literal 0 HcmV?d00001 diff --git a/src/main/java/Duke$1.class b/src/main/java/Duke$1.class new file mode 100644 index 0000000000000000000000000000000000000000..29dc7e41f9934bf01ee2a6e56505a989dbb01f7a GIT binary patch literal 1312 zcmZ{j$xjqP6vn@vt!Ks&MsWcb+(rdA+;HDv5R@6z8S&u7rn{7urkhOn;Bqq2Kfpv2 zuO^y!RWO7Ys4w0QAyF_-2w5PELdu5}2DUS9FZj#Xfk%JtZ~`3}EXT48I+4$y3nw)!lk7IfaIdr#y;9X2?6Q?( z4gQn?I%92DmFVc^)hJ=)y+o2)T z7vwyGX zUd6Iq!>Ki$HxwPX!Tn>F=h70Ea#SFE*>){j;8`9!XeqcR(3UCWFwz?B-h$&(+#56HGCwiXn zobZhBocQ^|sW87zI304m@VpvNB3r9@!5H{0oIt~D&BR5-*_w%qiL+G@mk_6mc!qkU zu!#MNvt#S{pN?ZAcA}lW2gmv57H-q;;4bdb@8cmJ(I4X} z#_6x{8gJ?E@E#xNAMqJq=wI;--{}#oV(-&*;4q%!0akNVK=TEitA&3^QRe;;W|;Z^y*Lz-m8K5)4T zJd&e%?Hct0mmyV=foF+ryX~aIFX{>iV#~E0=~D%7ggTTp14|~xF~*SC6TaG!zA}+U z#>6$4Ci*d8Vi02nmQAeS0Yhd(O64n$H$wnF9mm529+`NIRRd2c8^aed4MJEQLpbr3Xi&8>Pz4-Op@4Ysp5_5lYk;#v8mY%F?yC`e>^|l6=KoMZstC-D95ZR{hQL zYB&a?se?Pz{n1`PG@JB4)zL;++_i*b;Dzqr21D+$M%z7>b#bw8VZz(oQqnsyu&K97 z%6iab_}m%o;!!x89q!f~;palnQgngP?jH$Dl{))#0a50TQ?ZpO z8Q5Z&?kcEPZVXfZ_d}MxY>NJAG?US*2@t34Y;)RIvP9?%Vu<)KN%O>G#77EqEwI9T z3z5P?3(>+EVqZwlFhVp=9B5&bXar+)qrX5@Bdj6XwoZISU*Q`f(Uo)Z$0-cDMNg5q zgc%@L;Eck5$94QbA5jfBfg8kQn8Z!oYHKF3NL(kGB)&lBCCYe3o;i{e6mXi(%pdyn BEeQYs literal 0 HcmV?d00001 diff --git a/src/main/java/Duke.class b/src/main/java/Duke.class new file mode 100644 index 0000000000000000000000000000000000000000..57a5069a6f4836ace5770c0862c965aeab33e2c5 GIT binary patch literal 5449 zcma)A33yc175?v=$-KOAxJuZ5sN-r6`iQ`79u(smS^SYeKbGZdh2c68b-f4caf6QSZjL{3V>NaNW~Wg7 zRH$wg1vkm`X6bH`ZkKT0>cP)&n~>ZtxStDjhd?Rmejy}x3hpkM-mT-8g87vP6LF8A z?-lfYg4-?K9_jAavDbs?*e7dg58AQcg9q@Sjt&oIW1kxj;b9Mo@Q4sR>OmVGbF+I~ z?0!O~w7VEjO81nIJT1^O0zE78pOfx+vHJxbFM3dimvp@B!I|QxS3Ic4t1@{_JombA z{aP5_knT;f`7Ob{t>YaTf1~5K9(r}7bnohTPsjTTMolDQ#wtVpc-)LDcov)CU?kAs zkFQhEl0k)DwRJ6K%%2EGBk}Sj!5IpAJQ0ogn@oki*=zMSmIV0;veyRV35DWp3Xv*k zlDJy@vA7vi=#x#b$U<`2h?$Ma*gStE5E3G9Hqqj&C6P2U7zrk3D>zEWo~7Wdj0R{~ zui9Y5T$l{6He(I`)gfYf)F=Fn>lXN1GIK{P8PV}O9Utg8pyT&CJ|uV8AB-sUD_v2$ z*1z6g9`Z+;%Ig!cV5Dh=NcYr7ld(p#Iw%s|RmpYc1ff$XSZKx*3rx`$HxNY&6?XHR z0TXKs9F&#bSt}W@8E8VYLQ&R=?F<9!5Tcv17CPNXM+f`~|AfSbgn>WcBhmXu13|1+ z7*d(!DTU{5Xf#{wqZ4C~P7VA?4C!NSGMNa5$}3_qf17<~{j+psJ6q)c*+3W(10Ulr z2L6f`1D{CuH+*W~5dN+(qRVeJp^(|+4^_mPl3_EF$Ws0p{$b#s_?Lmt@r8kZi-<4r zm4UCF4Sc3b3^j^7SEEJy7%`?)ps~`G zNq3@HG)^oUuO=uA>@L1KxWNomCGCV1@#PHmu48Nnh9zMN<+MvCb|te=o@A(rYLcN& zR+9}iMN~}{mrhfs7;3um8ES@jZe-R0Mgr!Bx@4km&75d55{P%5pqeS9PSIi@A#hj1LKVS)Rmew5AY6;9}b+M$F z5`_h#zRH^Lcq|jDd27G)AO9FdiaVuQ6iE8Aq2*-`dgR4Lh25s8NVA$r(tC7aYc1z&bBS+cTZAHCUT zWM|QwXf$N{Bi&;ngXC?q+Fs7Y1tXpro2flVtDs%D+zFZ>_YAM^;!Iw3BcTeG0XyNk zFG!H}Yl%g9n0C?NGozx>x~>&+moHmPxAI5%oqCVO4>>NWyHT*XNwqnun{x@{;`rsG-e7_=EzRS5rmohikTyeM`!ugE0CEe8Ji>ZS!TxM zz~`W(C&!o8%7rr{N6cnLgLOe#p_U(K1O<}vlJjQAk40gn+Zl2|4q7bc)nrGHeZ|r9 z9@&3=BpSVdV%#LH2=l5WgKShJE#c#oFFw|zOv%mQ$m@z{_$a*Q*kw`OyGuA-++x=r zD?>!GH1ddX5u@)zK0!A@&ps3oG?tMfzju!`dbXq2J`|=fwANPP{|J`4KW%w2Zihh!ihoX zg~8~DA>8;-QVl2FXi|awBBQW4FO3rkI0YD&($;1X zuM&J37Gt58VkW1wk)2|uq%=8AA-74VS}O%Y zH_hh~oY&=?l*TDOy#v#id0mc4UcDVYUq06gz4;s# z4C%n^qry+k7LJ}BC|b4$r?sQv(Ub~isXE72HD}OHY!XX(;J!R>-hNd2Tyo_49#r{U zdob7QN~797a`3C$K659>VQgh=a`vZFME^8SPhp}!wm^DxUJApUvpA)bYEtNHlbt~Y zHg10E$R@|E6kfHb89&x``Eh~IB|hAbg;VLnI(wT$v|~}$MmumOQ*W`)-GTaLWnP!p z-HryI$LscbiuEGL$IX|eu_T2cwPd1aY5^TsT;L3(an@2>xeQ!Ad#Ygr%X~cu6c!g0 z8(zlda+_*J3L|_4He8lMzfSm^tUZ16&~A8`y#3&1+O{$oFJ}_&z;5j2_!vIGhbZEw z+$eqo6{*Q8p;|d^RtMBU6lt2~)(i~R4mw6V#$u&4PN5vDD5z(w`gJmAlUW$1ARkky zX*zYyq&6SR#SEUzECg^WzoAcKA*n!;Wug_;w4;WWoQ^9n58H4CZeZ!y!M|5_VG(Vs zr*&r{jm3Bv4YcxXyo6vt7CW$pbOtCfaEm4_yNVK%El2=WUr z#2u~W2i-a~5n(kM=kx0-rm7HEbx5d{NUC*MuM%kEj$2h5HmHknf!d6V)D~=1*WzMz zGd8Kaafx~Wo7Ho;RK1SN)SI|m9l#cP=L+=^u2i33t2%_M)fd>N4&xe)|CDKN+(55g zr}f13S|4oJW@3j{iJe+CZqyoZleQGMXv?rmI}f*Njkrx)i`%s@?$8prQ)|UtS{v@x zF2p_BX56b?h5NMa*sblt9&I=7*B-=P?MZZKuj3)@03Oy3;&JT|p3n~CNnRpPIox>K z(HqY=hT>VrXuQT#d){#(UT{ppi;gLH*)a{TIA-HjM+M$+%){G``FO`F%-b;fTR4?E zg1&IFIxAM^q?G8v-@v6~{nw~0T*QK%?_SQn;5_O2ua^Ex%#q)bTX u+s#Z@*3~5ctO4&b%HQKXdLdyA-^WE9U4&LMmKq87wqOE<`NV)RiT?uNFo(MU literal 0 HcmV?d00001 diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ad437fa040..1fe477cee3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -189,15 +189,24 @@ public void run() { break; case snooze : - int index = parser.getIndex(); - ui.showSnooze(); - int amount = parser.getAmount(); - TimeUnit timeUnit = parser.getTimeUnit(); - taskList.snooze(index, amount, timeUnit); - ui.showSnoozeComplete(); + try { + int index = parser.getIndex(); + TaskList.currentList().get(index - 1); + ui.showSnooze(); + int amount = parser.getAmount(); + TimeUnit timeUnit = parser.getTimeUnit(); + taskList.snooze(index, amount, timeUnit); + ui.showSnoozeComplete(); + } + catch (IndexOutOfBoundsException e){ + ui.showIndexError(); + } + catch (IllegalArgumentException e){ + ui.showTimeError(); + } break; - default: + default: ui.showCommandError(); break; } diff --git a/src/main/java/Enums/ExceptionType.class b/src/main/java/Enums/ExceptionType.class new file mode 100644 index 0000000000000000000000000000000000000000..f572758133e5027130ff4e2d50eafea77ad013d5 GIT binary patch literal 795 zcmZ`%+e*Vg5Ivj3rd?yz*88nmZ;67%2l1gr6saH-eW(iJQySMANmFSP(ZBKnDvIK> zA0^IK(TeQ`Cd}-anR90L{p0Bsz$(lbG>mghAf+R&W0HeoN}6;Oot!Sy5;3h~h9MTX z6|w2r^;3raLf#K6^-TWK5$Azh_4lsMMV3LIIoK%d=Zg#jM{OXH3)>4tongqd+F`WK z>ak$xF1Wtf2`eR0+p|j^Mf67U?g@is7S8MoJLB1YIa3U3u3yet?ONts-woD?REwl- z>wvTs-Lh{7VU2pIri?^$j`y84-_%LU&b4f_M)G;F8rB@Kd7~;P&C7hwd@v1)6?=!6?V!Nd?;RM8CrCFm~S3TPV`b5eAr88?w^tE3| zM6)bBgYItBEjfdP+bz}@W ztn!SSjvV)obmX~T(J{;YV;u$VpJ;f>p!i-GG31)tL3|k2Ub~%muvX*D z1ziTUAH8!2A%pC6Nh&tR3C2hNdG^PQkqv!j6*^y=1iBO6}eMe77Lrs$=$$B?wWUf@LW zfM&>L9?=^e|9{oe$Rxg##@I3Iv>U_j$Agah!sD#zOPi~5S`%~p?!HESSh3Ya+)@o|{>23dk}{U0j{FU`TZQen2y`Wora>r+wgdBH~&dz4w;ygkgOo z?RQfvFpFoCP3HIKmT=@B}41aRJjsenF~Gki-qlgW)Er1@inehG5?y zokIRXis2SnRh-F`U&8J4d`U!&v{Lzw#3_`k`4V3dB+2id|>A7Q=s~ zBN3y~@Yz4gcwaFv17WYpy}7sN-E-b~@AseYzW}_%S_TRhbu8hLilU0gI8B|WmWC;js~QR-uc&y!Aa|S-hPmc;5cdYPH{6ZGkOwZe-9z4qeZF_{k=GfNPn>^X zNcH+bbjYAC?Qb^UZrco%cjLCEj~zee1BQ9i8Vgpo`W?=YYkC3SiF<7x?m2CrI%+ay z_dUaNvw7qkJ2l@4x-~lry`WpS#)@coffubaOy98kwYATXvAu5KL~%%DvMD-R!}b5| zS{tDhPBm`lTPMeKyB~)xf8`1Fvo{;NDh^`cj<~g=fu~qyDBpGy21=+Im_^w@4tWDp zA{3Bk$X=NuCeU5Eem@}YqG^q&-)$dpHzIv6Mvd6=oxz|!0=x9}|EcwjXY_Ki^z4+4 zl28CpCJ{*{9YB6YoJSy#!Cg#);T}~Bl*Q7AU|%7fL;g$^!+nbBQS3U)=O6NxzcGO3YpLHZE$)RVCA7jSjW AlK=n! literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/SaveType.class b/src/main/java/Enums/SaveType.class new file mode 100644 index 0000000000000000000000000000000000000000..b6a6bdd2242725e8b6573208b27bfa53786b6a98 GIT binary patch literal 888 zcmZuv+iuf95It)DiAyHLSQVA)d4-Sul)O$lajt4MW2155qGCwRG~j z`MzN@WIxQZlM}~}+%ZGmwB~Fphl7tUL%Qh&?z^bpaYrquo4TD|LEMQu+N;Vswyudq+8 z>-HcTb=@P6D_s0HlN~P4zzQGqs)1cRXIQ#DHUmYxFmN9m2C~Q*$n&MZmu2LLe$ycj zq~Uh`K|nfCSI;TsZ%AB1 zndM7-Dv(6}4aoEYYPnLpK=R8>@=fwc*n&n9 Dmm8^^ literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/TaskType.class b/src/main/java/Enums/TaskType.class new file mode 100644 index 0000000000000000000000000000000000000000..a266304bdf9c937b7686b2de6d3ab74bb5fd2193 GIT binary patch literal 1346 zcmZvbYg5xu5Qg8hX>%F^gsUPTaAPpop4~mCKYxAw0bmv{Q_ykC#BD4Zm@#n2#1NL)EGrC~w7AR> zcNIpN_Y}sMD+=eC_Z8C22MQTxK_Sb0s4&iaq%gr;RhVQxR+wTwQOGf$DqLVX2G%s_ z6~7*8unS8;W4oSPbL(%`-o5qm8sh8kJX+uIgEFC94M-)+Ud0R99ahU#4XW(9<%-Ws ziE8-Ts}a2&FQANxnpbL&)olN}CvTt=m!$`WYJgfpVj@DbQ%pu^b&5uWHm9f}bT~zuTwMh6og$F4hmeZUOQ6f>Cp1MEAXpIwolnsI X&CaBW@kM^1(Z;Yp!Fk-2NiO^b(un@V literal 0 HcmV?d00001 diff --git a/src/main/java/Enums/TimeUnit.class b/src/main/java/Enums/TimeUnit.class new file mode 100644 index 0000000000000000000000000000000000000000..adbb903cbdd5dbaaaf79f40a22dd1cba606e0b02 GIT binary patch literal 945 zcmZuvZBNrs6n<{owO#4hD+4Av9aFcVo2ZD%76KuVm@M+4K(g?u8+DX)U9znteD)7% zNyKP0eD+5f&%G!Nw>CLXo^#L3bI!fLet-K3U>$FxP*65d!HR~QhGzy+c+O2#N7|sn zDvzk?nB(|DN0#HNj(LtRbu4gvrQtP$a_-mzhD3A64|>DezT0ySe0Nl5i1hmY=!8K& zw$CZ#7Qj>V8Xn#@(tY%g$z4CzvN%CWNDKc*V-rt3TJgI?Pi z?AvXRR~31C9~g?I=Ba&V*F4+r)~wOM^}F@*ltvAg)NU|jr^LT2A2LKOx9i)ZU_j;N z68Gqhj`ugKFxG@Gpz(i)4O)a@(dZp#*X0Uh|29J{Q9loven6|NEL}qVJW+g^JQ9k~@tEwj zsE;I)f8Fm;S}9GwgnogjAci8yj38!2keDE|svvPe5}F`M{RdT$LwYqWCB%%?iiC(+ iEj2{kYH1;o)&Pv_4Yoo6 literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Deadline.class b/src/main/java/Model_Classes/Deadline.class new file mode 100644 index 0000000000000000000000000000000000000000..c80cc1eb0fe8d6081648e6d97a188d696354f343 GIT binary patch literal 1495 zcmaKr>rN9v6vzKlE?bszzk_nWwB=H-h!jz2MXFp(AR0rAPU!>|mR-`FlGG>hF*H#~ z_}~NhP{wn*ON6%Rhdq1F%=yin`Old@f3JQ6c!GB(+A-FIHjJB?z$BX~Hq&fo*hJaH z*u>e)vYBHu&+I}ct@FUZLj#WlLfN7~`{uDcmx+S5>_l2>l@w@Pu^daU3QR@)Nn1LH ziCvwyoWo>!dhESGeag)#fwoP{QQL*ntjh1ntW6`P=eX`y^-;+@WkoZb-0Y8SxsE;( zX!4`9q*8+H4Yxqqks!@-3Yu05Yu7J8pgS6?EQ{z};ttfh#T&PzmCV^x&H|qd(YW>!QM;u?qZmfT610P>AXDKQu@fvd2NkY z3nLXl8m|O;w@3v0bIO*Ur@X{<0Ro-3C-$UwBG6MsT2`m^_H76lhf4eU)kR|&ioNSN zOf!LsVHylv&gXmdGkuRUSyhj8q|CrInJ>vp<0h}*2PW3>nl4~J{Yi{Qv&H365fkV; zl_x6YItNmJu=Ejmo|cX#bg{}&D!Qcd#tdw*a+?B^r8AeB%yQ1%6BYEDzuUSz&~CnH zV4FH~({)b@XH;Cqaa2CgTHxEw5`s1SOWKf5&Q{)}4+h;^+0QpO_rbm5nW~b$f8!uK z*<*E}lQ+9D*gGX{d)K1JWMGG$QN{VH)g~}pI}c;@@Z0GD)63;vCeI+h3*BUUD4M15 zI{G)qXD=b*bH5P!QA+P6+gh6HM*{|6VvvwN^atQP&4nnZBmNU1{w`2A^yLEe|8cXF zFiiW85HwH=ZD6#q933Zgg3!TQsKIEs9Gxa~hR~r}XcMDmIT|N)me4!3&}K#><>&&T z2}0@ZlVyFUNdv)B#xK#rGF_3X_)a7A`pGtyW|v6J5sE?>#asHDG@8K{-jHeuio+D& HqwoGdt#3;n literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 7b45b2d8ef..83fb567b92 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -25,6 +25,28 @@ public Deadline (String description, Date by) { this.by = by; } + @Override + public void snoozeYear(int amount) { + this.by.setYear(this.by.getYear() + amount);; + } + @Override + public void snoozeMonth(int amount) { + this.by.setMonth(this.by.getMonth() + amount);; + } + @Override + public void snoozeDay(int amount) { + this.by.setDate(this.by.getDate() + amount);; + } + @Override + public void snoozeHour(int amount){ + this.by.setHours(this.by.getHours() + amount); + } + @Override + public void snoozeMinute(int amount){ + this.by.setMinutes(this.by.getMinutes() + amount); + } + + /** * Returns the full description including the deadline of the task. * @return A string indicating the task type, description, and when it should be done by. diff --git a/src/main/java/Model_Classes/Event.class b/src/main/java/Model_Classes/Event.class new file mode 100644 index 0000000000000000000000000000000000000000..d8100a6b2c38217b228050cc78f97fdd5341d43e GIT binary patch literal 1565 zcmaKs?M@Rx6o%g^(3WN88xfE%E!dWisvsyuR0;^%f(p?XVst1Iy0q+)?vwxURN4j}|o*JsNF0EG&N+5Kg zw5MD{G`2x~_o5%B8DGCJ4f-y}duPFsp2v}_r%MXbpzj*YmxZNqgEM#?1M8rL%-z)w zVkGL=3nL;X(0e5FD&^Q&soz;TN1m&ttqGm0v6bpe;NObMvkKt_%eE;HDet*FXW1uC zUisJ1TWw8dwNpF|;T2ulwBzJU$5h;gZL6X$w7{3j68s$A39UY+`H2CLBsp<{&J ztcQje4OgQvLgR!E)s`l%fK-g$%U@F)y)&Gzor>`h2|i>6`frC23WY literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index a431054d17..1e71946c37 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -26,6 +26,31 @@ public Event(String description, Date at) { public Date checkDate() { return this.at; } + @Override + public void snoozeYear(int amount) { + this.at.setYear(this.at.getYear() + amount);; + } + + @Override + public void snoozeMonth(int amount) { + this.at.setMonth(this.at.getMonth() + amount);; + } + + @Override + public void snoozeDay(int amount) { + this.at.setDate(this.at.getDate() + amount);; + } + + @Override + public void snoozeHour(int amount){ + this.at.setHours(this.at.getHours() + amount); + } + + @Override + public void snoozeMinute(int amount){ + this.at.setMinutes(this.at.getMinutes() + amount); + } + /** * Returns a string that has the full description of the vent including the occurrence time * @return A string indicating the task type, description and the occurrence of the task diff --git a/src/main/java/Model_Classes/FixedDuration.class b/src/main/java/Model_Classes/FixedDuration.class new file mode 100644 index 0000000000000000000000000000000000000000..c90eef06f01d112d7bb2432e741ebb35eb244e68 GIT binary patch literal 928 zcmaJ*jj6ArAk|%Mjka{d=Nu4q51%+4~;Pkw`s3jcggM2*ni^B z&_vUu5B>mulyMF&3OVA#?#|49-?uZf^XvEZPXJF*%_ECjIov=owr&?Wy6)hvgAIb~ zk0N0Mtq8^TnYa-3P^go7$3}rVX%Mn60u|Vog#AkTIvuGV5f+=;mxMw)Q1adAyeFfs z=!G0{t)A!-Rx8ysnUL@3QPh{MAchxP!Ds2ePV##aC+8uDdmbFP9&Tcpu<}Z4YiuNj zhti&E-xRXgbg|{(KDG&)hn!0IsTm4mq^Zvc@&mKCU10`b+F zV)t?==fIDr@b7zPvTqyHwIvcw5r&<>%7%jqVK-IZyxa)e|Hom62R+LpPRPWA!d8au z9P+#`v3J1!0-sB@gDX(&@egFajo}{e%i}ATC1OHM;W0~ydt)KS)UL2l`;N>t7J;vS hxmm^m1y(5VnZXLme8w6Nv4=<4z$*JL`)j=J`~gaX^WFde literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/RecurringDeadline.class b/src/main/java/Model_Classes/RecurringDeadline.class new file mode 100644 index 0000000000000000000000000000000000000000..a8f07a5dffb875ce43952d0853344a807dae142f GIT binary patch literal 955 zcma)5T~8B16g{)xZd+Fhl@IX)3KZ;Cq>mVDe6WOQQZ%6iAAB&=?F5!CGtKTS3ID{O zAqj+p2Y-M+%6PZC>XNO-hn=}IbMCq4e(d)jH{Sqk!zsbUOc8fbiLLt;x?QmFz``O! zDG+WH1VXxkq0%|wXT0fidDQIcz>`NU2J@9CJ^h+tyPkheZX)gZ%^j{qE01sv87AAR zPxR%EC&l~dv?qcC-t+0Epj8rwVYcq%ok?F;MS&}Jy%;{fKN3s2b_DPH#I_X+wo$}G z8x{&S?qP~y`i)XL)Bzvv34N^kVcEo^0v_9Vf+dFKJ(A;pZu>k8McB-dQlQ(2U(p!W z|Dy)ZVF}BqQg*Cb-+x(U4#UDJABeV+F4rGDeN0xUxzr)Ui@!2v+c2g!7FObX)){Jl zy5`97MVtG6*Q0r|P^Y5j@*Ag(Vd>vEtk5rD((p4F@vx9( zkX=NH*1L4t!~`a3w;RtkufZD6uV7q^@HVYe^a_-TVVcl0U`wqdkthiVdt`5wmnI(0Pu&`Ja@`{yzW! literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/RecurringEvent.class b/src/main/java/Model_Classes/RecurringEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..cac3f5cdefbcb2e087c00666a383cb6d5485f865 GIT binary patch literal 946 zcma)4T~8B16g{)xZd+Fh1w<5~V8L!h`-ri|2dhMr0tqGf-~*X%C$MyxX?ACu@K5*| zm}p3N@CW##jCZ>m-KN#}Ff(^%&OP_sj~_p8zXRBTQ-F!NJno$_UiY~?t+#dH$VBJKJ0cU+6cIKnw*m~N^r z(HC2u6#LOdM+8T_wP%Pyy zca95KLz$9d< z4pdL1Jxk*4a#yS1(!x_}VN0oA)Mv0iN-2UgcZRF1h?FBK+6OMXz6dLc)sL&b5-M|)}U>OT^&(VF6*8N{XZ2I~D literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/RecurringToDo.class b/src/main/java/Model_Classes/RecurringToDo.class new file mode 100644 index 0000000000000000000000000000000000000000..92ba93946eb2732b6c8a05a7454d59aa323c19a6 GIT binary patch literal 910 zcmaJ;C0&J}0aR;T?x?AGtx`X=;HVB1K zdZRFu%9Dgr`$AlaMj+H#qhmr}oiz#eOJDis72%+oPNyTaQ^I^p_nEHP_LY1;y6nlY zD|!J(az;;h39Hpw8q9h+dK7x{$dAiQCu4D}qpRQOr?EH}c|368Am?HcON8auTARp( zVt6dgx$Z|r8=E;ibnysVgw11?5`1n2B8p_xm?7i_v)Q-{VJ&0M+GzogQRWG#Ts?VF zrW#@WQVe8ED^Hk@zBy+rGD4Y%@H~SdJ#5DO4z^?6dxXlrm+;k<9?0ZDCjE|tXLNY& z;DFz!t@U6uB)IRCl3_9_;mfp$gk$oH-U`(ZWK@{|n`vcJkr`n3dMGo>KTXwt=v_$9 zG^b}vC|V*2I=+!j2UWseYQ8LOgsuPAVVl?5=7lC$@lvp5v7JYO&jt1l*`MQkp?-J+ zsz3Pw>)W{8<#TD0VhWc5iwxnFN`U)gBCe_5V6Ofh)-C3NuYa*N*8wZcP~_XfGAew> TZFjJbU2I^L{T%yi{N4KlVbtwv literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/Task.class b/src/main/java/Model_Classes/Task.class new file mode 100644 index 0000000000000000000000000000000000000000..bea2620e984e9b599e0e439d1097a643c29c3d84 GIT binary patch literal 1960 zcmah}T~k|C6kR8Q+$3B`n^Ie-tq^I2v^0LSwl?&G1~DjsDky5F(>WxkaGT^FCihSW z|AsGh#&=(Q&>5+nKKKLt8U7H*b#gBxKn7s$KKJabz4khL?{ok8@6F!;ZsFTBGMG+b z2-mGCB=LS4AK=3@KEe%aZd&)pN!&`}cABrBSaT=K;Cl}4J9r>4P*Xv*H`vTd; z=kkRtG^D>#STQZn-zW+sykJiINvfzVgczS$H=g}XVqvyU$8 zZKB->=K0&ko@|BQs+#xgF;lBDs9(1Qb#WFs7pHLAMHXiSPSt9KN~N&Fzp--pPP6IY zp^Fmc9DM3x9-p}=W5LBRPP5RD|NZ5sCu8Bu%O_(lE@ITh7)D9-P-_#ImfWf+v#D!A zCV|hB_`<~^D(q*4EoeL~HDnN|pkM_trqko)_2;T;4!HJ;l53-k*HndPy494XFvq^H zazEeR8pY$M^s`6O@Rc38-D?cO)*j2k2|L%xwWzDIv6o38?&}`}F6_-no9F<<&S$8v zqu}^-J;p7KB`gcXgrJtDtgDjttJ17_W|MD$k-iB!^xe1P=;-#KcksyeV^v_HQ+m&T zq3bHTWnsQ~Sv9(~QyG4y;)vN>!?&2d zIPH~pg6kmo;lW$9=eYZd$Ud&Q{9h3HtGkHh;>`Q#j P85}{8`y}@>eD3}aV%wnm literal 0 HcmV?d00001 diff --git a/src/main/java/Model_Classes/ToDo.class b/src/main/java/Model_Classes/ToDo.class new file mode 100644 index 0000000000000000000000000000000000000000..9f7c1ce5a8bd27c499e47862f215a98365a5bd54 GIT binary patch literal 763 zcmaJ<(M}ps5IsY6mu|OW5vA5@t)&fMB9A`M^r0AI6Ko$K`d}J!fg4>|?j?IKB>YJ~ z!#{060X!!!lOlBa>xd%|*_|I>GrIsK9<9 ztQYHDF%p$fsH;lDMuEDjmd*%EHQkYfOg&KY`>@}VQB$-+M$%SKX@p#{lnf?#4Lyw7 z@;Hd;&zt&4AH*emIB{9BibK_wgE=gzPC74=-z>Fh-h6 zoFWMd)AR5KTdeh>`I89wzUaxCR&8O=1AEPuu|iox__V0Wq;wZ=V*$H_!oQgWYNUH| zHkxVnW6`!c8oSuzLDseI4F?4On^H2GNhbW7FFDIG?e#>cPAE-b8dy!rm_z;xY>o$V z0sUf*|D)BFZCjoHEwdCg5r&Px%BqVGgpY~-7HK2wJk7&xO}GB+hae) zU#Gl(3;N9#Zvvm*1YL>Okr7^nM?SH|_vKrp?(ht_d5m!;H+cqq#!`5RcauznZLYtA OO{}t?X4Wfyvws1uSHnL5 literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/CheckAnomaly.class b/src/main/java/Operations/CheckAnomaly.class new file mode 100644 index 0000000000000000000000000000000000000000..79dc1aa595ac6e7617b3c273e7f3e88ae948cc10 GIT binary patch literal 813 zcma)4O>fgc5PfUAapRhP(iBPxl&{)NsUeMKyQc4MTohmr-1`hf$CF9p`Qkc!K*?hBM8WyWM?$bV}Tm9iPWZ zNW_o+i+H=fPfdDHY95aw5jia$b*nr7xXx$>N$83PG96;BmJYG&2R-f`Z>BStFfgTK z)x;HCHE|8s85aJgzuy;rY~lvibXX>Atm~+l*uYJOrN)s6c`O4za`M~^vzbEK?2Y!J zaAV>fi}pt(Qaq9`sWp;+k8DR!;-a;e*KSx((hYZz3eGTZjZ(%-V3;1?Fw8257YX;G zlrp!B5utrRij3PFt%yPIb1xB%XAC9lAm7O860wR&dSB_MfTaqOHR-fMo{^tee-HMK z0Ii#BAqy6%WEwM6lBNdaRq|WvopNOW1iFjNzt+TRoV= z?Fd4+(}UM=SM5HE;2qpkyLq+yID!Q%s%0sRWo7w9!%75k+zcb5&Yy;{sv#RjE`mX< zsbyWmMg*VXzJ|PpO#!W1Fl<{o0)yEDny-4ZR4qI4I^mSxy`0z=7EkgR0bMLq92rd?#NFnu!io;(s5Zt=+2 zt}IH2E^)dn%4)$eE3R3#1$y(YQ8>&Q6(2{#141nw6{P>VDlpO-@W^!c7Y&yM5n-oY z5t<6{J(9^b4()@++Msxj5tJBJFV9Yq$7RPd>JXQb=S!$lWj<>{BMtzqhC7a{4j&!a<=@PbQX*%We6*yx-`5(ybeqs zsNmOCAAfpPlvq5f@oh6X)L(mIlsvgkHb;_~=3CadL*4RQ&nWS3wB!hypG$2EbX6-Q zH9g5T7@77Lpe0rPLaS!G{EB&RTc=Q<{p7cL&EX=yZDaiKk!>|~-1TzLDdqYmPdCuX z9WXe30x^Ax(AKZ$I6>#{==#MEo8%ft2iFU9P4G9$fQy)_CrI%b;@jTo-_TVR~f{s-(j~Sh$9sZ2CDOcgCM1+6WJjlMGLxAJYtao5&%* z^bI~$@`>gYiC7K2KO=gI_|^&f{_;x+`K2USziK#&_c4SSk}-?Rw1gr4!MMiHd6FkZ zN1XpDA5Bqog@r1d{yI*gzq5vc^G)7k+&m-Gj0nh0Gg39#m+rXE1``PqG?2T}XfI%A ziJB}kTqooPBd@+H!Em~Uk!QIVMABK!PMl*9 z&>2Wmq-7s{Fnub!A=Wf{G!yyW|BVVYZ!;=Y>f;jZ`dQdzo)mbzp)(^JBodTwkGS5T zvH|l-fhNs3mBDyDrDyYCeowR?XqmwW^~jg!Sxx0=11wPNM-I(T447rQ5I+15Ay>Ky literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/RecurHandler$1.class b/src/main/java/Operations/RecurHandler$1.class new file mode 100644 index 0000000000000000000000000000000000000000..eae471e7919d595eb77b4edf69468ea28e05a7f0 GIT binary patch literal 994 zcmah{>rN9v6#k~&cH4DwPvmbg zA;cISz?bk%jAyo#l6Xrd=R4n-bD25keE<3N9KZsW4cx|X7M-}0C2d5}Q5|E7j4P2h za2FHGVKPhFl%k_bn^xkUj{7N~i+oG0IqI@I&cDv3?FxV9fFE*7QIwYJ1&-V=iLmO~I%XI$Wf6qyUJ&Xin0SO) z6W7sg;xXn-Ji$D}fQl}-T<#ajUL~@sYmRX3qVIdYiKohK0dqQ@sp#h>aw_@-7ELTE z@e+&FpRI=QdFXgDC|rG5ewM-9kW%=oE)N0`Fyz|Rw)PH$6*BbxC7NLk9m(BzJTzJDNQfFks_x0K%Fx-Y(jI?LyL8J) z#kA0~J^JiLwJSFnTX35;fM%EyheC$A5!${kTGvFbPc;`Hq!E#YriUKfAiPQJ2a==# z^)s;ZZ^joSPSi=BLesWBL3>O|8qJwqmr%ASCZaf)lLD556ORus_=qRpt! zNFz&6=tT;B7{>(RBrVT8;R;@%L|Dc9%w! ib}qHp28}9E8_ckeNC0%o!lJ zwY65Ot+iHKtK3qx?X9uaK0p`(@lmz5Rx8$O>BGmZ_T6ghZR@@D)%4rv%p?;tf&Thu z^UKWHkG0qS*4k@*YoB@iZ^s@0aJE z5R-Ae9R9czydj8B;Km?6iJLU+4PrX358zYybPzSTIe^dL7C&wcVjuoXF8OQ_`|-IF zY{zZ#>vj!y1hD|0_u~se82Dlpt?QSqyZrca5OLh?$5(<#;2zoesvlpIlV1;_3Ez+l zukz!7962bz?hPV|L(-_jvUQ~t$Vky68V2O^sQfw>L==O5+$YiBFJV65$Af-+Q^P|+ zw8EBO5Bu?mhHq(jRKvFg^p<4Ow435aDrKew{Em_8X^o{Efr+i_dQIDKVpcNM(3u@> z6j0JJf%5#xi(?!v?ltU`X$w^6Ppx+c<@EAcGUl8sa9Vx-{IK4+mk9Wptf(n<$C74y zITW0%noHv1o}iiRB8c&TZ_@BR z4Nqz~uHh+xV272qyUaB)3B1x(u+~UM-avl>UbJI(D96HJu6#3#0h~JBj&Wk2PMAq& z^`0)XS01O1AK}M3euAIscn;4COm3s&<6E;)&@k+tPOI6{@q*O72`}pSAN)+mOA_(a zrgX}&62mG}4bABubGWPHWr^zN_=S#N;#UIG#@V6SG@@}Hx7^^@I({Qp{T9E|@OvGv z;8hKO(D6sSCNO0j1*><_G7bN$<4^dr)bbY%uj}|f{J+5B-nhxA2~)zf!$#P#qSk_N zG`nTkvcsla9hNa4cKUkF=^Fm3;|+A{coSPSyrtu9yrbi9cumKUfI!t~7&3fyA@Bnk zjTc39p$Ju=VwGh%DaST?+f1k1il)koh0iaFbWtocUHGN=+Q3G}NjPO1c2{@UHl4Jc zG^639#dazkcT$V^7w)wCvLcMj@a~w?9X67d(@k@F%)Z^09i6U=fCzHWXtbfNt)Y*9 z;k9cciG(gngszKHQATWAQuB3DE-G|UDXQ4t+tc#HT^CcuH0p^OeYyw>f|wzr!nfNrdjyISR?_LF zio6K!a4g%{Vd`S0sFMJiFBPcCo6k=aS~C*F>$dGQyGTc&afIs@j}rG%SfFfmGM(^v ztCJ^74%s|5(J3}!WwYT>EYIu~MvXz(T${IdjeUF*aWW<#shWyGa|PWEy+=+11n z?1bSo7u}SE1ww~&?cCUh{ETXn1#D%~N*M7zfq+}jyzq={FHg%HZ=Aa+C}xS-q}6~}6lSrhNfW#R8V&X2s&c34 z#3Xo?Fv^il6RT5ELYh|FHm2Y zsKK*<+x813wTtmmerH)6}UD36tauFYnONJ zPStsm1(-Gu$*6^rsS1ea*M)30=f_1>1;Z)cLAq$v#6p2tV+<;UjrZx3%kkZFJzt9f zm2aB7|FfmYw*>demjXVEcst#M&HUcN-da}@2+unLF>esc#v@PYWJ_CK)I)2ghXjK&2G^A5q6L4Xe}gJ7%IE%CZ~ z+kyd@3pSmPeL?u%q#jcX#d?kBwN>1-b zys(l`(Ez3nU|I&@eV9Fn=_4v<6jE6>h?755Ns!yLNfG&(uNL#XAUOy)|tb~;y2Lp{QL^PfR2 zv-qpPZ0w}`<(Nl}_1J~ExB~O3xd9)=8T@@>G48|?d>v&>t6pc8J z<$U{F!Pl*G`O0&iP;kBoV5QKpithqzh^kpk!D=xR7l_$t5sP?Kml54L(1*CSs$snb zgZ~g3%HBqihHW#uG}M&rkzem%jRtn3Zy>lz4rn}fGZ#v@fdSy7wl&@X*ZY>!?HSB% zTW}O4f_-RUW4^#Qv7nvdv#@GW1`Yc#i9Vey`^RV@&6;zy5dA~PWf*%NoB==E>*&Gt z2ry-4@;8$Pbl^Ou%_^qMY9`HPlqiMz4l0Oz`{FmbRA2|Xy(q^qLX){*=Af@EnTA^0Zu`41Kt_Yj8^lNFT(sOp6 zJE}reS#Mw9o%cF7-oq~CmW8US=$$E%YU%vyobyk2$um1SWAvn0le11N|7YQi`16$L z7#icFtBXYc+szY;??Ex{!e8+gYDAIP zAU5$C6^FzT)F@E)DmU|ayLyItCTi3b>T&hyT)h!5x{23KCXSJPcCz&MkTT+&Pq0!X z$(R;e&`Sc`*1JbkB3-!9^>d!_#jTO0{sjh!mGFnuj9kS zbuE!ygLm)|)|l%=5v~^%__&yg8^kPpf_3Fau@s*a=iw&NioK!}pAs8z3$3_WY{6%Q zfm=lspA{DNi!1OsaW!re*W-4v7k7yL_`LWsz90_Zi{cRaY4MlDQQRpWz+K`Yd_|nV zJ>ms?RRO-Cl;D68!a-#w?o}4ykg^nqd7;TD%{Zd8V?f!AqsmSkQ)~<>Y22sm!Trj$ zctE)k4=Q`{Eqd``_eE|hw3bxP#5Ay>KS;Rr}0yDDV|d!ctKr(m(;a*S-k{5S1-da z)E@j&wec&p55HEg#BbD(;kW87_?>zuey@HFuc!y`s(J{2P#?h`)hFfgc5Ph4tc4FMtw1KAOtAI%pkcdF4IDoj6R8%y{!4VvK+BmCZi@O`y>mV-t z9nOG+5JLR{{3yh%RS}^|-ko`GcHXYv{QmRv9KbU?@^Kwob=1(TQ?_m4j)xl-+_c** z54Sz+GHgfj2WgU7pU9`4dr z1Cg88IyWBf1-OqWfR8Hy9-tLq4{e4W+ucpMnsx^|E|S@y6zQawWjYJcvBw^w#n2ee zMaGTPD(_z08$F>n94RHTgOumF$Qi<=*l>I*62q`@xshS5^rgG>#a-~UunL>)&dKrr z)#nUsMB0~WPiGUUcv|{M#xGN^yLE13rFQ1r|9QWDnw0_bXkT>t<8 literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/Storage.class b/src/main/java/Operations/Storage.class new file mode 100644 index 0000000000000000000000000000000000000000..e595d78fb684da7b30cf2db59b7b98dc3bb48f70 GIT binary patch literal 5540 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 EAJ<>l(f|Me literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/Ui.class b/src/main/java/Operations/Ui.class new file mode 100644 index 0000000000000000000000000000000000000000..0972496d91843c27c4c0cae2427e6e2c945be878 GIT binary patch literal 5317 zcmb7I>vt2!6~7As55mO6;hCf`=4DJ&%QkHTHVFaSU{Mn&Hc$$Uv(^sQ;@ur}cV!{s zHt+YV&8tb;q)ngcr#?Qk=kOtaK+oyF)YISH9jzqTq^*3|8Qr{V_LijvtH zy1%Hxd3(_Vr6-E*Fuqu`Xj4?xjah9w(_yGXi#GE2DdnkHIS_EL%yKq&5HF}o9ejdG zr`!Nci3r|y9!=>W(F3j%4w!nGA3MX-!(UG}!IB7?zUjthJL^W+re!MyEU9w9q|}W9ljj1hZvoTa{sKE|9Ae|> zyz968D$MD6SW&0kBuy9H;T!gf-Amu0M=Xlu0zT4wvQ1%C$_051|FEvg)r4z7g5332 zk|kzia>A89r91}ILaDIIvP<&X!a{KYN7ojxTUagh(9e45U3w2ia8m0yibK10R>f8A zM1AY&eL)}e(uef(9{Q-4KBi9)i5cCHzTK2%8L4nZ$)>I!w`d}XyL1ETq1X^$>DaL? zufxwGsBY}qo*OY;al&Mb7)ns$;o)IHzhEW56!fV@d*+lKR;tW-U564C;j`3Eev69v zOd;1UXZH^FQY#-$axfsTAPH?AS+yg%s8k^9HCWA!G1%tF4sFL#4s40FjH@a!e!!y9 z|IXPqiya0=oYvY|Y$|N`0uKF%qe72BemAr9lMdg*<<{~m;&?Q>JU|c;lzgVP!0s51 zWf^Or?~-^Y$*S1s0MBCrA1H}dsHiAPbW9{I$=V0mBL?qfJRG^fL`Sw!hLn)&OXhZt1>@=|ppSxMVF(X==ZDRHxwc&!~>l#a3; zn587jLajhI3dHkt0|qRD6)8y^blS5(B2~y*LXY@M8Z}5uvS(3Q;xpf@rP(Z^TmuJ+ zFxyxicQB)BDnu#zQe$H$V?*jz20CQTYP}pm@N&` z@JMNNtTZ+%kEOeG`s)t`ZT*$r-&^o9W2SZk0PYS!C z)N&E?wq~OM(|Wh%;NC%Wz1%Q8yd=lrKB{`L-jqw+uA!@6^VQjiOgx#q#e^%PTQL!%VU_^ zoXaM1eb+;!q0jLy??_vE9B|ut9-`QnIh@ReQM?Kbg{KC`1psZ&DIcVPs-hq6Cn&qU4;ju}M8xR4`JfIHN5Um%)R(mpMAim1EICIJ!j)N%>b8d=Q@+w_?+CVcym*+=v|*qah{95`f{_Fn;pSF4w|GNUkdhA4Tr$pc2EQ_}L_OhD9?6l*{NE~+jB8zdOJa8}-ljwvDOu&hu zyGgiu=4iv+y~esd46v+ zeeH0$!HQm1rPPDe(^Ht6I&AjPAMjg*-*|52yaMn-z0oWX0s zQ_;Q@IB~b79h5F0zoB#3uXgaKx$TOx5iyDOox?q5qKE#7=D5qhJlibV_4Rx-K;Oa- zNB%s3--x)r<9P(%2C!OK*B$x?S%1aGqN8{g@Eek!_s~XA#xwR~p!3O&{x!3IqqPs; z1_%9})?wej9&1}dKcCQjw3fC}A8p6q4oI5FB<+VBR=k0sJzdaL`7RQ)8!X4@Q9Rk! zA)|Z~AP?TgF>7vXOkoG8mj(fN?5kiKa$!S&9RlolzJY}tO(j?`0?6a}kc~NzF+dIj zav~qnn*%ul$WcH}=0i5+K#l|QI3Sbxkb83=lYmSCGL;YM%Yl>uIRnUaK4fzaWEPOK zfSk&Q+?NBn0LUC5r}H8GIgpEhTmob!A98;V>prvYH|qhj4x06# zS%=Je2y45iPr^W=XJG2H*gXeRpC?H#&_Q|$z4tQ4!Ye5CSCQ-2=sdlS{}X$Io}xFY zN^en(-lm)M4qSU8bFFM#8(`NSHY$r|{ia!myG+tMpWFyTFz@IFlV04970vF9?e zUHK|?!P9(w4EQI2oX>}h~V7Ha__KBwP9`%d}+zHh<#RnV>_&&A~F{0H-kJj(z8 literal 0 HcmV?d00001 diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 51dd92fa6f..79b1132b3c 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -168,4 +168,11 @@ public void showSnoozeComplete() { System.out.println("Great I've snoozed your task"); } + /** + * tells the user to input valid amount of time + */ + public void showTimeError(){ + System.out.println("Please indicate a valid amount of time"); + } + } From 906a374a8d10946ca438df7803956de6093cb971 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Tue, 1 Oct 2019 21:04:00 +0800 Subject: [PATCH 047/251] Added duration to events --- src/main/java/Duke.java | 98 ++++++++++++------- src/main/java/Enums/ReplyType.java | 5 + src/main/java/Enums/TimeUnit.java | 2 +- src/main/java/Model_Classes/Event.java | 5 + .../java/Model_Classes/FixedDuration.java | 14 +-- src/main/java/Operations/Parser.java | 14 ++- src/main/java/Operations/TaskList.java | 4 +- src/main/java/Operations/Ui.java | 14 +++ 8 files changed, 109 insertions(+), 47 deletions(-) create mode 100644 src/main/java/Enums/ReplyType.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d7fefc8dc5..b03b07695a 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,8 +1,5 @@ import CustomExceptions.DukeException; -import Enums.ExceptionType; -import Enums.RecurTaskType; -import Enums.TaskType; -import Enums.TimeUnit; +import Enums.*; import Model_Classes.*; import Operations.*; @@ -59,12 +56,12 @@ public void run() { type = TaskType.others; } switch (type) { - case list : + case list: ui.showList(); taskList.list(); break; - case bye : + case bye: isExit = true; try { storage.writeFile(TaskList.currentList(), "data.txt"); @@ -74,7 +71,7 @@ public void run() { ui.showBye(); break; - case done : + case done: try { ui.showDone(); taskList.done(parser.getIndex()); @@ -83,7 +80,7 @@ public void run() { } break; - case delete : + case delete: try { int index = parser.getIndex(); taskList.delete(index); @@ -93,12 +90,12 @@ public void run() { } break; - case find : + case find: ui.showFind(); taskList.find(parser.getKey()); break; - case todo : + case todo: try { ui.showAdd(); ToDo temp = new ToDo(parser.getDescription()); @@ -108,7 +105,7 @@ public void run() { } break; - case deadline : + case deadline: try { ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); @@ -121,19 +118,63 @@ public void run() { } break; - case event : + case event: try { - ui.showAdd(); String[] eventArray = parser.getDescriptionWithDate(); String[] ar = parser.getDate(eventArray); Date at = parser.formatDate(ar[1]); - if(CheckAnomaly.checkTime(at, TaskList.currentList())){ - Event temp = new Event(ar[0], at); - taskList.add(temp); - } else { - throw new DukeException(ExceptionType.timeClash); + + ui.promptForReply(); + ReplyType replyType; + try { + replyType = parser.getReply(); + } catch (IllegalArgumentException e) { + replyType = ReplyType.others; } - } catch (DukeException e) { + switch (replyType) { + case yes: + ui.promptForDuration(); + TimeUnit timeUnit = parser.getTimeUnit(); + int duration = parser.getAmount(); + FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); + taskList.add(fixedDuration); + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + " is completed"); + timer.cancel(); + } + } + RemindTask rt = new RemindTask(); + switch (timeUnit) { + case hours: + timer.schedule(rt, duration * 1000 * 60 * 60); + break; + case minutes: + timer.schedule(rt, duration * 1000 * 60); + break; + case seconds: + timer.schedule(rt, duration * 1000); + break; + } + ui.showAdd(); + break; + case no: + if(CheckAnomaly.checkTime(at, TaskList.currentList())) { + Event temp = new Event(ar[0], at); + taskList.add(temp); + ui.showAdd(); + } + else{ + throw new DukeException(ExceptionType.timeClash); + } + break; + default: + ui.showCommandError(); + break; + } + } + catch (DukeException e) { ui.showDateError(); } break; @@ -170,25 +211,8 @@ public void run() { isExitRecur = false; break; - case time : - ui.showAdd(); - String[] ti = parser.getDescriptionWithDuration(); - String[] ar = parser.getDuration(ti); - int duration = Integer.parseInt(ar[1]); - FixedDuration fixedDuration = new FixedDuration(ar[0], ar[1]); - taskList.add(fixedDuration); - Timer timer = new Timer(); - class RemindTask extends TimerTask { - public void run() { - System.out.println(ar[0] + "is completed"); - timer.cancel(); - } - } - RemindTask rt = new RemindTask(); - timer.schedule(rt, duration * 1000); - break; - case snooze : + case snooze: int index = parser.getIndex(); ui.showSnooze(); int amount = parser.getAmount(); diff --git a/src/main/java/Enums/ReplyType.java b/src/main/java/Enums/ReplyType.java new file mode 100644 index 0000000000..a275c78b34 --- /dev/null +++ b/src/main/java/Enums/ReplyType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum ReplyType { + yes, no, others +} diff --git a/src/main/java/Enums/TimeUnit.java b/src/main/java/Enums/TimeUnit.java index 1d894ca22b..ad7e027f66 100644 --- a/src/main/java/Enums/TimeUnit.java +++ b/src/main/java/Enums/TimeUnit.java @@ -1,5 +1,5 @@ package Enums; public enum TimeUnit { - year, month, day, hour, minute + year, month, day, hours, minutes, seconds } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index a431054d17..8d7c8d1b69 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -24,6 +24,11 @@ public Event(String description, Date at) { this.at = at; } + public Event(String description) { + super(description); + } + + public Date checkDate() { return this.at; } /** diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 81cc93fc38..3d77053a44 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -1,17 +1,19 @@ package Model_Classes; -public class FixedDuration extends Task { - private String duration; +import java.util.Date; +public class FixedDuration extends Event { + private int duration; + private Date at; - public FixedDuration(String name, String duration) { - super(name); + + public FixedDuration(String description, Date at, int duration) { + super(description, at); this.duration = duration; } @Override public String toString() { - return "[TT] " + super.toString() + " (done in: " + duration + " seconds )"; - } + return super.toString() + " (done in: " + duration + " seconds )"; } } diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 6a4fc598ac..9b1e983ee5 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -6,6 +6,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; + +import Enums.ReplyType; import Enums.TimeUnit; /** @@ -80,7 +82,7 @@ public String[] getDescriptionWithDuration() { /** * Takes in the array containing both the description as well as the duration and splitting * them up - * @param ar An array containing botht the description and the duration + * @param ar An array containing both the description and the duration * @return array An array containing the description in the 0th index and the duration in the 1st index */ public String[] getDuration(String[] ar) { @@ -134,4 +136,14 @@ public TimeUnit getTimeUnit(){ String temp = scanner.next(); return TimeUnit.valueOf(temp); } + + /** + * Gets a yes or no answer from the user + * @return the response of the user. Either yes or no. + */ + public ReplyType getReply() { + String temp = scanner.next(); + return ReplyType.valueOf(temp); + } + } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 3a95d6a975..218e3a890a 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -112,10 +112,10 @@ public void snooze (int index, int amount, TimeUnit timeUnit){ case day: tasks.get(index - 1).snoozeDay(amount); break; - case hour: + case hours: tasks.get(index - 1).snoozeHour(amount); break; - case minute: + case minutes: tasks.get(index - 1).snoozeMinute(amount); break; } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index f3b5e2e735..e848e705f4 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -183,4 +183,18 @@ public void showSnoozeComplete() { System.out.println("Great I've snoozed your task"); } + /** + * Asks the user for the duration of the task + */ + public void promptForDuration() { + System.out.println("How long is the duration for this event?"); + System.out.println("Please specify hours, minutes, seconds"); + } + + /** + * Asks the user whehter the task has a duration + */ + public void promptForReply() { + System.out.println("Does this task have a duration? (yes/no)"); + } } From 369249a6697e0d68d07d9f7f6a93a28c3b794e14 Mon Sep 17 00:00:00 2001 From: sprsadist Date: Tue, 1 Oct 2019 21:28:14 +0800 Subject: [PATCH 048/251] Check for Time clashes --- docs/AboutUs.adoc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/AboutUs.adoc diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc new file mode 100644 index 0000000000..540c086fa2 --- /dev/null +++ b/docs/AboutUs.adoc @@ -0,0 +1,47 @@ += About Us +:site-section: AboutUs +:relfileprefix: team/ +:imagesDir: images +:stylesDir: stylesheets + +Duke was developed by the https://github.com/AY1920S1-CS2113T-F14-3/main[F14-3] team. + +{empty} + +We are a team based in the http://www.comp.nus.edu.sg[School of Computing, National University of Singapore]. + +== Project Team + +=== Teh Zi Huai +image::ZiHuai.jpg[width="150", align="left"] +{empty}[https://github.com/TehZiHuai[github]] [<>] + +Role: Team Lead + +Responsibilities: UI + +''' + +=== Tay Tze-wei, Caleb +image::caleb.jpg[width="150", align="left"] +{empty}[https://github.com/calebtay[github]] [<>] + +Role: Developer + +Responsibilities: Debugging + +''' + +=== Tay Ryan +image::Ryan.jpg[width="150", align="left"] +{empty}[https://github.com/tyeryan[github]] [<>] + +Role: Developer + +Responsibilities: Dev Ops + Data + +''' + +=== Tran Minh Duong (Harry) +image::Harry.jpg[width="150", align="left"] +{empty}[https://github.com/benitokun123[github]] [<>] + +Role: Developer + +Responsibilities: UI + +''' \ No newline at end of file From b35f5b64e19e6307bc25b2d0986d6cee1947e98b Mon Sep 17 00:00:00 2001 From: sprsadist Date: Tue, 1 Oct 2019 21:28:35 +0800 Subject: [PATCH 049/251] Check for Time clashes --- .../java/CustomExceptions/DukeException.java | 8 ++++++-- src/main/java/Duke.java | 6 +++--- src/main/java/Enums/ExceptionType.java | 2 +- src/main/java/Model_Classes/Event.java | 7 +++++++ src/main/java/Operations/TaskList.java | 16 +++++++++++----- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 322d963550..2e01e8907e 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -3,7 +3,8 @@ import Enums.ExceptionType; public class DukeException extends Exception { - public String anomaly = "Anomaly Detected"; + private String anomaly_Text = "Anomaly Detected"; + private String emptylist_Text = "List is empty"; public DukeException(){ System.out.println(); @@ -11,8 +12,11 @@ public DukeException(){ public DukeException(ExceptionType type){ switch(type) { + case emptylist: + System.out.println(emptylist_Text); + default: - System.out.println(anomaly); + System.out.println(anomaly_Text); break; } } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index d7fefc8dc5..005a1917a3 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -24,7 +24,7 @@ public class Duke { * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run * Also loads the ArrayList of tasks from the data.txt file */ - public Duke() { + public Duke() throws DukeException { ui = new Ui(); ui.startUp(); storage = new Storage(); @@ -47,7 +47,7 @@ public Duke() { /** * Deals with the operation flow of Duke. */ - public void run() { + public void run() throws DukeException { boolean isExit = false; boolean isExitRecur = false; while (!isExit) { @@ -204,7 +204,7 @@ public void run() { } } - public static void main(String[] args) { + public static void main(String[] args) throws DukeException { new Duke().run(); } } diff --git a/src/main/java/Enums/ExceptionType.java b/src/main/java/Enums/ExceptionType.java index 078eab30d9..fe91871768 100644 --- a/src/main/java/Enums/ExceptionType.java +++ b/src/main/java/Enums/ExceptionType.java @@ -1,5 +1,5 @@ package Enums; public enum ExceptionType { - timeClash + timeClash, emptylist } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index a431054d17..4d5bb70992 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -12,6 +12,7 @@ */ public class Event extends Task { private Date at; + private Date end; /** * Constructor for Event object @@ -24,6 +25,12 @@ public Event(String description, Date at) { this.at = at; } + public Event(String description, Date at, Date end) { + super(description); + this.at = at; + this.end = end; + } + public Date checkDate() { return this.at; } /** diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 3a95d6a975..d284598206 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -1,6 +1,7 @@ package Operations; import CustomExceptions.DukeException; +import Enums.ExceptionType; import Model_Classes.Task; import Model_Classes.ToDo; @@ -43,12 +44,17 @@ public void delete(int index) throws DukeException { /** * Lists out all tasks in the current list in the order they were added into the list. */ - public void list() { - int listCount = 1; - for (Task output : tasks) { - System.out.println(" " + listCount + ". " + output.toString()); - listCount += 1; + public void list() throws DukeException { + if( tasks.size() != 0 ){ + int listCount = 1; + for (Task output : tasks) { + System.out.println(" " + listCount + ". " + output.toString()); + listCount += 1; + } + } else { + throw new DukeException(ExceptionType.emptylist); } + } /** From 474f62ce730652b377de79720fe40e48400fa84f Mon Sep 17 00:00:00 2001 From: sprsadist Date: Tue, 1 Oct 2019 21:29:11 +0800 Subject: [PATCH 050/251] Check for Time clashes --- docs/images/Harry.jpg | Bin 0 -> 51330 bytes docs/images/Ryan.jpg | Bin 0 -> 35565 bytes docs/images/ZiHuai.jpg | Bin 0 -> 59738 bytes docs/images/caleb.jpg | Bin 0 -> 35679 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/Harry.jpg create mode 100644 docs/images/Ryan.jpg create mode 100644 docs/images/ZiHuai.jpg create mode 100644 docs/images/caleb.jpg diff --git a/docs/images/Harry.jpg b/docs/images/Harry.jpg new file mode 100644 index 0000000000000000000000000000000000000000..425b9ab3f81abbbe80b7484a1c188bbaf4a42af8 GIT binary patch literal 51330 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

A~UqNFPO3Gmz-^d7x2r-g5V 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%0Dtv6? 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 E*-AY>vH$=8 literal 0 HcmV?d00001 From 8a53b54cde39fbab165ede6915cb376ce420f0ec Mon Sep 17 00:00:00 2001 From: sprsadist Date: Tue, 1 Oct 2019 21:31:23 +0800 Subject: [PATCH 051/251] Remove clash --- src/main/java/Model_Classes/Event.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 4d5bb70992..3427b913ff 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -25,12 +25,6 @@ public Event(String description, Date at) { this.at = at; } - public Event(String description, Date at, Date end) { - super(description); - this.at = at; - this.end = end; - } - public Date checkDate() { return this.at; } /** From 9903aa37ad5f3cf2b82281311d9a0e3482a67f8f Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Tue, 1 Oct 2019 23:53:34 +0800 Subject: [PATCH 052/251] Fixed time unit bug --- src/main/java/Duke.java | 3 ++- src/main/java/Model_Classes/FixedDuration.java | 10 +++++++--- src/main/java/Operations/Ui.java | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index b03b07695a..95e24ea73b 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -135,8 +135,9 @@ public void run() { case yes: ui.promptForDuration(); TimeUnit timeUnit = parser.getTimeUnit(); + ui.promptForTime(); int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); + FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration, timeUnit); taskList.add(fixedDuration); Timer timer = new Timer(); class RemindTask extends TimerTask { diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 3d77053a44..d59aad8a0e 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -1,19 +1,23 @@ package Model_Classes; +import Enums.TimeUnit; + import java.util.Date; public class FixedDuration extends Event { + private final TimeUnit timeUnit; private int duration; - private Date at; - public FixedDuration(String description, Date at, int duration) { + public FixedDuration(String description, Date at, int duration, TimeUnit timeUnit) { super(description, at); this.duration = duration; + this.timeUnit = timeUnit; } @Override public String toString() { - return super.toString() + " (done in: " + duration + " seconds )"; } + return super.toString() + " (done in: " + duration + " " + timeUnit + " ) "; + } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index e848e705f4..2bb5f212a5 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -197,4 +197,8 @@ public void promptForDuration() { public void promptForReply() { System.out.println("Does this task have a duration? (yes/no)"); } + + public void promptForTime() { + System.out.println("Enter the amount of time"); + } } From 9b50464fb4e70c76cf4f068ee392befc900bfc8c Mon Sep 17 00:00:00 2001 From: sprsadist Date: Wed, 2 Oct 2019 01:01:44 +0800 Subject: [PATCH 053/251] B-DetectAnomalies --- .../java/CustomExceptions/DukeException.java | 6 +++ src/main/java/Duke.java | 26 +++++++------ src/main/java/Enums/TaskType.java | 2 +- src/main/java/Enums/TimeUnit.java | 2 +- src/main/java/Model_Classes/Event.java | 2 - .../java/Model_Classes/FixedDuration.java | 8 ++++ src/main/java/Operations/CheckAnomaly.java | 37 +++++++++++++++++-- src/main/java/Operations/RecurHandler.java | 2 +- src/main/java/Operations/Ui.java | 13 +++++-- 9 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 2e01e8907e..40887bd570 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -5,6 +5,7 @@ public class DukeException extends Exception { private String anomaly_Text = "Anomaly Detected"; private String emptylist_Text = "List is empty"; + private String timeclash_Text = "Time Clash Detected"; public DukeException(){ System.out.println(); @@ -14,6 +15,11 @@ public DukeException(ExceptionType type){ switch(type) { case emptylist: System.out.println(emptylist_Text); + break; + + case timeClash: + System.out.println(timeclash_Text); + break; default: System.out.println(anomaly_Text); diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 73d58a936b..1f18c427aa 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -56,6 +56,10 @@ public void run() throws DukeException { type = TaskType.others; } switch (type) { + case help: + ui.help(); + break; + case list: ui.showList(); taskList.list(); @@ -137,7 +141,14 @@ public void run() throws DukeException { TimeUnit timeUnit = parser.getTimeUnit(); int duration = parser.getAmount(); FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); - taskList.add(fixedDuration); + + //checks for clashes + if( CheckAnomaly.checkTime(fixedDuration) ) { + taskList.add(fixedDuration); + } else { + throw new DukeException(ExceptionType.timeClash); + } + Timer timer = new Timer(); class RemindTask extends TimerTask { public void run() { @@ -153,21 +164,12 @@ public void run() { case minutes: timer.schedule(rt, duration * 1000 * 60); break; - case seconds: - timer.schedule(rt, duration * 1000); - break; } ui.showAdd(); break; case no: - if(CheckAnomaly.checkTime(at, TaskList.currentList())) { - Event temp = new Event(ar[0], at); - taskList.add(temp); - ui.showAdd(); - } - else{ - throw new DukeException(ExceptionType.timeClash); - } + Event event = new Event(ar[0], at); + taskList.add(event); break; default: ui.showCommandError(); diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 25235bdf56..6dea060b68 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help } diff --git a/src/main/java/Enums/TimeUnit.java b/src/main/java/Enums/TimeUnit.java index ad7e027f66..838889c891 100644 --- a/src/main/java/Enums/TimeUnit.java +++ b/src/main/java/Enums/TimeUnit.java @@ -1,5 +1,5 @@ package Enums; public enum TimeUnit { - year, month, day, hours, minutes, seconds + year, month, day, hours, minutes } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 9ad4db3024..f22f72586a 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -12,7 +12,6 @@ */ public class Event extends Task { private Date at; - private Date end; /** * Constructor for Event object @@ -29,7 +28,6 @@ public Event(String description) { super(description); } - public Date checkDate() { return this.at; } @Override diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 3d77053a44..81e78c7985 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -12,6 +12,14 @@ public FixedDuration(String description, Date at, int duration) { this.duration = duration; } + public Date getDate() { + return at; + } + + public int getDuration(){ + return duration; + } + @Override public String toString() { diff --git a/src/main/java/Operations/CheckAnomaly.java b/src/main/java/Operations/CheckAnomaly.java index d033b2b858..14b0177d2a 100644 --- a/src/main/java/Operations/CheckAnomaly.java +++ b/src/main/java/Operations/CheckAnomaly.java @@ -1,18 +1,47 @@ package Operations; import Model_Classes.Event; +import Model_Classes.FixedDuration; import Model_Classes.Task; import java.util.ArrayList; import java.util.Date; public class CheckAnomaly { - public static Boolean checkTime(Date at, ArrayList tasks){ - for( int i = 0; i curr = TaskList.currentList(); + for( int i = 0; i= currTime || checkTime + duration <= currTime + currDuration && checkTime + duration >= currTime ) { + return false; + } + } + } else if( curr.get(i) instanceof Event ) { + Date listDate = ((Event) curr.get(i)).checkDate(); + // Checks if both events are on the same day + if ( listDate.getYear() == checkDate.getYear() && listDate.getMonth() == checkDate.getMonth() && listDate.getDay() == checkDate.getDay() ) { + double checkTime = listDate.getTime(); + double currTime = checkDate.getTime(); + if( checkTime <= currTime + currDuration && checkTime >= currTime ) { + return false; + } + } } } return true; } + + public static Boolean checkTime(Date at){ + return true; + } } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 7d04fd8005..1bb0646b94 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -83,7 +83,7 @@ public void addBasedOnOperation() { try { String[] eventArray = parser.getDescriptionWithDate(); Date at = parser.formatDate(eventArray[1]); - if(CheckAnomaly.checkTime(at, TaskList.currentList())){ + if(CheckAnomaly.checkTime(at)) { RecurringEvent temp = new RecurringEvent(eventArray[0], at, recurrence); taskList.add(temp); ui.showAddRecur(); diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 5b802eb8c4..8a1eafc8e9 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -21,6 +21,12 @@ public void startUp() { + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); System.out.println("How may I serve you?"); + System.out.println("Enter 'help' if you require assistance"); + } + + public void help() { + System.out.println("List of Commands:\n" + + "todo\n" + "deadline\n" + "event\n" + "recur\n" + "snooze\n" + "list\n" + "done\n" + "find\n" + "bye\n" ); } /** @@ -188,17 +194,18 @@ public void showSnoozeComplete() { */ public void promptForDuration() { System.out.println("How long is the duration for this event?"); - System.out.println("Please specify hours, minutes, seconds"); + System.out.println("Please specify hours, minutes"); + System.out.println("\tE.g : hours 2"); } /** - * Asks the user whehter the task has a duration + * Asks the user whether the task has a duration */ public void promptForReply() { System.out.println("Does this task have a duration? (yes/no)"); } - * tells the user to input valid amount of time + /* tells the user to input valid amount of time */ public void showTimeError(){ System.out.println("Please indicate a valid amount of time"); From f2dd96ab8df0e1f0e65c9f6ef3c9d092798c2a20 Mon Sep 17 00:00:00 2001 From: benitokun123 <42372389+benitokun123@users.noreply.github.com> Date: Wed, 2 Oct 2019 18:21:40 +0800 Subject: [PATCH 054/251] add UI mock-up image --- ui-mockup.png | Bin 0 -> 440875 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ui-mockup.png diff --git a/ui-mockup.png b/ui-mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..5a40aa7a7043c671f6bd5e4e7368e1028a39144e GIT binary patch literal 440875 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

vNwO?xEgekF607N*a8X6Kwm$jrX`7VqJ7xi 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

N_}7p`1Jl4Z=%PeT`lwIAY7@ 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%0D~8bi@FE} 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

  • 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

    f=1)a~)7!@RT6n7yV=bmXIM(c1|&rV$U*sHnB7m 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 Date: Wed, 2 Oct 2019 18:38:08 +0800 Subject: [PATCH 055/251] Update README.md --- README.md | 41 +++++------------------------------------ 1 file changed, 5 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 84755485a7..83501b8de6 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,8 @@ -# Setting up +# DUKE - Your friendly personal assistant -**Prerequisites** +--- +## Introduction -* JDK 11 -* Recommended: IntelliJ IDE -* Fork this repo to your GitHub account and clone the fork to your computer +* Duke is personal assistant software designed for you to keep track of your daily tasks. With Duke, your can group your tasks into different categories, assign their priorities and mark tasks to be repeated in a specified period. -**Importing the project into IntelliJ** - -1. Open IntelliJ (if you are not in the welcome screen, click `File` > `Close Project` to close the existing project dialog first). -1. Set up the correct JDK version. - * Click `Configure` > `Structure for new Projects` (in older versions of Intellij:`Configure` > `Project Defaults` > `Project Structure`). - * If JDK 11 is listed in the drop down, select it. If it is not, click `New...` and select the directory where you installed JDK 11. - * Click `OK`. -1. Click `Import Project`. -1. Locate the project directory and click `OK`. -1. Select `Create project from existing sources` and click `Next`. -1. Rename the project if you want. Click `Next`. -1. Ensure that your src folder is checked. Keep clicking `Next`. -1. Click `Finish`. - -# Tutorials - -Duke Increment | Tutorial ----------------|--------------- -`A-Gradle` | [Gradle Tutorial](tutorials/gradleTutorial.md) -`A-TextUiTesting` | [Text UI Testing Tutorial](tutorials/textUiTestingTutorial.md) -`Level-10` | JavaFX tutorials:
    → [Part 1: Introduction to JavaFX][fx1]
    → [Part 2: Creating a GUI for Duke][fx2]
    → [Part 3: Interacting with the user][fx3]
    → [Part 4: Introduction to FXML][fx4] - -[fx1]: -[fx2]: -[fx3]: -[fx4]: - -# Feedback, Bug Reports - -* If you have feedback or bug reports, please post in [se-edu/duke issue tracker](https://github.com/se-edu/duke/issues). -* We welcome pull requests too. \ No newline at end of file +![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) From f846aa082efa6b44f514bbda27c50afe048f81eb Mon Sep 17 00:00:00 2001 From: sprsadist Date: Thu, 3 Oct 2019 01:58:58 +0800 Subject: [PATCH 056/251] Save & load duration added --- .../java/CustomExceptions/DukeException.java | 14 ++++-- src/main/java/Duke.java | 14 +++++- src/main/java/Enums/ExceptionType.java | 2 +- src/main/java/Model_Classes/Event.java | 28 +++++++++++ .../java/Model_Classes/FixedDuration.java | 22 ++++++--- src/main/java/Model_Classes/Task.java | 12 +++-- src/main/java/Operations/Storage.java | 46 ++++++++++++++----- src/main/java/Operations/Ui.java | 2 +- 8 files changed, 110 insertions(+), 30 deletions(-) diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 40887bd570..6441a70b06 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -6,11 +6,13 @@ public class DukeException extends Exception { private String anomaly_Text = "Anomaly Detected"; private String emptylist_Text = "List is empty"; private String timeclash_Text = "Time Clash Detected"; + private String wrongFormat_Text = "Wrong Format Detected"; - public DukeException(){ - System.out.println(); - } - + /** + * Constructor for DukeException Exception + * Takes in the exception type thrown and prints out the specific error message + * @param type type of exception detected + */ public DukeException(ExceptionType type){ switch(type) { case emptylist: @@ -21,6 +23,10 @@ public DukeException(ExceptionType type){ System.out.println(timeclash_Text); break; + case wrongFormat: + System.out.println(wrongFormat_Text); + break; + default: System.out.println(anomaly_Text); break; diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 1f18c427aa..fb0966b508 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -17,6 +17,7 @@ public class Duke { private TaskList taskList; private Parser parser; private RecurHandler recurHandler; + /** * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run * Also loads the ArrayList of tasks from the data.txt file @@ -62,7 +63,11 @@ public void run() throws DukeException { case list: ui.showList(); - taskList.list(); + try { + taskList.list(); + } catch (DukeException e) { + ui.showWriteError(); + } break; case bye: @@ -230,7 +235,6 @@ public void run() { catch (IllegalArgumentException e){ ui.showTimeError(); } - break; default: @@ -240,6 +244,12 @@ public void run() { } } + /** + * Main function of Duke + * Creates a new instance of Duke class + * @param args command line arguments + * @throws DukeException Custom exception class within Duke program + */ public static void main(String[] args) throws DukeException { new Duke().run(); } diff --git a/src/main/java/Enums/ExceptionType.java b/src/main/java/Enums/ExceptionType.java index fe91871768..1c24140fc3 100644 --- a/src/main/java/Enums/ExceptionType.java +++ b/src/main/java/Enums/ExceptionType.java @@ -1,5 +1,5 @@ package Enums; public enum ExceptionType { - timeClash, emptylist + timeClash, emptylist, wrongFormat } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index f22f72586a..f540760d92 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -24,32 +24,60 @@ public Event(String description, Date at) { this.at = at; } + /** + * Constructor for Event object + * @param description name and date of Event + */ public Event(String description) { super(description); } + /** + * Returns date of Event + * @return date of Event + */ public Date checkDate() { return this.at; } + /** + * Snoozes the Event by set amount of years + * @param amount number of years to snooze + */ @Override public void snoozeYear(int amount) { this.at.setYear(this.at.getYear() + amount);; } + /** + * Snoozes the Event by set amount of months + * @param amount number of months to snooze + */ @Override public void snoozeMonth(int amount) { this.at.setMonth(this.at.getMonth() + amount);; } + /** + * Snoozes the Event by set amount of days + * @param amount number of days to snooze + */ @Override public void snoozeDay(int amount) { this.at.setDate(this.at.getDate() + amount);; } + /** + * Snoozes the Event by set amount of hours + * @param amount number of hours to snooze + */ @Override public void snoozeHour(int amount){ this.at.setHours(this.at.getHours() + amount); } + /** + * Snoozes the Event by set amount of hours + * @param amount number of minutes to snooze + */ @Override public void snoozeMinute(int amount){ this.at.setMinutes(this.at.getMinutes() + amount); diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 81e78c7985..7881da13ab 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -6,22 +6,30 @@ public class FixedDuration extends Event { private int duration; private Date at; - + /** + * Constructor for fixed duration + * @param description Description of event + * @param at Date of event + * @param duration duration of event + */ public FixedDuration(String description, Date at, int duration) { super(description, at); this.duration = duration; } - public Date getDate() { - return at; - } - + /** + * Returns duration + * @return duration of event in DD/MM/YYYY format + */ public int getDuration(){ return duration; } - + /** + * Returns string with format of date and duration + * @return string containing date and duration of the event + */ @Override public String toString() { - return super.toString() + " (done in: " + duration + " seconds )"; } + return super.toString() + " (done in: " + duration + " hours)"; } } diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 26b18bbb12..0e14695d5a 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -24,6 +24,10 @@ public Task(String description) { this.created = now.format(dateTimeFormatterNow); } + /** + * Returns String of the time Task was created + * @return time the task was created + */ public String getCreated() { return this.created; } @@ -41,9 +45,7 @@ public boolean getDone() { * shows a tick if done, and a cross if not done. * @return A String showing a tick or X symbol. */ - public String getStatusIcon() { - return (isDone ? "[\u2713] " : "[\u2718] "); //return tick or X symbols - } + public String getStatusIcon() { return (isDone ? "[\u2713] " : "[\u2718] "); } //return tick or X symbols /** * Returns the description of the task @@ -60,6 +62,9 @@ public void setDone() { isDone = true; } + /** + * Sets the task to be not done + */ public void setNotDone() { isDone = false; } @@ -71,6 +76,7 @@ public void setNotDone() { public String toString() { return getStatusIcon() + getDescription(); } + /** * Snooze the task in year * @param amount number of years to snooze diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index 19ad791819..e5f393eb9f 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -1,6 +1,7 @@ package Operations; import CustomExceptions.DukeException; +import Enums.ExceptionType; import Enums.SaveType; import Model_Classes.*; @@ -11,6 +12,8 @@ import java.util.ArrayList; import java.util.Date; +import static java.sql.Types.NULL; + /** * Performs storage operations such as writing and reading from a .txt file */ @@ -87,11 +90,20 @@ public ArrayList loadFile(String fileName) throws DukeException { break; case E: Date by = parser.formatDate(temp[3]); - Event tempEvent = new Event(temp[2], by); - if (temp[1].equals("y")) { - tempEvent.setDone(); + if( temp.length == 5 ){ + FixedDuration tempEvent = new FixedDuration(temp[2], by, Integer.parseInt(temp[4])); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); + } else { + Event tempEvent = new Event(temp[2], by); + if (temp[1].equals("y")) { + tempEvent.setDone(); + } + taskArrayList.add(tempEvent); } - taskArrayList.add(tempEvent); + break; case D: Date deadlineBy = parser.formatDate(temp[3]); @@ -102,12 +114,12 @@ public ArrayList loadFile(String fileName) throws DukeException { taskArrayList.add(tempDeadline); break; default: - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } } } } catch (IOException e) { - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } return (taskArrayList); } @@ -129,13 +141,19 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio String type = String.valueOf(s.toString().charAt(1)); String description = s.getDescription(); String time = convertForStorage(s); - String out = type + "#" + done + "#" + description + "#" + time; - writer.write(out); + if( s instanceof FixedDuration ){ + String duration = Integer.toString(((FixedDuration) s).getDuration()); + String out = type + "#" + done + "#" + description + "#" + time + "#" + duration; + writer.write(out); + } else { + String out = type + "#" + done + "#" + description + "#" + time; + writer.write(out); + } writer.newLine(); } writer.close(); } catch (IOException e) { - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } } @@ -160,7 +178,11 @@ String convertForStorage(Task task) throws DukeException { DateFormat dateFormat = new SimpleDateFormat("MM"); String dateOut = dateFormat.format(date); String[] timeArray = tempString[6].split(":", 3); - time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1]; + if( tempString.length == 14 ){ + time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1]; + } else { + time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1]; + } } } else { String[] tempString = task.toString().split("\\s+"); @@ -171,14 +193,14 @@ String convertForStorage(Task task) throws DukeException { String dateOut = dateFormat.format(date); String[] timeArray = tempString[6].split(":", 3); String recurringFrame = tempString[10].substring(0, tempString[10].length() - 1); - time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1] + "#" + recurringFrame; + time = tempString[5] + "/" + dateOut + "/" + tempString[8] + " " + timeArray[0] + ":" + timeArray[1] + "#" + recurringFrame; } else { time = tempString[3].substring(0, tempString[3].length() - 1); } } return time; } catch (ParseException e) { - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 8a1eafc8e9..3b1ca4194e 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -26,7 +26,7 @@ public void startUp() { public void help() { System.out.println("List of Commands:\n" + - "todo\n" + "deadline\n" + "event\n" + "recur\n" + "snooze\n" + "list\n" + "done\n" + "find\n" + "bye\n" ); + "todo\n" + "deadline\n" + "event\n" + "recur\n" + "snooze\n" + "list\n" + "done\n" + "find\n" + "bye" ); } /** From 0c21702ea2ec9c8b5653b49a2412a0f20ee3799d Mon Sep 17 00:00:00 2001 From: benitokun123 <42372389+benitokun123@users.noreply.github.com> Date: Thu, 3 Oct 2019 09:39:11 +0800 Subject: [PATCH 057/251] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83501b8de6..3de29d7f0d 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,6 @@ --- ## Introduction -* Duke is personal assistant software designed for you to keep track of your daily tasks. With Duke, your can group your tasks into different categories, assign their priorities and mark tasks to be repeated in a specified period. +* Duke is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With Duke, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) From 408e1ab8952a02ff2380018cf4986f7affe104f5 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 13:28:17 +0800 Subject: [PATCH 058/251] minor change to javadocs --- src/main/java/Model_Classes/Event.java | 10 ---------- src/main/java/Model_Classes/Task.java | 4 ++++ src/main/java/Operations/Ui.java | 2 -- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 2a87fa25b4..9bf97d690a 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -1,10 +1,5 @@ package Model_Classes; -import CustomExceptions.DukeException; -import Enums.ExceptionType; -import Operations.CheckAnomaly; -import Operations.TaskList; - import java.util.Date; /** * An object class representing types of tasks that are events. @@ -24,11 +19,6 @@ public Event(String description, Date at) { this.at = at; } - public Event(String description) { - super(description); - } - - public Date checkDate() { return this.at; } @Override diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 26b18bbb12..331437e932 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -24,6 +24,10 @@ public Task(String description) { this.created = now.format(dateTimeFormatterNow); } + /** + * getter method for created. + * @return + */ public String getCreated() { return this.created; } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 5b802eb8c4..17b58c48f9 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -198,8 +198,6 @@ public void promptForReply() { System.out.println("Does this task have a duration? (yes/no)"); } - * tells the user to input valid amount of time - */ public void showTimeError(){ System.out.println("Please indicate a valid amount of time"); } From 70832102e3d75a5799c8c4ea664e53813c72845f Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Thu, 3 Oct 2019 15:03:50 +0800 Subject: [PATCH 059/251] Added comment --- src/main/java/Operations/Ui.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 14bd8727cc..432cae6da8 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -202,6 +202,7 @@ public void promptForTime() { System.out.println("Enter the amount of time"); } + /** * tells the user to input valid amount of time */ public void showTimeError(){ From 1f4443ca4bf504e2b51bf55f22c92a7929a7b597 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Thu, 3 Oct 2019 15:24:40 +0800 Subject: [PATCH 060/251] Added javaDoc comments for fixed duration --- src/main/java/Duke.java | 84 +++++++++---------- src/main/java/Model_Classes/Event.java | 2 +- .../java/Model_Classes/FixedDuration.java | 19 ++++- src/main/java/Operations/Ui.java | 1 - 4 files changed, 60 insertions(+), 46 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 8e766b4933..50a4fdd52d 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -132,33 +132,33 @@ public void run() { replyType = ReplyType.others; } switch (replyType) { - case yes: - ui.promptForDuration(); - TimeUnit timeUnit = parser.getTimeUnit(); - ui.promptForTime(); - int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration, timeUnit); - taskList.add(fixedDuration); - Timer timer = new Timer(); - class RemindTask extends TimerTask { - public void run() { - System.out.println(ar[0] + " is completed"); - timer.cancel(); - } - } - RemindTask rt = new RemindTask(); - switch (timeUnit) { - case hours: - timer.schedule(rt, duration * 1000 * 60 * 60); - break; - case minutes: - timer.schedule(rt, duration * 1000 * 60); - break; - case seconds: - timer.schedule(rt, duration * 1000); - break; + case yes: + ui.promptForDuration(); + TimeUnit timeUnit = parser.getTimeUnit(); + ui.promptForTime(); + int duration = parser.getAmount(); + FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration, timeUnit); + taskList.add(fixedDuration); + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + " is completed"); + timer.cancel(); } - ui.showAdd(); + } + RemindTask rt = new RemindTask(); + switch (timeUnit) { + case hours: + timer.schedule(rt, duration * 1000 * 60 * 60); + break; + case minutes: + timer.schedule(rt, duration * 1000 * 60); + break; + case seconds: + timer.schedule(rt, duration * 1000); + break; + } + ui.showAdd(); break; case no: if(CheckAnomaly.checkTime(at, TaskList.currentList())) { @@ -191,22 +191,22 @@ public void run() { recurType = RecurTaskType.others; } switch (recurType) { - case list: - recurHandler.listRecurring(); - break; - case find: - recurHandler.findRecurring(parser.getKey()); - break; - case exit: - isExitRecur = true; - ui.showExit(); - break; - case add: - recurHandler.addBasedOnOperation(); - break; - default: - ui.showCommandError(); - break; + case list: + recurHandler.listRecurring(); + break; + case find: + recurHandler.findRecurring(parser.getKey()); + break; + case exit: + isExitRecur = true; + ui.showExit(); + break; + case add: + recurHandler.addBasedOnOperation(); + break; + default: + ui.showCommandError(); + break; } } isExitRecur = false; diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 2a87fa25b4..c7a7774a49 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -17,7 +17,7 @@ public class Event extends Task { * Constructor for Event object * Takes in inputs for description of the event and the time the event occurs * @param description Description of the event - * @param at Time the event happens + * @param at Date and time the event happens */ public Event(String description, Date at) { super(description); diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index d59aad8a0e..7023ef569e 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -1,14 +1,25 @@ package Model_Classes; import Enums.TimeUnit; - import java.util.Date; +/** + * An object class representing types of event tasks that have a fixed duration + * Stores the duration as a numerical value and a unit of time. + */ + public class FixedDuration extends Event { private final TimeUnit timeUnit; private int duration; - + /** + * Constructor for fixed duration object + * Takes in the numerical value and the time unit in seconds, minutes or hours + * @param description Description of the event + * @param at Date and time at which the event happens + * @param duration numerical value of time + * @param timeUnit the unit of time to be measured in + */ public FixedDuration(String description, Date at, int duration, TimeUnit timeUnit) { super(description, at); this.duration = duration; @@ -16,6 +27,10 @@ public FixedDuration(String description, Date at, int duration, TimeUnit timeUni } + /** + * Returns a string that has the full description of the vent including the occurrence time + * @return A string indicating the task type, description and the occurrence of the task + */ @Override public String toString() { return super.toString() + " (done in: " + duration + " " + timeUnit + " ) "; diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 432cae6da8..1049f8c2a5 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -125,7 +125,6 @@ public void showDateError() { /** * Tells the user that they are in recurring mode to add or perform operations on recurring tasks - * */ public void promptRecurringActions() { System.out.println("You have accessed Recurring Mode"); From ba69cc45494b9034c30f85cbfccc60e8c6d76f74 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Thu, 3 Oct 2019 15:28:21 +0800 Subject: [PATCH 061/251] Change format of fixed duration --- src/main/java/Duke.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 50a4fdd52d..0c930dae1e 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -160,19 +160,19 @@ public void run() { } ui.showAdd(); break; - case no: - if(CheckAnomaly.checkTime(at, TaskList.currentList())) { - Event temp = new Event(ar[0], at); - taskList.add(temp); - ui.showAdd(); + case no: + if(CheckAnomaly.checkTime(at, TaskList.currentList())) { + Event temp = new Event(ar[0], at); + taskList.add(temp); + ui.showAdd(); + } + else{ + throw new DukeException(ExceptionType.timeClash); } - else{ - throw new DukeException(ExceptionType.timeClash); - } + break; + default: + ui.showCommandError(); break; - default: - ui.showCommandError(); - break; } } catch (DukeException e) { From 858e15ada1d232a97c0a2479dbfa57993a4f99b2 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Thu, 3 Oct 2019 15:34:18 +0800 Subject: [PATCH 062/251] Added constants --- 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 0c930dae1e..f12c59eee7 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,6 +12,9 @@ * main class of the Duke program */ public class Duke { + public static final int HOURS = 1000 * 60 * 60; + public static final int MINUTES = 1000 * 60; + public static final int SECONDS = 1000; private Ui ui; private Storage storage; private TaskList taskList; @@ -149,13 +152,13 @@ public void run() { RemindTask rt = new RemindTask(); switch (timeUnit) { case hours: - timer.schedule(rt, duration * 1000 * 60 * 60); + timer.schedule(rt, duration * HOURS); break; case minutes: - timer.schedule(rt, duration * 1000 * 60); + timer.schedule(rt, duration * MINUTES); break; case seconds: - timer.schedule(rt, duration * 1000); + timer.schedule(rt, duration * SECONDS); break; } ui.showAdd(); From a3fca0885b0f3bdc8302831de6fedd651eb77790 Mon Sep 17 00:00:00 2001 From: tyeryan <42399828+tyeryan@users.noreply.github.com> Date: Thu, 3 Oct 2019 15:44:35 +0800 Subject: [PATCH 063/251] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3de29d7f0d..70f3deef37 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,6 @@ * Duke is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With Duke, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) + + +

    About Us

    From 61db29251948c0791ca21ca652e5b2aa87cc4e87 Mon Sep 17 00:00:00 2001 From: tyeryan <42399828+tyeryan@users.noreply.github.com> Date: Thu, 3 Oct 2019 15:46:16 +0800 Subject: [PATCH 064/251] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 70f3deef37..f6bcf905d6 100644 --- a/README.md +++ b/README.md @@ -7,5 +7,3 @@ ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) - -

    About Us

    From 16a2d93c98653dff3bcaa82f8b11a2d1589133f0 Mon Sep 17 00:00:00 2001 From: tyeryan <42399828+tyeryan@users.noreply.github.com> Date: Thu, 3 Oct 2019 18:09:24 +0800 Subject: [PATCH 065/251] Revert "Added javaDoc for fixed duration" --- src/main/java/Duke.java | 108 +++++++++--------- src/main/java/Model_Classes/Event.java | 2 +- .../java/Model_Classes/FixedDuration.java | 22 ++-- src/main/java/Operations/Ui.java | 4 +- 4 files changed, 60 insertions(+), 76 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index a6a79502fe..46673cf062 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,9 +12,6 @@ * main class of the Duke program */ public class Duke { - public static final int HOURS = 1000 * 60 * 60; - public static final int MINUTES = 1000 * 60; - public static final int SECONDS = 1000; private Ui ui; private Storage storage; private TaskList taskList; @@ -144,48 +141,45 @@ public void run() throws DukeException { replyType = ReplyType.others; } switch (replyType) { + case yes: + ui.promptForDuration(); + TimeUnit timeUnit = parser.getTimeUnit(); + ui.promptForTime(); + int duration = parser.getAmount(); + FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); - case yes: - ui.promptForDuration(); - TimeUnit timeUnit = parser.getTimeUnit(); - ui.promptForTime(); - int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration, timeUnit); - taskList.add(fixedDuration); - Timer timer = new Timer(); - class RemindTask extends TimerTask { - public void run() { - System.out.println(ar[0] + " is completed"); - timer.cancel(); + //checks for clashes + if( CheckAnomaly.checkTime(fixedDuration) ) { + taskList.add(fixedDuration); + } else { + throw new DukeException(ExceptionType.timeClash); } - } - RemindTask rt = new RemindTask(); - switch (timeUnit) { - case hours: - timer.schedule(rt, duration * HOURS); - break; - case minutes: - timer.schedule(rt, duration * MINUTES); - break; - case seconds: - timer.schedule(rt, duration * SECONDS); - break; - } - ui.showAdd(); - break; - case no: - if(CheckAnomaly.checkTime(at, TaskList.currentList())) { - Event temp = new Event(ar[0], at); - taskList.add(temp); - ui.showAdd(); - } - else{ - throw new DukeException(ExceptionType.timeClash); + + Timer timer = new Timer(); + class RemindTask extends TimerTask { + public void run() { + System.out.println(ar[0] + " is completed"); + timer.cancel(); + } + } + RemindTask rt = new RemindTask(); + switch (timeUnit) { + case hours: + timer.schedule(rt, duration * 1000 * 60 * 60); + break; + case minutes: + timer.schedule(rt, duration * 1000 * 60); + break; } - break; - default: - ui.showCommandError(); + ui.showAdd(); break; + case no: + Event event = new Event(ar[0], at); + taskList.add(event); + break; + default: + ui.showCommandError(); + break; } } catch (DukeException e) { @@ -204,22 +198,22 @@ public void run() { recurType = RecurTaskType.others; } switch (recurType) { - case list: - recurHandler.listRecurring(); - break; - case find: - recurHandler.findRecurring(parser.getKey()); - break; - case exit: - isExitRecur = true; - ui.showExit(); - break; - case add: - recurHandler.addBasedOnOperation(); - break; - default: - ui.showCommandError(); - break; + case list: + recurHandler.listRecurring(); + break; + case find: + recurHandler.findRecurring(parser.getKey()); + break; + case exit: + isExitRecur = true; + ui.showExit(); + break; + case add: + recurHandler.addBasedOnOperation(); + break; + default: + ui.showCommandError(); + break; } } isExitRecur = false; diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 256473b811..f540760d92 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -17,7 +17,7 @@ public class Event extends Task { * Constructor for Event object * Takes in inputs for description of the event and the time the event occurs * @param description Description of the event - * @param at Date and time the event happens + * @param at Time the event happens */ public Event(String description, Date at) { super(description); diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index d0a91f74c6..7881da13ab 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -1,26 +1,18 @@ package Model_Classes; -import Enums.TimeUnit; import java.util.Date; -/** - * An object class representing types of event tasks that have a fixed duration - * Stores the duration as a numerical value and a unit of time. - */ - public class FixedDuration extends Event { private int duration; private Date at; /** - * Constructor for fixed duration object - * Takes in the numerical value and the time unit in seconds, minutes or hours - * @param description Description of the event - * @param at Date and time at which the event happens - * @param duration numerical value of time - * @param timeUnit the unit of time to be measured in + * Constructor for fixed duration + * @param description Description of event + * @param at Date of event + * @param duration duration of event */ - public FixedDuration(String description, Date at, int duration, TimeUnit timeUnit) { + public FixedDuration(String description, Date at, int duration) { super(description, at); this.duration = duration; } @@ -34,8 +26,8 @@ public int getDuration(){ } /** - * Returns a string that has the full description of the vent including the occurrence time - * @return A string indicating the task type, description and the occurrence of the task + * Returns string with format of date and duration + * @return string containing date and duration of the event */ @Override public String toString() { diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index f02facb305..9e2ddc08a6 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -131,6 +131,7 @@ public void showDateError() { /** * Tells the user that they are in recurring mode to add or perform operations on recurring tasks + * */ public void promptRecurringActions() { System.out.println("You have accessed Recurring Mode"); @@ -209,9 +210,6 @@ public void promptForReply() { public void promptForTime() { System.out.println("Enter the amount of time"); } - - /** - * tells the user to input valid amount of time */ public void showTimeError(){ From 1d57370f089f03b3f822822fa676f483c932de41 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 19:22:11 +0800 Subject: [PATCH 066/251] minor bug fixes, updated some javadocs --- .../java/CustomExceptions/DukeException.java | 13 +++++++++---- src/main/java/Enums/ExceptionType.java | 2 +- src/main/java/Model_Classes/Event.java | 11 ----------- src/main/java/Operations/Parser.java | 7 ++++--- src/main/java/Operations/RecurHandler.java | 8 ++++++++ src/main/java/Operations/TaskList.java | 6 ++++++ src/main/java/Operations/Ui.java | 16 +++------------- 7 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 6441a70b06..2deb55d981 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -3,10 +3,11 @@ import Enums.ExceptionType; public class DukeException extends Exception { - private String anomaly_Text = "Anomaly Detected"; - private String emptylist_Text = "List is empty"; - private String timeclash_Text = "Time Clash Detected"; - private String wrongFormat_Text = "Wrong Format Detected"; + private static final String outOfBounds_Text = "Index is out of Bounds!"; + private static final String anomaly_Text = "Anomaly Detected"; + private static final String emptylist_Text = "List is empty"; + private static final String timeclash_Text = "Time Clash Detected"; + private static final String wrongFormat_Text = "Wrong Format Detected"; /** * Constructor for DukeException Exception @@ -27,6 +28,10 @@ public DukeException(ExceptionType type){ System.out.println(wrongFormat_Text); break; + case outOfBounds: + System.out.println(outOfBounds_Text); + break; + default: System.out.println(anomaly_Text); break; diff --git a/src/main/java/Enums/ExceptionType.java b/src/main/java/Enums/ExceptionType.java index 1c24140fc3..c1b09ed2ef 100644 --- a/src/main/java/Enums/ExceptionType.java +++ b/src/main/java/Enums/ExceptionType.java @@ -1,5 +1,5 @@ package Enums; public enum ExceptionType { - timeClash, emptylist, wrongFormat + timeClash, emptylist, wrongFormat, empty, outOfBounds } diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 7960ce6031..f1c871d0f9 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -19,21 +19,10 @@ public Event(String description, Date at) { this.at = at; } -<<<<<<< HEAD -======= - /** - * Constructor for Event object - * @param description name and date of Event - */ - public Event(String description) { - super(description); - } - /** * Returns date of Event * @return date of Event */ ->>>>>>> 61c92d7e89f193fc9fa8bb610b519e673aaa8909 public Date checkDate() { return this.at; } /** diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 9b1e983ee5..3bef2eb4a5 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -7,6 +7,7 @@ import java.util.Date; import java.util.Scanner; +import Enums.ExceptionType; import Enums.ReplyType; import Enums.TimeUnit; @@ -50,7 +51,7 @@ public Integer getIndex() { public String getDescription() throws DukeException { String temp = scanner.nextLine().trim(); if (temp.equals("")) { - throw new DukeException(); + throw new DukeException(ExceptionType.empty); } return temp; } @@ -61,7 +62,7 @@ public String getDescription() throws DukeException { * index 1 stores the date String. */ public String[] getDescriptionWithDate() { - String[] array = scanner.nextLine().split(" ", 1); + String[] array = scanner.nextLine().split("/", 1); return array; } @@ -101,7 +102,7 @@ public Date formatDate(String by) throws DukeException{ try { return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(by); } catch (ParseException e) { - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 1bb0646b94..430160644d 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -79,6 +79,7 @@ public void addBasedOnOperation() { ui.showDateError(); } break; + case event: try { String[] eventArray = parser.getDescriptionWithDate(); @@ -159,8 +160,10 @@ public boolean checkRecurrence() { // extract the recurrence schedule. recurrenceSchedule = array[3].substring(0, array[3].length() - 1); type = RecurrenceScheduleType.valueOf(recurrenceSchedule); + switch (type) { case day: + // check if recurrence date has passed if (dateHasPassedToDo(currentTime, check.getCreated(), DAY, description, index, isEdited)) { RecurringToDo recurringToDo = new RecurringToDo(description, DAY); taskList.replace(index, recurringToDo); @@ -169,6 +172,7 @@ public boolean checkRecurrence() { break; case week: + // check if recurrence date has passed if (dateHasPassedToDo(currentTime, check.getCreated(), WEEK, description, index, isEdited)) { RecurringToDo recurringToDo = new RecurringToDo(description, WEEK); taskList.replace(index, recurringToDo); @@ -177,6 +181,7 @@ public boolean checkRecurrence() { break; case month: + // check if recurrence date has passed if (dateHasPassedToDo(currentTime, check.getCreated(), MONTH, description, index, isEdited)) { RecurringToDo recurringToDo = new RecurringToDo(description, MONTH); taskList.replace(index, recurringToDo); @@ -190,6 +195,7 @@ public boolean checkRecurrence() { type = RecurrenceScheduleType.valueOf(recurrenceSchedule); switch (type) { case week: + // check if recurrence date has passed if (dateHasPassedOthers(currentTime, check, isEdited )) { if (check.toString().contains(DEADLINE_MARKER)) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), WEEK); @@ -204,6 +210,7 @@ public boolean checkRecurrence() { break; case day: + // check if recurrence date has passed if (dateHasPassedOthers(currentTime, check, isEdited )) { if (check.toString().contains(DEADLINE_MARKER)) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), DAY); @@ -218,6 +225,7 @@ public boolean checkRecurrence() { break; case month: + // check if recurrence date has passed if (dateHasPassedOthers(currentTime, check, isEdited )) { if (check.toString().contains(DEADLINE_MARKER)) { RecurringDeadline recurringDeadline = new RecurringDeadline(description, getNewDate(check), MONTH); diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 8fb603a943..e7160b218c 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -38,6 +38,9 @@ public void add(Task newTask) { * @throws DukeException If the index cannot be found in the list of tasks. */ public void delete(int index) throws DukeException { + if (index < 0 || index > tasks.size()) { + throw new DukeException(ExceptionType.outOfBounds); + } tasks.remove(index - 1); } @@ -64,6 +67,9 @@ public void list() throws DukeException { * @throws DukeException If the index cannot be found in the list of tasks. */ public void done(int index) throws DukeException{ + if (index < 0 || index > tasks.size()) { + throw new DukeException(ExceptionType.outOfBounds); + } tasks.get(index - 1).setDone(); } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 97815135a1..4def3abc66 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -43,18 +43,14 @@ public void showLoadError () { public void showDeleted (int index) { System.out.println("Deleted task number " + index + "!"); } - public void showDeletedRecur (int index) { - System.out.println("Deleted recurring task number " + index + "!"); - } + /** * Tells the user that the search operation is executing */ public void showFind () { System.out.println("Searching for item in task list..."); } - public void showFindRecur () { - System.out.println("Searching for item in recurring task list..."); - } + /** * Tells the user that the task of index has been done and the list has been updated. */ @@ -205,16 +201,10 @@ public void promptForReply() { System.out.println("Does this task have a duration? (yes/no)"); } -<<<<<<< HEAD -======= - - /* tells the user to input valid amount of time public void promptForTime() { System.out.println("Enter the amount of time"); } - */ - ->>>>>>> 61c92d7e89f193fc9fa8bb610b519e673aaa8909 + public void showTimeError(){ System.out.println("Please indicate a valid amount of time"); } From 2624c22dba687be2faaadbda279d6218b0b95ab2 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Thu, 3 Oct 2019 20:55:43 +0800 Subject: [PATCH 067/251] edit style --- .../java/CustomExceptions/DukeException$1.class | Bin 457 -> 0 bytes .../java/CustomExceptions/DukeException.class | Bin 805 -> 0 bytes .../java/CustomExceptions/DukeException.java | 2 +- src/main/java/Duke$1.class | Bin 1312 -> 0 bytes src/main/java/Duke$1RemindTask.class | Bin 1205 -> 0 bytes src/main/java/Duke.class | Bin 5449 -> 0 bytes src/main/java/Enums/ExceptionType.class | Bin 795 -> 0 bytes src/main/java/Enums/RecurTaskType.class | Bin 979 -> 0 bytes src/main/java/Enums/RecurrenceScheduleType.class | Bin 947 -> 0 bytes src/main/java/Enums/SaveType.class | Bin 888 -> 0 bytes src/main/java/Enums/TaskType.class | Bin 1346 -> 0 bytes src/main/java/Enums/TimeUnit.class | Bin 945 -> 0 bytes src/main/java/Model_Classes/Deadline.class | Bin 1495 -> 0 bytes src/main/java/Model_Classes/Event.class | Bin 1565 -> 0 bytes src/main/java/Model_Classes/FixedDuration.class | Bin 928 -> 0 bytes .../java/Model_Classes/RecurringDeadline.class | Bin 955 -> 0 bytes src/main/java/Model_Classes/RecurringEvent.class | Bin 946 -> 0 bytes src/main/java/Model_Classes/RecurringToDo.class | Bin 910 -> 0 bytes src/main/java/Model_Classes/Task.class | Bin 1960 -> 0 bytes src/main/java/Model_Classes/ToDo.class | Bin 763 -> 0 bytes src/main/java/Operations/CheckAnomaly.class | Bin 813 -> 0 bytes src/main/java/Operations/Parser.class | Bin 2141 -> 0 bytes src/main/java/Operations/RecurHandler$1.class | Bin 994 -> 0 bytes src/main/java/Operations/RecurHandler.class | Bin 7113 -> 0 bytes src/main/java/Operations/Storage$1.class | Bin 639 -> 0 bytes src/main/java/Operations/Storage.class | Bin 5540 -> 0 bytes src/main/java/Operations/TaskList$1.class | Bin 743 -> 0 bytes src/main/java/Operations/TaskList.class | Bin 3041 -> 0 bytes src/main/java/Operations/TaskList.java | 2 +- src/main/java/Operations/Ui.class | Bin 5317 -> 0 bytes 30 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 src/main/java/CustomExceptions/DukeException$1.class delete mode 100644 src/main/java/CustomExceptions/DukeException.class delete mode 100644 src/main/java/Duke$1.class delete mode 100644 src/main/java/Duke$1RemindTask.class delete mode 100644 src/main/java/Duke.class delete mode 100644 src/main/java/Enums/ExceptionType.class delete mode 100644 src/main/java/Enums/RecurTaskType.class delete mode 100644 src/main/java/Enums/RecurrenceScheduleType.class delete mode 100644 src/main/java/Enums/SaveType.class delete mode 100644 src/main/java/Enums/TaskType.class delete mode 100644 src/main/java/Enums/TimeUnit.class delete mode 100644 src/main/java/Model_Classes/Deadline.class delete mode 100644 src/main/java/Model_Classes/Event.class delete mode 100644 src/main/java/Model_Classes/FixedDuration.class delete mode 100644 src/main/java/Model_Classes/RecurringDeadline.class delete mode 100644 src/main/java/Model_Classes/RecurringEvent.class delete mode 100644 src/main/java/Model_Classes/RecurringToDo.class delete mode 100644 src/main/java/Model_Classes/Task.class delete mode 100644 src/main/java/Model_Classes/ToDo.class delete mode 100644 src/main/java/Operations/CheckAnomaly.class delete mode 100644 src/main/java/Operations/Parser.class delete mode 100644 src/main/java/Operations/RecurHandler$1.class delete mode 100644 src/main/java/Operations/RecurHandler.class delete mode 100644 src/main/java/Operations/Storage$1.class delete mode 100644 src/main/java/Operations/Storage.class delete mode 100644 src/main/java/Operations/TaskList$1.class delete mode 100644 src/main/java/Operations/TaskList.class delete mode 100644 src/main/java/Operations/Ui.class diff --git a/src/main/java/CustomExceptions/DukeException$1.class b/src/main/java/CustomExceptions/DukeException$1.class deleted file mode 100644 index 35692206ef5fbeb408027d41b7fd69079cab7773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmaJ-O;5r=5Pb_sp%$p%2YN8X^Z*wdPaZU0Dn=5(1H=obQZ`U5yM*1M{w(9g7{d?n zM;WJ>keC=Z*?Ifsy94*kd?$dXJ$FCLMq7G(|j9PV*_? za~(?2f1Y!O)S$(Xy9}aGg!+mhU2ohoWIQ>dV5uDn-i>ENzUceIh&*Ob#*2X8gb68M z#}9m?cRKZ#KGifu5J?q^afj=P92wZB23@Z7tyJ2;frTm#Eo>pnQ1fD?Xd3NbXaUxl*HwNuLQZDQo ztujNaWp*|BZ}LJ823>|cu@l1Nm~UXK5AzkN7h<#}ve|X4K=s?iQm{}U%%DiNwDuIS MOK4JFnhfgc5Pj>UaqKuGO$n5*l0w=hDa7=EI20kFv`CfGs*2b-6sqygDh2XG%t|4SL!h=U0!>h#L)Ubti46Rf83bbyrlCc zsS*)s7iWs0Iny_Y-9r*rk;H;WB=M~N)iBLvtdl}X7ifF$0_C5Pg6+Iwd)}tjn8A3x zNBMCw3M3EnNs-^|{5{U@F;;0!Y}y<~FR4c-gHEI`*+uf6=0334`wG@;7++BMgyIwn zA9GNHYy(BIWwIrrvIuJD6iXKrBcd=UW8+VX(&iLq{{w~d@*vXQXB4I=Yhr^)fg4yL u>s%05X_sqQr$5&zS_At<0mFo4(pCcnO4q=fSf+20YF7xV+4YH@digh+t*xa1 diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 322d963550..6c2be085e9 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -3,7 +3,7 @@ import Enums.ExceptionType; public class DukeException extends Exception { - public String anomaly = "Anomaly Detected"; + public String anomaly = "Anomaly Detected\n"; public DukeException(){ System.out.println(); diff --git a/src/main/java/Duke$1.class b/src/main/java/Duke$1.class deleted file mode 100644 index 29dc7e41f9934bf01ee2a6e56505a989dbb01f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmZ{j$xjqP6vn@vt!Ks&MsWcb+(rdA+;HDv5R@6z8S&u7rn{7urkhOn;Bqq2Kfpv2 zuO^y!RWO7Ys4w0QAyF_-2w5PELdu5}2DUS9FZj#Xfk%JtZ~`3}EXT48I+4$y3nw)!lk7IfaIdr#y;9X2?6Q?( z4gQn?I%92DmFVc^)hJ=)y+o2)T z7vwyGX zUd6Iq!>Ki$HxwPX!Tn>F=h70Ea#SFE*>){j;8`9!XeqcR(3UCWFwz?B-h$&(+#56HGCwiXn zobZhBocQ^|sW87zI304m@VpvNB3r9@!5H{0oIt~D&BR5-*_w%qiL+G@mk_6mc!qkU zu!#MNvt#S{pN?ZAcA}lW2gmv57H-q;;4bdb@8cmJ(I4X} z#_6x{8gJ?E@E#xNAMqJq=wI;--{}#oV(-&*;4q%!0akNVK=TEitA&3^QRe;;W|;Z^y*Lz-m8K5)4T zJd&e%?Hct0mmyV=foF+ryX~aIFX{>iV#~E0=~D%7ggTTp14|~xF~*SC6TaG!zA}+U z#>6$4Ci*d8Vi02nmQAeS0Yhd(O64n$H$wnF9mm529+`NIRRd2c8^aed4MJEQLpbr3Xi&8>Pz4-Op@4Ysp5_5lYk;#v8mY%F?yC`e>^|l6=KoMZstC-D95ZR{hQL zYB&a?se?Pz{n1`PG@JB4)zL;++_i*b;Dzqr21D+$M%z7>b#bw8VZz(oQqnsyu&K97 z%6iab_}m%o;!!x89q!f~;palnQgngP?jH$Dl{))#0a50TQ?ZpO z8Q5Z&?kcEPZVXfZ_d}MxY>NJAG?US*2@t34Y;)RIvP9?%Vu<)KN%O>G#77EqEwI9T z3z5P?3(>+EVqZwlFhVp=9B5&bXar+)qrX5@Bdj6XwoZISU*Q`f(Uo)Z$0-cDMNg5q zgc%@L;Eck5$94QbA5jfBfg8kQn8Z!oYHKF3NL(kGB)&lBCCYe3o;i{e6mXi(%pdyn BEeQYs diff --git a/src/main/java/Duke.class b/src/main/java/Duke.class deleted file mode 100644 index 57a5069a6f4836ace5770c0862c965aeab33e2c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5449 zcma)A33yc175?v=$-KOAxJuZ5sN-r6`iQ`79u(smS^SYeKbGZdh2c68b-f4caf6QSZjL{3V>NaNW~Wg7 zRH$wg1vkm`X6bH`ZkKT0>cP)&n~>ZtxStDjhd?Rmejy}x3hpkM-mT-8g87vP6LF8A z?-lfYg4-?K9_jAavDbs?*e7dg58AQcg9q@Sjt&oIW1kxj;b9Mo@Q4sR>OmVGbF+I~ z?0!O~w7VEjO81nIJT1^O0zE78pOfx+vHJxbFM3dimvp@B!I|QxS3Ic4t1@{_JombA z{aP5_knT;f`7Ob{t>YaTf1~5K9(r}7bnohTPsjTTMolDQ#wtVpc-)LDcov)CU?kAs zkFQhEl0k)DwRJ6K%%2EGBk}Sj!5IpAJQ0ogn@oki*=zMSmIV0;veyRV35DWp3Xv*k zlDJy@vA7vi=#x#b$U<`2h?$Ma*gStE5E3G9Hqqj&C6P2U7zrk3D>zEWo~7Wdj0R{~ zui9Y5T$l{6He(I`)gfYf)F=Fn>lXN1GIK{P8PV}O9Utg8pyT&CJ|uV8AB-sUD_v2$ z*1z6g9`Z+;%Ig!cV5Dh=NcYr7ld(p#Iw%s|RmpYc1ff$XSZKx*3rx`$HxNY&6?XHR z0TXKs9F&#bSt}W@8E8VYLQ&R=?F<9!5Tcv17CPNXM+f`~|AfSbgn>WcBhmXu13|1+ z7*d(!DTU{5Xf#{wqZ4C~P7VA?4C!NSGMNa5$}3_qf17<~{j+psJ6q)c*+3W(10Ulr z2L6f`1D{CuH+*W~5dN+(qRVeJp^(|+4^_mPl3_EF$Ws0p{$b#s_?Lmt@r8kZi-<4r zm4UCF4Sc3b3^j^7SEEJy7%`?)ps~`G zNq3@HG)^oUuO=uA>@L1KxWNomCGCV1@#PHmu48Nnh9zMN<+MvCb|te=o@A(rYLcN& zR+9}iMN~}{mrhfs7;3um8ES@jZe-R0Mgr!Bx@4km&75d55{P%5pqeS9PSIi@A#h
    j1LKVS)Rmew5AY6;9}b+M$F z5`_h#zRH^Lcq|jDd27G)AO9FdiaVuQ6iE8Aq2*-`dgR4Lh25s8NVA$r(tC7aYc1z&bBS+cTZAHCUT zWM|QwXf$N{Bi&;ngXC?q+Fs7Y1tXpro2flVtDs%D+zFZ>_YAM^;!Iw3BcTeG0XyNk zFG!H}Yl%g9n0C?NGozx>x~>&+moHmPxAI5%oqCVO4>>NWyHT*XNwqnun{x@{;`rsG-e7_=EzRS5rmohikTyeM`!ugE0CEe8Ji>ZS!TxM zz~`W(C&!o8%7rr{N6cnLgLOe#p_U(K1O<}vlJjQAk40gn+Zl2|4q7bc)nrGHeZ|r9 z9@&3=BpSVdV%#LH2=l5WgKShJE#c#oFFw|zOv%mQ$m@z{_$a*Q*kw`OyGuA-++x=r zD?>!GH1ddX5u@)zK0!A@&ps3oG?tMfzju!`dbXq2J`|=fwANPP{|J`4KW%w2Zihh!ihoX zg~8~DA>8;-QVl2FXi|awBBQW4FO3rkI0YD&($;1X zuM&J37Gt58VkW1wk)2|uq%=8AA-74VS}O%Y zH_hh~oY&=?l*TDOy#v#id0mc4UcDVYUq06gz4;s# z4C%n^qry+k7LJ}BC|b4$r?sQv(Ub~isXE72HD}OHY!XX(;J!R>-hNd2Tyo_49#r{U zdob7QN~797a`3C$K659>VQgh=a`vZFME^8SPhp}!wm^DxUJApUvpA)bYEtNHlbt~Y zHg10E$R@|E6kfHb89&x``Eh~IB|hAbg;VLnI(wT$v|~}$MmumOQ*W`)-GTaLWnP!p z-HryI$LscbiuEGL$IX|eu_T2cwPd1aY5^TsT;L3(an@2>xeQ!Ad#Ygr%X~cu6c!g0 z8(zlda+_*J3L|_4He8lMzfSm^tUZ16&~A8`y#3&1+O{$oFJ}_&z;5j2_!vIGhbZEw z+$eqo6{*Q8p;|d^RtMBU6lt2~)(i~R4mw6V#$u&4PN5vDD5z(w`gJmAlUW$1ARkky zX*zYyq&6SR#SEUzECg^WzoAcKA*n!;Wug_;w4;WWoQ^9n58H4CZeZ!y!M|5_VG(Vs zr*&r{jm3Bv4YcxXyo6vt7CW$pbOtCfaEm4_yNVK%El2=WUr z#2u~W2i-a~5n(kM=kx0-rm7HEbx5d{NUC*MuM%kEj$2h5HmHknf!d6V)D~=1*WzMz zGd8Kaafx~Wo7Ho;RK1SN)SI|m9l#cP=L+=^u2i33t2%_M)fd>N4&xe)|CDKN+(55g zr}f13S|4oJW@3j{iJe+CZqyoZleQGMXv?rmI}f*Njkrx)i`%s@?$8prQ)|UtS{v@x zF2p_BX56b?h5NMa*sblt9&I=7*B-=P?MZZKuj3)@03Oy3;&JT|p3n~CNnRpPIox>K z(HqY=hT>VrXuQT#d){#(UT{ppi;gLH*)a{TIA-HjM+M$+%){G``FO`F%-b;fTR4?E zg1&IFIxAM^q?G8v-@v6~{nw~0T*QK%?_SQn;5_O2ua^Ex%#q)bTX u+s#Z@*3~5ctO4&b%HQKXdLdyA-^WE9U4&LMmKq87wqOE<`NV)RiT?uNFo(MU diff --git a/src/main/java/Enums/ExceptionType.class b/src/main/java/Enums/ExceptionType.class deleted file mode 100644 index f572758133e5027130ff4e2d50eafea77ad013d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmZ`%+e*Vg5Ivj3rd?yz*88nmZ;67%2l1gr6saH-eW(iJQySMANmFSP(ZBKnDvIK> zA0^IK(TeQ`Cd}-anR90L{p0Bsz$(lbG>mghAf+R&W0HeoN}6;Oot!Sy5;3h~h9MTX z6|w2r^;3raLf#K6^-TWK5$Azh_4lsMMV3LIIoK%d=Zg#jM{OXH3)>4tongqd+F`WK z>ak$xF1Wtf2`eR0+p|j^Mf67U?g@is7S8MoJLB1YIa3U3u3yet?ONts-woD?REwl- z>wvTs-Lh{7VU2pIri?^$j`y84-_%LU&b4f_M)G;F8rB@Kd7~;P&C7hwd@v1)6?=!6?V!Nd?;RM8CrCFm~S3TPV`b5eAr88?w^tE3| zM6)bBgYItBEjfdP+bz}@W ztn!SSjvV)obmX~T(J{;YV;u$VpJ;f>p!i-GG31)tL3|k2Ub~%muvX*D z1ziTUAH8!2A%pC6Nh&tR3C2hNdG^PQkqv!j6*^y=1iBO6}eMe77Lrs$=$$B?wWUf@LW zfM&>L9?=^e|9{oe$Rxg##@I3Iv>U_j$Agah!sD#zOPi~5S`%~p?!HESSh3Ya+)@o|{>23dk}{U0j{FU`TZQen2y`Wora>r+wgdBH~&dz4w;ygkgOo z?RQfvFpFoCP3HIKmT=@B}41aRJjsenF~Gki-qlgW)Er1@inehG5?y zokIRXis2SnRh-F`U&8J4d`U!&v{Lzw#3_`k`4V3dB+2id|>A7Q=s~ zBN3y~@Yz4gcwaFv17WYpy}7sN-E-b~@AseYzW}_%S_TRhbu8hLilU0gI8B|WmWC;js~QR-uc&y!Aa|S-hPmc;5cdYPH{6ZGkOwZe-9z4qeZF_{k=GfNPn>^X zNcH+bbjYAC?Qb^UZrco%cjLCEj~zee1BQ9i8Vgpo`W?=YYkC3SiF<7x?m2CrI%+ay z_dUaNvw7qkJ2l@4x-~lry`WpS#)@coffubaOy98kwYATXvAu5KL~%%DvMD-R!}b5| zS{tDhPBm`lTPMeKyB~)xf8`1Fvo{;NDh^`cj<~g=fu~qyDBpGy21=+Im_^w@4tWDp zA{3Bk$X=NuCeU5Eem@}YqG^q&-)$dpHzIv6Mvd6=oxz|!0=x9}|EcwjXY_Ki^z4+4 zl28CpCJ{*{9YB6YoJSy#!Cg#);T}~Bl*Q7AU|%7fL;g$^!+nbBQS3U)=O6NxzcGO3YpLHZE$)RVCA7jSjW AlK=n! diff --git a/src/main/java/Enums/SaveType.class b/src/main/java/Enums/SaveType.class deleted file mode 100644 index b6a6bdd2242725e8b6573208b27bfa53786b6a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmZuv+iuf95It)DiAyHLSQVA)d4-Sul)O$lajt4MW2155qGCwRG~j z`MzN@WIxQZlM}~}+%ZGmwB~Fphl7tUL%Qh&?z^bpaYrquo4TD|LEMQu+N;Vswyudq+8 z>-HcTb=@P6D_s0HlN~P4zzQGqs)1cRXIQ#DHUmYxFmN9m2C~Q*$n&MZmu2LLe$ycj zq~Uh`K|nfCSI;TsZ%AB1 zndM7-Dv(6}4aoEYYPnLpK=R8>@=fwc*n&n9 Dmm8^^ diff --git a/src/main/java/Enums/TaskType.class b/src/main/java/Enums/TaskType.class deleted file mode 100644 index a266304bdf9c937b7686b2de6d3ab74bb5fd2193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1346 zcmZvbYg5xu5Qg8hX>%F^gsUPTaAPpop4~mCKYxAw0bmv{Q_ykC#BD4Zm@#n2#1NL)EGrC~w7AR> zcNIpN_Y}sMD+=eC_Z8C22MQTxK_Sb0s4&iaq%gr;RhVQxR+wTwQOGf$DqLVX2G%s_ z6~7*8unS8;W4oSPbL(%`-o5qm8sh8kJX+uIgEFC94M-)+Ud0R99ahU#4XW(9<%-Ws ziE8-Ts}a2&FQANxnpbL&)olN}CvTt=m!$`WYJgfpVj@DbQ%pu^b&5uWHm9f}bT~zuTwMh6og$F4hmeZUOQ6f>Cp1MEAXpIwolnsI X&CaBW@kM^1(Z;Yp!Fk-2NiO^b(un@V diff --git a/src/main/java/Enums/TimeUnit.class b/src/main/java/Enums/TimeUnit.class deleted file mode 100644 index adbb903cbdd5dbaaaf79f40a22dd1cba606e0b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmZuvZBNrs6n<{owO#4hD+4Av9aFcVo2ZD%76KuVm@M+4K(g?u8+DX)U9znteD)7% zNyKP0eD+5f&%G!Nw>CLXo^#L3bI!fLet-K3U>$FxP*65d!HR~QhGzy+c+O2#N7|sn zDvzk?nB(|DN0#HNj(LtRbu4gvrQtP$a_-mzhD3A64|>DezT0ySe0Nl5i1hmY=!8K& zw$CZ#7Qj>V8Xn#@(tY%g$z4CzvN%CWNDKc*V-rt3TJgI?Pi z?AvXRR~31C9~g?I=Ba&V*F4+r)~wOM^}F@*ltvAg)NU|jr^LT2A2LKOx9i)ZU_j;N z68Gqhj`ugKFxG@Gpz(i)4O)a@(dZp#*X0Uh|29J{Q9loven6|NEL}qVJW+g^JQ9k~@tEwj zsE;I)f8Fm;S}9GwgnogjAci8yj38!2keDE|svvPe5}F`M{RdT$LwYqWCB%%?iiC(+ iEj2{kYH1;o)&Pv_4Yoo6 diff --git a/src/main/java/Model_Classes/Deadline.class b/src/main/java/Model_Classes/Deadline.class deleted file mode 100644 index c80cc1eb0fe8d6081648e6d97a188d696354f343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1495 zcmaKr>rN9v6vzKlE?bszzk_nWwB=H-h!jz2MXFp(AR0rAPU!>|mR-`FlGG>hF*H#~ z_}~NhP{wn*ON6%Rhdq1F%=yin`Old@f3JQ6c!GB(+A-FIHjJB?z$BX~Hq&fo*hJaH z*u>e)vYBHu&+I}ct@FUZLj#WlLfN7~`{uDcmx+S5>_l2>l@w@Pu^daU3QR@)Nn1LH ziCvwyoWo>!dhESGeag)#fwoP{QQL*ntjh1ntW6`P=eX`y^-;+@WkoZb-0Y8SxsE;( zX!4`9q*8+H4Yxqqks!@-3Yu05Yu7J8pgS6?EQ{z};ttfh#T&PzmCV^x&H|qd(YW>!QM;u?qZmfT610P>AXDKQu@fvd2NkY z3nLXl8m|O;w@3v0bIO*Ur@X{<0Ro-3C-$UwBG6MsT2`m^_H76lhf4eU)kR|&ioNSN zOf!LsVHylv&gXmdGkuRUSyhj8q|CrInJ>vp<0h}*2PW3>nl4~J{Yi{Qv&H365fkV; zl_x6YItNmJu=Ejmo|cX#bg{}&D!Qcd#tdw*a+?B^r8AeB%yQ1%6BYEDzuUSz&~CnH zV4FH~({)b@XH;Cqaa2CgTHxEw5`s1SOWKf5&Q{)}4+h;^+0QpO_rbm5nW~b$f8!uK z*<*E}lQ+9D*gGX{d)K1JWMGG$QN{VH)g~}pI}c;@@Z0GD)63;vCeI+h3*BUUD4M15 zI{G)qXD=b*bH5P!QA+P6+gh6HM*{|6VvvwN^atQP&4nnZBmNU1{w`2A^yLEe|8cXF zFiiW85HwH=ZD6#q933Zgg3!TQsKIEs9Gxa~hR~r}XcMDmIT|N)me4!3&}K#><>&&T z2}0@ZlVyFUNdv)B#xK#rGF_3X_)a7A`pGtyW|v6J5sE?>#asHDG@8K{-jHeuio+D& HqwoGdt#3;n diff --git a/src/main/java/Model_Classes/Event.class b/src/main/java/Model_Classes/Event.class deleted file mode 100644 index d8100a6b2c38217b228050cc78f97fdd5341d43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1565 zcmaKs?M@Rx6o%g^(3WN88xfE%E!dWisvsyuR0;^%f(p?XVst1Iy0q+)?vwxURN4j}|o*JsNF0EG&N+5Kg zw5MD{G`2x~_o5%B8DGCJ4f-y}duPFsp2v}_r%MXbpzj*YmxZNqgEM#?1M8rL%-z)w zVkGL=3nL;X(0e5FD&^Q&soz;TN1m&ttqGm0v6bpe;NObMvkKt_%eE;HDet*FXW1uC zUisJ1TWw8dwNpF|;T2ulwBzJU$5h;gZL6X$w7{3j68s$A39UY+`H2CLBsp<{&J ztcQje4OgQvLgR!E)s`l%fK-g$%U@F)y)&Gzor>`h2|i>6`frC23WY diff --git a/src/main/java/Model_Classes/FixedDuration.class b/src/main/java/Model_Classes/FixedDuration.class deleted file mode 100644 index c90eef06f01d112d7bb2432e741ebb35eb244e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmaJ*jj6ArAk|%Mjka{d=Nu4q51%+4~;Pkw`s3jcggM2*ni^B z&_vUu5B>mulyMF&3OVA#?#|49-?uZf^XvEZPXJF*%_ECjIov=owr&?Wy6)hvgAIb~ zk0N0Mtq8^TnYa-3P^go7$3}rVX%Mn60u|Vog#AkTIvuGV5f+=;mxMw)Q1adAyeFfs z=!G0{t)A!-Rx8ysnUL@3QPh{MAchxP!Ds2ePV##aC+8uDdmbFP9&Tcpu<}Z4YiuNj zhti&E-xRXgbg|{(KDG&)hn!0IsTm4mq^Zvc@&mKCU10`b+F zV)t?==fIDr@b7zPvTqyHwIvcw5r&<>%7%jqVK-IZyxa)e|Hom62R+LpPRPWA!d8au z9P+#`v3J1!0-sB@gDX(&@egFajo}{e%i}ATC1OHM;W0~ydt)KS)UL2l`;N>t7J;vS hxmm^m1y(5VnZXLme8w6Nv4=<4z$*JL`)j=J`~gaX^WFde diff --git a/src/main/java/Model_Classes/RecurringDeadline.class b/src/main/java/Model_Classes/RecurringDeadline.class deleted file mode 100644 index a8f07a5dffb875ce43952d0853344a807dae142f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcma)5T~8B16g{)xZd+Fhl@IX)3KZ;Cq>mVDe6WOQQZ%6iAAB&=?F5!CGtKTS3ID{O zAqj+p2Y-M+%6PZC>XNO-hn=}IbMCq4e(d)jH{Sqk!zsbUOc8fbiLLt;x?QmFz``O! zDG+WH1VXxkq0%|wXT0fidDQIcz>`NU2J@9CJ^h+tyPkheZX)gZ%^j{qE01sv87AAR zPxR%EC&l~dv?qcC-t+0Epj8rwVYcq%ok?F;MS&}Jy%;{fKN3s2b_DPH#I_X+wo$}G z8x{&S?qP~y`i)XL)Bzvv34N^kVcEo^0v_9Vf+dFKJ(A;pZu>k8McB-dQlQ(2U(p!W z|Dy)ZVF}BqQg*Cb-+x(U4#UDJABeV+F4rGDeN0xUxzr)Ui@!2v+c2g!7FObX)){Jl zy5`97MVtG6*Q0r|P^Y5j@*Ag(Vd>vEtk5rD((p4F@vx9( zkX=NH*1L4t!~`a3w;RtkufZD6uV7q^@HVYe^a_-TVVcl0U`wqdkthiVdt`5wmnI(0Pu&`Ja@`{yzW! diff --git a/src/main/java/Model_Classes/RecurringEvent.class b/src/main/java/Model_Classes/RecurringEvent.class deleted file mode 100644 index cac3f5cdefbcb2e087c00666a383cb6d5485f865..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcma)4T~8B16g{)xZd+Fh1w<5~V8L!h`-ri|2dhMr0tqGf-~*X%C$MyxX?ACu@K5*| zm}p3N@CW##jCZ>m-KN#}Ff(^%&OP_sj~_p8zXRBTQ-F!NJno$_UiY~?t+#dH$VBJKJ0cU+6cIKnw*m~N^r z(HC2u6#LOdM+8T_wP%Pyy zca95KLz$9d< z4pdL1Jxk*4a#yS1(!x_}VN0oA)Mv0iN-2UgcZRF1h?FBK+6OMXz6dLc)sL&b5-M|)}U>OT^&(VF6*8N{XZ2I~D diff --git a/src/main/java/Model_Classes/RecurringToDo.class b/src/main/java/Model_Classes/RecurringToDo.class deleted file mode 100644 index 92ba93946eb2732b6c8a05a7454d59aa323c19a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmaJ;C0&J}0aR;T?x?AGtx`X=;HVB1K zdZRFu%9Dgr`$AlaMj+H#qhmr}oiz#eOJDis72%+oPNyTaQ^I^p_nEHP_LY1;y6nlY zD|!J(az;;h39Hpw8q9h+dK7x{$dAiQCu4D}qpRQOr?EH}c|368Am?HcON8auTARp( zVt6dgx$Z|r8=E;ibnysVgw11?5`1n2B8p_xm?7i_v)Q-{VJ&0M+GzogQRWG#Ts?VF zrW#@WQVe8ED^Hk@zBy+rGD4Y%@H~SdJ#5DO4z^?6dxXlrm+;k<9?0ZDCjE|tXLNY& z;DFz!t@U6uB)IRCl3_9_;mfp$gk$oH-U`(ZWK@{|n`vcJkr`n3dMGo>KTXwt=v_$9 zG^b}vC|V*2I=+!j2UWseYQ8LOgsuPAVVl?5=7lC$@lvp5v7JYO&jt1l*`MQkp?-J+ zsz3Pw>)W{8<#TD0VhWc5iwxnFN`U)gBCe_5V6Ofh)-C3NuYa*N*8wZcP~_XfGAew> TZFjJbU2I^L{T%yi{N4KlVbtwv diff --git a/src/main/java/Model_Classes/Task.class b/src/main/java/Model_Classes/Task.class deleted file mode 100644 index bea2620e984e9b599e0e439d1097a643c29c3d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1960 zcmah}T~k|C6kR8Q+$3B`n^Ie-tq^I2v^0LSwl?&G1~DjsDky5F(>WxkaGT^FCihSW z|AsGh#&=(Q&>5+nKKKLt8U7H*b#gBxKn7s$KKJabz4khL?{ok8@6F!;ZsFTBGMG+b z2-mGCB=LS4AK=3@KEe%aZd&)pN!&`}cABrBSaT=K;Cl}4J9r>4P*Xv*H`vTd; z=kkRtG^D>#STQZn-zW+sykJiINvfzVgczS$H=g}XVqvyU$8 zZKB->=K0&ko@|BQs+#xgF;lBDs9(1Qb#WFs7pHLAMHXiSPSt9KN~N&Fzp--pPP6IY zp^Fmc9DM3x9-p}=W5LBRPP5RD|NZ5sCu8Bu%O_(lE@ITh7)D9-P-_#ImfWf+v#D!A zCV|hB_`<~^D(q*4EoeL~HDnN|pkM_trqko)_2;T;4!HJ;l53-k*HndPy494XFvq^H zazEeR8pY$M^s`6O@Rc38-D?cO)*j2k2|L%xwWzDIv6o38?&}`}F6_-no9F<<&S$8v zqu}^-J;p7KB`gcXgrJtDtgDjttJ17_W|MD$k-iB!^xe1P=;-#KcksyeV^v_HQ+m&T zq3bHTWnsQ~Sv9(~QyG4y;)vN>!?&2d zIPH~pg6kmo;lW$9=eYZd$Ud&Q{9h3HtGkHh;>`Q#j P85}{8`y}@>eD3}aV%wnm diff --git a/src/main/java/Model_Classes/ToDo.class b/src/main/java/Model_Classes/ToDo.class deleted file mode 100644 index 9f7c1ce5a8bd27c499e47862f215a98365a5bd54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmaJ<(M}ps5IsY6mu|OW5vA5@t)&fMB9A`M^r0AI6Ko$K`d}J!fg4>|?j?IKB>YJ~ z!#{060X!!!lOlBa>xd%|*_|I>GrIsK9<9 ztQYHDF%p$fsH;lDMuEDjmd*%EHQkYfOg&KY`>@}VQB$-+M$%SKX@p#{lnf?#4Lyw7 z@;Hd;&zt&4AH*emIB{9BibK_wgE=gzPC74=-z>Fh-h6 zoFWMd)AR5KTdeh>`I89wzUaxCR&8O=1AEPuu|iox__V0Wq;wZ=V*$H_!oQgWYNUH| zHkxVnW6`!c8oSuzLDseI4F?4On^H2GNhbW7FFDIG?e#>cPAE-b8dy!rm_z;xY>o$V z0sUf*|D)BFZCjoHEwdCg5r&Px%BqVGgpY~-7HK2wJk7&xO}GB+hae) zU#Gl(3;N9#Zvvm*1YL>Okr7^nM?SH|_vKrp?(ht_d5m!;H+cqq#!`5RcauznZLYtA OO{}t?X4Wfyvws1uSHnL5 diff --git a/src/main/java/Operations/CheckAnomaly.class b/src/main/java/Operations/CheckAnomaly.class deleted file mode 100644 index 79dc1aa595ac6e7617b3c273e7f3e88ae948cc10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcma)4O>fgc5PfUAapRhP(iBPxl&{)NsUeMKyQc4MTohmr-1`hf$CF9p`Qkc!K*?hBM8WyWM?$bV}Tm9iPWZ zNW_o+i+H=fPfdDHY95aw5jia$b*nr7xXx$>N$83PG96;BmJYG&2R-f`Z>BStFfgTK z)x;HCHE|8s85aJgzuy;rY~lvibXX>Atm~+l*uYJOrN)s6c`O4za`M~^vzbEK?2Y!J zaAV>fi}pt(Qaq9`sWp;+k8DR!;-a;e*KSx((hYZz3eGTZjZ(%-V3;1?Fw8257YX;G zlrp!B5utrRij3PFt%yPIb1xB%XAC9lAm7O860wR&dSB_MfTaqOHR-fMo{^tee-HMK z0Ii#BAqy6%WEwM6lBNdaRq|WvopNOW1iFjNzt+TRoV= z?Fd4+(}UM=SM5HE;2qpkyLq+yID!Q%s%0sRWo7w9!%75k+zcb5&Yy;{sv#RjE`mX< zsbyWmMg*VXzJ|PpO#!W1Fl<{o0)yEDny-4ZR4qI4I^mSxy`0z=7EkgR0bMLq92rd?#NFnu!io;(s5Zt=+2 zt}IH2E^)dn%4)$eE3R3#1$y(YQ8>&Q6(2{#141nw6{P>VDlpO-@W^!c7Y&yM5n-oY z5t<6{J(9^b4()@++Msxj5tJBJFV9Yq$7RPd>JXQb=S!$lWj<>{BMtzqhC7a{4j&!a<=@PbQX*%We6*yx-`5(ybeqs zsNmOCAAfpPlvq5f@oh6X)L(mIlsvgkHb;_~=3CadL*4RQ&nWS3wB!hypG$2EbX6-Q zH9g5T7@77Lpe0rPLaS!G{EB&RTc=Q<{p7cL&EX=yZDaiKk!>|~-1TzLDdqYmPdCuX z9WXe30x^Ax(AKZ$I6>#{==#MEo8%ft2iFU9P4G9$fQy)_CrI%b;@jTo-_TVR~f{s-(j~Sh$9sZ2CDOcgCM1+6WJjlMGLxAJYtao5&%* z^bI~$@`>gYiC7K2KO=gI_|^&f{_;x+`K2USziK#&_c4SSk}-?Rw1gr4!MMiHd6FkZ zN1XpDA5Bqog@r1d{yI*gzq5vc^G)7k+&m-Gj0nh0Gg39#m+rXE1``PqG?2T}XfI%A ziJB}kTqooPBd@+H!Em~Uk!QIVMABK!PMl*9 z&>2Wmq-7s{Fnub!A=Wf{G!yyW|BVVYZ!;=Y>f;jZ`dQdzo)mbzp)(^JBodTwkGS5T zvH|l-fhNs3mBDyDrDyYCeowR?XqmwW^~jg!Sxx0=11wPNM-I(T447rQ5I+15Ay>Ky diff --git a/src/main/java/Operations/RecurHandler$1.class b/src/main/java/Operations/RecurHandler$1.class deleted file mode 100644 index eae471e7919d595eb77b4edf69468ea28e05a7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmah{>rN9v6#k~&cH4DwPvmbg zA;cISz?bk%jAyo#l6Xrd=R4n-bD25keE<3N9KZsW4cx|X7M-}0C2d5}Q5|E7j4P2h za2FHGVKPhFl%k_bn^xkUj{7N~i+oG0IqI@I&cDv3?FxV9fFE*7QIwYJ1&-V=iLmO~I%XI$Wf6qyUJ&Xin0SO) z6W7sg;xXn-Ji$D}fQl}-T<#ajUL~@sYmRX3qVIdYiKohK0dqQ@sp#h>aw_@-7ELTE z@e+&FpRI=QdFXgDC|rG5ewM-9kW%=oE)N0`Fyz|Rw)PH$6*BbxC7NLk9m(BzJTzJDNQfFks_x0K%Fx-Y(jI?LyL8J) z#kA0~J^JiLwJSFnTX35;fM%EyheC$A5!${kTGvFbPc;`Hq!E#YriUKfAiPQJ2a==# z^)s;ZZ^joSPSi=BLesWBL3>O|8qJwqmr%ASCZaf)lLD556ORus_=qRpt! zNFz&6=tT;B7{>(RBrVT8;R;@%L|Dc9%w! ib}qHp28}9E8_ckeNC0%o!lJ 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 diff --git a/src/main/java/Operations/Storage.class b/src/main/java/Operations/Storage.class deleted file mode 100644 index e595d78fb684da7b30cf2db59b7b98dc3bb48f70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5540 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 EAJ<>l(f|Me diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 3a95d6a975..c77d839b57 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -99,7 +99,7 @@ public void replace(int index, Task replacement) { */ public void snooze (int index, int amount, TimeUnit timeUnit){ if (tasks.get(index - 1) instanceof ToDo){ - System.out.println("Todo cannot be snoozed"); + System.out.println("Todo cannot be snoozed\n"); return; } switch (timeUnit) { diff --git a/src/main/java/Operations/Ui.class b/src/main/java/Operations/Ui.class deleted file mode 100644 index 0972496d91843c27c4c0cae2427e6e2c945be878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5317 zcmb7I>vt2!6~7As55mO6;hCf`=4DJ&%QkHTHVFaSU{Mn&Hc$$Uv(^sQ;@ur}cV!{s zHt+YV&8tb;q)ngcr#?Qk=kOtaK+oyF)YISH9jzqTq^*3|8Qr{V_LijvtH zy1%Hxd3(_Vr6-E*Fuqu`Xj4?xjah9w(_yGXi#GE2DdnkHIS_EL%yKq&5HF}o9ejdG zr`!Nci3r|y9!=>W(F3j%4w!nGA3MX-!(UG}!IB7?zUjthJL^W+re!MyEU9w9q|}W9ljj1hZvoTa{sKE|9Ae|> zyz968D$MD6SW&0kBuy9H;T!gf-Amu0M=Xlu0zT4wvQ1%C$_051|FEvg)r4z7g5332 zk|kzia>A89r91}ILaDIIvP<&X!a{KYN7ojxTUagh(9e45U3w2ia8m0yibK10R>f8A zM1AY&eL)}e(uef(9{Q-4KBi9)i5cCHzTK2%8L4nZ$)>I!w`d}XyL1ETq1X^$>DaL? zufxwGsBY}qo*OY;al&Mb7)ns$;o)IHzhEW56!fV@d*+lKR;tW-U564C;j`3Eev69v zOd;1UXZH^FQY#-$axfsTAPH?AS+yg%s8k^9HCWA!G1%tF4sFL#4s40FjH@a!e!!y9 z|IXPqiya0=oYvY|Y$|N`0uKF%qe72BemAr9lMdg*<<{~m;&?Q>JU|c;lzgVP!0s51 zWf^Or?~-^Y$*S1s0MBCrA1H}dsHiAPbW9{I$=V0mBL?qfJRG^fL`Sw!hLn)&OXhZt1>@=|ppSxMVF(X==ZDRHxwc&!~>l#a3; zn587jLajhI3dHkt0|qRD6)8y^blS5(B2~y*LXY@M8Z}5uvS(3Q;xpf@rP(Z^TmuJ+ zFxyxicQB)BDnu#zQe$H$V?*jz20CQTYP}pm@N&` z@JMNNtTZ+%kEOeG`s)t`ZT*$r-&^o9W2SZk0PYS!C z)N&E?wq~OM(|Wh%;NC%Wz1%Q8yd=lrKB{`L-jqw+uA!@6^VQjiOgx#q#e^%PTQL!%VU_^ zoXaM1eb+;!q0jLy??_vE9B|ut9-`QnIh@ReQM?Kbg{KC`1psZ&DIcVPs-hq6Cn&qU4;ju}M8xR4`JfIHN5Um%)R(mpMAim1EICIJ!j)N%>b8d=Q@+w_?+CVcym*+=v|*qah{95`f{_Fn;pSF4w|GNUkdhA4Tr$pc2EQ_}L_OhD9?6l*{NE~+jB8zdOJa8}-ljwvDOu&hu zyGgiu=4iv+y~esd46v+ zeeH0$!HQm1rPPDe(^Ht6I&AjPAMjg*-*|52yaMn-z0oWX0s zQ_;Q@IB~b79h5F0zoB#3uXgaKx$TOx5iyDOox?q5qKE#7=D5qhJlibV_4Rx-K;Oa- zNB%s3--x)r<9P(%2C!OK*B$x?S%1aGqN8{g@Eek!_s~XA#xwR~p!3O&{x!3IqqPs; z1_%9})?wej9&1}dKcCQjw3fC}A8p6q4oI5FB<+VBR=k0sJzdaL`7RQ)8!X4@Q9Rk! zA)|Z~AP?TgF>7vXOkoG8mj(fN?5kiKa$!S&9RlolzJY}tO(j?`0?6a}kc~NzF+dIj zav~qnn*%ul$WcH}=0i5+K#l|QI3Sbxkb83=lYmSCGL;YM%Yl>uIRnUaK4fzaWEPOK zfSk&Q+?NBn0LUC5r}H8GIgpEhTmob!A98;V>prvYH|qhj4x06# zS%=Je2y45iPr^W=XJG2H*gXeRpC?H#&_Q|$z4tQ4!Ye5CSCQ-2=sdlS{}X$Io}xFY zN^en(-lm)M4qSU8bFFM#8(`NSHY$r|{ia!myG+tMpWFyTFz@IFlV04970vF9?e zUHK|?!P9(w4EQI2oX>}h~V7Ha__KBwP9`%d}+zHh<#RnV>_&&A~F{0H-kJj(z8 From cbdacc6c45135fd58c3f8ac2ba9ce4ed3efe938c Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 21:37:06 +0800 Subject: [PATCH 068/251] Added javadoc for CheckAnomaly, refactor unused functions out --- src/main/java/Duke.java | 15 ++++++------ src/main/java/Operations/CheckAnomaly.java | 11 ++++++++- src/main/java/Operations/Parser.java | 27 +--------------------- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 46673cf062..0e8412ebc0 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -118,9 +118,8 @@ public void run() throws DukeException { try { ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(deadlineArray); - Date by = parser.formatDate(ar[1]); - Deadline temp = new Deadline(ar[0], by); + Date by = parser.formatDate(deadlineArray[1]); + Deadline temp = new Deadline(deadlineArray[0], by); taskList.add(temp); } catch (DukeException e) { ui.showDateError(); @@ -130,8 +129,7 @@ public void run() throws DukeException { case event: try { String[] eventArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(eventArray); - Date at = parser.formatDate(ar[1]); + Date at = parser.formatDate(eventArray[1]); ui.promptForReply(); ReplyType replyType; @@ -146,7 +144,7 @@ public void run() throws DukeException { TimeUnit timeUnit = parser.getTimeUnit(); ui.promptForTime(); int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); + FixedDuration fixedDuration = new FixedDuration(eventArray[0], at, duration); //checks for clashes if( CheckAnomaly.checkTime(fixedDuration) ) { @@ -158,7 +156,7 @@ public void run() throws DukeException { Timer timer = new Timer(); class RemindTask extends TimerTask { public void run() { - System.out.println(ar[0] + " is completed"); + System.out.println(eventArray[0] + " is completed"); timer.cancel(); } } @@ -174,8 +172,9 @@ public void run() { ui.showAdd(); break; case no: - Event event = new Event(ar[0], at); + Event event = new Event(eventArray[0], at); taskList.add(event); + ui.showAdd(); break; default: ui.showCommandError(); diff --git a/src/main/java/Operations/CheckAnomaly.java b/src/main/java/Operations/CheckAnomaly.java index 14b0177d2a..7183266553 100644 --- a/src/main/java/Operations/CheckAnomaly.java +++ b/src/main/java/Operations/CheckAnomaly.java @@ -7,8 +7,17 @@ import java.util.ArrayList; import java.util.Date; +/** + * This class checks if there are clashes in timings for events + */ public class CheckAnomaly { - + /** + * Checks if the FixedDuration task has any clashes with any other tasks in the task list + * If there is a clash, returns true + * If there is no clash, returns false + * @param currEvent FixedDuration being checked for time clashes + * @return true if there are time clashes, false if there are no time clashes + */ public static Boolean checkTime(FixedDuration currEvent) { double currDuration; currDuration = currEvent.getDuration() * 3600000; diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 3bef2eb4a5..fca0c26cc9 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -62,32 +62,7 @@ public String getDescription() throws DukeException { * index 1 stores the date String. */ public String[] getDescriptionWithDate() { - String[] array = scanner.nextLine().split("/", 1); - return array; - } - - public String[] getDate(String[] ar) { - String[] array = ar[0].trim().split("/", 2); - return array; - } - - /** - * Returns an array with the task description stored as well as the duration of the task - * @return array An array of Strings with description and duration both in index 0 of the array - */ - public String[] getDescriptionWithDuration() { - String[] array = scanner.nextLine().split(" ", 1); - return array; - } - - /** - * Takes in the array containing both the description as well as the duration and splitting - * them up - * @param ar An array containing both the description and the duration - * @return array An array containing the description in the 0th index and the duration in the 1st index - */ - public String[] getDuration(String[] ar) { - String[] array = ar[0].trim().split("/", 2); + String[] array = scanner.nextLine().trim().split("/", 2); return array; } From 4a5e879e52530ccecfd0339e86f1e4112207475e Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 22:17:50 +0800 Subject: [PATCH 069/251] changed name to RoomShareto align with project. final commit for B-extension: B-RecurringTasks --- README.md | 2 +- docs/AboutUs.adoc | 2 +- ...Exception.java => RoomShareException.java} | 4 +-- src/main/java/Model_Classes/Deadline.java | 5 --- src/main/java/Model_Classes/ToDo.java | 2 -- src/main/java/Operations/Parser.java | 14 ++++---- src/main/java/Operations/RecurHandler.java | 16 +++++----- src/main/java/Operations/Storage.java | 24 +++++++------- src/main/java/Operations/TaskList.java | 18 +++++------ src/main/java/Operations/Ui.java | 27 ++++++++++------ src/main/java/{Duke.java => RoomShare.java} | 32 +++++++++---------- text-ui-test/runtest.bat | 4 +-- tutorials/gradleTutorial.md | 6 ++-- tutorials/javaFxTutorialPart1.md | 6 ++-- tutorials/javaFxTutorialPart2.md | 16 +++++----- tutorials/javaFxTutorialPart3.md | 14 ++++---- tutorials/javaFxTutorialPart4.md | 16 +++++----- tutorials/textUiTestingTutorial.md | 8 ++--- 18 files changed, 108 insertions(+), 108 deletions(-) rename src/main/java/CustomExceptions/{DukeException.java => RoomShareException.java} (91%) rename src/main/java/{Duke.java => RoomShare.java} (91%) diff --git a/README.md b/README.md index f6bcf905d6..38094b4046 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- ## Introduction -* Duke is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With Duke, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. +* RoomShare is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With RoomShare, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc index 540c086fa2..15c730652b 100644 --- a/docs/AboutUs.adoc +++ b/docs/AboutUs.adoc @@ -4,7 +4,7 @@ :imagesDir: images :stylesDir: stylesheets -Duke was developed by the https://github.com/AY1920S1-CS2113T-F14-3/main[F14-3] team. + +RoomShare was developed by the https://github.com/AY1920S1-CS2113T-F14-3/main[F14-3] team. + {empty} + We are a team based in the http://www.comp.nus.edu.sg[School of Computing, National University of Singapore]. diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/RoomShareException.java similarity index 91% rename from src/main/java/CustomExceptions/DukeException.java rename to src/main/java/CustomExceptions/RoomShareException.java index 2deb55d981..0604872c86 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/RoomShareException.java @@ -2,7 +2,7 @@ import Enums.ExceptionType; -public class DukeException extends Exception { +public class RoomShareException extends Exception { private static final String outOfBounds_Text = "Index is out of Bounds!"; private static final String anomaly_Text = "Anomaly Detected"; private static final String emptylist_Text = "List is empty"; @@ -14,7 +14,7 @@ public class DukeException extends Exception { * Takes in the exception type thrown and prints out the specific error message * @param type type of exception detected */ - public DukeException(ExceptionType type){ + public RoomShareException(ExceptionType type){ switch(type) { case emptylist: System.out.println(emptylist_Text); diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 83fb567b92..682d100fd6 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -1,10 +1,5 @@ package Model_Classes; -import CustomExceptions.DukeException; - -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Date; /** diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index d6ab009c25..2f23d25867 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -1,7 +1,5 @@ package Model_Classes; -import CustomExceptions.DukeException; - /** * An object class that stores the description of tasks that needs to be done with no deadline. */ diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index fca0c26cc9..a301cecd86 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -1,6 +1,6 @@ package Operations; -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -46,12 +46,12 @@ public Integer getIndex() { /** * Returns the description the user inputs for tasks. Will not accept empty descriptions * @return temp The description that the user has specified for the task. Cannot be null. - * @throws DukeException If temp is empty. + * @throws RoomShareException If temp is empty. */ - public String getDescription() throws DukeException { + public String getDescription() throws RoomShareException { String temp = scanner.nextLine().trim(); if (temp.equals("")) { - throw new DukeException(ExceptionType.empty); + throw new RoomShareException(ExceptionType.empty); } return temp; } @@ -71,13 +71,13 @@ public String[] getDescriptionWithDate() { * If the format of the input string is unacceptable, will throw a DukeException and will not return anything. * @param by Input String containing the date information. * @return A Date object containing the appropriately formatted date. - * @throws DukeException If by is not in dd/MM/yyyy HH:mm format + * @throws RoomShareException If by is not in dd/MM/yyyy HH:mm format */ - public Date formatDate(String by) throws DukeException{ + public Date formatDate(String by) throws RoomShareException { try { return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(by); } catch (ParseException e) { - throw new DukeException(ExceptionType.wrongFormat); + throw new RoomShareException(ExceptionType.wrongFormat); } } diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 430160644d..c08fa1b468 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -1,6 +1,6 @@ package Operations; -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import Enums.ExceptionType; import Enums.RecurrenceScheduleType; import Enums.TaskType; @@ -63,7 +63,7 @@ public void addBasedOnOperation() { RecurringToDo temp = new RecurringToDo(parser.getDescription(), recurrence); taskList.add(temp); ui.showAddRecur(); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showEmptyDescriptionError(); } break; @@ -75,7 +75,7 @@ public void addBasedOnOperation() { RecurringDeadline temp = new RecurringDeadline(deadlineArray[0], by, recurrence); taskList.add(temp); ui.showAddRecur(); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showDateError(); } break; @@ -89,9 +89,9 @@ public void addBasedOnOperation() { taskList.add(temp); ui.showAddRecur(); } else { - throw new DukeException(ExceptionType.timeClash); + throw new RoomShareException(ExceptionType.timeClash); } - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showDateError(); } break; @@ -273,7 +273,7 @@ private boolean dateHasPassedToDo(String currentTime, String createdTime, String // date has passed isPassed = true; } - } catch (DukeException e) { + } catch (RoomShareException e) { System.out.println(DATE_ERROR_GENERATE_NEW_RECURRING_TASK); RecurringToDo recurringToDo = new RecurringToDo(description, recurrence); taskList.replace(index, recurringToDo); @@ -298,7 +298,7 @@ private Date getNewDate(Task check) { calendar.setTime(storedDate); calendar.add(Calendar.MONTH, 1); newDate = calendar.getTime(); - } catch (DukeException e) { + } catch (RoomShareException e) { System.out.println(); } return newDate; @@ -322,7 +322,7 @@ private boolean dateHasPassedOthers(String currentTime, Task check, boolean isEd // date has passed isPassed = true; } - } catch (DukeException e) { + } catch (RoomShareException e) { System.out.println(DATE_ERROR_SET_AS_NOT_DONE); check.setNotDone(); isEdited = true; diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index e5f393eb9f..ce4d3eeab9 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -1,6 +1,6 @@ package Operations; -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import Enums.ExceptionType; import Enums.SaveType; import Model_Classes.*; @@ -12,8 +12,6 @@ import java.util.ArrayList; import java.util.Date; -import static java.sql.Types.NULL; - /** * Performs storage operations such as writing and reading from a .txt file */ @@ -32,9 +30,9 @@ public Storage() { * Populates an ArrayList with these created tasks. * * @return taskArrayList An ArrayList of Tasks that is created from the .txt file. - * @throws DukeException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. + * @throws RoomShareException If the file has mistakes in formatting. Creates and empty task list instead and returns the empty list. */ - public ArrayList loadFile(String fileName) throws DukeException { + public ArrayList loadFile(String fileName) throws RoomShareException { ArrayList taskArrayList = new ArrayList<>(); try { BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName)); @@ -114,12 +112,12 @@ public ArrayList loadFile(String fileName) throws DukeException { taskArrayList.add(tempDeadline); break; default: - throw new DukeException(ExceptionType.wrongFormat); + throw new RoomShareException(ExceptionType.wrongFormat); } } } } catch (IOException e) { - throw new DukeException(ExceptionType.wrongFormat); + throw new RoomShareException(ExceptionType.wrongFormat); } return (taskArrayList); } @@ -131,9 +129,9 @@ public ArrayList loadFile(String fileName) throws DukeException { * Will not write any information if the there are mistakes in the ArrayList information. * * @param list ArrayList of Tasks to be stored on data.txt - * @throws DukeException If there are parsing errors in the ArrayList. + * @throws RoomShareException If there are parsing errors in the ArrayList. */ - public void writeFile(ArrayList list, String fileName) throws DukeException { + public void writeFile(ArrayList list, String fileName) throws RoomShareException { try { BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); for (Task s : list) { @@ -153,7 +151,7 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio } writer.close(); } catch (IOException e) { - throw new DukeException(ExceptionType.wrongFormat); + throw new RoomShareException(ExceptionType.wrongFormat); } } @@ -164,9 +162,9 @@ public void writeFile(ArrayList list, String fileName) throws DukeExceptio * returns a string with all the relevant information. * @param task task object to be converted * @return time A String containing all the relevant information - * @throws DukeException If there is any error in parsing the Date information. + * @throws RoomShareException If there is any error in parsing the Date information. */ - String convertForStorage(Task task) throws DukeException { + String convertForStorage(Task task) throws RoomShareException { try { String type = String.valueOf(task.toString().charAt(1)); String time = ""; @@ -200,7 +198,7 @@ String convertForStorage(Task task) throws DukeException { } return time; } catch (ParseException e) { - throw new DukeException(ExceptionType.wrongFormat); + throw new RoomShareException(ExceptionType.wrongFormat); } } } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index e7160b218c..8d15c20b9e 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -1,6 +1,6 @@ package Operations; -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import Enums.ExceptionType; import Model_Classes.Task; import Model_Classes.ToDo; @@ -35,11 +35,11 @@ public void add(Task newTask) { * Deletes a task from the list. Task to be deleted is specified by the index that is input into this method * Will not perform any operations if the index does not exist in the list. * @param index Index of task in the list to be deleted - * @throws DukeException If the index cannot be found in the list of tasks. + * @throws RoomShareException If the index cannot be found in the list of tasks. */ - public void delete(int index) throws DukeException { + public void delete(int index) throws RoomShareException { if (index < 0 || index > tasks.size()) { - throw new DukeException(ExceptionType.outOfBounds); + throw new RoomShareException(ExceptionType.outOfBounds); } tasks.remove(index - 1); } @@ -47,7 +47,7 @@ public void delete(int index) throws DukeException { /** * Lists out all tasks in the current list in the order they were added into the list. */ - public void list() throws DukeException { + public void list() throws RoomShareException { if( tasks.size() != 0 ){ int listCount = 1; for (Task output : tasks) { @@ -55,7 +55,7 @@ public void list() throws DukeException { listCount += 1; } } else { - throw new DukeException(ExceptionType.emptylist); + throw new RoomShareException(ExceptionType.emptylist); } } @@ -64,11 +64,11 @@ public void list() throws DukeException { * Sets a task in the list as 'done' to mark that the user has completed the task. * Will not perform any operations if the index does not exist in the list. * @param index Index of the task to be marked as done. - * @throws DukeException If the index cannot be found in the list of tasks. + * @throws RoomShareException If the index cannot be found in the list of tasks. */ - public void done(int index) throws DukeException{ + public void done(int index) throws RoomShareException { if (index < 0 || index > tasks.size()) { - throw new DukeException(ExceptionType.outOfBounds); + throw new RoomShareException(ExceptionType.outOfBounds); } tasks.get(index - 1).setDone(); } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 4def3abc66..8e32322e81 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -11,15 +11,24 @@ public Ui () { } /** - * Shows the startup logo for Duke + * Shows the startup logo for RoomShare */ public void startUp() { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); + String logo = " __________ _\n" + + "| \\ / \\\n" + + "| ___ \\ / \\\n" + + "| |___| | | | | \n" + + "| _/ | | | \n" + + "| ___ \\ \\ \\ /\n" + + "| | \\ \\ \\ \\/\n" + + "| | \\ \\ /\\ \\\n" + + "|___| \\____\\ / \\ \\\n" + + " | | |\n" + + " | | |\n" + + " \\ /\n" + + " \\ /\n" + + " \\_/"; + System.out.println("Hello from RoomShare!\n" + logo); System.out.println("How may I serve you?"); System.out.println("Enter 'help' if you require assistance"); } @@ -78,7 +87,7 @@ public void showExit() { System.out.println("You have exited recurring list mode"); } /** - * tells the user that Duke is listing the tasks + * tells the user that RoomShare is listing the tasks */ public void showList() { System.out.println("Listing tasks in your task list..."); @@ -101,7 +110,7 @@ public void showIndexError() { } /** - * Tells the user that an invalid command has been input into Duke. + * Tells the user that an invalid command has been input into RoomShare. */ public void showCommandError() { System.out.println("Sorry, I don't understand this command..."); diff --git a/src/main/java/Duke.java b/src/main/java/RoomShare.java similarity index 91% rename from src/main/java/Duke.java rename to src/main/java/RoomShare.java index 0e8412ebc0..2cda4d5322 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/RoomShare.java @@ -1,4 +1,4 @@ -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import Enums.*; import Model_Classes.*; import Operations.*; @@ -11,7 +11,7 @@ /** * main class of the Duke program */ -public class Duke { +public class RoomShare { private Ui ui; private Storage storage; private TaskList taskList; @@ -22,14 +22,14 @@ public class Duke { * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run * Also loads the ArrayList of tasks from the data.txt file */ - public Duke() throws DukeException { + public RoomShare() throws RoomShareException { ui = new Ui(); ui.startUp(); storage = new Storage(); parser = new Parser(); try { taskList = new TaskList(storage.loadFile("data.txt")); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showLoadError(); ArrayList emptyList = new ArrayList<>(); taskList = new TaskList(emptyList); @@ -45,7 +45,7 @@ public Duke() throws DukeException { /** * Deals with the operation flow of Duke. */ - public void run() throws DukeException { + public void run() { boolean isExit = false; boolean isExitRecur = false; while (!isExit) { @@ -65,7 +65,7 @@ public void run() throws DukeException { ui.showList(); try { taskList.list(); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showWriteError(); } break; @@ -74,7 +74,7 @@ public void run() throws DukeException { isExit = true; try { storage.writeFile(TaskList.currentList(), "data.txt"); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showWriteError(); } ui.showBye(); @@ -84,7 +84,7 @@ public void run() throws DukeException { try { ui.showDone(); taskList.done(parser.getIndex()); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showIndexError(); } break; @@ -94,7 +94,7 @@ public void run() throws DukeException { int index = parser.getIndex(); taskList.delete(index); ui.showDeleted(index); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showIndexError(); } break; @@ -109,7 +109,7 @@ public void run() throws DukeException { ui.showAdd(); ToDo temp = new ToDo(parser.getDescription()); taskList.add(temp); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showEmptyDescriptionError(); } break; @@ -121,7 +121,7 @@ public void run() throws DukeException { Date by = parser.formatDate(deadlineArray[1]); Deadline temp = new Deadline(deadlineArray[0], by); taskList.add(temp); - } catch (DukeException e) { + } catch (RoomShareException e) { ui.showDateError(); } break; @@ -150,7 +150,7 @@ public void run() throws DukeException { if( CheckAnomaly.checkTime(fixedDuration) ) { taskList.add(fixedDuration); } else { - throw new DukeException(ExceptionType.timeClash); + throw new RoomShareException(ExceptionType.timeClash); } Timer timer = new Timer(); @@ -181,7 +181,7 @@ public void run() { break; } } - catch (DukeException e) { + catch (RoomShareException e) { ui.showDateError(); } break; @@ -248,9 +248,9 @@ public void run() { * Main function of Duke * Creates a new instance of Duke class * @param args command line arguments - * @throws DukeException Custom exception class within Duke program + * @throws RoomShareException Custom exception class within Duke program */ - public static void main(String[] args) throws DukeException { - new Duke().run(); + public static void main(String[] args) throws RoomShareException { + new RoomShare().run(); } } diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat index cce4731c3b..320f4d78f6 100644 --- a/text-ui-test/runtest.bat +++ b/text-ui-test/runtest.bat @@ -7,7 +7,7 @@ REM delete output from previous run del ACTUAL.TXT REM compile the code into the bin folder -javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\Duke.java +javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\RoomShare.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 @@ -15,7 +15,7 @@ IF ERRORLEVEL 1 ( REM no error here, errorlevel == 0 REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT -java -classpath ..\bin Duke < input.txt > ACTUAL.TXT +java -classpath ..\bin RoomShare < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT \ No newline at end of file diff --git a/tutorials/gradleTutorial.md b/tutorials/gradleTutorial.md index 08292b118d..0adfb02eb5 100644 --- a/tutorials/gradleTutorial.md +++ b/tutorials/gradleTutorial.md @@ -30,10 +30,10 @@ As a developer, you write a _build file_ that describes the project. A build fil git checkout master git merge gradle ``` -1. Open the `build.gradle` file in an editor. Update the following code block to point to the main class (i.e., the one containing the `main` method) of your application. The code below assumes your main class is `seedu.duke.Duke` +1. Open the `build.gradle` file in an editor. Update the following code block to point to the main class (i.e., the one containing the `main` method) of your application. The code below assumes your main class is `seedu.duke.RoomShare` ```groovy application { - mainClassName = "seedu.duke.Duke" + mainClassName = "seedu.duke.RoomShare" } ``` 1. To check if Gradle has been added to the project correctly, open a terminal window, navigate to the root directory of your project and run the command `gradlew run`. This should result in Gradle running the main method of your project. @@ -146,7 +146,7 @@ By convention, java tests belong in `src/test/java` folder. Create a new `test/j src ├─main │ └─java -│ └─seedu/duke/Duke.java +│ └─seedu/duke/RoomShare.java └─test └─java └─seedu/duke/DukeTest.java diff --git a/tutorials/javaFxTutorialPart1.md b/tutorials/javaFxTutorialPart1.md index 561daeca43..0722d2176c 100644 --- a/tutorials/javaFxTutorialPart1.md +++ b/tutorials/javaFxTutorialPart1.md @@ -44,7 +44,7 @@ javafx { ## Writing your first program -As customary, let’s start off with a simple “Hello World” program. Modify your `Duke` class to extend `javafx.application.Application`. This requires you to override the `Application#start()` method and provide a concrete implementation. Notice that the method signature for `Application#start()` has a parameter `Stage`. This is the _primary stage_ that JavaFX provides. +As customary, let’s start off with a simple “Hello World” program. Modify your `RoomShare` class to extend `javafx.application.Application`. This requires you to override the `Application#start()` method and provide a concrete implementation. Notice that the method signature for `Application#start()` has a parameter `Stage`. This is the _primary stage_ that JavaFX provides. ```java import javafx.application.Application; @@ -52,7 +52,7 @@ import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.stage.Stage; -public class Duke extends Application { +public class RoomShare extends Application { // ... @@ -80,7 +80,7 @@ import javafx.application.Application; */ public class Launcher { public static void main(String[] args) { - Application.launch(Duke.class, args); + Application.launch(RoomShare.class, args); } } ``` diff --git a/tutorials/javaFxTutorialPart2.md b/tutorials/javaFxTutorialPart2.md index f24a0cd6ad..b6d447c634 100644 --- a/tutorials/javaFxTutorialPart2.md +++ b/tutorials/javaFxTutorialPart2.md @@ -1,8 +1,8 @@ -# JavaFX Tutorial Part 2 - Creating a GUI for Duke +# JavaFX Tutorial Part 2 - Creating a GUI for RoomShare -In this tutorial, we will be creating a GUI for Duke from scratch based on the following mockup. +In this tutorial, we will be creating a GUI for RoomShare from scratch based on the following mockup. -![Mockup for Duke](assets/DukeMockup.png) +![Mockup for RoomShare](assets/DukeMockup.png) ## JavaFX controls @@ -34,7 +34,7 @@ But how do we get the exact layout we want in the UI? JavaFX provides that funct One way to obtain the layout in the mockup is as follows. -![Duke's layout](assets/DukeSceneGraph.png) +![RoomShare's layout](assets/DukeSceneGraph.png) To get that layout, we create a new `AnchorPane` and add our controls to it. Similarly, we create a new `VBox` to hold the contents of the `ScrollPane`. The code should look something like this: @@ -49,7 +49,7 @@ import javafx.scene.layout.VBox; import javafx.stage.Stage; -public class Duke extends Application { +public class RoomShare extends Application { private ScrollPane scrollPane; private VBox dialogContainer; @@ -88,7 +88,7 @@ public class Duke extends Application { Run the application and you should see something like this: -![Duke's raw layout](assets/RawLayout.png) +![RoomShare's raw layout](assets/RawLayout.png) That is not what we were expecting, what did we forget to do? @@ -106,7 +106,7 @@ Add the following code to the bottom of the `start` method. You'll have to add ` //... //Step 2. Formatting the window to look as expected - stage.setTitle("Duke"); + stage.setTitle("RoomShare"); stage.setResizable(false); stage.setMinHeight(600.0); stage.setMinWidth(400.0); @@ -141,7 +141,7 @@ Add the following code to the bottom of the `start` method. You'll have to add ` Run the application again. It should now look like this: -![Duke's Final layout](assets/FinalLayout.png) +![RoomShare's Final layout](assets/FinalLayout.png) ## Exercises diff --git a/tutorials/javaFxTutorialPart3.md b/tutorials/javaFxTutorialPart3.md index a9e1bdddd3..5b0f8b70e3 100644 --- a/tutorials/javaFxTutorialPart3.md +++ b/tutorials/javaFxTutorialPart3.md @@ -8,7 +8,7 @@ Rather than to do everything in one try, let’s iterate and build up towards ou JavaFX has an _event-driven architecture style_. As such, we programmatically define _handler_ methods to execute as a response to certain _events_. When an event is detected, JavaFX will call the respective handlers. -For Duke, there are two events that we want to respond to, namely the user pressing `Enter` in the `TextField` and left-clicking the `Button`. These are the `onAction` event for the `TextField` and the `onMouseClicked` event for the `Button`. +For RoomShare, there are two events that we want to respond to, namely the user pressing `Enter` in the `TextField` and left-clicking the `Button`. These are the `onAction` event for the `TextField` and the `onMouseClicked` event for the `Button`. For now, let’s have the application add a new `Label` with the text from the `TextField`. Update the `Main` class as follows. You'll need to add an `import javafx.scene.control.Label;` too. ```java @@ -103,7 +103,7 @@ import javafx.scene.image.ImageView; ``` Next, add two images to the `main/resources/images` folder. -For this tutorial, we have two images `DaUser.png` and `DaDuke.png` to represent the user avatar and Duke's avatar respectively but you can use any image you want. +For this tutorial, we have two images `DaUser.png` and `DaDuke.png` to represent the user avatar and RoomShare's avatar respectively but you can use any image you want. Image|Filename ---|--- @@ -112,7 +112,7 @@ Image|Filename ```java -public class Duke extends Application { +public class RoomShare extends Application { // ... private Image user = new Image(this.getClass().getResourceAsStream("/images/DaUser.png")); private Image duke = new Image(this.getClass().getResourceAsStream("/images/DaDuke.png")); @@ -124,7 +124,7 @@ Add a new method to handle user input: ```java /** * Iteration 2: - * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * Creates two dialog boxes, one echoing user input and the other containing RoomShare's reply and then appends them to * the dialog container. Clears the user input after processing. */ private void handleUserInput() { @@ -142,7 +142,7 @@ private void handleUserInput() { * Replace this stub with your completed method. */ private String getResponse(String input) { - return "Duke heard: " + input; + return "RoomShare heard: " + input; } ``` @@ -170,7 +170,7 @@ Run the program and see how it works. ## Iteration 3 – Adding custom behavior to DialogBox -One additional benefit of defining a custom control is that we can add behavior specific to our `DialogBox`. Let’s add a method to flip a dialog box such that the image on the left to differentiate between user input and Duke’s output. +One additional benefit of defining a custom control is that we can add behavior specific to our `DialogBox`. Let’s add a method to flip a dialog box such that the image on the left to differentiate between user input and RoomShare’s output. ```java /** @@ -224,7 +224,7 @@ Run the application and play around with it. ![DialogBoxes Iteration 3](assets/DialogBoxesIteration3.png) Congratulations! -You have successfully implemented a fully functional GUI for Duke! +You have successfully implemented a fully functional GUI for RoomShare! ## Exercises diff --git a/tutorials/javaFxTutorialPart4.md b/tutorials/javaFxTutorialPart4.md index 0e0ab280c4..176bec9432 100644 --- a/tutorials/javaFxTutorialPart4.md +++ b/tutorials/javaFxTutorialPart4.md @@ -29,7 +29,7 @@ FXML is a XML-based language that allows us to define our user interface. Proper The FXML snippet define a TextField similar to the one that we programmatically defined previous in Tutorial 2. Notice how concise FXML is compared to the plain Java version. -Let's return to Duke and convert it to use FXML instead. +Let's return to RoomShare and convert it to use FXML instead. # Rebuilding the Scene using FXML @@ -101,7 +101,7 @@ We will get to that later. ## Using Controllers -As part of the effort to separate the code handling Duke's logic and UI, let's _refactor_ the UI-related code to its own class. +As part of the effort to separate the code handling RoomShare's logic and UI, let's _refactor_ the UI-related code to its own class. We call these UI classes _controllers_. Let's implement the `MainWindow` controller class that we specified in `MainWindow.fxml`. @@ -128,7 +128,7 @@ public class MainWindow extends AnchorPane { @FXML private Button sendButton; - private Duke duke; + private RoomShare duke; private Image userImage = new Image(this.getClass().getResourceAsStream("/images/DaUser.png")); private Image dukeImage = new Image(this.getClass().getResourceAsStream("/images/DaDuke.png")); @@ -138,12 +138,12 @@ public class MainWindow extends AnchorPane { scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); } - public void setDuke(Duke d) { + public void setDuke(RoomShare d) { duke = d; } /** - * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * Creates two dialog boxes, one echoing user input and the other containing RoomShare's reply and then appends them to * the dialog container. Clears the user input after processing. */ @FXML @@ -168,7 +168,7 @@ Similarly, methods like private methods like `handleUserInput` can be used in FX ## Using FXML in our application -Let's create a new `Main` class as the bridge between the existing logic in `Duke` and the UI in `MainWindow`. +Let's create a new `Main` class as the bridge between the existing logic in `RoomShare` and the UI in `MainWindow`. **Main.java** ```java @@ -182,11 +182,11 @@ import javafx.scene.layout.AnchorPane; import javafx.stage.Stage; /** - * A GUI for Duke using FXML. + * A GUI for RoomShare using FXML. */ public class Main extends Application { - private Duke duke = new Duke(); + private RoomShare duke = new RoomShare(); @Override public void start(Stage stage) { diff --git a/tutorials/textUiTestingTutorial.md b/tutorials/textUiTestingTutorial.md index f397d76aef..e95f70f105 100644 --- a/tutorials/textUiTestingTutorial.md +++ b/tutorials/textUiTestingTutorial.md @@ -13,7 +13,7 @@ del ACTUAL.TXT REM compile the code into the bin folder - javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\Duke.java + javac -cp ..\src -Xlint:none -d ..\bin ..\src\main\java\RoomShare.java IF ERRORLEVEL 1 ( echo ********** BUILD FAILURE ********** exit /b 1 @@ -21,7 +21,7 @@ REM no error here, errorlevel == 0 REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT - java -classpath ..\bin Duke < input.txt > ACTUAL.TXT + java -classpath ..\bin RoomShare < input.txt > ACTUAL.TXT REM compare the output to the expected output FC ACTUAL.TXT EXPECTED.TXT @@ -44,14 +44,14 @@ fi # compile the code into the bin folder, terminates if error occurred - if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/Duke.java + if ! javac -cp ../src -Xlint:none -d ../bin ../src/main/java/RoomShare.java then echo "********** BUILD FAILURE **********" exit 1 fi # run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT - java -classpath ../bin Duke < input.txt > ACTUAL.TXT + java -classpath ../bin RoomShare < input.txt > ACTUAL.TXT # compare the output to the expected output diff ACTUAL.TXT EXPECTED.TXT From 3286e203395de78003b9525db8472c8ffc1afe72 Mon Sep 17 00:00:00 2001 From: TehZiHuai <42379576+TehZiHuai@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:23:18 +0800 Subject: [PATCH 070/251] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38094b4046..c61edd1da2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# DUKE - Your friendly personal assistant +# ROOMSHARE - Your friendly personal assistant --- ## Introduction From 5187baeb0673a402a5f5dd9aabbb46ed6d730ded Mon Sep 17 00:00:00 2001 From: benitokun123 <42372389+benitokun123@users.noreply.github.com> Date: Thu, 3 Oct 2019 22:31:54 +0800 Subject: [PATCH 071/251] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c61edd1da2..5cb5e4ae0c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ --- ## Introduction -* RoomShare is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With RoomShare, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. +* RoomShare is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other people sharing your house or apartment. With RoomShare, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to your housemates and many other functions. ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) From 7a6ddcf8b33bcfd6fc3305e071a2ec364c992979 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 23:04:10 +0800 Subject: [PATCH 072/251] minor bug fix to find operations --- src/main/java/Model_Classes/Task.java | 5 ----- src/main/java/Operations/RecurHandler.java | 2 +- src/main/java/Operations/TaskList.java | 2 +- src/main/java/RoomShare.java | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 00a1f235b1..0e14695d5a 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -25,13 +25,8 @@ public Task(String description) { } /** -<<<<<<< HEAD - * getter method for created. - * @return -======= * Returns String of the time Task was created * @return time the task was created ->>>>>>> 61c92d7e89f193fc9fa8bb610b519e673aaa8909 */ public String getCreated() { return this.created; diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index c08fa1b468..7946e9ee52 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -125,7 +125,7 @@ public void findRecurring(String key) { ui.showListRecur(); int queryCount = 1; for (Task query : TaskList.currentList()) { - if (query.toString().toLowerCase().contains(key) && query.toString().contains(RECURRENCE_SYMBOL)) { + if (query.toString().toLowerCase().contains(key.trim()) && query.toString().contains(RECURRENCE_SYMBOL)) { // task contains the keyword and is a recurring task. System.out.println("\t" + queryCount + ". " + query.toString()); } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 8d15c20b9e..05def8cf6b 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -81,7 +81,7 @@ public void done(int index) throws RoomShareException { public void find (String key) { int queryCount = 1; for (Task query : tasks) { - if (query.toString().toLowerCase().contains(key)) { + if (query.toString().toLowerCase().contains(key.trim())) { System.out.println(" " + queryCount + ". " + query.toString()); } queryCount += 1; diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index 2cda4d5322..a4308f55ce 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -101,7 +101,7 @@ public void run() { case find: ui.showFind(); - taskList.find(parser.getKey()); + taskList.find(parser.getKey().toLowerCase()); break; case todo: From dba90cc8441ae680a3121cba212ee65564fe1005 Mon Sep 17 00:00:00 2001 From: TehZiHuai <42379576+TehZiHuai@users.noreply.github.com> Date: Thu, 3 Oct 2019 23:17:10 +0800 Subject: [PATCH 073/251] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 5cb5e4ae0c..9a5c9127c8 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,12 @@ ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) +## Features +* Roomshare allows you to add tasks into a task list, and track their progress. +* Supports adding and deleting tasks +* RoomShare will also help to check if some of your time sensitive tasks have overlap, to prevent you from scheduling clashing events +* Look for tasks with the in built search +* Once you're done with the task, just mark it as done! +* Also supports recurring tasks, so you won't need to manually add the same tasks everytime! + +## Roomshare helps you to organise your tasks, so you can keep your mind on things that matter more! From 11f1373699f7e3e3a5130e8010d82189f2297c6f Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 3 Oct 2019 23:22:30 +0800 Subject: [PATCH 074/251] jar file for v1.1 --- duke-0.1.3.jar | Bin 0 -> 37249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 duke-0.1.3.jar diff --git a/duke-0.1.3.jar b/duke-0.1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..d50588dd791ee93f64d3717ec3a78f72d5140d41 GIT binary patch literal 37249 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

    $63QC8S4MaX!fbM3A7pJS(=k8Xy)OO8- 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 Date: Fri, 4 Oct 2019 14:05:46 +0800 Subject: [PATCH 075/251] Started implementing priority system --- src/main/java/Enums/Priority.java | 5 ++++ src/main/java/Enums/TaskType.java | 2 +- src/main/java/Model_Classes/Task.java | 10 +++++++ src/main/java/Operations/Parser.java | 8 ++++++ src/main/java/Operations/TaskList.java | 37 ++++++++++++++++++++++++++ src/main/java/Operations/Ui.java | 9 +++++++ src/main/java/RoomShare.java | 12 +++++++++ 7 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Enums/Priority.java diff --git a/src/main/java/Enums/Priority.java b/src/main/java/Enums/Priority.java new file mode 100644 index 0000000000..db7a0b0976 --- /dev/null +++ b/src/main/java/Enums/Priority.java @@ -0,0 +1,5 @@ +package Enums; + +public enum Priority { + high, medium, low +} diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 6dea060b68..d81134d43a 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority } diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 0e14695d5a..00e6ea770b 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; @@ -11,6 +13,7 @@ public class Task{ private String description; private boolean isDone; private String created; + private Priority priority; /** * Constructor for the task object. takes in the description of the task @@ -22,6 +25,7 @@ public Task(String description) { DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); LocalDateTime now = LocalDateTime.now(); this.created = now.format(dateTimeFormatterNow); + this.priority = Priority.low; } /** @@ -55,6 +59,12 @@ public String getDescription() { return description; } + /** + * Returns the priority of the task + * @return priority of the task + */ + public Priority getPriority() { return priority; } + /** * Sets the task to be done */ diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index a301cecd86..c197bb66ee 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -122,4 +122,12 @@ public ReplyType getReply() { return ReplyType.valueOf(temp); } + /** + * Returns the index of the task and priority the user wants to set it to + * @return the index and priority of the task the user wants to set + */ + public String[] getPriority() { + return scanner.nextLine().trim().split(" ", 2); + } + } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 05def8cf6b..232de00799 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -2,10 +2,13 @@ import CustomExceptions.RoomShareException; import Enums.ExceptionType; +import Enums.Priority; import Model_Classes.Task; import Model_Classes.ToDo; import java.util.ArrayList; +import java.util.Comparator; + import Enums.TimeUnit; /** @@ -132,4 +135,38 @@ public void snooze (int index, int amount, TimeUnit timeUnit){ break; } } + + /** + * Sets priority of task + */ + public void setPriority(String[] info) { + int index = Integer.parseInt(info[0]); + Priority priority = Priority.valueOf(info[1]); + //tasks.get() + } + + /** + * Sorts the list based on priority + */ + public void sortPriority() { + tasks.sort(new Comparator<>() { + @Override + public int compare(Task task1, Task task2) { + return Integer.compare(getValue(task1), getValue(task2)); + } + + public int getValue(Task t) { + if (t.getPriority().equals(Priority.high)) { + return 2; + } else if (t.getPriority().equals(Priority.medium)) { + return 1; + } else { + return 0; + } + } + }); + + + } + } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 8e32322e81..04d316cdad 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -217,4 +217,13 @@ public void promptForTime() { public void showTimeError(){ System.out.println("Please indicate a valid amount of time"); } + + /** + * Provides user with instructions to prioritise task + */ + public void priority() { + System.out.println("Enter task index followed by priority (high, medium, low)"); + System.out.println("\te.g. 1 high"); + } + } diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index a4308f55ce..c70149dc58 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -104,6 +104,18 @@ public void run() { taskList.find(parser.getKey().toLowerCase()); break; + case priority: + try { + taskList.list(); + ui.priority(); + taskList.setPriority(parser.getPriority()); + } catch (RoomShareException e) { + e.printStackTrace(); + } finally { + taskList.sortPriority(); + } + break; + case todo: try { ui.showAdd(); From a246a4caf2650af980a1afb840584f684fd8f059 Mon Sep 17 00:00:00 2001 From: MeatyFresh Date: Fri, 4 Oct 2019 12:25:01 +0100 Subject: [PATCH 076/251] Convert profile images to png They have been renamed to the GitHub Username. I have also resized them down to 230px x 230px for consistency. --- docs/images/Harry.jpg | Bin 51330 -> 0 bytes docs/images/Ryan.jpg | Bin 35565 -> 0 bytes docs/images/TehZiHuai.png | Bin 0 -> 73954 bytes docs/images/ZiHuai.jpg | Bin 59738 -> 0 bytes docs/images/benitokun123.png | Bin 0 -> 63746 bytes docs/images/caleb.jpg | Bin 35679 -> 0 bytes docs/images/calebtay.png | Bin 0 -> 65967 bytes docs/images/tyeryan.png | Bin 0 -> 6142 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/Harry.jpg delete mode 100644 docs/images/Ryan.jpg create mode 100644 docs/images/TehZiHuai.png delete mode 100644 docs/images/ZiHuai.jpg create mode 100644 docs/images/benitokun123.png delete mode 100644 docs/images/caleb.jpg create mode 100644 docs/images/calebtay.png create mode 100644 docs/images/tyeryan.png diff --git a/docs/images/Harry.jpg b/docs/images/Harry.jpg deleted file mode 100644 index 425b9ab3f81abbbe80b7484a1c188bbaf4a42af8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51330 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

    A~UqNFPO3Gmz-^d7x2r-g5V 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%0Dtv6? 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 PW1SFzscx@(bac$X1*P*@`PM*w!)>#H-A=nb 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%0ArTrLN*x+ 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 THbg9+00000NkvXXu0mjfnZifa literal 0 HcmV?d00001 diff --git a/docs/images/caleb.jpg b/docs/images/caleb.jpg deleted file mode 100644 index 2b4079cdc0e6f0956988ed272e7ef50f35a2c094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35679 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 E*-AY>vH$=8 diff --git a/docs/images/calebtay.png b/docs/images/calebtay.png new file mode 100644 index 0000000000000000000000000000000000000000..856c045d7c7d486432a9f13f75ec3bd73e59b9be GIT binary patch literal 65967 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μ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 literal 0 HcmV?d00001 diff --git a/docs/images/tyeryan.png b/docs/images/tyeryan.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b260d06895963db7a701e5ca694fb5ef9e263b GIT binary patch literal 6142 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 F{{z?>yNUn+ literal 0 HcmV?d00001 From 533bac9a9e008c518a7b486340e10971660d4245 Mon Sep 17 00:00:00 2001 From: MeatyFresh Date: Fri, 4 Oct 2019 12:25:29 +0100 Subject: [PATCH 077/251] Update AboutUs.adoc to refer to new profile images --- docs/AboutUs.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc index 15c730652b..ed65fe7cda 100644 --- a/docs/AboutUs.adoc +++ b/docs/AboutUs.adoc @@ -11,7 +11,7 @@ We are a team based in the http://www.comp.nus.edu.sg[School of Computing, Natio == Project Team === Teh Zi Huai -image::ZiHuai.jpg[width="150", align="left"] +image::TehZiHuai.png[width="150", align="left"] {empty}[https://github.com/TehZiHuai[github]] [<>] Role: Team Lead + @@ -20,7 +20,7 @@ Responsibilities: UI ''' === Tay Tze-wei, Caleb -image::caleb.jpg[width="150", align="left"] +image::calebtay.png[width="150", align="left"] {empty}[https://github.com/calebtay[github]] [<>] Role: Developer + @@ -29,7 +29,7 @@ Responsibilities: Debugging ''' === Tay Ryan -image::Ryan.jpg[width="150", align="left"] +image::tyeryann.png[width="150", align="left"] {empty}[https://github.com/tyeryan[github]] [<>] Role: Developer + @@ -38,7 +38,7 @@ Responsibilities: Dev Ops + Data ''' === Tran Minh Duong (Harry) -image::Harry.jpg[width="150", align="left"] +image::benitokun123.png[width="150", align="left"] {empty}[https://github.com/benitokun123[github]] [<>] Role: Developer + From b256c43a81c616ce5c7a725365648d7a717db495 Mon Sep 17 00:00:00 2001 From: MeatyFresh Date: Fri, 4 Oct 2019 12:30:53 +0100 Subject: [PATCH 078/251] Correct username typo --- docs/AboutUs.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc index ed65fe7cda..11f054c31f 100644 --- a/docs/AboutUs.adoc +++ b/docs/AboutUs.adoc @@ -29,7 +29,7 @@ Responsibilities: Debugging ''' === Tay Ryan -image::tyeryann.png[width="150", align="left"] +image::tyeryan.png[width="150", align="left"] {empty}[https://github.com/tyeryan[github]] [<>] Role: Developer + From 1310f706b7ecacc5bd7f5e71492553f5a3030b70 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Fri, 4 Oct 2019 21:04:50 +0800 Subject: [PATCH 079/251] enable range base for delete and done --- src/main/java/Duke.java | 9 +++++---- src/main/java/Enums/TaskType.java | 2 +- src/main/java/Operations/Parser.java | 17 ++++++++++++++++- src/main/java/Operations/TaskList.java | 21 ++++++++++++++++----- src/main/java/Operations/Ui.java | 21 +++++++++++++++------ 5 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 46673cf062..9efbd51629 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -48,6 +48,7 @@ public Duke() throws DukeException { public void run() throws DukeException { boolean isExit = false; boolean isExitRecur = false; + boolean isBroadCastExit = false; while (!isExit) { String command = parser.getCommand(); TaskType type; @@ -82,19 +83,19 @@ public void run() throws DukeException { case done: try { + taskList.done(parser.getIndexRange()); ui.showDone(); - taskList.done(parser.getIndex()); - } catch (DukeException e) { + } catch (IndexOutOfBoundsException | NumberFormatException e) { ui.showIndexError(); } break; case delete: try { - int index = parser.getIndex(); + int index[] = parser.getIndexRange(); taskList.delete(index); ui.showDeleted(index); - } catch (DukeException e) { + } catch (IndexOutOfBoundsException | NumberFormatException e) { ui.showIndexError(); } break; diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 6dea060b68..8d578621a4 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help , broadcast } diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 9b1e983ee5..6206f6511a 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -33,7 +33,7 @@ public String getCommand() { } /** - * Returns the index number requested by the user for commands like 'done' and 'deleted' + * Returns the index number requested by the user for commands like 'snooze' * @return index Index the user wishes to perform operations on. */ public Integer getIndex() { @@ -42,6 +42,21 @@ public Integer getIndex() { return index; } + /** + * Return a single index number or a range of index number requested by users for command 'done' and 'delete' + * @return a single index or a range of index + */ + public int[] getIndexRange() { + String temp[] = scanner.nextLine().trim().split("-",2); + int[] index; + if (temp.length == 1) { + index = new int[]{Integer.parseInt(temp[0])}; + } + else + index = new int[]{Integer.parseInt(temp[0]), Integer.parseInt(temp[1])}; + return index; + } + /** * Returns the description the user inputs for tasks. Will not accept empty descriptions * @return temp The description that the user has specified for the task. Cannot be null. diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 76de26c55d..25e93b0151 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -37,10 +37,15 @@ public void add(Task newTask) { * @param index Index of task in the list to be deleted * @throws DukeException If the index cannot be found in the list of tasks. */ - public void delete(int index) throws DukeException { - tasks.remove(index - 1); + public void delete(int[] index) throws DukeException { + int[] idx = index.clone(); + if (idx.length == 1) + tasks.remove(idx[0] - 1); + else { + for (int i = idx[0]; idx[1] >= idx[0]; idx[1]--) + tasks.remove(i-1); + } } - /** * Lists out all tasks in the current list in the order they were added into the list. */ @@ -63,8 +68,14 @@ public void list() throws DukeException { * @param index Index of the task to be marked as done. * @throws DukeException If the index cannot be found in the list of tasks. */ - public void done(int index) throws DukeException{ - tasks.get(index - 1).setDone(); + public void done(int[] index) throws DukeException { + if (index.length == 1) + tasks.get(index[0] - 1).setDone(); + else { + for (int i = index[0]; i <= index[1]; i++){ + tasks.get(i - 1).setDone(); + } + } } /** diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 9e2ddc08a6..bef3a02011 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -40,11 +40,17 @@ public void showLoadError () { * Prints a message telling the user that the task at the index has been deleted. * @param index Index of task to be deleted. */ - public void showDeleted (int index) { - System.out.println("Deleted task number " + index + "!"); + public void showDeleted (int[] index) { + if (index.length == 1) + System.out.println("Deleted task number " + index[0] + "!"); + else + System.out.println("Deleted task number " + index[0] + " to " + index[1] + " !"); } - public void showDeletedRecur (int index) { - System.out.println("Deleted recurring task number " + index + "!"); + public void showDeletedRecur (int[] index) { + if (index.length == 1) + System.out.println("Deleted recurring task number " + index[0] + "!"); + else + System.out.println("Deleted recurring task number " + index[0] + " to " + index[1] + " !"); } /** * Tells the user that the search operation is executing @@ -206,13 +212,16 @@ public void promptForReply() { } - /* tells the user to input valid amount of time + // tells the user to input valid amount of time public void promptForTime() { System.out.println("Enter the amount of time"); } + + /** + * Tells the user to input valid amount of time */ - public void showTimeError(){ System.out.println("Please indicate a valid amount of time"); } + } From e4dc413391952aed4c948628cc106a6a226f61d7 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Fri, 4 Oct 2019 21:21:58 +0800 Subject: [PATCH 080/251] enable range base for delete and done --- src/main/java/Duke.java | 1 - src/main/java/Enums/TaskType.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 9efbd51629..46359221e4 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -48,7 +48,6 @@ public Duke() throws DukeException { public void run() throws DukeException { boolean isExit = false; boolean isExitRecur = false; - boolean isBroadCastExit = false; while (!isExit) { String command = parser.getCommand(); TaskType type; diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 8d578621a4..6dea060b68 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help , broadcast + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help } From 2d353e7b607d93ecb5c02f15d5daa6e479036f69 Mon Sep 17 00:00:00 2001 From: sprsadist Date: Sat, 5 Oct 2019 12:36:55 +0800 Subject: [PATCH 081/251] Added Priority System for tasks as well as save and load functions --- .../CustomExceptions/RoomShareException.java | 5 ++ src/main/java/Enums/ExceptionType.java | 2 +- src/main/java/Model_Classes/Deadline.java | 15 ++++++ src/main/java/Model_Classes/Event.java | 15 ++++++ .../java/Model_Classes/FixedDuration.java | 15 ++++++ .../java/Model_Classes/RecurringDeadline.java | 18 ++++++- .../java/Model_Classes/RecurringEvent.java | 18 ++++++- .../java/Model_Classes/RecurringToDo.java | 18 ++++++- src/main/java/Model_Classes/Task.java | 23 ++++++++ src/main/java/Model_Classes/ToDo.java | 12 +++++ src/main/java/Operations/Parser.java | 1 + src/main/java/Operations/Storage.java | 53 +++++++------------ src/main/java/Operations/TaskList.java | 41 +++++++++----- src/main/java/Operations/Ui.java | 5 ++ src/main/java/RoomShare.java | 9 +++- 15 files changed, 194 insertions(+), 56 deletions(-) diff --git a/src/main/java/CustomExceptions/RoomShareException.java b/src/main/java/CustomExceptions/RoomShareException.java index 0604872c86..356d1cd974 100644 --- a/src/main/java/CustomExceptions/RoomShareException.java +++ b/src/main/java/CustomExceptions/RoomShareException.java @@ -8,6 +8,7 @@ public class RoomShareException extends Exception { private static final String emptylist_Text = "List is empty"; private static final String timeclash_Text = "Time Clash Detected"; private static final String wrongFormat_Text = "Wrong Format Detected"; + private static final String wrongPriority_Text = "Wrong Priority Detected"; /** * Constructor for DukeException Exception @@ -32,6 +33,10 @@ public RoomShareException(ExceptionType type){ System.out.println(outOfBounds_Text); break; + case wrongPriority: + System.out.println(wrongPriority_Text); + break; + default: System.out.println(anomaly_Text); break; diff --git a/src/main/java/Enums/ExceptionType.java b/src/main/java/Enums/ExceptionType.java index c1b09ed2ef..9a635d6abe 100644 --- a/src/main/java/Enums/ExceptionType.java +++ b/src/main/java/Enums/ExceptionType.java @@ -1,5 +1,5 @@ package Enums; public enum ExceptionType { - timeClash, emptylist, wrongFormat, empty, outOfBounds + timeClash, emptylist, wrongFormat, empty, outOfBounds, wrongPriority } diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 682d100fd6..dfd3146bab 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.util.Date; /** @@ -20,6 +22,19 @@ public Deadline (String description, Date by) { this.by = by; } + /** + * Overload Constructor for the Deadline object. + * Takes in inputs for description and date/time the tasks should be done by. + * @param description Description of the task. + * @param by The time the tasks should be done by. + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public Deadline (String description, Date by, boolean done, Priority priority) { + super(description, done, priority); + this.by = by; + } + @Override public void snoozeYear(int amount) { this.by.setYear(this.by.getYear() + amount);; diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index f1c871d0f9..61aec1beb8 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.util.Date; /** * An object class representing types of tasks that are events. @@ -19,6 +21,19 @@ public Event(String description, Date at) { this.at = at; } + /** + * Overload Constructor for Event object + * Takes in inputs for description of the event and the time the event occurs + * @param description Description of the event + * @param at Time the event happens + * @param done Whether the task is completed + * @param priority Priority of the task. + */ + public Event(String description, Date at, boolean done, Priority priority) { + super(description, done, priority); + this.at = at; + } + /** * Returns date of Event * @return date of Event diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 7881da13ab..7374c24d3c 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.util.Date; public class FixedDuration extends Event { @@ -17,6 +19,19 @@ public FixedDuration(String description, Date at, int duration) { this.duration = duration; } + /** + * Overload constructor for fixed duration + * @param description Description of event + * @param at Date of event + * @param duration duration of event + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public FixedDuration(String description, Date at, int duration, boolean done, Priority priority) { + super(description, at, done, priority); + this.duration = duration; + } + /** * Returns duration * @return duration of event in DD/MM/YYYY format diff --git a/src/main/java/Model_Classes/RecurringDeadline.java b/src/main/java/Model_Classes/RecurringDeadline.java index 3301145754..e030c4c931 100644 --- a/src/main/java/Model_Classes/RecurringDeadline.java +++ b/src/main/java/Model_Classes/RecurringDeadline.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.util.Date; public class RecurringDeadline extends Deadline { @@ -7,7 +9,7 @@ public class RecurringDeadline extends Deadline { /** * Constructor for the RecurringDeadline object. * Takes in inputs for description and date/time the tasks should be done by. - * + * @param recurrence Frequency task is repeated * @param description Description of the task * @param by The time the tasks should be done by. */ @@ -16,6 +18,20 @@ public RecurringDeadline(String description, Date by, String recurrence) { this.recurrence = recurrence; } + /** + * Overload constructor for the RecurringDeadline object. + * Takes in inputs for description and date/time the tasks should be done by. + * @param recurrence Frequency task is repeated + * @param description Description of the task + * @param by The time the tasks should be done by. + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public RecurringDeadline(String description, Date by, String recurrence, Boolean done, Priority priority) { + super(description, by, done, priority); + this.recurrence = recurrence; + } + /** * Returns the full descriptor of the task * will show the type of task, whether it has been done, diff --git a/src/main/java/Model_Classes/RecurringEvent.java b/src/main/java/Model_Classes/RecurringEvent.java index d81399c8f2..5e4246b17c 100644 --- a/src/main/java/Model_Classes/RecurringEvent.java +++ b/src/main/java/Model_Classes/RecurringEvent.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + import java.util.Date; public class RecurringEvent extends Event { @@ -7,15 +9,27 @@ public class RecurringEvent extends Event { /** * Constructor for RecurringEvent object * Takes in inputs for description of the event and the time the event occurs - * + * @param recurrence Frequency task is repeated * @param description Description of the event - * @param at Time the event happens + * @param at Time the event happens */ public RecurringEvent(String description, Date at, String recurrence) { super(description, at); this.recurrence = recurrence; } + /** + * Overload constructor for RecurringEvent object + * Takes in inputs for description of the event and the time the event occurs + * @param recurrence Frequency task is repeated + * @param description Description of the event + * @param at Time the event happens + */ + public RecurringEvent(String description, Date at, String recurrence, boolean done, Priority priority) { + super(description, at, done, priority); + this.recurrence = recurrence; + } + /** * Returns the full descriptor of the task * will show the type of task, whether it has been done, diff --git a/src/main/java/Model_Classes/RecurringToDo.java b/src/main/java/Model_Classes/RecurringToDo.java index 6e5224fb86..818ad879b9 100644 --- a/src/main/java/Model_Classes/RecurringToDo.java +++ b/src/main/java/Model_Classes/RecurringToDo.java @@ -1,10 +1,12 @@ package Model_Classes; +import Enums.Priority; + public class RecurringToDo extends ToDo { private String recurrence; /** * Constructor of the RecurringTodo class. Takes in the description of the task - * + * @param recurrence Frequency task is repeated * @param description Description of the task. */ public RecurringToDo(String description, String recurrence) { @@ -12,6 +14,20 @@ public RecurringToDo(String description, String recurrence) { this.recurrence = recurrence; } + /** + * Overload constructor of the RecurringTodo class. Takes in the description of the task + * @param recurrence Frequency task is repeated + * @param description Description of the task. + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public RecurringToDo(String description, String recurrence, boolean done, Priority priority) { + super(description, done, priority); + this.recurrence = recurrence; + } + + + /** * Returns the full descriptor of the task * will show the type of task, whether it has been done, diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 00e6ea770b..36281e98c0 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -28,6 +28,21 @@ public Task(String description) { this.priority = Priority.low; } + /** + * Overload constructor for the task object. takes in the description of the task + * @param description Description of the task. + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public Task(String description, boolean done, Priority priority) { + this.description = description; + this.isDone = done; + DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + LocalDateTime now = LocalDateTime.now(); + this.created = now.format(dateTimeFormatterNow); + this.priority = priority; + } + /** * Returns String of the time Task was created * @return time the task was created @@ -79,6 +94,14 @@ public void setNotDone() { isDone = false; } + /** + * Sets the priority of the task + * @param p priority of the task + */ + public void setPriority(Priority p) { + priority = p; + } + /** * Returns both the status icon and the description of the task. * @return diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index 2f23d25867..a0d0ec6a05 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -1,5 +1,7 @@ package Model_Classes; +import Enums.Priority; + /** * An object class that stores the description of tasks that needs to be done with no deadline. */ @@ -12,6 +14,16 @@ public ToDo(String description) { super(description); } + /** + * Overload constructor of the class. Takes in the description of the task + * @param description Description of the task. + * @param done Whether the task is completed. + * @param priority Priority of the task. + */ + public ToDo(String description, boolean done, Priority priority) { + super(description, done, priority); + } + /** * Returns a string with the full description of the task * @return A string with the task type and its description. diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index c197bb66ee..d08c85072e 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -127,6 +127,7 @@ public ReplyType getReply() { * @return the index and priority of the task the user wants to set */ public String[] getPriority() { + String empty = scanner.nextLine(); return scanner.nextLine().trim().split(" ", 2); } diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index ce4d3eeab9..c0970e05e8 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -2,6 +2,7 @@ import CustomExceptions.RoomShareException; import Enums.ExceptionType; +import Enums.Priority; import Enums.SaveType; import Model_Classes.*; @@ -45,6 +46,8 @@ public ArrayList loadFile(String fileName) throws RoomShareException { for (String list : tempList) { String[] temp = list.split("#"); SaveType type; + Priority priority = Priority.valueOf(temp[2]); + boolean done = temp[1].equals("y"); try { type = SaveType.valueOf(temp[0]); } catch (IllegalArgumentException e) { @@ -53,62 +56,41 @@ public ArrayList loadFile(String fileName) throws RoomShareException { if (list.contains("#week") || list.contains("#day") || list.contains("#month")) { switch (type) { case T: - RecurringToDo tempToDo = new RecurringToDo(temp[2], temp[3]); - if (temp[1].equals("y")) { - tempToDo.setDone(); - } + RecurringToDo tempToDo = new RecurringToDo(temp[3], temp[4], done, priority); taskArrayList.add(tempToDo); break; case E: - Date by = parser.formatDate(temp[3]); - RecurringEvent tempEvent = new RecurringEvent(temp[2], by, temp[4]); - if (temp[1].equals("y")) { - tempEvent.setDone(); - } + Date by = parser.formatDate(temp[4]); + RecurringEvent tempEvent = new RecurringEvent(temp[3], by, temp[5], done, priority); taskArrayList.add(tempEvent); break; case D: - Date deadlineBy = parser.formatDate(temp[3]); - RecurringDeadline tempDeadline = new RecurringDeadline(temp[2], deadlineBy, temp[4]); - if (temp[1].equals("y")) { - tempDeadline.setDone(); - } + Date deadlineBy = parser.formatDate(temp[4]); + RecurringDeadline tempDeadline = new RecurringDeadline(temp[3], deadlineBy, temp[5], done, priority); taskArrayList.add(tempDeadline); break; } } else { switch (type) { case T: - ToDo tempToDo = new ToDo(temp[2]); - if (temp[1].equals("y")) { - tempToDo.setDone(); - } + ToDo tempToDo = new ToDo(temp[3], done, priority); taskArrayList.add(tempToDo); break; case E: - Date by = parser.formatDate(temp[3]); - if( temp.length == 5 ){ - FixedDuration tempEvent = new FixedDuration(temp[2], by, Integer.parseInt(temp[4])); - if (temp[1].equals("y")) { - tempEvent.setDone(); - } + Date by = parser.formatDate(temp[4]); + if( temp.length == 6 ){ + FixedDuration tempEvent = new FixedDuration(temp[3], by, Integer.parseInt(temp[5]), done, priority); taskArrayList.add(tempEvent); } else { - Event tempEvent = new Event(temp[2], by); - if (temp[1].equals("y")) { - tempEvent.setDone(); - } + Event tempEvent = new Event(temp[3], by, done, priority); taskArrayList.add(tempEvent); } break; case D: - Date deadlineBy = parser.formatDate(temp[3]); - Deadline tempDeadline = new Deadline(temp[2], deadlineBy); - if (temp[1].equals("y")) { - tempDeadline.setDone(); - } + Date deadlineBy = parser.formatDate(temp[4]); + Deadline tempDeadline = new Deadline(temp[3], deadlineBy, done, priority); taskArrayList.add(tempDeadline); break; default: @@ -137,14 +119,15 @@ public void writeFile(ArrayList list, String fileName) throws RoomShareExc for (Task s : list) { String done = s.getDone() ? "y" : "n"; String type = String.valueOf(s.toString().charAt(1)); + String priority = s.getPriority().name(); String description = s.getDescription(); String time = convertForStorage(s); if( s instanceof FixedDuration ){ String duration = Integer.toString(((FixedDuration) s).getDuration()); - String out = type + "#" + done + "#" + description + "#" + time + "#" + duration; + String out = type + "#" + done + "#" + priority + "#" + description + "#" + time + "#" + duration; writer.write(out); } else { - String out = type + "#" + done + "#" + description + "#" + time; + String out = type + "#" + done + "#" + priority + "#" + description + "#" + time; writer.write(out); } writer.newLine(); diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 232de00799..6d35d6dd5d 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -139,10 +139,33 @@ public void snooze (int index, int amount, TimeUnit timeUnit){ /** * Sets priority of task */ - public void setPriority(String[] info) { - int index = Integer.parseInt(info[0]); - Priority priority = Priority.valueOf(info[1]); - //tasks.get() + public void setPriority(String[] info) throws RoomShareException { + try { + int index = Integer.parseInt(info[0]) - 1; + Priority priority = Priority.valueOf(info[1]); + tasks.get(index).setPriority(priority); + } catch (IllegalArgumentException a) { + throw new RoomShareException(ExceptionType.wrongPriority); + } catch (IndexOutOfBoundsException i) { + throw new RoomShareException(ExceptionType.outOfBounds); + } + + } + + /** + * Returns priority of the task in the form of an integer + * high = 0, medium = 1, low = 2 + * @param t task in which we are checking the value of + * @return integer value of the task's priority + */ + public int getValue(Task t) { + if (t.getPriority().equals(Priority.high)) { + return 0; + } else if (t.getPriority().equals(Priority.medium)) { + return 1; + } else { + return 2; + } } /** @@ -154,16 +177,6 @@ public void sortPriority() { public int compare(Task task1, Task task2) { return Integer.compare(getValue(task1), getValue(task2)); } - - public int getValue(Task t) { - if (t.getPriority().equals(Priority.high)) { - return 2; - } else if (t.getPriority().equals(Priority.medium)) { - return 1; - } else { - return 0; - } - } }); diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 04d316cdad..5282eb78bb 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -226,4 +226,9 @@ public void priority() { System.out.println("\te.g. 1 high"); } + /** + * Notifies the user that their task's priority has been set + */ + public void prioritySet() { System.out.println("Your task's priority has been set"); } + } diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index c70149dc58..ef02f94a40 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -105,14 +105,19 @@ public void run() { break; case priority: + boolean success = true; try { taskList.list(); ui.priority(); taskList.setPriority(parser.getPriority()); } catch (RoomShareException e) { - e.printStackTrace(); + success = false; + ui.priority(); } finally { - taskList.sortPriority(); + if(success) { + taskList.sortPriority(); + ui.prioritySet(); + } } break; From 6549b67f553d4e57533a0e0f55f8f32ad1f4d6ec Mon Sep 17 00:00:00 2001 From: benitokun123 <42372389+benitokun123@users.noreply.github.com> Date: Tue, 8 Oct 2019 11:35:29 +0800 Subject: [PATCH 082/251] Update README.md --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f6bcf905d6..9a5c9127c8 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,18 @@ -# DUKE - Your friendly personal assistant +# ROOMSHARE - Your friendly personal assistant --- ## Introduction -* Duke is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other users you may know. With Duke, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to other users and many other functions. +* RoomShare is personal assistant software in the form of Command Line Interface (CLI). It is designed for you to keep track of your daily tasks and other people sharing your house or apartment. With RoomShare, your can group your tasks into different categories, assign their priorities, mark tasks to be informed to your housemates and many other functions. ![](https://github.com/AY1920S1-CS2113T-F14-3/main/blob/master/ui-mockup.png) +## Features +* Roomshare allows you to add tasks into a task list, and track their progress. +* Supports adding and deleting tasks +* RoomShare will also help to check if some of your time sensitive tasks have overlap, to prevent you from scheduling clashing events +* Look for tasks with the in built search +* Once you're done with the task, just mark it as done! +* Also supports recurring tasks, so you won't need to manually add the same tasks everytime! + +## Roomshare helps you to organise your tasks, so you can keep your mind on things that matter more! From 48c716079ab34ba1b68a00439bb009d59447db7b Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Thu, 10 Oct 2019 10:25:06 +0800 Subject: [PATCH 083/251] Added Reorder function --- src/main/java/Enums/TaskType.java | 2 +- src/main/java/Operations/Parser.java | 2 +- src/main/java/Operations/Storage.java | 7 ++++++- src/main/java/Operations/TaskList.java | 21 ++++++++++++--------- src/main/java/Operations/Ui.java | 8 ++++++++ src/main/java/RoomShare.java | 8 ++++++++ 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index d81134d43a..5a320f2a87 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder } diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index d08c85072e..17da0c8269 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -39,7 +39,7 @@ public String getCommand() { */ public Integer getIndex() { String temp = scanner.nextLine().trim(); - int index = Integer.parseInt(temp); + int index = Integer.parseInt(temp) - 1; return index; } diff --git a/src/main/java/Operations/Storage.java b/src/main/java/Operations/Storage.java index c0970e05e8..daa3e434b3 100644 --- a/src/main/java/Operations/Storage.java +++ b/src/main/java/Operations/Storage.java @@ -46,7 +46,12 @@ public ArrayList loadFile(String fileName) throws RoomShareException { for (String list : tempList) { String[] temp = list.split("#"); SaveType type; - Priority priority = Priority.valueOf(temp[2]); + Priority priority = null; + try { + priority = Priority.valueOf(temp[2]); + } catch (IllegalArgumentException e) { + priority = Priority.low; + } boolean done = temp[1].equals("y"); try { type = SaveType.valueOf(temp[0]); diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 6d35d6dd5d..b93b42005e 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -7,6 +7,7 @@ import Model_Classes.ToDo; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import Enums.TimeUnit; @@ -44,7 +45,7 @@ public void delete(int index) throws RoomShareException { if (index < 0 || index > tasks.size()) { throw new RoomShareException(ExceptionType.outOfBounds); } - tasks.remove(index - 1); + tasks.remove(index); } /** @@ -73,7 +74,7 @@ public void done(int index) throws RoomShareException { if (index < 0 || index > tasks.size()) { throw new RoomShareException(ExceptionType.outOfBounds); } - tasks.get(index - 1).setDone(); + tasks.get(index).setDone(); } /** @@ -113,25 +114,25 @@ public void replace(int index, Task replacement) { * @param timeUnit unit for snooze time: year, month, day, hour, minute */ public void snooze (int index, int amount, TimeUnit timeUnit){ - if (tasks.get(index - 1) instanceof ToDo){ + if (tasks.get(index) instanceof ToDo){ System.out.println("Todo cannot be snoozed"); return; } switch (timeUnit) { case year: - tasks.get(index - 1).snoozeYear(amount); + tasks.get(index).snoozeYear(amount); break; case month: - tasks.get(index - 1).snoozeMonth(amount); + tasks.get(index).snoozeMonth(amount); break; case day: - tasks.get(index - 1).snoozeDay(amount); + tasks.get(index).snoozeDay(amount); break; case hours: - tasks.get(index - 1).snoozeHour(amount); + tasks.get(index).snoozeHour(amount); break; case minutes: - tasks.get(index - 1).snoozeMinute(amount); + tasks.get(index).snoozeMinute(amount); break; } } @@ -178,8 +179,10 @@ public int compare(Task task1, Task task2) { return Integer.compare(getValue(task1), getValue(task2)); } }); + } - + public void reorder(int first, int second) { + Collections.swap(tasks, first, second); } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 5282eb78bb..eb096598ad 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -50,6 +50,7 @@ public void showLoadError () { * @param index Index of task to be deleted. */ public void showDeleted (int index) { + index += 1; System.out.println("Deleted task number " + index + "!"); } @@ -231,4 +232,11 @@ public void priority() { */ public void prioritySet() { System.out.println("Your task's priority has been set"); } + public void promptSecondIndex() { + System.out.println("Please enter the index to swap to"); + } + + public void showReordering() { + System.out.println("Reordering the task list..."); + } } diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index ef02f94a40..c503c0008e 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -254,6 +254,14 @@ public void run() { } break; + case reorder: + int firstIndex = parser.getIndex(); + ui.promptSecondIndex(); + int secondIndex = parser.getIndex(); + ui.showReordering(); + taskList.reorder(firstIndex, secondIndex); + break; + default: ui.showCommandError(); break; From 8e649828587995af8e7c659a90484fde916866ce Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Thu, 10 Oct 2019 18:02:31 +0800 Subject: [PATCH 084/251] Changed formatting --- src/main/java/CustomExceptions/DukeException.java | 2 ++ src/main/java/Duke.java | 7 ++++--- src/main/java/Operations/Parser.java | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/CustomExceptions/DukeException.java b/src/main/java/CustomExceptions/DukeException.java index 6441a70b06..ff833e1f93 100644 --- a/src/main/java/CustomExceptions/DukeException.java +++ b/src/main/java/CustomExceptions/DukeException.java @@ -32,4 +32,6 @@ public DukeException(ExceptionType type){ break; } } + + } diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index 46673cf062..8c02fed7db 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -12,6 +12,8 @@ * main class of the Duke program */ public class Duke { + public static final int HOURS = 1000 * 60 * 60; + public static final int MINUTES = 1000 * 60; private Ui ui; private Storage storage; private TaskList taskList; @@ -144,7 +146,6 @@ public void run() throws DukeException { case yes: ui.promptForDuration(); TimeUnit timeUnit = parser.getTimeUnit(); - ui.promptForTime(); int duration = parser.getAmount(); FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); @@ -165,10 +166,10 @@ public void run() { RemindTask rt = new RemindTask(); switch (timeUnit) { case hours: - timer.schedule(rt, duration * 1000 * 60 * 60); + timer.schedule(rt, duration * HOURS); break; case minutes: - timer.schedule(rt, duration * 1000 * 60); + timer.schedule(rt, duration * MINUTES); break; } ui.showAdd(); diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 9b1e983ee5..8aaa2b6533 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -7,6 +7,7 @@ import java.util.Date; import java.util.Scanner; +import Enums.ExceptionType; import Enums.ReplyType; import Enums.TimeUnit; @@ -50,7 +51,7 @@ public Integer getIndex() { public String getDescription() throws DukeException { String temp = scanner.nextLine().trim(); if (temp.equals("")) { - throw new DukeException(); + throw new DukeException(ExceptionType.emptylist); } return temp; } @@ -101,7 +102,7 @@ public Date formatDate(String by) throws DukeException{ try { return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(by); } catch (ParseException e) { - throw new DukeException(); + throw new DukeException(ExceptionType.wrongFormat); } } From e86688dd8bd3b42308789f9dc3bae1560c85a988 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Thu, 10 Oct 2019 22:20:12 +0800 Subject: [PATCH 085/251] Add temporary storage for deleted tasks --- TeamProject.iws | 10 +++++++++- src/main/java/Operations/TaskList.java | 6 ++++-- src/main/java/Operations/Ui.java | 4 ++-- src/main/java/RoomShare.java | 3 ++- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/TeamProject.iws b/TeamProject.iws index 55da9f84fc..0dc4ccd530 100644 --- a/TeamProject.iws +++ b/TeamProject.iws @@ -29,7 +29,7 @@ - + + + + diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 0f53915993..9d03f56c24 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -41,19 +41,21 @@ public void add(Task newTask) { * @param index Index of task in the list to be deleted * @throws RoomShareException If the index cannot be found in the list of tasks. */ - public void delete(int[] index) throws RoomShareException { + public void delete(int[] index, TaskList deletedList) throws RoomShareException { int[] idx = index.clone(); if (idx.length == 1) { if (idx[0] < 0 || idx[0] >= tasks.size()) { throw new RoomShareException(ExceptionType.outOfBounds); } - tasks.remove(idx[0]); + deletedList.add(tasks.get(idx[0])); + tasks.remove(idx[0]); } else { for (int i = idx[0]; idx[1] >= idx[0]; idx[1]--) { if (i < 0 || i >= tasks.size()) { throw new RoomShareException(ExceptionType.outOfBounds); } + deletedList.add(tasks.get(i)); tasks.remove(i); } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 96a04aea80..d2b050caf1 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -52,9 +52,9 @@ public void showLoadError () { public void showDeleted (int[] index) { if (index.length == 1) - System.out.println("Deleted task number " + index[0] + "!"); + System.out.println("Deleted task number " + (index[0] + 1) + "!"); else - System.out.println("Deleted task number " + index[0] + " to " + index[1] + " !"); + System.out.println("Deleted task number " + (index[0] + 1) + " to " + (index[1] + 1) + " !"); } /** * Tells the user that the search operation is executing diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index 5e13cc3023..eb24e17bf6 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -15,6 +15,7 @@ public class RoomShare { private Ui ui; private Storage storage; private TaskList taskList; + private TaskList deletedList = new TaskList(new ArrayList<>()); private Parser parser; private RecurHandler recurHandler; @@ -92,7 +93,7 @@ public void run() { case delete: try { int index[] = parser.getIndexRange(); - taskList.delete(index); + taskList.delete(index, deletedList); ui.showDeleted(index); } catch (RoomShareException e) { ui.showIndexError(); From 86c0e68c366d95f6e15529a92bf4094f18e0fdb3 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Fri, 11 Oct 2019 15:38:49 +0800 Subject: [PATCH 086/251] minor fix to Ui flow --- build.gradle | 2 +- src/main/java/Operations/Parser.java | 4 ++-- src/main/java/Operations/Ui.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 4f521833b4..2b6d7e0dd9 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ shadowJar { application { // Change this to your main class. - mainClassName = "Duke" + mainClassName = "RoomShare" } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.5.0' diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index f866d8861f..73e2afc7db 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -51,10 +51,10 @@ public int[] getIndexRange() { String temp[] = scanner.nextLine().trim().split("-",2); int[] index; if (temp.length == 1) { - index = new int[]{Integer.parseInt(temp[0]) - 1}; + index = new int[]{Integer.parseInt(temp[0].trim()) - 1}; } else - index = new int[]{Integer.parseInt(temp[0]) - 1, Integer.parseInt(temp[1]) - 1}; + index = new int[]{Integer.parseInt(temp[0].trim()) - 1, Integer.parseInt(temp[1].trim()) - 1}; return index; } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 96a04aea80..d2b050caf1 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -52,9 +52,9 @@ public void showLoadError () { public void showDeleted (int[] index) { if (index.length == 1) - System.out.println("Deleted task number " + index[0] + "!"); + System.out.println("Deleted task number " + (index[0] + 1) + "!"); else - System.out.println("Deleted task number " + index[0] + " to " + index[1] + " !"); + System.out.println("Deleted task number " + (index[0] + 1) + " to " + (index[1] + 1) + " !"); } /** * Tells the user that the search operation is executing From 8b2555922379256f7bb8d0fbbbef0b6a0166cfe3 Mon Sep 17 00:00:00 2001 From: TehZiHuai Date: Fri, 11 Oct 2019 16:34:36 +0800 Subject: [PATCH 087/251] Added a HelpMode to explain the functions better Added a Mode package Refactored Recurring tasks into a mode called RecurringMode --- src/main/java/Enums/HelpType.java | 5 ++ src/main/java/Enums/TaskType.java | 2 +- src/main/java/Modes/HelpMode.java | 72 +++++++++++++++++++++ src/main/java/Modes/RecurringMode.java | 49 +++++++++++++++ src/main/java/Operations/Parser.java | 5 ++ src/main/java/Operations/Ui.java | 86 +++++++++++++++++++++++--- src/main/java/RoomShare.java | 37 ++--------- 7 files changed, 217 insertions(+), 39 deletions(-) create mode 100644 src/main/java/Enums/HelpType.java create mode 100644 src/main/java/Modes/HelpMode.java create mode 100644 src/main/java/Modes/RecurringMode.java diff --git a/src/main/java/Enums/HelpType.java b/src/main/java/Enums/HelpType.java new file mode 100644 index 0000000000..0a79404b55 --- /dev/null +++ b/src/main/java/Enums/HelpType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum HelpType { + list, bye, find, done , delete, todo, deadline, event, recur, snooze, others, priority, reorder, exit +} diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 5a320f2a87..98f2cd6880 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder + list, bye, find, done , delete, todo, deadline, event, recur, time, snooze, others, help, priority, reorder } diff --git a/src/main/java/Modes/HelpMode.java b/src/main/java/Modes/HelpMode.java new file mode 100644 index 0000000000..eb62fbc6a3 --- /dev/null +++ b/src/main/java/Modes/HelpMode.java @@ -0,0 +1,72 @@ +package Modes; + +import Enums.HelpType; +import Operations.Parser; +import Operations.Ui; + +public class HelpMode { + private Ui ui = new Ui(); + private Parser parser = new Parser(); + + public HelpMode() { + } + + public void run() { + ui.help(); + boolean isExit = false; + while (!isExit) { + String temp = parser.getCommandLine(); + HelpType helpType; + try { + helpType = HelpType.valueOf(temp); + } catch (IllegalArgumentException e) { + helpType = HelpType.others; + } + switch (helpType) { + case bye: + ui.explainBye(); + break; + case done: + ui.explainDone(); + break; + case find: + ui.explainFind(); + break; + case list: + ui.explainList(); + break; + case todo: + ui.explainToDo(); + break; + case event: + ui.explainEvent(); + break; + case deadline: + ui.explainDeadline(); + break; + case recur: + ui.explainRecur(); + break; + case delete: + ui.explainDelete(); + break; + case snooze: + ui.explainSnooze(); + break; + case reorder: + ui.explainReorder(); + break; + case priority: + ui.explainPriority(); + break; + case exit: + isExit = true; + System.out.println("You have quit help mode!"); + break; + default: + ui.showCommandError(); + break; + } + } + } +} diff --git a/src/main/java/Modes/RecurringMode.java b/src/main/java/Modes/RecurringMode.java new file mode 100644 index 0000000000..692cc147ff --- /dev/null +++ b/src/main/java/Modes/RecurringMode.java @@ -0,0 +1,49 @@ +package Modes; + +import Enums.RecurTaskType; +import Operations.Parser; +import Operations.RecurHandler; +import Operations.TaskList; +import Operations.Ui; + +public class RecurringMode { + private TaskList taskList; + private Ui ui = new Ui(); + private Parser parser = new Parser(); + private RecurHandler recurHandler; + public RecurringMode(TaskList taskList) { + this.taskList = taskList; + } + public void run() { + boolean isExit = false; + recurHandler = new RecurHandler(taskList); + ui.promptRecurringActions(); + while (!isExit) { + String temp = parser.getCommand(); + RecurTaskType recurType; + try { + recurType = RecurTaskType.valueOf(temp); + } catch (IllegalArgumentException e) { + recurType = RecurTaskType.others; + } + switch (recurType) { + case list: + recurHandler.listRecurring(); + break; + case find: + recurHandler.findRecurring(parser.getKey()); + break; + case exit: + isExit = true; + ui.showExit(); + break; + case add: + recurHandler.addBasedOnOperation(); + break; + default: + ui.showCommandError(); + break; + } + } + } +} diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 73e2afc7db..58a0ed1054 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -33,6 +33,11 @@ public String getCommand() { return command; } + public String getCommandLine() { + String command = scanner.nextLine().toLowerCase().trim(); + return command; + } + /** * Returns the index number requested by the user for commands like 'snooze' * @return index Index the user wishes to perform operations on. diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index d2b050caf1..616b4def6b 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -34,6 +34,8 @@ public void startUp() { } public void help() { + System.out.println("Enter any of the commands below to see the detailed information on how to use them"); + System.out.println("Input 'exit' to leave help mode"); System.out.println("List of Commands:\n" + "todo\n" + "deadline\n" + "event\n" + "recur\n" + "snooze\n" + "list\n" + "done\n" + "find\n" + "bye" ); } @@ -168,12 +170,12 @@ public void promptForRecurrence() { */ public void promptForTask() { System.out.println("now enter your desired task as usual!"); - System.out.println("\tE.g : todo buy groceries#monday"); - System.out.println("\tE.g : todo buy groceries#month"); - System.out.println("\tE.g : deadline homework 22/12/2019 18:00#monday"); - System.out.println("\tE.g : deadline homework 22/12/2019 18:00#month"); - System.out.println("\tE.g : event meeting 22/12/2019 18:00#monday"); - System.out.println("\tE.g : event meeting 22/12/2019 18:00#month\n"); + System.out.println("\tE.g : todo buy groceries"); + System.out.println("\tE.g : todo buy groceries"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00"); + System.out.println("\tE.g : deadline homework 22/12/2019 18:00"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00"); + System.out.println("\tE.g : event meeting 22/12/2019 18:00"); } /** @@ -244,4 +246,74 @@ public void showReordering() { System.out.println("Reordering the task list..."); } -} + public void explainBye() { + System.out.println("Entering 'bye' will exit RoomShare and save all your data"); + System.out.println("\te.g : bye"); + } + public void explainList() { + System.out.println("Entering list will cause RoomShare to list out all the existing tasks in the task list"); + System.out.println("\te.g : list"); + } + + public void explainDelete() { + System.out.println("Deletes the tasks in the specific indices from the task list"); + System.out.println("\te.g : delete 1"); + System.out.println("\te.g : 'delete 1 - 2'"); + } + + public void explainFind() { + System.out.println("Searches the current task list for any tasks that contain the input keyword"); + System.out.println("\te.g : find homework"); + System.out.println("\te.g : find math quiz"); + } + + public void explainDone() { + System.out.println("Sets the tasks in the specific indices as done"); + System.out.println("\te.g : done 1"); + System.out.println("\te.g : 'done 1 - 2'"); + } + + public void explainToDo() { + System.out.println("Adds a ToDo task into RoomShare"); + System.out.println("Requires you to have a task description"); + System.out.println("\te.g : todo homework"); + } + + public void explainDeadline() { + System.out.println("Adds a Deadline task into RoomShare"); + System.out.println("Requires you to have a task description and deadline"); + System.out.println("The description must be separated from the deadline by a '/'"); + System.out.println("The time format must be of dd/MM/yyyy HH:mm"); + System.out.println("\te.g : deadline math assignment/22/12/2019 18:00"); + } + + public void explainEvent() { + System.out.println("Adds an Event task into RoomShare"); + System.out.println("Requires you to have a task description and happening time"); + System.out.println("The description must be separated from the time by a '/'"); + System.out.println("The time format must be of dd/MM/yyyy HH:mm"); + System.out.println("\te.g : event market sale/22/12/2019 18:00"); + System.out.println("Will also ask if event has fixed duration to start creation of fixed duration tasks"); + } + + public void explainRecur() { + System.out.println("brings RoomShare into the Recurring tasks mode where you can add recurring tasks"); + System.out.println("\te.g : recur"); + } + + public void explainSnooze() { + System.out.println("Snoozes the task specified for a set amount of time"); + System.out.println("\te.g : snooze 1"); + } + + public void explainPriority() { + System.out.println("Allows you to set the priority of the task"); + System.out.println("Input 'priority' to start the process of setting priority"); + } + + public void explainReorder() { + System.out.println("Swaps the tasks with a specified index"); + System.out.println("\te.g : reorder 1"); + System.out.println("RoomShare will prompt you to input a new index to swap the task to"); + } +} \ No newline at end of file diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index eb24e17bf6..bb12ab4d1b 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -1,6 +1,8 @@ import CustomExceptions.RoomShareException; import Enums.*; import Model_Classes.*; +import Modes.HelpMode; +import Modes.RecurringMode; import Operations.*; import java.util.ArrayList; @@ -48,7 +50,6 @@ public RoomShare() throws RoomShareException { */ public void run() { boolean isExit = false; - boolean isExitRecur = false; while (!isExit) { String command = parser.getCommand(); TaskType type; @@ -59,7 +60,8 @@ public void run() { } switch (type) { case help: - ui.help(); + HelpMode helpMode = new HelpMode(); + helpMode.run(); break; case list: @@ -205,35 +207,8 @@ public void run() { break; case recur: - ui.promptRecurringActions(); - while (!isExitRecur) { - String temp = parser.getCommand(); - RecurTaskType recurType; - try { - recurType = RecurTaskType.valueOf(temp); - } catch (IllegalArgumentException e) { - recurType = RecurTaskType.others; - } - switch (recurType) { - case list: - recurHandler.listRecurring(); - break; - case find: - recurHandler.findRecurring(parser.getKey()); - break; - case exit: - isExitRecur = true; - ui.showExit(); - break; - case add: - recurHandler.addBasedOnOperation(); - break; - default: - ui.showCommandError(); - break; - } - } - isExitRecur = false; + RecurringMode recurringMode = new RecurringMode(taskList); + recurringMode.run(); break; From c53b9f19f98d15122903a4bcb7fb7e6428447d98 Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Sat, 12 Oct 2019 13:45:04 +0800 Subject: [PATCH 088/251] Added Assigning feature to Todo, event and deadline --- src/main/java/Enums/TaskType.java | 2 +- src/main/java/Model_Classes/Deadline.java | 11 +++ src/main/java/Model_Classes/Event.java | 11 +++ .../java/Model_Classes/FixedDuration.java | 12 +++ .../java/Model_Classes/RecurringDeadline.java | 11 +++ .../java/Model_Classes/RecurringEvent.java | 11 +++ .../java/Model_Classes/RecurringToDo.java | 11 +++ src/main/java/Model_Classes/Task.java | 21 ++++- src/main/java/Model_Classes/ToDo.java | 9 ++ src/main/java/Operations/Parser.java | 5 ++ src/main/java/Operations/TaskList.java | 1 + src/main/java/Operations/Ui.java | 4 + src/main/java/RoomShare.java | 85 ++++++++++++++----- 13 files changed, 172 insertions(+), 22 deletions(-) diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index 5a320f2a87..a82c524318 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,5 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder, assign } diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index dfd3146bab..2eae46385b 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -22,6 +22,17 @@ public Deadline (String description, Date by) { this.by = by; } + /** + * + * @param description + * @param by + * @param user + */ + public Deadline (String description, Date by, String user) { + super(description, user); + this.by = by; + } + /** * Overload Constructor for the Deadline object. * Takes in inputs for description and date/time the tasks should be done by. diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index 61aec1beb8..e4b66e388c 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -21,6 +21,17 @@ public Event(String description, Date at) { this.at = at; } + /** + * + * @param description + * @param at + * @param user + */ + public Event(String description, Date at, String user) { + super(description, user); + this.at = at; + } + /** * Overload Constructor for Event object * Takes in inputs for description of the event and the time the event occurs diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 7374c24d3c..06043f5980 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -19,6 +19,18 @@ public FixedDuration(String description, Date at, int duration) { this.duration = duration; } + /** + * + * @param description + * @param at + * @param duration + * @param user + */ + public FixedDuration(String description, Date at, int duration, String user) { + super(description, at, user); + this.duration = duration; + } + /** * Overload constructor for fixed duration * @param description Description of event diff --git a/src/main/java/Model_Classes/RecurringDeadline.java b/src/main/java/Model_Classes/RecurringDeadline.java index e030c4c931..f92c0ae154 100644 --- a/src/main/java/Model_Classes/RecurringDeadline.java +++ b/src/main/java/Model_Classes/RecurringDeadline.java @@ -18,6 +18,17 @@ public RecurringDeadline(String description, Date by, String recurrence) { this.recurrence = recurrence; } + /** + * + * @param description + * @param by + * @param recurrence + */ + public RecurringDeadline(String description, Date by, String recurrence, String user) { + super(description, by, user); + this.recurrence = recurrence; + } + /** * Overload constructor for the RecurringDeadline object. * Takes in inputs for description and date/time the tasks should be done by. diff --git a/src/main/java/Model_Classes/RecurringEvent.java b/src/main/java/Model_Classes/RecurringEvent.java index 5e4246b17c..e18e9c75cd 100644 --- a/src/main/java/Model_Classes/RecurringEvent.java +++ b/src/main/java/Model_Classes/RecurringEvent.java @@ -18,6 +18,17 @@ public RecurringEvent(String description, Date at, String recurrence) { this.recurrence = recurrence; } + /** + * + * @param description + * @param at + * @param recurrence + */ + public RecurringEvent(String description, Date at, String recurrence, String user) { + super(description, at, user); + this.recurrence = recurrence; + } + /** * Overload constructor for RecurringEvent object * Takes in inputs for description of the event and the time the event occurs diff --git a/src/main/java/Model_Classes/RecurringToDo.java b/src/main/java/Model_Classes/RecurringToDo.java index 818ad879b9..1f163499f6 100644 --- a/src/main/java/Model_Classes/RecurringToDo.java +++ b/src/main/java/Model_Classes/RecurringToDo.java @@ -14,6 +14,17 @@ public RecurringToDo(String description, String recurrence) { this.recurrence = recurrence; } + /** + * + * @param description + * @param recurrence + * @param user + */ + public RecurringToDo(String description, String recurrence, String user) { + super(description, user); + this.recurrence = recurrence; + } + /** * Overload constructor of the RecurringTodo class. Takes in the description of the task * @param recurrence Frequency task is repeated diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index 36281e98c0..e89a8578ba 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -14,6 +14,7 @@ public class Task{ private boolean isDone; private String created; private Priority priority; + private String user; /** * Constructor for the task object. takes in the description of the task @@ -28,6 +29,17 @@ public Task(String description) { this.priority = Priority.low; } + public Task(String description, String user) { + this.description = description; + this.isDone = false; + DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + LocalDateTime now = LocalDateTime.now(); + this.created = now.format(dateTimeFormatterNow); + this.priority = Priority.low; + this.user = user; + } + + /** * Overload constructor for the task object. takes in the description of the task * @param description Description of the task. @@ -43,6 +55,13 @@ public Task(String description, boolean done, Priority priority) { this.priority = priority; } + /** + * Returns String of the user that was specified + * @return name of the user + */ + public String getUser() { + return this.user; + } /** * Returns String of the time Task was created * @return time the task was created @@ -107,7 +126,7 @@ public void setPriority(Priority p) { * @return */ public String toString() { - return getStatusIcon() + getDescription(); + return getStatusIcon() + getDescription() + " " + "(" + getUser() + ")"; } /** diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index a0d0ec6a05..e15416afe7 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -14,6 +14,15 @@ public ToDo(String description) { super(description); } + /** + * + * @param description + * @param user + */ + public ToDo(String description, String user) { + super(description, user); + } + /** * Overload constructor of the class. Takes in the description of the task * @param description Description of the task. diff --git a/src/main/java/Operations/Parser.java b/src/main/java/Operations/Parser.java index 17da0c8269..b9e32f9c6a 100644 --- a/src/main/java/Operations/Parser.java +++ b/src/main/java/Operations/Parser.java @@ -131,4 +131,9 @@ public String[] getPriority() { return scanner.nextLine().trim().split(" ", 2); } + public String getResponse() { + String response = scanner.next(); + return response; + } + } diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index b93b42005e..908f55cf1a 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -64,6 +64,7 @@ public void list() throws RoomShareException { } + /** * Sets a task in the list as 'done' to mark that the user has completed the task. * Will not perform any operations if the index does not exist in the list. diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index eb096598ad..dd1278ccca 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -239,4 +239,8 @@ public void promptSecondIndex() { public void showReordering() { System.out.println("Reordering the task list..."); } + + public void promptForAssigning() { + System.out.println("Do you want to assign this task? (if yes enter the assignee's name"); + } } diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index c503c0008e..aeab41cbcc 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -18,6 +18,7 @@ public class RoomShare { private Parser parser; private RecurHandler recurHandler; + /** * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run * Also loads the ArrayList of tasks from the data.txt file @@ -34,12 +35,16 @@ public RoomShare() throws RoomShareException { ArrayList emptyList = new ArrayList<>(); taskList = new TaskList(emptyList); } + + + recurHandler = new RecurHandler(taskList); if (recurHandler.checkRecurrence()) { ui.showChangeInTaskList(); taskList.list(); } + } /** @@ -48,6 +53,7 @@ public RoomShare() throws RoomShareException { public void run() { boolean isExit = false; boolean isExitRecur = false; + boolean isExitAssign = false; while (!isExit) { String command = parser.getCommand(); TaskType type; @@ -70,6 +76,7 @@ public void run() { } break; + case bye: isExit = true; try { @@ -123,21 +130,40 @@ public void run() { case todo: try { - ui.showAdd(); - ToDo temp = new ToDo(parser.getDescription()); - taskList.add(temp); - } catch (RoomShareException e) { + String description = parser.getDescription(); + ui.promptForAssigning(); + String response = parser.getResponse(); + if (response.equals("no")) { + ToDo temp = new ToDo(description); + taskList.add(temp); + ui.showAdd(); + } + else { + ToDo temp = new ToDo(description, response); + taskList.add(temp); + ui.showAdd(); + } + } catch (RoomShareException e) { ui.showEmptyDescriptionError(); } break; case deadline: try { - ui.showAdd(); String[] deadlineArray = parser.getDescriptionWithDate(); Date by = parser.formatDate(deadlineArray[1]); - Deadline temp = new Deadline(deadlineArray[0], by); - taskList.add(temp); + ui.promptForAssigning(); + String response = parser.getResponse(); + if (response.equals("no")) { + Deadline temp = new Deadline(deadlineArray[0], by); + taskList.add(temp); + ui.showAdd(); + } + else { + Deadline temp = new Deadline(deadlineArray[0], by, response); + taskList.add(temp); + ui.showAdd(); + } } catch (RoomShareException e) { ui.showDateError(); } @@ -147,7 +173,6 @@ public void run() { try { String[] eventArray = parser.getDescriptionWithDate(); Date at = parser.formatDate(eventArray[1]); - ui.promptForReply(); ReplyType replyType; try { @@ -161,13 +186,24 @@ public void run() { TimeUnit timeUnit = parser.getTimeUnit(); ui.promptForTime(); int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(eventArray[0], at, duration); - - //checks for clashes - if( CheckAnomaly.checkTime(fixedDuration) ) { - taskList.add(fixedDuration); + ui.promptForAssigning(); + String response = parser.getResponse(); + if (response.equals("no")) { + FixedDuration fixedDuration = new FixedDuration(eventArray[0], at, duration); + //checks for clashes + if (CheckAnomaly.checkTime(fixedDuration)) { + taskList.add(fixedDuration); + } else { + throw new RoomShareException(ExceptionType.timeClash); + } } else { - throw new RoomShareException(ExceptionType.timeClash); + FixedDuration fixedDuration = new FixedDuration(eventArray[0], at, duration, response); + //checks for clashes + if (CheckAnomaly.checkTime(fixedDuration)) { + taskList.add(fixedDuration); + } else { + throw new RoomShareException(ExceptionType.timeClash); + } } Timer timer = new Timer(); @@ -188,10 +224,19 @@ public void run() { } ui.showAdd(); break; + case no: - Event event = new Event(eventArray[0], at); - taskList.add(event); - ui.showAdd(); + ui.promptForAssigning(); + String res = parser.getResponse(); + if (res.equals("no")) { + Event event = new Event(eventArray[0], at); + taskList.add(event); + ui.showAdd(); + } else { + Event event = new Event(eventArray[0], at, res); + taskList.add(event); + ui.showAdd(); + } break; default: ui.showCommandError(); @@ -262,9 +307,9 @@ public void run() { taskList.reorder(firstIndex, secondIndex); break; - default: - ui.showCommandError(); - break; + default: + ui.showCommandError(); + break; } } } From 1dae0c2a901774b211c92d1867ee32150ec6eb3a Mon Sep 17 00:00:00 2001 From: Ryan Tay Date: Sat, 12 Oct 2019 13:52:51 +0800 Subject: [PATCH 089/251] Added JavaDoc comments for task --- src/main/java/Model_Classes/Deadline.java | 8 ++++---- src/main/java/Model_Classes/Event.java | 9 +++++---- src/main/java/Model_Classes/FixedDuration.java | 14 +++++++------- src/main/java/Model_Classes/RecurringDeadline.java | 11 +---------- src/main/java/Model_Classes/RecurringEvent.java | 10 ---------- src/main/java/Model_Classes/RecurringToDo.java | 10 ---------- src/main/java/Model_Classes/Task.java | 5 +++++ src/main/java/Model_Classes/ToDo.java | 7 ++++--- src/main/java/Operations/Ui.java | 2 +- 9 files changed, 27 insertions(+), 49 deletions(-) diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 2eae46385b..565d3e6330 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -23,10 +23,10 @@ public Deadline (String description, Date by) { } /** - * - * @param description - * @param by - * @param user + * Overload Constructor for Deadline object + * @param description Description of the task + * @param by The time the task should be done by + * @param user User whom the task is assigned to */ public Deadline (String description, Date by, String user) { super(description, user); diff --git a/src/main/java/Model_Classes/Event.java b/src/main/java/Model_Classes/Event.java index e4b66e388c..bdd1732c29 100644 --- a/src/main/java/Model_Classes/Event.java +++ b/src/main/java/Model_Classes/Event.java @@ -22,10 +22,11 @@ public Event(String description, Date at) { } /** - * - * @param description - * @param at - * @param user + * Overload Constructor for the Event object + * Takes in an input for the user assigned to the event object + * @param description Description of the event + * @param at Time the event happens + * @param user User whom the task is assigned to */ public Event(String description, Date at, String user) { super(description, user); diff --git a/src/main/java/Model_Classes/FixedDuration.java b/src/main/java/Model_Classes/FixedDuration.java index 06043f5980..c9b050db72 100644 --- a/src/main/java/Model_Classes/FixedDuration.java +++ b/src/main/java/Model_Classes/FixedDuration.java @@ -12,7 +12,7 @@ public class FixedDuration extends Event { * Constructor for fixed duration * @param description Description of event * @param at Date of event - * @param duration duration of event + * @param duration Duration of event */ public FixedDuration(String description, Date at, int duration) { super(description, at); @@ -20,11 +20,11 @@ public FixedDuration(String description, Date at, int duration) { } /** - * - * @param description - * @param at - * @param duration - * @param user + * Overload constructor for fixed duration + * @param description Description of event + * @param at Date of event + * @param duration Duration of event + * @param user User whom the task is assigned to */ public FixedDuration(String description, Date at, int duration, String user) { super(description, at, user); @@ -35,7 +35,7 @@ public FixedDuration(String description, Date at, int duration, String user) { * Overload constructor for fixed duration * @param description Description of event * @param at Date of event - * @param duration duration of event + * @param duration Duration of event * @param done Whether the task is completed. * @param priority Priority of the task. */ diff --git a/src/main/java/Model_Classes/RecurringDeadline.java b/src/main/java/Model_Classes/RecurringDeadline.java index f92c0ae154..fa33fb4a16 100644 --- a/src/main/java/Model_Classes/RecurringDeadline.java +++ b/src/main/java/Model_Classes/RecurringDeadline.java @@ -18,16 +18,7 @@ public RecurringDeadline(String description, Date by, String recurrence) { this.recurrence = recurrence; } - /** - * - * @param description - * @param by - * @param recurrence - */ - public RecurringDeadline(String description, Date by, String recurrence, String user) { - super(description, by, user); - this.recurrence = recurrence; - } + /** * Overload constructor for the RecurringDeadline object. diff --git a/src/main/java/Model_Classes/RecurringEvent.java b/src/main/java/Model_Classes/RecurringEvent.java index e18e9c75cd..77397e87fb 100644 --- a/src/main/java/Model_Classes/RecurringEvent.java +++ b/src/main/java/Model_Classes/RecurringEvent.java @@ -18,16 +18,6 @@ public RecurringEvent(String description, Date at, String recurrence) { this.recurrence = recurrence; } - /** - * - * @param description - * @param at - * @param recurrence - */ - public RecurringEvent(String description, Date at, String recurrence, String user) { - super(description, at, user); - this.recurrence = recurrence; - } /** * Overload constructor for RecurringEvent object diff --git a/src/main/java/Model_Classes/RecurringToDo.java b/src/main/java/Model_Classes/RecurringToDo.java index 1f163499f6..7373c613fe 100644 --- a/src/main/java/Model_Classes/RecurringToDo.java +++ b/src/main/java/Model_Classes/RecurringToDo.java @@ -14,16 +14,6 @@ public RecurringToDo(String description, String recurrence) { this.recurrence = recurrence; } - /** - * - * @param description - * @param recurrence - * @param user - */ - public RecurringToDo(String description, String recurrence, String user) { - super(description, user); - this.recurrence = recurrence; - } /** * Overload constructor of the RecurringTodo class. Takes in the description of the task diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index e89a8578ba..d63304147d 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -29,6 +29,11 @@ public Task(String description) { this.priority = Priority.low; } + /** + * Overload constructor for the task object. Takes in the user assigned to the task + * @param description Description of the task + * @param user User whom the tasks is assigned to + */ public Task(String description, String user) { this.description = description; this.isDone = false; diff --git a/src/main/java/Model_Classes/ToDo.java b/src/main/java/Model_Classes/ToDo.java index e15416afe7..fad43cb277 100644 --- a/src/main/java/Model_Classes/ToDo.java +++ b/src/main/java/Model_Classes/ToDo.java @@ -15,9 +15,10 @@ public ToDo(String description) { } /** - * - * @param description - * @param user + * Overload constructor of the class + * Takes in the user at which the task is assigned to + * @param description Description of the task + * @param user User whom the task is assigned to */ public ToDo(String description, String user) { super(description, user); diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index dd1278ccca..0b860ffaea 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -241,6 +241,6 @@ public void showReordering() { } public void promptForAssigning() { - System.out.println("Do you want to assign this task? (if yes enter the assignee's name"); + System.out.println("Do you want to assign this task? (if yes enter the assignee's name)"); } } From 5f15f51250dcf97dc53a22e3c3ca684ba77b5225 Mon Sep 17 00:00:00 2001 From: sprsadist Date: Mon, 14 Oct 2019 14:52:57 +0800 Subject: [PATCH 090/251] JUnit Testing added for CheckAnomaly, Task, RoomShareException --- src/main/java/Duke.java | 258 --------------------- src/main/java/Model_Classes/Deadline.java | 7 +- src/main/java/Model_Classes/Task.java | 1 - src/main/java/Operations/CheckAnomaly.java | 17 +- src/main/java/Operations/Ui.java | 3 +- test/java/CheckAnomalyTest.java | 46 ++++ test/java/EventTest.java | 2 - test/java/RoomShareExceptionTest.java | 32 +++ test/java/Task_Test.java | 26 +++ 9 files changed, 127 insertions(+), 265 deletions(-) delete mode 100644 src/main/java/Duke.java create mode 100644 test/java/CheckAnomalyTest.java create mode 100644 test/java/RoomShareExceptionTest.java create mode 100644 test/java/Task_Test.java diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 8c02fed7db..0000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,258 +0,0 @@ -import CustomExceptions.DukeException; -import Enums.*; -import Model_Classes.*; -import Operations.*; - -import java.util.ArrayList; -import java.util.Date; -import java.util.Timer; -import java.util.TimerTask; - -/** - * main class of the Duke program - */ -public class Duke { - public static final int HOURS = 1000 * 60 * 60; - public static final int MINUTES = 1000 * 60; - private Ui ui; - private Storage storage; - private TaskList taskList; - private Parser parser; - private RecurHandler recurHandler; - - /** - * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run - * Also loads the ArrayList of tasks from the data.txt file - */ - public Duke() throws DukeException { - ui = new Ui(); - ui.startUp(); - storage = new Storage(); - parser = new Parser(); - try { - taskList = new TaskList(storage.loadFile("data.txt")); - } catch (DukeException e) { - ui.showLoadError(); - ArrayList emptyList = new ArrayList<>(); - taskList = new TaskList(emptyList); - } - recurHandler = new RecurHandler(taskList); - if (recurHandler.checkRecurrence()) { - ui.showChangeInTaskList(); - taskList.list(); - } - - } - - /** - * Deals with the operation flow of Duke. - */ - public void run() throws DukeException { - boolean isExit = false; - boolean isExitRecur = false; - while (!isExit) { - String command = parser.getCommand(); - TaskType type; - try { - type = TaskType.valueOf(command); - } catch (IllegalArgumentException e) { - type = TaskType.others; - } - switch (type) { - case help: - ui.help(); - break; - - case list: - ui.showList(); - try { - taskList.list(); - } catch (DukeException e) { - ui.showWriteError(); - } - break; - - case bye: - isExit = true; - try { - storage.writeFile(TaskList.currentList(), "data.txt"); - } catch (DukeException e) { - ui.showWriteError(); - } - ui.showBye(); - break; - - case done: - try { - ui.showDone(); - taskList.done(parser.getIndex()); - } catch (DukeException e) { - ui.showIndexError(); - } - break; - - case delete: - try { - int index = parser.getIndex(); - taskList.delete(index); - ui.showDeleted(index); - } catch (DukeException e) { - ui.showIndexError(); - } - break; - - case find: - ui.showFind(); - taskList.find(parser.getKey()); - break; - - case todo: - try { - ui.showAdd(); - ToDo temp = new ToDo(parser.getDescription()); - taskList.add(temp); - } catch (DukeException e) { - ui.showEmptyDescriptionError(); - } - break; - - case deadline: - try { - ui.showAdd(); - String[] deadlineArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(deadlineArray); - Date by = parser.formatDate(ar[1]); - Deadline temp = new Deadline(ar[0], by); - taskList.add(temp); - } catch (DukeException e) { - ui.showDateError(); - } - break; - - case event: - try { - String[] eventArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(eventArray); - Date at = parser.formatDate(ar[1]); - - ui.promptForReply(); - ReplyType replyType; - try { - replyType = parser.getReply(); - } catch (IllegalArgumentException e) { - replyType = ReplyType.others; - } - switch (replyType) { - case yes: - ui.promptForDuration(); - TimeUnit timeUnit = parser.getTimeUnit(); - int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); - - //checks for clashes - if( CheckAnomaly.checkTime(fixedDuration) ) { - taskList.add(fixedDuration); - } else { - throw new DukeException(ExceptionType.timeClash); - } - - Timer timer = new Timer(); - class RemindTask extends TimerTask { - public void run() { - System.out.println(ar[0] + " is completed"); - timer.cancel(); - } - } - RemindTask rt = new RemindTask(); - switch (timeUnit) { - case hours: - timer.schedule(rt, duration * HOURS); - break; - case minutes: - timer.schedule(rt, duration * MINUTES); - break; - } - ui.showAdd(); - break; - case no: - Event event = new Event(ar[0], at); - taskList.add(event); - break; - default: - ui.showCommandError(); - break; - } - } - catch (DukeException e) { - ui.showDateError(); - } - break; - - case recur: - ui.promptRecurringActions(); - while (!isExitRecur) { - String temp = parser.getCommand(); - RecurTaskType recurType; - try { - recurType = RecurTaskType.valueOf(temp); - } catch (IllegalArgumentException e) { - recurType = RecurTaskType.others; - } - switch (recurType) { - case list: - recurHandler.listRecurring(); - break; - case find: - recurHandler.findRecurring(parser.getKey()); - break; - case exit: - isExitRecur = true; - ui.showExit(); - break; - case add: - recurHandler.addBasedOnOperation(); - break; - default: - ui.showCommandError(); - break; - } - } - isExitRecur = false; - break; - - - case snooze : - try { - int index = parser.getIndex(); - TaskList.currentList().get(index - 1); - ui.showSnooze(); - int amount = parser.getAmount(); - TimeUnit timeUnit = parser.getTimeUnit(); - taskList.snooze(index, amount, timeUnit); - ui.showSnoozeComplete(); - } - catch (IndexOutOfBoundsException e){ - ui.showIndexError(); - } - catch (IllegalArgumentException e){ - ui.showTimeError(); - } - break; - - default: - ui.showCommandError(); - break; - } - } - } - - /** - * Main function of Duke - * Creates a new instance of Duke class - * @param args command line arguments - * @throws DukeException Custom exception class within Duke program - */ - public static void main(String[] args) throws DukeException { - new Duke().run(); - } -} diff --git a/src/main/java/Model_Classes/Deadline.java b/src/main/java/Model_Classes/Deadline.java index 565d3e6330..081bb7ff23 100644 --- a/src/main/java/Model_Classes/Deadline.java +++ b/src/main/java/Model_Classes/Deadline.java @@ -46,6 +46,12 @@ public Deadline (String description, Date by, boolean done, Priority priority) { this.by = by; } + /** + * Returns date of Deadline + * @return date of Deadline + */ + public Date checkDate() { return by; } + @Override public void snoozeYear(int amount) { this.by.setYear(this.by.getYear() + amount);; @@ -67,7 +73,6 @@ public void snoozeMinute(int amount){ this.by.setMinutes(this.by.getMinutes() + amount); } - /** * Returns the full description including the deadline of the task. * @return A string indicating the task type, description, and when it should be done by. diff --git a/src/main/java/Model_Classes/Task.java b/src/main/java/Model_Classes/Task.java index d63304147d..8ca96c6571 100644 --- a/src/main/java/Model_Classes/Task.java +++ b/src/main/java/Model_Classes/Task.java @@ -44,7 +44,6 @@ public Task(String description, String user) { this.user = user; } - /** * Overload constructor for the task object. takes in the description of the task * @param description Description of the task. diff --git a/src/main/java/Operations/CheckAnomaly.java b/src/main/java/Operations/CheckAnomaly.java index 7183266553..bab791cdb7 100644 --- a/src/main/java/Operations/CheckAnomaly.java +++ b/src/main/java/Operations/CheckAnomaly.java @@ -1,5 +1,6 @@ package Operations; +import Model_Classes.Deadline; import Model_Classes.Event; import Model_Classes.FixedDuration; import Model_Classes.Task; @@ -50,7 +51,21 @@ public static Boolean checkTime(FixedDuration currEvent) { return true; } + /** + * Overload function for checkTime + * Checks if the FixedDuration task has any clashes with any other tasks in the task list + * If there is a clash, returns true + * If there is no clash, returns false + * @param at Date of the event we are checking + * @return true if there are time clashes, false if there are no time clashes + */ public static Boolean checkTime(Date at){ - return true; + ArrayList curr = TaskList.currentList(); + for( int i = 0; i Date: Tue, 15 Oct 2019 13:25:50 +0800 Subject: [PATCH 091/251] Added report functionality --- build.gradle | 2 +- src/main/java/Duke.java | 258 --------------------- src/main/java/Enums/ReportType.java | 5 + src/main/java/Enums/TaskType.java | 3 +- src/main/java/Modes/ReportMode.java | 60 +++++ src/main/java/Operations/RecurHandler.java | 2 +- src/main/java/Operations/Report.java | 66 ++++++ src/main/java/Operations/TaskList.java | 81 ++++++- src/main/java/Operations/Ui.java | 66 ++++++ src/main/java/RoomShare.java | 6 + test/java/DeadlineTest.java | 14 +- test/java/EventTest.java | 4 +- 12 files changed, 287 insertions(+), 280 deletions(-) delete mode 100644 src/main/java/Duke.java create mode 100644 src/main/java/Enums/ReportType.java create mode 100644 src/main/java/Modes/ReportMode.java create mode 100644 src/main/java/Operations/Report.java diff --git a/build.gradle b/build.gradle index 2b6d7e0dd9..b1ec17602d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ checkstyle { } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "RoomShare" archiveVersion = "0.1.3" archiveClassifier = null archiveAppendix = null diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java deleted file mode 100644 index 8c02fed7db..0000000000 --- a/src/main/java/Duke.java +++ /dev/null @@ -1,258 +0,0 @@ -import CustomExceptions.DukeException; -import Enums.*; -import Model_Classes.*; -import Operations.*; - -import java.util.ArrayList; -import java.util.Date; -import java.util.Timer; -import java.util.TimerTask; - -/** - * main class of the Duke program - */ -public class Duke { - public static final int HOURS = 1000 * 60 * 60; - public static final int MINUTES = 1000 * 60; - private Ui ui; - private Storage storage; - private TaskList taskList; - private Parser parser; - private RecurHandler recurHandler; - - /** - * Constructor of a Duke class. Creates all necessary objects and collections for Duke to run - * Also loads the ArrayList of tasks from the data.txt file - */ - public Duke() throws DukeException { - ui = new Ui(); - ui.startUp(); - storage = new Storage(); - parser = new Parser(); - try { - taskList = new TaskList(storage.loadFile("data.txt")); - } catch (DukeException e) { - ui.showLoadError(); - ArrayList emptyList = new ArrayList<>(); - taskList = new TaskList(emptyList); - } - recurHandler = new RecurHandler(taskList); - if (recurHandler.checkRecurrence()) { - ui.showChangeInTaskList(); - taskList.list(); - } - - } - - /** - * Deals with the operation flow of Duke. - */ - public void run() throws DukeException { - boolean isExit = false; - boolean isExitRecur = false; - while (!isExit) { - String command = parser.getCommand(); - TaskType type; - try { - type = TaskType.valueOf(command); - } catch (IllegalArgumentException e) { - type = TaskType.others; - } - switch (type) { - case help: - ui.help(); - break; - - case list: - ui.showList(); - try { - taskList.list(); - } catch (DukeException e) { - ui.showWriteError(); - } - break; - - case bye: - isExit = true; - try { - storage.writeFile(TaskList.currentList(), "data.txt"); - } catch (DukeException e) { - ui.showWriteError(); - } - ui.showBye(); - break; - - case done: - try { - ui.showDone(); - taskList.done(parser.getIndex()); - } catch (DukeException e) { - ui.showIndexError(); - } - break; - - case delete: - try { - int index = parser.getIndex(); - taskList.delete(index); - ui.showDeleted(index); - } catch (DukeException e) { - ui.showIndexError(); - } - break; - - case find: - ui.showFind(); - taskList.find(parser.getKey()); - break; - - case todo: - try { - ui.showAdd(); - ToDo temp = new ToDo(parser.getDescription()); - taskList.add(temp); - } catch (DukeException e) { - ui.showEmptyDescriptionError(); - } - break; - - case deadline: - try { - ui.showAdd(); - String[] deadlineArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(deadlineArray); - Date by = parser.formatDate(ar[1]); - Deadline temp = new Deadline(ar[0], by); - taskList.add(temp); - } catch (DukeException e) { - ui.showDateError(); - } - break; - - case event: - try { - String[] eventArray = parser.getDescriptionWithDate(); - String[] ar = parser.getDate(eventArray); - Date at = parser.formatDate(ar[1]); - - ui.promptForReply(); - ReplyType replyType; - try { - replyType = parser.getReply(); - } catch (IllegalArgumentException e) { - replyType = ReplyType.others; - } - switch (replyType) { - case yes: - ui.promptForDuration(); - TimeUnit timeUnit = parser.getTimeUnit(); - int duration = parser.getAmount(); - FixedDuration fixedDuration = new FixedDuration(ar[0], at, duration); - - //checks for clashes - if( CheckAnomaly.checkTime(fixedDuration) ) { - taskList.add(fixedDuration); - } else { - throw new DukeException(ExceptionType.timeClash); - } - - Timer timer = new Timer(); - class RemindTask extends TimerTask { - public void run() { - System.out.println(ar[0] + " is completed"); - timer.cancel(); - } - } - RemindTask rt = new RemindTask(); - switch (timeUnit) { - case hours: - timer.schedule(rt, duration * HOURS); - break; - case minutes: - timer.schedule(rt, duration * MINUTES); - break; - } - ui.showAdd(); - break; - case no: - Event event = new Event(ar[0], at); - taskList.add(event); - break; - default: - ui.showCommandError(); - break; - } - } - catch (DukeException e) { - ui.showDateError(); - } - break; - - case recur: - ui.promptRecurringActions(); - while (!isExitRecur) { - String temp = parser.getCommand(); - RecurTaskType recurType; - try { - recurType = RecurTaskType.valueOf(temp); - } catch (IllegalArgumentException e) { - recurType = RecurTaskType.others; - } - switch (recurType) { - case list: - recurHandler.listRecurring(); - break; - case find: - recurHandler.findRecurring(parser.getKey()); - break; - case exit: - isExitRecur = true; - ui.showExit(); - break; - case add: - recurHandler.addBasedOnOperation(); - break; - default: - ui.showCommandError(); - break; - } - } - isExitRecur = false; - break; - - - case snooze : - try { - int index = parser.getIndex(); - TaskList.currentList().get(index - 1); - ui.showSnooze(); - int amount = parser.getAmount(); - TimeUnit timeUnit = parser.getTimeUnit(); - taskList.snooze(index, amount, timeUnit); - ui.showSnoozeComplete(); - } - catch (IndexOutOfBoundsException e){ - ui.showIndexError(); - } - catch (IllegalArgumentException e){ - ui.showTimeError(); - } - break; - - default: - ui.showCommandError(); - break; - } - } - } - - /** - * Main function of Duke - * Creates a new instance of Duke class - * @param args command line arguments - * @throws DukeException Custom exception class within Duke program - */ - public static void main(String[] args) throws DukeException { - new Duke().run(); - } -} diff --git a/src/main/java/Enums/ReportType.java b/src/main/java/Enums/ReportType.java new file mode 100644 index 0000000000..bbb2da9f87 --- /dev/null +++ b/src/main/java/Enums/ReportType.java @@ -0,0 +1,5 @@ +package Enums; + +public enum ReportType { + full, finished, unfinished, upcoming, recurring, others, exit +} diff --git a/src/main/java/Enums/TaskType.java b/src/main/java/Enums/TaskType.java index a82c524318..7cba07c9c3 100644 --- a/src/main/java/Enums/TaskType.java +++ b/src/main/java/Enums/TaskType.java @@ -1,5 +1,6 @@ package Enums; public enum TaskType { - list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder, assign + list, bye, find, done , delete, todo, deadline, other, event, recur, time, snooze, others, help, priority, reorder, + assign, report } diff --git a/src/main/java/Modes/ReportMode.java b/src/main/java/Modes/ReportMode.java new file mode 100644 index 0000000000..d6f8b31e54 --- /dev/null +++ b/src/main/java/Modes/ReportMode.java @@ -0,0 +1,60 @@ +package Modes; + +import Enums.ReportType; +import Operations.Parser; +import Operations.Report; +import Operations.TaskList; +import Operations.Ui; + +public class ReportMode { + private TaskList taskList; + private Report report; + private Parser parser = new Parser(); + private Ui ui = new Ui(); + public ReportMode(TaskList taskList) { + this.taskList = taskList; + } + + public void run() { + report = new Report(taskList); + boolean isExit = false; + while (!isExit) { + String temp = parser.getCommandLine(); + ReportType reportType; + try { + reportType = ReportType.valueOf(temp); + } catch (IllegalArgumentException e) { + reportType = ReportType.others; + } + switch (reportType) { + case exit: + isExit = true; + break; + + case full: + report.fullReport(); + break; + + case finished: + report.finishedReport(); + break; + + case unfinished: + report.unfinishedReport(); + break; + + case upcoming: + report.upcomingReport(); + break; + + case recurring: + report.recurringReport(); + break; + + default: + ui.showCommandError(); + break; + } + } + } +} diff --git a/src/main/java/Operations/RecurHandler.java b/src/main/java/Operations/RecurHandler.java index 7946e9ee52..3d75374574 100644 --- a/src/main/java/Operations/RecurHandler.java +++ b/src/main/java/Operations/RecurHandler.java @@ -158,7 +158,7 @@ public boolean checkRecurrence() { String description = check.getDescription(); if (check.toString().contains(TODO_MARKER)) { // extract the recurrence schedule. - recurrenceSchedule = array[3].substring(0, array[3].length() - 1); + recurrenceSchedule = array[4].substring(0, array[4].length() - 1); type = RecurrenceScheduleType.valueOf(recurrenceSchedule); switch (type) { diff --git a/src/main/java/Operations/Report.java b/src/main/java/Operations/Report.java new file mode 100644 index 0000000000..eb78fe7690 --- /dev/null +++ b/src/main/java/Operations/Report.java @@ -0,0 +1,66 @@ +package Operations; + +import CustomExceptions.RoomShareException; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class Report { + private Ui ui = new Ui(); + private TaskList taskList; + public Report(TaskList taskList) { + this.taskList = taskList; + } + + public void fullReport() { + ui.reportTasks(); + try { + taskList.list(); + } catch (RoomShareException e) { + ui.showListError(); + } + finishedReport(); + unfinishedReport(); + upcomingReport(); + recurringReport(); + } + + public void finishedReport() { + ui.reportFinished(); + try { + double percentage = taskList.listDone(); + ui.reportDonePercentage(percentage); + } catch (RoomShareException e) { + ui.showListError(); + } + } + + public void unfinishedReport() { + ui.reportUnfinished(); + try { + double percentage = taskList.listNotDone(); + ui.reportNotDonePercentage(percentage); + } catch (RoomShareException e) { + ui.showListError(); + } + } + + public void upcomingReport() { + ui.reportUpcoming(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"); + String currentTime = now.format(dateTimeFormatterNow); + try { + int upcoming = taskList.listUpcoming(currentTime); + ui.reportUpcomingCount(upcoming); + } catch (RoomShareException e) { + ui.showListError(); + } + } + + public void recurringReport() { + ui.reportRecurring(); + int recurring = taskList.listRecurringReport(); + ui.reportRecurringCount(recurring); + } +} diff --git a/src/main/java/Operations/TaskList.java b/src/main/java/Operations/TaskList.java index 70c912de1e..26e14e3cb3 100644 --- a/src/main/java/Operations/TaskList.java +++ b/src/main/java/Operations/TaskList.java @@ -3,12 +3,12 @@ import CustomExceptions.RoomShareException; import Enums.ExceptionType; import Enums.Priority; -import Model_Classes.Task; -import Model_Classes.ToDo; +import Model_Classes.*; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import Enums.TimeUnit; @@ -67,13 +67,12 @@ public void list() throws RoomShareException { if( tasks.size() != 0 ){ int listCount = 1; for (Task output : tasks) { - System.out.println(" " + listCount + ". " + output.toString()); + System.out.println("\t" + listCount + ". " + output.toString()); listCount += 1; } } else { throw new RoomShareException(ExceptionType.emptylist); } - } @@ -109,7 +108,7 @@ public void find (String key) { int queryCount = 1; for (Task query : tasks) { if (query.toString().toLowerCase().contains(key.trim())) { - System.out.println(" " + queryCount + ". " + query.toString()); + System.out.println("\t" + queryCount + ". " + query.toString()); } queryCount += 1; } @@ -208,4 +207,76 @@ public void reorder(int first, int second) { Collections.swap(tasks, first, second); } + public double listDone() throws RoomShareException { + if( tasks.size() != 0 ){ + int listCount = 1; + double doneCount = 0.0; + for (Task output : tasks) { + if (output.getDone()) { + System.out.println("\t" + listCount + ". " + output.toString()); + doneCount += 1.0; + } + listCount += 1; + } + return (doneCount/tasks.size()) * 100.0; + } else { + throw new RoomShareException(ExceptionType.emptylist); + } + } + + public double listNotDone() throws RoomShareException { + if( tasks.size() != 0 ){ + int listCount = 1; + double notDoneCount = 0.0; + for (Task output : tasks) { + if (!output.getDone()) { + System.out.println("\t" + listCount + ". " + output.toString()); + notDoneCount += 1.0; + } + listCount += 1; + } + return (notDoneCount/tasks.size()) * 100.0; + } else { + throw new RoomShareException(ExceptionType.emptylist); + } + } + + public int listUpcoming(String currentDate) throws RoomShareException { + if( tasks.size() != 0 ){ + Parser parser = new Parser(); + Date dateNow = parser.formatDate(currentDate); + int listCount = 1; + int upcomingCount = 0; + for (Task output : tasks) { + if (!(output instanceof ToDo)) { + String date = new Storage().convertForStorage(output); + date = date.substring(0, 16); + Date storedDate = parser.formatDate(date); + if (storedDate.compareTo(dateNow) > 0) { + // the date the task should be done by has not passed the current date + System.out.println("\t" + listCount + ". " + output.toString()); + upcomingCount += 1; + } + } + listCount += 1; + } + return upcomingCount; + } else { + throw new RoomShareException(ExceptionType.emptylist); + } + } + + public int listRecurringReport() { + int listCount = 1; + int recurringCount = 0; + for (Task output : tasks) { + if (output instanceof RecurringEvent || output instanceof RecurringDeadline + || output instanceof RecurringToDo) { + System.out.println("\t" + listCount + ". " + output.toString()); + recurringCount += 1; + } + listCount += 1; + } + return recurringCount; + } } diff --git a/src/main/java/Operations/Ui.java b/src/main/java/Operations/Ui.java index 69bdc795f8..a51166e1f4 100644 --- a/src/main/java/Operations/Ui.java +++ b/src/main/java/Operations/Ui.java @@ -321,4 +321,70 @@ public void explainReorder() { System.out.println("\te.g : reorder 1"); System.out.println("RoomShare will prompt you to input a new index to swap the task to"); } + + public void reportTasks() { + System.out.println("Here's your report for the task list:"); + } + + public void showListError() { + System.out.println("Seems like your task list is empty... Try adding a task to your list before listing!"); + } + + public void reportFinished() { + System.out.println("\nHere's all the tasks that you have done"); + } + + public void reportDonePercentage(double percentage) { + System.out.println("You've finished " + percentage + " of your tasks"); + if (percentage < 25.0) { + System.out.println("Keep working at it!"); + } else if (percentage < 50.0) { + System.out.println("On track to the halfway mark!"); + } else if (percentage == 50.0) { + System.out.println("Halfway there!"); + } else if (percentage < 75.0) { + System.out.println("Good progress!"); + } else if (percentage < 100.0) { + System.out.println("That's a lot of work done!"); + } else if (percentage >= 100) { + System.out.println("Congratulations! All done!"); + } + } + + public void reportUnfinished() { + System.out.println("\nHere's all the tasks that you have NOT done"); + } + + public void reportNotDonePercentage(double percentage) { + System.out.println("You haven't finished " + percentage + " of your tasks..."); + if (percentage < 25.0) { + System.out.println("Keep up the good work"); + } else if (percentage < 50.0) { + System.out.println("Good progress!"); + } else if (percentage == 50.0) { + System.out.println("Halfway there!"); + } else if (percentage < 75.0) { + System.out.println("Good try, let's hit the halfway mark"); + } else if (percentage < 100.0) { + System.out.println("Isn't it time to start work soon?"); + } else if (percentage >= 100) { + System.out.println("Better to start work than never...."); + } + } + + public void reportUpcoming() { + System.out.println("\nThese are your upcoming tasks: "); + } + + public void reportUpcomingCount(int upcoming) { + System.out.println("You have " + upcoming + " tasks that are upcoming"); + } + + public void reportRecurring() { + System.out.println("\nThese are the recurring tasks in your list"); + } + + public void reportRecurringCount(int recurring) { + System.out.println("You have " + recurring + " recurring tasks"); + } } diff --git a/src/main/java/RoomShare.java b/src/main/java/RoomShare.java index 1e697c4bc7..6d775bf8f6 100644 --- a/src/main/java/RoomShare.java +++ b/src/main/java/RoomShare.java @@ -3,6 +3,7 @@ import Model_Classes.*; import Modes.HelpMode; import Modes.RecurringMode; +import Modes.ReportMode; import Operations.*; import java.util.ArrayList; @@ -284,6 +285,11 @@ public void run() { taskList.reorder(firstIndex, secondIndex); break; + case report: + ReportMode reportMode= new ReportMode(taskList); + reportMode.run(); + break; + default: ui.showCommandError(); break; diff --git a/test/java/DeadlineTest.java b/test/java/DeadlineTest.java index 978e746e58..f50212fa77 100644 --- a/test/java/DeadlineTest.java +++ b/test/java/DeadlineTest.java @@ -1,25 +1,15 @@ package java; -import CustomExceptions.DukeException; -import Model_Classes.Deadline; -import Operations.Parser; + + import org.junit.jupiter.api.Test; import java.util.Date; import static org.junit.jupiter.api.Assertions.assertEquals; public class DeadlineTest { - private static final Parser parser = new Parser(); private static Date by; - static { - try { - by = parser.formatDate("22/12/2019 18:00"); - } catch (DukeException e) { - e.printStackTrace(); - } - } - @Test public void testStringConversion() { assertEquals("[D][\u2718] homework (by: Sun Dec 22 18:00:00 SGT 2019)", new Deadline("homework", by).toString()); diff --git a/test/java/EventTest.java b/test/java/EventTest.java index ec336410be..dafa2d4928 100644 --- a/test/java/EventTest.java +++ b/test/java/EventTest.java @@ -1,6 +1,6 @@ package java; -import CustomExceptions.DukeException; +import CustomExceptions.RoomShareException; import Model_Classes.Deadline; import Operations.Parser; import org.junit.jupiter.api.Test; @@ -16,7 +16,7 @@ public class EventTest { static { try { by = parser.formatDate("22/12/2019 18:00"); - } catch (DukeException e) { + } catch (RoomShareException e) { e.printStackTrace(); } } From 33cd64f2052d1db664f57603242d0e94c8d661e5 Mon Sep 17 00:00:00 2001 From: benitokun123 Date: Tue, 15 Oct 2019 14:45:23 +0800 Subject: [PATCH 092/251] Fix checkstyle issues for Roomshare.java --- TeamProject.ipr | 97 +++++- TeamProject.iws | 22 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 5 +- src/main/java/RoomShare.java | 368 +++++++++++------------ 5 files changed, 303 insertions(+), 191 deletions(-) diff --git a/TeamProject.ipr b/TeamProject.ipr index 5c7eb2192e..434e459a59 100644 --- a/TeamProject.ipr +++ b/TeamProject.ipr @@ -1,5 +1,26 @@ + + + + + + + + + + - + + + @@ -26,6 +49,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TeamProject.iws b/TeamProject.iws index 0dc4ccd530..9c42acc240 100644 --- a/TeamProject.iws +++ b/TeamProject.iws @@ -8,14 +8,32 @@ + + + + + + + + + + + +