From 4cd3720a2637e4856c007cdf02da9033870027b6 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <55589340+Lee-Juntong@users.noreply.github.com> Date: Fri, 2 Oct 2020 14:13:06 +0800 Subject: [PATCH 001/299] Set theme jekyll-theme-cayman --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000000..c4192631f2 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file From 4561acb083620e9c64dd86613db6d8d150b1b78d Mon Sep 17 00:00:00 2001 From: Brendan Date: Fri, 2 Oct 2020 14:53:07 +0800 Subject: [PATCH 002/299] Updated AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..58e951564d 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -5,5 +5,5 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) From 0425d1706949844f9a9817737b86b6fd6b2885b8 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Fri, 2 Oct 2020 14:54:43 +0800 Subject: [PATCH 003/299] update AboutUs --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..747547a829 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) From bad40d2ae2cd26d38038cdee81bc492f9a5f4126 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 2 Oct 2020 14:54:50 +0800 Subject: [PATCH 004/299] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..06c38df629 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](docs/team/johndoe.md) From a2537e5db06459f1bb0408a23aeeec0a044d8a0d Mon Sep 17 00:00:00 2001 From: xuche123 Date: Fri, 2 Oct 2020 14:57:58 +0800 Subject: [PATCH 005/299] Edit About Us --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..5aca96959a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,4 +6,4 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/johndoe.md) From a01b9a4c00cae8d28b251d3033a839f0858ccc1a Mon Sep 17 00:00:00 2001 From: max Date: Fri, 2 Oct 2020 15:15:25 +0800 Subject: [PATCH 006/299] changed personal name and github webpage --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0f072953ea..3b9474ab1a 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) From 2b914e7e8ae40f4e27369fdd3e4be641101325bf Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 8 Oct 2020 23:29:07 +0800 Subject: [PATCH 007/299] change the product name --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index bbcc99c1e7..718f54d772 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# Duke +# NUSchedule {Give product intro here} From c7f59546d076e7ff26aab7fed5a0d8d9fb0803c1 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 11 Oct 2020 02:45:17 +0800 Subject: [PATCH 008/299] Testing --- README.md | 4 +- src/main/java/NUSchedule/NUSchedule.java | 52 +++++ src/main/java/NUSchedule/command/Command.java | 27 +++ .../command/PrintFullListCommand.java | 22 ++ .../java/NUSchedule/event/Assignment.java | 47 +++++ src/main/java/NUSchedule/event/Class.java | 31 +++ src/main/java/NUSchedule/event/Event.java | 71 +++++++ .../java/NUSchedule/event/PersonalEvent.java | 48 +++++ .../java/NUSchedule/eventList/TaskList.java | 118 +++++++++++ .../exception/NUScheduleException.java | 5 + src/main/java/NUSchedule/parser/Parser.java | 191 ++++++++++++++++++ src/main/java/NUSchedule/storage/Storage.java | 126 ++++++++++++ src/main/java/NUSchedule/ui/UI.java | 180 +++++++++++++++++ src/main/java/seedu/duke/Duke.java | 21 -- .../{DukeTest.java => NUScheduleTest.java} | 2 +- 15 files changed, 921 insertions(+), 24 deletions(-) create mode 100644 src/main/java/NUSchedule/NUSchedule.java create mode 100644 src/main/java/NUSchedule/command/Command.java create mode 100644 src/main/java/NUSchedule/command/PrintFullListCommand.java create mode 100644 src/main/java/NUSchedule/event/Assignment.java create mode 100644 src/main/java/NUSchedule/event/Class.java create mode 100644 src/main/java/NUSchedule/event/Event.java create mode 100644 src/main/java/NUSchedule/event/PersonalEvent.java create mode 100644 src/main/java/NUSchedule/eventList/TaskList.java create mode 100644 src/main/java/NUSchedule/exception/NUScheduleException.java create mode 100644 src/main/java/NUSchedule/parser/Parser.java create mode 100644 src/main/java/NUSchedule/storage/Storage.java create mode 100644 src/main/java/NUSchedule/ui/UI.java delete mode 100644 src/main/java/seedu/duke/Duke.java rename src/test/java/seedu/duke/{DukeTest.java => NUScheduleTest.java} (89%) diff --git a/README.md b/README.md index 698b938529..b388947211 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen 1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html). 1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html). -1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: +1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/NUSchedule/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: ``` > Task :compileJava > Task :processResources NO-SOURCE @@ -39,7 +39,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen ### JUnit tests -* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. +* A skeleton JUnit test (`src/test/java/seedu/NUSchedule/DukeTest.java`) is provided with this project template. * If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html). ## Checkstyle diff --git a/src/main/java/NUSchedule/NUSchedule.java b/src/main/java/NUSchedule/NUSchedule.java new file mode 100644 index 0000000000..a00ab83460 --- /dev/null +++ b/src/main/java/NUSchedule/NUSchedule.java @@ -0,0 +1,52 @@ +package NUSchedule; + +import NUSchedule.ui.UI; + +public class NUSchedule { + /** + * Main entry-point for the java.duke.Duke application. + */ + private Storage storage; + private TaskList tasks; + private UI ui; + + public NUSchedule(String filePath) { + ui = new UI(); + try { + storage = new Storage(filePath); + } catch (CreatingFileException e) { + ui.showError(e.getMessage()); + } + try { + tasks = new TaskList(storage.load()); + } catch (DukeException e) { + ui.showLoadingError(); + tasks = new TaskList(); + } + } + + /** + * Runs the program until termination. + */ + public void run() { + ui.printGreetingMessage(); + boolean isExit = false; + while (!isExit) { + try { + String fullCommand = ui.readCommand(); + ui.printLine(); // show the divider line ("_______") + NUSchedule.command.Command c = NUSchedule.Parser.Parser.parse(fullCommand); + c.execute(tasks, ui, storage); + isExit = c.isExit(); + } catch (DukeException e) { + ui.showError(e.getMessage()); + } finally { + ui.printLine(); + } + } + } + + public static void main(String[] args) { + new NUSchedule("data/events.txt").run(); + } +} diff --git a/src/main/java/NUSchedule/command/Command.java b/src/main/java/NUSchedule/command/Command.java new file mode 100644 index 0000000000..22edd64d97 --- /dev/null +++ b/src/main/java/NUSchedule/command/Command.java @@ -0,0 +1,27 @@ +package NUSchedule.command; + +import NUSchedule.Storage.Storage; +import NUSchedule.TaskList.TaskList; +import NUSchedule.UI.UI; +import NUSchedule.Exception.DukeException; + +/** + * Represents the command to be executed. + */ +public abstract class Command { + protected boolean isExit = false; + + /** + * Execute the command based on the specific command type. + * + * @param tasks the list of tasks. + * @param ui do outputs. + * @param storage store the data. + * @throws DukeException the exceptions can happen in this program, to be handled based on the specific exception. + */ + public abstract void execute(TaskList tasks, UI ui, Storage storage) throws DukeException; + + public boolean isExit() { + return isExit; + } +} diff --git a/src/main/java/NUSchedule/command/PrintFullListCommand.java b/src/main/java/NUSchedule/command/PrintFullListCommand.java new file mode 100644 index 0000000000..e0da8faf95 --- /dev/null +++ b/src/main/java/NUSchedule/command/PrintFullListCommand.java @@ -0,0 +1,22 @@ +package NUSchedule.command; + +import NUSchedule.Storage.Storage; +import NUSchedule.TaskList.TaskList; +import NUSchedule.UI.UI; +import NUSchedule.Exception.DukeException; + +public class PrintFullListCommand extends Command { + + /** + * Prints the list of tasks. + * + * @param tasks the list of tasks + * @param ui do outputs + * @param storage store the data + * @throws DukeException the exceptions can happen in this function, to be handled based on the specific exception + */ + @Override + public void execute(TaskList tasks, UI ui, Storage storage) throws DukeException { + ui.printTaskList(tasks.getTaskList()); + } +} diff --git a/src/main/java/NUSchedule/event/Assignment.java b/src/main/java/NUSchedule/event/Assignment.java new file mode 100644 index 0000000000..91c1a0cf86 --- /dev/null +++ b/src/main/java/NUSchedule/event/Assignment.java @@ -0,0 +1,47 @@ +package NUSchedule.Task; + + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * Represents the Assignment tasks. + */ +public class Assignment extends Task { + + protected LocalDateTime by; + + /** + * Convert the information about this deadline to a string that is to be stored in a file. + * + * @return the result string to be stored + */ + public String fileString() { + return "D//" + (isDone ? 1 : 0) + "//" + description + "//" + by; + } + + public Assignment(String description, LocalDateTime by) { + super(description); + this.by = by; + } + + /** + * Provides the date of the task. + * + * @return the LocalDate get from LocalDateTime + */ + public LocalDate getDate() { + return LocalDate.from(by); + } + + /** + * Prepare the string to be printed in the list. + * + * @return the string required in a certain format + * Example of the format: [D][✘]a (by: Feb 20 2020 08:00) + */ + public String toString() { + return "[D]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + } +} diff --git a/src/main/java/NUSchedule/event/Class.java b/src/main/java/NUSchedule/event/Class.java new file mode 100644 index 0000000000..f1d691fb4e --- /dev/null +++ b/src/main/java/NUSchedule/event/Class.java @@ -0,0 +1,31 @@ +package NUSchedule.event; + + +/** + * Represents the Class events. + */ +public class Class extends NUSchedule.Event.Event { + + public Class(String description) { + super(description); + } + + /** + * Convert the information about this Class to a string that is to be stored in a file. + * + * @return the result string to be stored. + */ + public String fileString() { + return "T//" + (isDone ? 1 : 0) + "//" + description; + } + + /** + * Prepare the string to be printed in the list. + * + * @return the string required in a certain format + * Example of the format: [T][✘]a + */ + public String toString() { + return "[T]" + super.toString(); + } +} diff --git a/src/main/java/NUSchedule/event/Event.java b/src/main/java/NUSchedule/event/Event.java new file mode 100644 index 0000000000..e054c0ff3a --- /dev/null +++ b/src/main/java/NUSchedule/event/Event.java @@ -0,0 +1,71 @@ +package NUSchedule.Event; + + +import java.time.LocalDate; + +/** + * Represents the event objects. + * Contains a String <\code>description , which is the description of the event, + * and a boolean <\code>isDone, which is the status of the task. + * Provides methods to mark an event as done(either during user input or reading from file), + * get the value of <\code>isDone, + * convert the <\code>event object to a string to be printed out or write to a file. + */ +public abstract class Event { + protected String description; + protected boolean isDone; + + public Event(String description) { + this.description = description; + this.isDone = false; + } + + /** + * Mark a task's status as done. + */ + public void markAsDone() { + this.isDone = true; + } + + public abstract String fileString(); + + /** + * Provides the status of the task as a icon. + * + * @return returns a tick if the task is done, and returns a cross if the task is not done + */ + public String getStatusIcon() { + return (isDone ? "\u2713" : "\u2718"); + //return tick or X symbols + } + + /** + * Prepare the string to be printed in the list. + * + * @return the common part for Event, Assignment, Class + */ + public String toString() { + return "[" + getStatusIcon() + "]" + description; + } + + /** + * Provides the date of the task. + * + * @return the LocalDate get from LocalDateTime + */ + public LocalDate getDate() { + return null; + } + + /** + * Provides the String variable of the description of this task. + * + * @return the description of this task + */ + public String getDescription() { + return description; + } +} + + + diff --git a/src/main/java/NUSchedule/event/PersonalEvent.java b/src/main/java/NUSchedule/event/PersonalEvent.java new file mode 100644 index 0000000000..981aafad1a --- /dev/null +++ b/src/main/java/NUSchedule/event/PersonalEvent.java @@ -0,0 +1,48 @@ +package NUSchedule.Task; + + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + + +/** + * Represents the Event tasks. + */ +public class PersonalEvent extends Task { + + protected LocalDateTime at; + + /** + * Convert the information about this event to a string that is to be stored in a file. + * + * @return the result string to be stored + */ + public String fileString() { + return "E//" + (isDone ? 1 : 0) + "//" + description + "//" + at; + } + + /** + * Provides the date of the task. + * + * @return the LocalDate get from LocalDateTime + */ + public LocalDate getDate() { + return LocalDate.from(at); + } + + public PersonalEvent(String description, LocalDateTime at) { + super(description); + this.at = at; + } + + /** + * Prepare the string to be printed in the list. + * + * @return the string required in a certain format + * Example of the format: [E][✘]a (at: Feb 20 2020 08:00) + */ + public String toString() { + return "[E]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + } +} diff --git a/src/main/java/NUSchedule/eventList/TaskList.java b/src/main/java/NUSchedule/eventList/TaskList.java new file mode 100644 index 0000000000..6585040f89 --- /dev/null +++ b/src/main/java/NUSchedule/eventList/TaskList.java @@ -0,0 +1,118 @@ +package NUSchedule.TaskList; + +import NUSchedule.Exception.DoneUndefinedTaskException; +import NUSchedule.Task.Task; + +import java.time.LocalDate; +import java.util.ArrayList; + +import static java.util.stream.Collectors.toList; + +/** + * Contains the list of the tasks and provides ways to delete/add/mark as done tasks. + */ +public class TaskList { + private final ArrayList tasks; + + /** + * Construct the tasks as an empty ArrayList. + */ + public TaskList() { + tasks = new ArrayList(); + } + + /** + * When loading from the file, create the list as provided in the file. + * + * @param tasks provided by Storage::load() + * @see NUSchedule.Storage.Storage + */ + public TaskList(ArrayList tasks) { + this.tasks = tasks; + } + + /** + * Adds a task to the list. + * + * @param taskToBeAdded may be Class/Event/Assignment based on the usage + */ + public void addTask(Task taskToBeAdded) { + tasks.add(taskToBeAdded); + } + + /** + * Mark a task as done. + * + * @param taskIndex the index of the task being done + * @throws DoneUndefinedTaskException the task is not defined but the user want to mark it as done + */ + public void doneTask(int taskIndex) throws DoneUndefinedTaskException { + try { + tasks.get(taskIndex).markAsDone(); + } catch (IndexOutOfBoundsException e) { + throw new DoneUndefinedTaskException(taskIndex); + } + } + + /** + * Gives the access to the list of tasks. + * + * @return the ArrayList object to be printed + */ + public ArrayList getTaskList() { + return tasks; + } + + /** + * Returns how many tasks are in the list. + * + * @return the size of the ArrayList in the TaskList object + */ + public int size() { + return tasks.size(); + } + + /** + * Remove the task indicated by the user. + */ + public void remove(int taskIndex) { + tasks.remove(taskIndex); + } + + /** + * Returns the element at the specified position in this list. + * + * @param taskIndex index of the task to return + * @return the task at the specified position in this list + */ + public Task get(int taskIndex) { + return tasks.get(taskIndex); + } + + /** + * Filter the task list to find the tasks contain the information looking for by the user. + * + * @param filterString the keyword that the user is looking for + * @return the filtered list. this list contains only the tasks that satisfy the requirement + */ + public ArrayList filterWith(String filterString) { + ArrayList filteredTaskList = (ArrayList) tasks.stream() + .filter(s -> s.getDescription().contains(filterString)) + .collect(toList()); + + return filteredTaskList; + } + /** + * Filter the task list to find the tasks happen on the date looking for by the user. + * + * @param date the date that the user is looking for + * @return the filtered list. this list contains only the tasks that satisfy the requirement + */ + public ArrayList filterDateWith(LocalDate date) { + ArrayList filteredTaskList = (ArrayList) tasks.stream() + .filter(s -> s.getDate().isEqual(date)) + .collect(toList()); + + return filteredTaskList; + } +} diff --git a/src/main/java/NUSchedule/exception/NUScheduleException.java b/src/main/java/NUSchedule/exception/NUScheduleException.java new file mode 100644 index 0000000000..ec7b346d49 --- /dev/null +++ b/src/main/java/NUSchedule/exception/NUScheduleException.java @@ -0,0 +1,5 @@ +package seedu.duke.exception; + +public abstract class NUScheduleException extends Exception{ + public abstract String getMessage(); +} diff --git a/src/main/java/NUSchedule/parser/Parser.java b/src/main/java/NUSchedule/parser/Parser.java new file mode 100644 index 0000000000..7d2c573ebc --- /dev/null +++ b/src/main/java/NUSchedule/parser/Parser.java @@ -0,0 +1,191 @@ +package NUSchedule.Parser; + + +import NUSchedule.command.Command; +import NUSchedule.command.PrintFullListCommand; +import NUSchedule.Exception.DateFormatException; +import NUSchedule.Exception.DeleteNumberFormatException; +import NUSchedule.Exception.DoneNumberFormatException; +import NUSchedule.Exception.DukeException; +import NUSchedule.Exception.EmptyDeadlineException; +import NUSchedule.Exception.EmptyDeleteException; +import NUSchedule.Exception.EmptyDoneException; +import NUSchedule.Exception.EmptyEventException; +import NUSchedule.Exception.EmptyFindDateException; +import NUSchedule.Exception.EmptyFindException; +import NUSchedule.Exception.EmptyTodoException; +import NUSchedule.Exception.NoDeadlineTimeException; +import NUSchedule.Exception.NoDeadlineTimeMarkerException; +import NUSchedule.Exception.NoEventTimeException; +import NUSchedule.Exception.NoEventTimeMakerException; +import NUSchedule.Exception.TimeFormatException; +import NUSchedule.Exception.WrongCommandException; +import NUSchedule.Task.Todo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; + +/** + * This class contains one function -- parse, to call the respective command function according to the user input. + */ +public abstract class Parser { + public static final String EXIT = "bye"; + public static final String PRINT_TASK_LIST = "list"; + public static final String TASK_DONE = "done"; + public static final String ADD_EVENT = "event"; + public static final String ADD_DEADLINE = "deadline"; + public static final String ADD_TODO = "todo"; + public static final String TASK_DELETE = "delete"; + public static final String TASK_FIND = "find"; + public static final String BY = "/by"; + public static final String SINGLE_SPACE = " "; + public static final String AT = "/at"; + private static final String TASK_FIND_DATE = "date"; + + /** + * This function calls the correct command the user want to perform, by returning a <\code>Command object. + * + * @param fullCommand the full string of user input + * @return the specific <\code>Command object to perform what the user want to do + * @throws DukeException includes all exceptions may happen during parsing + */ + public static Command parse(String fullCommand) throws DukeException { + // this block deals with exit and list command + if (fullCommand.equals(EXIT)) { + return new ExitCommand(); + } else if (fullCommand.equals(PRINT_TASK_LIST)) { + return new PrintFullListCommand(); + } + + String[] words = fullCommand.split(SINGLE_SPACE); + + //this block deals with find command + if (words[0].equals(TASK_FIND)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyFindException(); + } + return new FindCommand(fullCommand.substring(5)); + } + + //this block deals with find date command + if (words[0].equals(TASK_FIND_DATE)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyFindDateException(); + } + try { + return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); + } catch (DateTimeParseException e) { + throw new DateFormatException(); + } + } + + int taskIndex;//to indicate what is the task we are dealing with. may not be used. + + //this block deals with done command + if (words[0].equals(TASK_DONE)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyDoneException(); + } + try { + taskIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + } catch (NumberFormatException e) { + throw new DoneNumberFormatException(); + } + return new DoneCommand(taskIndex); + } + + //this block deals with delete command + if (words[0].equals(TASK_DELETE)) { + if (fullCommand.substring(6).isBlank()) { + throw new EmptyDeleteException(); + } + try { + taskIndex = Integer.parseInt(fullCommand.substring(7)) - 1; + } catch (NumberFormatException e) { + throw new DeleteNumberFormatException(); + } + return new DeleteCommand(taskIndex); + } + + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when enter this block, the parser will not go to any other blocks + int dividerPosition; + int timeDivider; + String dateTime; + switch (words[0]) { + case ADD_EVENT: + dividerPosition = fullCommand.indexOf(AT); + + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { + throw new NoEventTimeMakerException(); + } + if (fullCommand.substring(5, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new NUSchedule.Task.PersonalEvent(fullCommand.substring(6, dividerPosition), LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + + case ADD_DEADLINE: + dividerPosition = fullCommand.indexOf(BY); + + if (fullCommand.substring(8).isBlank()) { + throw new EmptyDeadlineException(); + } + if (dividerPosition == -1) { + throw new NoDeadlineTimeMarkerException(); + } + if (fullCommand.substring(8, dividerPosition).isBlank()) { + throw new EmptyDeadlineException(); + } + try { + fullCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoDeadlineTimeException(); + } + try { + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new NUSchedule.Task.Assignment(fullCommand.substring(9, dividerPosition), LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + case ADD_TODO: + + try { + if (fullCommand.substring(5).isBlank()) { + throw new EmptyTodoException(); + } + return new AddCommand(new Todo(fullCommand.substring(5))); + } catch (StringIndexOutOfBoundsException e) { + throw new EmptyTodoException(); + } + + default: + throw new WrongCommandException(); + + } + + } +} diff --git a/src/main/java/NUSchedule/storage/Storage.java b/src/main/java/NUSchedule/storage/Storage.java new file mode 100644 index 0000000000..9d2fc35d7b --- /dev/null +++ b/src/main/java/NUSchedule/storage/Storage.java @@ -0,0 +1,126 @@ +package NUSchedule.Storage; + +import NUSchedule.Exception.CreatingFileException; +import NUSchedule.Exception.LoadingException; +import NUSchedule.Exception.WritingFileException; +import NUSchedule.Task.Task; +import NUSchedule.Task.Todo; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.Scanner; + +/** + * This class creates the folder and file path if it's not already created, and + * prepare the data in the file to be used. + */ +public class Storage { + public static final String REGEX_IN_FILE = "//"; + private final String filePath; + + /** + * Set the filepath according to the user input. + * + * @param filePath is the path of the file + */ + public Storage(String filePath) throws CreatingFileException { + this.filePath = filePath; + createFolderAndFIle(filePath); + } + + /** + * Creates the folder and file if not already crated. + * + * @param filePath the String of the relative path + */ + private static void createFolderAndFIle(String filePath) throws CreatingFileException { + File dataFile = new File(filePath); + File directory = dataFile.getParentFile(); + if (!directory.exists()) { + directory.mkdirs(); + } + + try { + dataFile.createNewFile(); + } catch (IOException e) { + throw new CreatingFileException(filePath); + } + } + + + /** + * Save the data of the task list to the file. + * + * @param tasks the list of tasks provided by a variable from a TaskList object + * @throws WritingFileException represents the file is not correctly written + */ + public void writeFile(ArrayList tasks) throws WritingFileException { + try { + FileWriter fw = new FileWriter(filePath); + for (Task task : tasks) { + fw.write(task.fileString()); + fw.write(System.lineSeparator()); + } + fw.close(); + } catch (IOException e) { + throw new WritingFileException(); + } + } + + /** + * Prepares the data in the file as an ArrayList, which is used to construct the TaskList. + * + * @return the tasks in an ArrayList + * @throws LoadingException represents the tasks is not correctly created + */ + public ArrayList load() throws LoadingException { + ArrayList tasks = new ArrayList(); + File dataFile = new File(filePath); + try { + Scanner s = new Scanner(dataFile); + while (s.hasNext()) { + String[] words = s.nextLine().split(REGEX_IN_FILE); + switch (words[0]) { + case "T": + tasks.add(new Todo(words[2])); + if (Integer.parseInt(words[1]) == 1) { + tasks.get(tasks.size() - 1).markAsDone(); + } + break; + case "E": + try { + tasks.add(new NUSchedule.Task.PersonalEvent(words[2], LocalDateTime.parse(words[3]))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + tasks.get(tasks.size() - 1).markAsDone(); + } + break; + case "D": + try { + tasks.add(new NUSchedule.Task.Assignment(words[2], LocalDateTime.parse(words[3]))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + tasks.get(tasks.size() - 1).markAsDone(); + } + break; + default: + throw new LoadingException(); + } + } + } catch (FileNotFoundException e) { + System.out.println("file not found"); + } catch (IndexOutOfBoundsException e) { + throw new LoadingException(); + } + return tasks; + } +} diff --git a/src/main/java/NUSchedule/ui/UI.java b/src/main/java/NUSchedule/ui/UI.java new file mode 100644 index 0000000000..0c38df0e37 --- /dev/null +++ b/src/main/java/NUSchedule/ui/UI.java @@ -0,0 +1,180 @@ +package seedu.duke.ui; + + +import NUSchedule.Task.Task; + + +import java.util.ArrayList; +import java.util.Scanner; + +/** + * UI receives all user inputs, and produces outputs show to the user. + */ +public class UI { + + public static final String LOGO = " _ _ _ _ ___ _ _ _ \n" + + "| | | | | | | /___| | | | | | | \n" + + "| \\ | | | | |// | | | | | |\n" + + "| |\\\\ | | | | |\\\\ | | ___ | | | | ___ \n" + + "| | \\\\ | | | | | \\\\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" + + "| | \\\\ | | | | | \\\\ /___| ____ |<___>>| __ | | | | |<___>> \n" + + "| | \\\\| | | | | \\\\ // | | | | ___/ | | | | | | | | ___/ \n" + + "| | \\ | |______| |___// \\\\___| | | |\\____ | | | | |__| | |\\____\n" + + "|_| |_|__________|___/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; + public static final String LINE_DIVIDER = "____________________________________________________________"; + public static final String EXIT_MESSAGE = "Bye. Hope to see you again soon!"; + private final Scanner in; + + public UI() { + in = new Scanner(System.in); + } + + /** + * Reads the user input line by line. + * + * @return the string of the line + */ + public String readCommand() { + return in.nextLine(); + } + + /** + * Prints the logo of DUKE and greet the user. + */ + public void printGreetingMessage() { + printLine(); + + System.out.println("Hello from\n" + LOGO); + System.out.println("What can I do for you?"); + } + + /** + * Prints the separator. + */ + public void printLine() { + System.out.println(LINE_DIVIDER); + } + + /** + * Prints all the events with labels, based on the input list. + * + * @param tasks an <\code>ArrayList of events to be printed one by one. + */ + public void printTaskList(ArrayList tasks) { + int numPrintedTasks = 0; + + System.out.println(" Here are the tasks in your list:"); + for (Task task : tasks) { + numPrintedTasks++; + System.out.println(numPrintedTasks + ". " + task.toString()); + } + } + + /** + * Prints all the tasks of the filtered list with labels, based on the input list. + * + * @param tasks an <\code>ArrayList of tasks to be printed one by one + */ + public void printFilteredTaskList(ArrayList tasks) { + int numPrintedTasks = 0; + + System.out.println(" Here are the matching tasks in your list:"); + for (Task task : tasks) { + numPrintedTasks++; + System.out.println(numPrintedTasks + ". " + task.toString()); + } + } + + /** + * Shows the error message when experiencing exceptions. + * + * @param message the message get from the error + */ + public void showError(String message) { + System.out.println(message); + } + + /** + * Shows the error message during loading. Since the general IO exception is + * handled when executing the process, the error leads to this would be the file + * is edited in a wrong way. + */ + public void showLoadingError() { + System.out.println("You edit the file in a wrong format. Please check."); + } + + /** + * Prints the message during executing commands. + * This function is used to make all printing being done in UI. + * + * @param message determined by the command + */ + public void print(String message) { + System.out.print(message); + } + + /** + * Call when exit the program + */ + public void printExitMessage() { + System.out.println(EXIT_MESSAGE); + } + + /** + * Take in a size and prints the total number of tasks. + * + * @param size get by calling ArrayList::Size() + */ + public void printNumTask(int size) { + System.out.println("Now you have " + size + " tasks in the list."); + } + + /** + * Prints the message when the user mark some task as done. + * + * @param task the task being done + */ + public void printDoneMessage(Task task) { + System.out.println("Nice! I've marked this task as done: "); + System.out.println(task.toString()); + } + + /** + * Prints the message when the user deletes some task. + * + * @param task the task being deleted + */ + public void printDeleteMessage(Task task) { + System.out.println("Noted. I've removed this task: "); + System.out.println(task.toString()); + } + + /** + * Prints the message when the user adds some task. + * + * @param taskAdded the task being added + */ + public void printAddTaskMessage(Task taskAdded) { + System.out.println("Got it. I've added this task: "); + System.out.println(taskAdded.toString()); + } + /** + * Prints all the tasks of the filtered list with labels, based on the input list. + * + * @param filteredTaskList an <\code>ArrayList of tasks to be printed one by one + */ + public void printFilteredDateTaskList(ArrayList filteredTaskList) { + int numPrintedTasks = 0; + + System.out.println(" Here are the tasks on the given date in your list:"); + for (Task task : filteredTaskList) { + numPrintedTasks++; + System.out.println(numPrintedTasks + ". " + task.toString()); + } + } + + + + + +} diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java deleted file mode 100644 index 5c74e68d59..0000000000 --- a/src/main/java/seedu/duke/Duke.java +++ /dev/null @@ -1,21 +0,0 @@ -package seedu.duke; - -import java.util.Scanner; - -public class Duke { - /** - * Main entry-point for the java.duke.Duke application. - */ - public static void main(String[] args) { - String logo = " ____ _ \n" - + "| _ \\ _ _| | _____ \n" - + "| | | | | | | |/ / _ \\\n" - + "| |_| | |_| | < __/\n" - + "|____/ \\__,_|_|\\_\\___|\n"; - System.out.println("Hello from\n" + logo); - System.out.println("What is your name?"); - - Scanner in = new Scanner(System.in); - System.out.println("Hello " + in.nextLine()); - } -} diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/NUScheduleTest.java similarity index 89% rename from src/test/java/seedu/duke/DukeTest.java rename to src/test/java/seedu/duke/NUScheduleTest.java index 2dda5fd651..f828f208d1 100644 --- a/src/test/java/seedu/duke/DukeTest.java +++ b/src/test/java/seedu/duke/NUScheduleTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; -class DukeTest { +class NUScheduleTest { @Test public void sampleTest() { assertTrue(true); From 4bafcad3cbfb4337beb1b4dc79f37f89faf7dea1 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 11 Oct 2020 03:45:51 +0800 Subject: [PATCH 009/299] Implements the logo, and build the framework, namely, the 4 major packages to be worked on. --- README.md | 8 +- build.gradle | 2 +- data/events.txt | 0 src/main/java/NUSchedule/NUSchedule.java | 26 +- src/main/java/NUSchedule/command/Command.java | 14 +- .../java/NUSchedule/command/ExitCommand.java | 25 ++ .../command/PrintFullListCommand.java | 22 +- .../java/NUSchedule/event/Assignment.java | 18 +- src/main/java/NUSchedule/event/Class.java | 10 +- src/main/java/NUSchedule/event/Event.java | 20 +- .../java/NUSchedule/event/PersonalEvent.java | 8 +- .../java/NUSchedule/eventList/TaskList.java | 118 ------- .../java/NUSchedule/eventList/eventList.java | 118 +++++++ .../exception/CreatingFileException.java | 21 ++ .../exception/LoadingException.java | 15 + .../exception/NUScheduleException.java | 2 +- .../exception/WritingFileException.java | 15 + src/main/java/NUSchedule/parser/Parser.java | 302 ++++++++---------- src/main/java/NUSchedule/storage/Storage.java | 80 +---- src/main/java/NUSchedule/ui/UI.java | 104 +++--- src/test/java/seedu/duke/NUScheduleTest.java | 2 +- 21 files changed, 474 insertions(+), 456 deletions(-) create mode 100644 data/events.txt create mode 100644 src/main/java/NUSchedule/command/ExitCommand.java delete mode 100644 src/main/java/NUSchedule/eventList/TaskList.java create mode 100644 src/main/java/NUSchedule/eventList/eventList.java create mode 100644 src/main/java/NUSchedule/exception/CreatingFileException.java create mode 100644 src/main/java/NUSchedule/exception/LoadingException.java create mode 100644 src/main/java/NUSchedule/exception/WritingFileException.java diff --git a/README.md b/README.md index b388947211..458ca43ba2 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen 1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html). 1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/NUSchedule/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: ``` - > Task :compileJava - > Task :processResources NO-SOURCE - > Task :classes + > Event :compileJava + > Event :processResources NO-SOURCE + > Event :classes - > Task :Duke.main() + > Event :Duke.main() Hello from ____ _ | _ \ _ _| | _____ diff --git a/build.gradle b/build.gradle index b0c5528fb5..7635e61ec8 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ test { } application { - mainClassName = "seedu.duke.Duke" + mainClassName = "NUSchedule.Duke" } shadowJar { diff --git a/data/events.txt b/data/events.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/NUSchedule/NUSchedule.java b/src/main/java/NUSchedule/NUSchedule.java index a00ab83460..573fe3e860 100644 --- a/src/main/java/NUSchedule/NUSchedule.java +++ b/src/main/java/NUSchedule/NUSchedule.java @@ -1,5 +1,11 @@ package NUSchedule; +import NUSchedule.command.Command; +import NUSchedule.eventList.EventList; +import NUSchedule.exception.CreatingFileException; +import NUSchedule.exception.NUScheduleException; +import NUSchedule.parser.Parser; +import NUSchedule.storage.Storage; import NUSchedule.ui.UI; public class NUSchedule { @@ -7,7 +13,7 @@ public class NUSchedule { * Main entry-point for the java.duke.Duke application. */ private Storage storage; - private TaskList tasks; + private EventList Events; private UI ui; public NUSchedule(String filePath) { @@ -17,12 +23,12 @@ public NUSchedule(String filePath) { } catch (CreatingFileException e) { ui.showError(e.getMessage()); } - try { - tasks = new TaskList(storage.load()); - } catch (DukeException e) { - ui.showLoadingError(); - tasks = new TaskList(); - } +// try {todo after implement load, uncomment it +// Events = new EventList(storage.load()); +// } catch (NUScheduleException e) { +// ui.showLoadingError(); +// Events = new EventList(); +// } } /** @@ -35,10 +41,10 @@ public void run() { try { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") - NUSchedule.command.Command c = NUSchedule.Parser.Parser.parse(fullCommand); - c.execute(tasks, ui, storage); + Command c = Parser.parse(fullCommand); + c.execute(Events, ui, storage); isExit = c.isExit(); - } catch (DukeException e) { + } catch (NUScheduleException e) { ui.showError(e.getMessage()); } finally { ui.printLine(); diff --git a/src/main/java/NUSchedule/command/Command.java b/src/main/java/NUSchedule/command/Command.java index 22edd64d97..56dc558a76 100644 --- a/src/main/java/NUSchedule/command/Command.java +++ b/src/main/java/NUSchedule/command/Command.java @@ -1,9 +1,9 @@ package NUSchedule.command; -import NUSchedule.Storage.Storage; -import NUSchedule.TaskList.TaskList; -import NUSchedule.UI.UI; -import NUSchedule.Exception.DukeException; +import NUSchedule.storage.Storage; +import NUSchedule.eventList.EventList; +import NUSchedule.ui.UI; +import NUSchedule.exception.NUScheduleException; /** * Represents the command to be executed. @@ -14,12 +14,12 @@ public abstract class Command { /** * Execute the command based on the specific command type. * - * @param tasks the list of tasks. + * @param Events the list of Events. * @param ui do outputs. * @param storage store the data. - * @throws DukeException the exceptions can happen in this program, to be handled based on the specific exception. + * @throws NUScheduleException the exceptions can happen in this program, to be handled based on the specific exception. */ - public abstract void execute(TaskList tasks, UI ui, Storage storage) throws DukeException; + public abstract void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException; public boolean isExit() { return isExit; diff --git a/src/main/java/NUSchedule/command/ExitCommand.java b/src/main/java/NUSchedule/command/ExitCommand.java new file mode 100644 index 0000000000..d1d7b3f64f --- /dev/null +++ b/src/main/java/NUSchedule/command/ExitCommand.java @@ -0,0 +1,25 @@ +package NUSchedule.command; + +import NUSchedule.eventList.EventList; +import NUSchedule.storage.Storage; +import NUSchedule.ui.UI; + +/** + * Represents the command call when the user exits this program. + */ +public class ExitCommand extends Command { + /** + * Mark the status of the program, isExit, as true. + * Also prints the exit message. + * + * @param tasks the list of tasks. + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList tasks, UI ui, Storage storage) { + isExit = true; + ui.printExitMessage(); + + } +} diff --git a/src/main/java/NUSchedule/command/PrintFullListCommand.java b/src/main/java/NUSchedule/command/PrintFullListCommand.java index e0da8faf95..d023f57851 100644 --- a/src/main/java/NUSchedule/command/PrintFullListCommand.java +++ b/src/main/java/NUSchedule/command/PrintFullListCommand.java @@ -1,22 +1,22 @@ package NUSchedule.command; -import NUSchedule.Storage.Storage; -import NUSchedule.TaskList.TaskList; -import NUSchedule.UI.UI; -import NUSchedule.Exception.DukeException; +import NUSchedule.storage.Storage; +import NUSchedule.eventList.EventList; +import NUSchedule.ui.UI; +import NUSchedule.exception.NUScheduleException; public class PrintFullListCommand extends Command { /** - * Prints the list of tasks. + * Prints the list of Events. * - * @param tasks the list of tasks - * @param ui do outputs - * @param storage store the data - * @throws DukeException the exceptions can happen in this function, to be handled based on the specific exception + * @param Events the list of Events. + * @param ui do outputs. + * @param storage store the data. + * @throws NUScheduleException the exceptions can happen in this function, to be handled based on the specific exception. */ @Override - public void execute(TaskList tasks, UI ui, Storage storage) throws DukeException { - ui.printTaskList(tasks.getTaskList()); + public void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException { + ui.printEventList(Events.getEventList()); } } diff --git a/src/main/java/NUSchedule/event/Assignment.java b/src/main/java/NUSchedule/event/Assignment.java index 91c1a0cf86..e3801784b7 100644 --- a/src/main/java/NUSchedule/event/Assignment.java +++ b/src/main/java/NUSchedule/event/Assignment.java @@ -1,4 +1,4 @@ -package NUSchedule.Task; +package NUSchedule.event; import java.time.LocalDate; @@ -6,9 +6,9 @@ import java.time.format.DateTimeFormatter; /** - * Represents the Assignment tasks. + * Represents the Assignment Events. */ -public class Assignment extends Task { +public class Assignment extends Event { protected LocalDateTime by; @@ -18,7 +18,7 @@ public class Assignment extends Task { * @return the result string to be stored */ public String fileString() { - return "D//" + (isDone ? 1 : 0) + "//" + description + "//" + by; + return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by; } public Assignment(String description, LocalDateTime by) { @@ -27,9 +27,9 @@ public Assignment(String description, LocalDateTime by) { } /** - * Provides the date of the task. + * Provides the date of the Assignment. * - * @return the LocalDate get from LocalDateTime + * @return the LocalDate get from LocalDateTime. */ public LocalDate getDate() { return LocalDate.from(by); @@ -38,10 +38,10 @@ public LocalDate getDate() { /** * Prepare the string to be printed in the list. * - * @return the string required in a certain format - * Example of the format: [D][✘]a (by: Feb 20 2020 08:00) + * @return the string required in a certain format. + * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { - return "[D]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; } } diff --git a/src/main/java/NUSchedule/event/Class.java b/src/main/java/NUSchedule/event/Class.java index f1d691fb4e..7503c652ec 100644 --- a/src/main/java/NUSchedule/event/Class.java +++ b/src/main/java/NUSchedule/event/Class.java @@ -4,7 +4,7 @@ /** * Represents the Class events. */ -public class Class extends NUSchedule.Event.Event { +public class Class extends Event { public Class(String description) { super(description); @@ -16,16 +16,16 @@ public Class(String description) { * @return the result string to be stored. */ public String fileString() { - return "T//" + (isDone ? 1 : 0) + "//" + description; + return "C//" + (isDone ? 1 : 0) + "//" + description; } /** * Prepare the string to be printed in the list. * - * @return the string required in a certain format - * Example of the format: [T][✘]a + * @return the string required in a certain format. + * Example of the format: [C][✘]a. */ public String toString() { - return "[T]" + super.toString(); + return "[C]" + super.toString(); } } diff --git a/src/main/java/NUSchedule/event/Event.java b/src/main/java/NUSchedule/event/Event.java index e054c0ff3a..6ddc969143 100644 --- a/src/main/java/NUSchedule/event/Event.java +++ b/src/main/java/NUSchedule/event/Event.java @@ -1,4 +1,4 @@ -package NUSchedule.Event; +package NUSchedule.event; import java.time.LocalDate; @@ -6,7 +6,7 @@ /** * Represents the event objects. * Contains a String <\code>description , which is the description of the event, - * and a boolean <\code>isDone, which is the status of the task. + * and a boolean <\code>isDone, which is the status of the Event. * Provides methods to mark an event as done(either during user input or reading from file), * get the value of <\code>isDone, * convert the <\code>event object to a string to be printed out or write to a file. @@ -21,7 +21,7 @@ public Event(String description) { } /** - * Mark a task's status as done. + * Mark a Event's status as done. */ public void markAsDone() { this.isDone = true; @@ -30,9 +30,9 @@ public void markAsDone() { public abstract String fileString(); /** - * Provides the status of the task as a icon. + * Provides the status of the Event as a icon. * - * @return returns a tick if the task is done, and returns a cross if the task is not done + * @return returns a tick if the Event is done, and returns a cross if the Event is not done. */ public String getStatusIcon() { return (isDone ? "\u2713" : "\u2718"); @@ -42,25 +42,25 @@ public String getStatusIcon() { /** * Prepare the string to be printed in the list. * - * @return the common part for Event, Assignment, Class + * @return the common part for Event, Assignment, Class. */ public String toString() { return "[" + getStatusIcon() + "]" + description; } /** - * Provides the date of the task. + * Provides the date of the Event. * - * @return the LocalDate get from LocalDateTime + * @return the LocalDate get from LocalDateTime. */ public LocalDate getDate() { return null; } /** - * Provides the String variable of the description of this task. + * Provides the String variable of the description of this Event. * - * @return the description of this task + * @return the description of this Event. */ public String getDescription() { return description; diff --git a/src/main/java/NUSchedule/event/PersonalEvent.java b/src/main/java/NUSchedule/event/PersonalEvent.java index 981aafad1a..f8abf329e8 100644 --- a/src/main/java/NUSchedule/event/PersonalEvent.java +++ b/src/main/java/NUSchedule/event/PersonalEvent.java @@ -1,4 +1,4 @@ -package NUSchedule.Task; +package NUSchedule.event; import java.time.LocalDate; @@ -7,9 +7,9 @@ /** - * Represents the Event tasks. + * Represents the Event Events. */ -public class PersonalEvent extends Task { +public class PersonalEvent extends Event { protected LocalDateTime at; @@ -23,7 +23,7 @@ public String fileString() { } /** - * Provides the date of the task. + * Provides the date of the Event. * * @return the LocalDate get from LocalDateTime */ diff --git a/src/main/java/NUSchedule/eventList/TaskList.java b/src/main/java/NUSchedule/eventList/TaskList.java deleted file mode 100644 index 6585040f89..0000000000 --- a/src/main/java/NUSchedule/eventList/TaskList.java +++ /dev/null @@ -1,118 +0,0 @@ -package NUSchedule.TaskList; - -import NUSchedule.Exception.DoneUndefinedTaskException; -import NUSchedule.Task.Task; - -import java.time.LocalDate; -import java.util.ArrayList; - -import static java.util.stream.Collectors.toList; - -/** - * Contains the list of the tasks and provides ways to delete/add/mark as done tasks. - */ -public class TaskList { - private final ArrayList tasks; - - /** - * Construct the tasks as an empty ArrayList. - */ - public TaskList() { - tasks = new ArrayList(); - } - - /** - * When loading from the file, create the list as provided in the file. - * - * @param tasks provided by Storage::load() - * @see NUSchedule.Storage.Storage - */ - public TaskList(ArrayList tasks) { - this.tasks = tasks; - } - - /** - * Adds a task to the list. - * - * @param taskToBeAdded may be Class/Event/Assignment based on the usage - */ - public void addTask(Task taskToBeAdded) { - tasks.add(taskToBeAdded); - } - - /** - * Mark a task as done. - * - * @param taskIndex the index of the task being done - * @throws DoneUndefinedTaskException the task is not defined but the user want to mark it as done - */ - public void doneTask(int taskIndex) throws DoneUndefinedTaskException { - try { - tasks.get(taskIndex).markAsDone(); - } catch (IndexOutOfBoundsException e) { - throw new DoneUndefinedTaskException(taskIndex); - } - } - - /** - * Gives the access to the list of tasks. - * - * @return the ArrayList object to be printed - */ - public ArrayList getTaskList() { - return tasks; - } - - /** - * Returns how many tasks are in the list. - * - * @return the size of the ArrayList in the TaskList object - */ - public int size() { - return tasks.size(); - } - - /** - * Remove the task indicated by the user. - */ - public void remove(int taskIndex) { - tasks.remove(taskIndex); - } - - /** - * Returns the element at the specified position in this list. - * - * @param taskIndex index of the task to return - * @return the task at the specified position in this list - */ - public Task get(int taskIndex) { - return tasks.get(taskIndex); - } - - /** - * Filter the task list to find the tasks contain the information looking for by the user. - * - * @param filterString the keyword that the user is looking for - * @return the filtered list. this list contains only the tasks that satisfy the requirement - */ - public ArrayList filterWith(String filterString) { - ArrayList filteredTaskList = (ArrayList) tasks.stream() - .filter(s -> s.getDescription().contains(filterString)) - .collect(toList()); - - return filteredTaskList; - } - /** - * Filter the task list to find the tasks happen on the date looking for by the user. - * - * @param date the date that the user is looking for - * @return the filtered list. this list contains only the tasks that satisfy the requirement - */ - public ArrayList filterDateWith(LocalDate date) { - ArrayList filteredTaskList = (ArrayList) tasks.stream() - .filter(s -> s.getDate().isEqual(date)) - .collect(toList()); - - return filteredTaskList; - } -} diff --git a/src/main/java/NUSchedule/eventList/eventList.java b/src/main/java/NUSchedule/eventList/eventList.java new file mode 100644 index 0000000000..0d0dbae6b4 --- /dev/null +++ b/src/main/java/NUSchedule/eventList/eventList.java @@ -0,0 +1,118 @@ +package NUSchedule.eventList; + + +import NUSchedule.event.Event; + +import java.time.LocalDate; +import java.util.ArrayList; + +import static java.util.stream.Collectors.toList; + +/** + * Contains the list of the events and provides ways to delete/add/mark as done events. + */ +public class EventList { + private final ArrayList events; + + /** + * Construct the events as an empty ArrayList. + */ + public EventList() { + events = new ArrayList(); + } + + /** + * When loading from the file, create the list as provided in the file. + * + * @param events provided by Storage::load() + * @see NUSchedule.storage.Storage + */ + public EventList(ArrayList events) { + this.events = events; + } + + /** + * Adds an event to the list. + * + * @param eventToBeAdded may be Todo/Event/Deadline based on the usage + */ + public void addEvent(Event eventToBeAdded) { + events.add(eventToBeAdded); + } + + /** + * Mark a event as done. + * + * @param eventIndex the index of the event being done +// * @throws DoneUndefinedEventException the event is not defined but the user want to mark it as done + */ + public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { +// try { + events.get(eventIndex).markAsDone(); +// } catch (IndexOutOfBoundsException e) { +// throw new DoneUndefinedEventException(eventIndex); +// } + } + + /** + * Gives the access to the list of events. + * + * @return the ArrayList object to be printed + */ + public ArrayList getEventList() { + return events; + } + + /** + * Returns how many events are in the list. + * + * @return the size of the ArrayList in the EventList object + */ + public int size() { + return events.size(); + } + + /** + * Remove the event indicated by the user. + */ + public void remove(int eventIndex) { + events.remove(eventIndex); + } + + /** + * Returns the element at the specified position in this list. + * + * @param eventIndex index of the event to return + * @return the event at the specified position in this list + */ + public Event get(int eventIndex) { + return events.get(eventIndex); + } + + /** + * Filter the event list to find the events contain the information looking for by the user. + * + * @param filterString the keyword that the user is looking for + * @return the filtered list. this list contains only the events that satisfy the requirement + */ + public ArrayList filterWith(String filterString) { + ArrayList filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getDescription().contains(filterString)) + .collect(toList()); + + return filteredEventList; + } + /** + * Filter the event list to find the events happen on the date looking for by the user. + * + * @param date the date that the user is looking for + * @return the filtered list. this list contains only the events that satisfy the requirement + */ + public ArrayList filterDateWith(LocalDate date) { + ArrayList filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getDate().isEqual(date)) + .collect(toList()); + + return filteredEventList; + } +} diff --git a/src/main/java/NUSchedule/exception/CreatingFileException.java b/src/main/java/NUSchedule/exception/CreatingFileException.java new file mode 100644 index 0000000000..113746946e --- /dev/null +++ b/src/main/java/NUSchedule/exception/CreatingFileException.java @@ -0,0 +1,21 @@ +package NUSchedule.exception; + +/** + * Represents the exception happen when the file is not created successfully. + */ +public class CreatingFileException extends NUScheduleException { + private final String filePath; + + public CreatingFileException(String filePath) { + this.filePath = filePath; + } + + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message + */ + public String getMessage() { + return "The file \"" + filePath + "\" is not created"; + } +} diff --git a/src/main/java/NUSchedule/exception/LoadingException.java b/src/main/java/NUSchedule/exception/LoadingException.java new file mode 100644 index 0000000000..d7989bdf10 --- /dev/null +++ b/src/main/java/NUSchedule/exception/LoadingException.java @@ -0,0 +1,15 @@ +package NUSchedule.exception; + +/** + * Represents the exception when the user edit the file in a wrong way. + */ +public class LoadingException extends NUScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "You edit the file in a wrong format. Please check."; + } +} diff --git a/src/main/java/NUSchedule/exception/NUScheduleException.java b/src/main/java/NUSchedule/exception/NUScheduleException.java index ec7b346d49..b6d83f0b71 100644 --- a/src/main/java/NUSchedule/exception/NUScheduleException.java +++ b/src/main/java/NUSchedule/exception/NUScheduleException.java @@ -1,4 +1,4 @@ -package seedu.duke.exception; +package NUSchedule.exception; public abstract class NUScheduleException extends Exception{ public abstract String getMessage(); diff --git a/src/main/java/NUSchedule/exception/WritingFileException.java b/src/main/java/NUSchedule/exception/WritingFileException.java new file mode 100644 index 0000000000..6f02013b5f --- /dev/null +++ b/src/main/java/NUSchedule/exception/WritingFileException.java @@ -0,0 +1,15 @@ +package NUSchedule.exception; + +/** + * Represents the exception when the file is not correctly written. + */ +public class WritingFileException extends NUScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "something went wrong when writing to file"; + } +} diff --git a/src/main/java/NUSchedule/parser/Parser.java b/src/main/java/NUSchedule/parser/Parser.java index 7d2c573ebc..263e317d90 100644 --- a/src/main/java/NUSchedule/parser/Parser.java +++ b/src/main/java/NUSchedule/parser/Parser.java @@ -1,191 +1,173 @@ -package NUSchedule.Parser; +package NUSchedule.parser; import NUSchedule.command.Command; +import NUSchedule.command.ExitCommand; import NUSchedule.command.PrintFullListCommand; -import NUSchedule.Exception.DateFormatException; -import NUSchedule.Exception.DeleteNumberFormatException; -import NUSchedule.Exception.DoneNumberFormatException; -import NUSchedule.Exception.DukeException; -import NUSchedule.Exception.EmptyDeadlineException; -import NUSchedule.Exception.EmptyDeleteException; -import NUSchedule.Exception.EmptyDoneException; -import NUSchedule.Exception.EmptyEventException; -import NUSchedule.Exception.EmptyFindDateException; -import NUSchedule.Exception.EmptyFindException; -import NUSchedule.Exception.EmptyTodoException; -import NUSchedule.Exception.NoDeadlineTimeException; -import NUSchedule.Exception.NoDeadlineTimeMarkerException; -import NUSchedule.Exception.NoEventTimeException; -import NUSchedule.Exception.NoEventTimeMakerException; -import NUSchedule.Exception.TimeFormatException; -import NUSchedule.Exception.WrongCommandException; -import NUSchedule.Task.Todo; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeParseException; /** * This class contains one function -- parse, to call the respective command function according to the user input. */ public abstract class Parser { public static final String EXIT = "bye"; - public static final String PRINT_TASK_LIST = "list"; - public static final String TASK_DONE = "done"; - public static final String ADD_EVENT = "event"; - public static final String ADD_DEADLINE = "deadline"; - public static final String ADD_TODO = "todo"; - public static final String TASK_DELETE = "delete"; - public static final String TASK_FIND = "find"; + public static final String PRINT_Event_LIST = "list"; + public static final String Event_DONE = "done"; + public static final String ADD_ASSIGNMENT = "assignment"; + public static final String ADD_CLASS = "class"; + public static final String ADD_PERSONAL_EVENT = "personal event"; + public static final String Event_DELETE = "delete"; + public static final String Event_FIND = "find"; public static final String BY = "/by"; public static final String SINGLE_SPACE = " "; public static final String AT = "/at"; - private static final String TASK_FIND_DATE = "date"; + private static final String Event_FIND_DATE = "date"; /** * This function calls the correct command the user want to perform, by returning a <\code>Command object. * * @param fullCommand the full string of user input * @return the specific <\code>Command object to perform what the user want to do - * @throws DukeException includes all exceptions may happen during parsing +// * @throws NUScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand) throws DukeException { + public static Command parse(String fullCommand) /*throws NUScheduleException*/ { // this block deals with exit and list command if (fullCommand.equals(EXIT)) { return new ExitCommand(); - } else if (fullCommand.equals(PRINT_TASK_LIST)) { + } else if (fullCommand.equals(PRINT_Event_LIST)) { return new PrintFullListCommand(); } String[] words = fullCommand.split(SINGLE_SPACE); //this block deals with find command - if (words[0].equals(TASK_FIND)) { - if (fullCommand.substring(4).isBlank()) { - throw new EmptyFindException(); - } - return new FindCommand(fullCommand.substring(5)); - } - - //this block deals with find date command - if (words[0].equals(TASK_FIND_DATE)) { - if (fullCommand.substring(4).isBlank()) { - throw new EmptyFindDateException(); - } - try { - return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); - } catch (DateTimeParseException e) { - throw new DateFormatException(); - } - } - - int taskIndex;//to indicate what is the task we are dealing with. may not be used. - - //this block deals with done command - if (words[0].equals(TASK_DONE)) { - if (fullCommand.substring(4).isBlank()) { - throw new EmptyDoneException(); - } - try { - taskIndex = Integer.parseInt(fullCommand.substring(5)) - 1; - } catch (NumberFormatException e) { - throw new DoneNumberFormatException(); - } - return new DoneCommand(taskIndex); - } - - //this block deals with delete command - if (words[0].equals(TASK_DELETE)) { - if (fullCommand.substring(6).isBlank()) { - throw new EmptyDeleteException(); - } - try { - taskIndex = Integer.parseInt(fullCommand.substring(7)) - 1; - } catch (NumberFormatException e) { - throw new DeleteNumberFormatException(); - } - return new DeleteCommand(taskIndex); - } - - //this block deals with add command - //we shall check that the user input is not meant for any other command beforehand - //because the default block will throw an exception. - // i.e. when enter this block, the parser will not go to any other blocks - int dividerPosition; - int timeDivider; - String dateTime; - switch (words[0]) { - case ADD_EVENT: - dividerPosition = fullCommand.indexOf(AT); - - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMakerException(); - } - if (fullCommand.substring(5, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new NUSchedule.Task.PersonalEvent(fullCommand.substring(6, dividerPosition), LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - - case ADD_DEADLINE: - dividerPosition = fullCommand.indexOf(BY); - - if (fullCommand.substring(8).isBlank()) { - throw new EmptyDeadlineException(); - } - if (dividerPosition == -1) { - throw new NoDeadlineTimeMarkerException(); - } - if (fullCommand.substring(8, dividerPosition).isBlank()) { - throw new EmptyDeadlineException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoDeadlineTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new NUSchedule.Task.Assignment(fullCommand.substring(9, dividerPosition), LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - case ADD_TODO: - - try { - if (fullCommand.substring(5).isBlank()) { - throw new EmptyTodoException(); - } - return new AddCommand(new Todo(fullCommand.substring(5))); - } catch (StringIndexOutOfBoundsException e) { - throw new EmptyTodoException(); - } - - default: - throw new WrongCommandException(); - - } - +// if (words[0].equals(Event_FIND)) { +// if (fullCommand.substring(4).isBlank()) { +// throw new EmptyFindException(); +// } +// return new FindCommand(fullCommand.substring(5)); +// } +// +// //this block deals with find date command +// if (words[0].equals(Event_FIND_DATE)) { +// if (fullCommand.substring(4).isBlank()) { +// throw new EmptyFindDateException(); +// } +// try { +// return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); +// } catch (DateTimeParseException e) { +// throw new DateFormatException(); +// } +// } +// +// int EventIndex;//to indicate what is the Event we are dealing with. may not be used. +// +// //this block deals with done command +// if (words[0].equals(Event_DONE)) { +// if (fullCommand.substring(4).isBlank()) { +// throw new EmptyDoneException(); +// } +// try { +// EventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; +// } catch (NumberFormatException e) { +// throw new DoneNumberFormatException(); +// } +// return new DoneCommand(EventIndex); +// } +// +// //this block deals with delete command +// if (words[0].equals(Event_DELETE)) { +// if (fullCommand.substring(6).isBlank()) { +// throw new EmptyDeleteException(); +// } +// try { +// EventIndex = Integer.parseInt(fullCommand.substring(7)) - 1; +// } catch (NumberFormatException e) { +// throw new DeleteNumberFormatException(); +// } +// return new DeleteCommand(EventIndex); +// } +// +// //this block deals with add command +// //we shall check that the user input is not meant for any other command beforehand +// //because the default block will throw an exception. +// // i.e. when enter this block, the parser will not go to any other blocks +// int dividerPosition; +// int timeDivider; +// String dateTime; +// switch (words[0]) { +// case ADD_ASSIGNMENT: +// dividerPosition = fullCommand.indexOf(AT); +// +// if (fullCommand.substring(5).isBlank()) { +// throw new EmptyEventException(); +// } +// if (dividerPosition == -1) { +// throw new NoEventTimeMakerException(); +// } +// if (fullCommand.substring(5, dividerPosition).isBlank()) { +// throw new EmptyEventException(); +// } +// try { +// fullCommand.substring(dividerPosition + 4); +// } catch (StringIndexOutOfBoundsException e) { +// throw new NoEventTimeException(); +// } +// try { +// timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); +// dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) +// + "T" +// + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); +// return new AddCommand(new NUSchedule.Event.PersonalEvent(fullCommand.substring(6, dividerPosition), LocalDateTime.parse(dateTime))); +// } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { +// throw new TimeFormatException(); +// } +// +// +// case ADD_CLASS: +// dividerPosition = fullCommand.indexOf(BY); +// +// if (fullCommand.substring(8).isBlank()) { +// throw new EmptyDeadlineException(); +// } +// if (dividerPosition == -1) { +// throw new NoDeadlineTimeMarkerException(); +// } +// if (fullCommand.substring(8, dividerPosition).isBlank()) { +// throw new EmptyDeadlineException(); +// } +// try { +// fullCommand.substring(dividerPosition + 4); +// } catch (StringIndexOutOfBoundsException e) { +// throw new NoDeadlineTimeException(); +// } +// try { +// timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); +// dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) +// + "T" +// + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); +// return new AddCommand(new NUSchedule.Event.Assignment(fullCommand.substring(9, dividerPosition), LocalDateTime.parse(dateTime))); +// } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { +// throw new TimeFormatException(); +// } +// +// case ADD_PERSONAL_EVENT: +// +// try { +// if (fullCommand.substring(5).isBlank()) { +// throw new EmptyTodoException(); +// } +// return new AddCommand(new Todo(fullCommand.substring(5))); +// } catch (StringIndexOutOfBoundsException e) { +// throw new EmptyTodoException(); +// } +// +// default: +// throw new WrongCommandException(); +// +// } + + return null;//delete later } + } + diff --git a/src/main/java/NUSchedule/storage/Storage.java b/src/main/java/NUSchedule/storage/Storage.java index 9d2fc35d7b..3abcf6b1b5 100644 --- a/src/main/java/NUSchedule/storage/Storage.java +++ b/src/main/java/NUSchedule/storage/Storage.java @@ -1,19 +1,15 @@ -package NUSchedule.Storage; +package NUSchedule.storage; -import NUSchedule.Exception.CreatingFileException; -import NUSchedule.Exception.LoadingException; -import NUSchedule.Exception.WritingFileException; -import NUSchedule.Task.Task; -import NUSchedule.Task.Todo; + +import NUSchedule.event.Event; +import NUSchedule.exception.CreatingFileException; +import NUSchedule.exception.LoadingException; +import NUSchedule.exception.WritingFileException; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; -import java.time.LocalDateTime; -import java.time.format.DateTimeParseException; import java.util.ArrayList; -import java.util.Scanner; /** * This class creates the folder and file path if it's not already created, and @@ -54,16 +50,16 @@ private static void createFolderAndFIle(String filePath) throws CreatingFileExce /** - * Save the data of the task list to the file. + * Save the data of the Event list to the file. * - * @param tasks the list of tasks provided by a variable from a TaskList object + * @param Events the list of Events provided by a variable from a EventList object * @throws WritingFileException represents the file is not correctly written */ - public void writeFile(ArrayList tasks) throws WritingFileException { + public void writeFile(ArrayList Events) throws WritingFileException { try { FileWriter fw = new FileWriter(filePath); - for (Task task : tasks) { - fw.write(task.fileString()); + for (Event Event : Events) { + fw.write(Event.fileString()); fw.write(System.lineSeparator()); } fw.close(); @@ -73,54 +69,12 @@ public void writeFile(ArrayList tasks) throws WritingFileException { } /** - * Prepares the data in the file as an ArrayList, which is used to construct the TaskList. + * Prepares the data in the file as an ArrayList, which is used to construct the EventList. * - * @return the tasks in an ArrayList - * @throws LoadingException represents the tasks is not correctly created + * @return the Events in an ArrayList + * @throws LoadingException represents the Events is not correctly created */ - public ArrayList load() throws LoadingException { - ArrayList tasks = new ArrayList(); - File dataFile = new File(filePath); - try { - Scanner s = new Scanner(dataFile); - while (s.hasNext()) { - String[] words = s.nextLine().split(REGEX_IN_FILE); - switch (words[0]) { - case "T": - tasks.add(new Todo(words[2])); - if (Integer.parseInt(words[1]) == 1) { - tasks.get(tasks.size() - 1).markAsDone(); - } - break; - case "E": - try { - tasks.add(new NUSchedule.Task.PersonalEvent(words[2], LocalDateTime.parse(words[3]))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new LoadingException(); - } - if (Integer.parseInt(words[1]) == 1) { - tasks.get(tasks.size() - 1).markAsDone(); - } - break; - case "D": - try { - tasks.add(new NUSchedule.Task.Assignment(words[2], LocalDateTime.parse(words[3]))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new LoadingException(); - } - if (Integer.parseInt(words[1]) == 1) { - tasks.get(tasks.size() - 1).markAsDone(); - } - break; - default: - throw new LoadingException(); - } - } - } catch (FileNotFoundException e) { - System.out.println("file not found"); - } catch (IndexOutOfBoundsException e) { - throw new LoadingException(); - } - return tasks; - } +// public ArrayList load() throws LoadingException { +//todo to be implement +// } } diff --git a/src/main/java/NUSchedule/ui/UI.java b/src/main/java/NUSchedule/ui/UI.java index 0c38df0e37..3361c93cd6 100644 --- a/src/main/java/NUSchedule/ui/UI.java +++ b/src/main/java/NUSchedule/ui/UI.java @@ -1,7 +1,7 @@ -package seedu.duke.ui; +package NUSchedule.ui; -import NUSchedule.Task.Task; +import NUSchedule.event.Event; import java.util.ArrayList; @@ -12,15 +12,15 @@ */ public class UI { - public static final String LOGO = " _ _ _ _ ___ _ _ _ \n" - + "| | | | | | | /___| | | | | | | \n" - + "| \\ | | | | |// | | | | | |\n" - + "| |\\\\ | | | | |\\\\ | | ___ | | | | ___ \n" - + "| | \\\\ | | | | | \\\\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" - + "| | \\\\ | | | | | \\\\ /___| ____ |<___>>| __ | | | | |<___>> \n" - + "| | \\\\| | | | | \\\\ // | | | | ___/ | | | | | | | | ___/ \n" - + "| | \\ | |______| |___// \\\\___| | | |\\____ | | | | |__| | |\\____\n" - + "|_| |_|__________|___/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; + public static final String LOGO = " _ _ _ _ ____ _ _ _ \n" + + "| | | | | | | / ___| | | | | | | \n" + + "| \\ | | | | |/ / | | | | | |\n" + + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___ \n" + + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" + + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___|| \n" + + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/ \n" + + "| | \\ | |______| |___/ / \\\\___| | | |\\____ | |__| | |__| | |\\____\n" + + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; public static final String LINE_DIVIDER = "____________________________________________________________"; public static final String EXIT_MESSAGE = "Bye. Hope to see you again soon!"; private final Scanner in; @@ -58,30 +58,30 @@ public void printLine() { /** * Prints all the events with labels, based on the input list. * - * @param tasks an <\code>ArrayList of events to be printed one by one. + * @param Events an <\code>ArrayList of events to be printed one by one. */ - public void printTaskList(ArrayList tasks) { - int numPrintedTasks = 0; + public void printEventList(ArrayList Events) { + int numPrintedEvents = 0; - System.out.println(" Here are the tasks in your list:"); - for (Task task : tasks) { - numPrintedTasks++; - System.out.println(numPrintedTasks + ". " + task.toString()); + System.out.println(" Here are the Events in your list:"); + for (Event Event : Events) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + Event.toString()); } } /** - * Prints all the tasks of the filtered list with labels, based on the input list. + * Prints all the Events of the filtered list with labels, based on the input list. * - * @param tasks an <\code>ArrayList of tasks to be printed one by one + * @param Events an <\code>ArrayList of Events to be printed one by one */ - public void printFilteredTaskList(ArrayList tasks) { - int numPrintedTasks = 0; + public void printFilteredEventList(ArrayList Events) { + int numPrintedEvents = 0; - System.out.println(" Here are the matching tasks in your list:"); - for (Task task : tasks) { - numPrintedTasks++; - System.out.println(numPrintedTasks + ". " + task.toString()); + System.out.println(" Here are the matching Events in your list:"); + for (Event Event : Events) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + Event.toString()); } } @@ -121,55 +121,55 @@ public void printExitMessage() { } /** - * Take in a size and prints the total number of tasks. + * Take in a size and prints the total number of Events. * * @param size get by calling ArrayList::Size() */ - public void printNumTask(int size) { - System.out.println("Now you have " + size + " tasks in the list."); + public void printNumEvent(int size) { + System.out.println("Now you have " + size + " Events in the list."); } /** - * Prints the message when the user mark some task as done. + * Prints the message when the user mark some Event as done. * - * @param task the task being done + * @param Event the Event being done */ - public void printDoneMessage(Task task) { - System.out.println("Nice! I've marked this task as done: "); - System.out.println(task.toString()); + public void printDoneMessage(Event Event) { + System.out.println("Nice! I've marked this Event as done: "); + System.out.println(Event.toString()); } /** - * Prints the message when the user deletes some task. + * Prints the message when the user deletes some Event. * - * @param task the task being deleted + * @param Event the Event being deleted */ - public void printDeleteMessage(Task task) { - System.out.println("Noted. I've removed this task: "); - System.out.println(task.toString()); + public void printDeleteMessage(Event Event) { + System.out.println("Noted. I've removed this Event: "); + System.out.println(Event.toString()); } /** - * Prints the message when the user adds some task. + * Prints the message when the user adds some Event. * - * @param taskAdded the task being added + * @param EventAdded the Event being added */ - public void printAddTaskMessage(Task taskAdded) { - System.out.println("Got it. I've added this task: "); - System.out.println(taskAdded.toString()); + public void printAddEventMessage(Event EventAdded) { + System.out.println("Got it. I've added this Event: "); + System.out.println(EventAdded.toString()); } /** - * Prints all the tasks of the filtered list with labels, based on the input list. + * Prints all the Events of the filtered list with labels, based on the input list. * - * @param filteredTaskList an <\code>ArrayList of tasks to be printed one by one + * @param filteredEventList an <\code>ArrayList of Events to be printed one by one */ - public void printFilteredDateTaskList(ArrayList filteredTaskList) { - int numPrintedTasks = 0; + public void printFilteredDateEventList(ArrayList filteredEventList) { + int numPrintedEvents = 0; - System.out.println(" Here are the tasks on the given date in your list:"); - for (Task task : filteredTaskList) { - numPrintedTasks++; - System.out.println(numPrintedTasks + ". " + task.toString()); + System.out.println(" Here are the Events on the given date in your list:"); + for (Event Event : filteredEventList) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + Event.toString()); } } diff --git a/src/test/java/seedu/duke/NUScheduleTest.java b/src/test/java/seedu/duke/NUScheduleTest.java index f828f208d1..bd60a15dd8 100644 --- a/src/test/java/seedu/duke/NUScheduleTest.java +++ b/src/test/java/seedu/duke/NUScheduleTest.java @@ -1,4 +1,4 @@ -package seedu.duke; +package NUSchedule; import static org.junit.jupiter.api.Assertions.assertTrue; From 82fcdfc1c2f8e1e45426494caaaf291b69390c04 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 11 Oct 2020 04:02:44 +0800 Subject: [PATCH 010/299] adds the location class --- src/main/java/NUSchedule/event/Event.java | 4 +++- src/main/java/NUSchedule/event/PersonalEvent.java | 4 ++-- src/main/java/NUSchedule/location/Location.java | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/main/java/NUSchedule/location/Location.java diff --git a/src/main/java/NUSchedule/event/Event.java b/src/main/java/NUSchedule/event/Event.java index 6ddc969143..6102bfbb1c 100644 --- a/src/main/java/NUSchedule/event/Event.java +++ b/src/main/java/NUSchedule/event/Event.java @@ -1,6 +1,8 @@ package NUSchedule.event; +import NUSchedule.location.Location; + import java.time.LocalDate; /** @@ -14,7 +16,7 @@ public abstract class Event { protected String description; protected boolean isDone; - + protected Location location;//to be implemented public Event(String description) { this.description = description; this.isDone = false; diff --git a/src/main/java/NUSchedule/event/PersonalEvent.java b/src/main/java/NUSchedule/event/PersonalEvent.java index f8abf329e8..aa9c6cd8e9 100644 --- a/src/main/java/NUSchedule/event/PersonalEvent.java +++ b/src/main/java/NUSchedule/event/PersonalEvent.java @@ -40,9 +40,9 @@ public PersonalEvent(String description, LocalDateTime at) { * Prepare the string to be printed in the list. * * @return the string required in a certain format - * Example of the format: [E][✘]a (at: Feb 20 2020 08:00) + * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) */ public String toString() { - return "[E]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; } } diff --git a/src/main/java/NUSchedule/location/Location.java b/src/main/java/NUSchedule/location/Location.java new file mode 100644 index 0000000000..3a32775755 --- /dev/null +++ b/src/main/java/NUSchedule/location/Location.java @@ -0,0 +1,8 @@ +package NUSchedule.location; + +public class Location { + private String location=""; + public Location(String location){ + this.location=location; + } +} From d8f0ffbda9ac85ab952287310256a2161d07ed34 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 13 Oct 2020 13:49:59 +0800 Subject: [PATCH 011/299] Rename eventList.java to EventList.java --- .../java/NUSchedule/eventList/{eventList.java => EventList.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/NUSchedule/eventList/{eventList.java => EventList.java} (100%) diff --git a/src/main/java/NUSchedule/eventList/eventList.java b/src/main/java/NUSchedule/eventList/EventList.java similarity index 100% rename from src/main/java/NUSchedule/eventList/eventList.java rename to src/main/java/NUSchedule/eventList/EventList.java From cf4c3f7965532ff1d8abdde73cb90812f601b181 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 14:17:03 +0800 Subject: [PATCH 012/299] remove NUSchedule package to fulfill the coding standard --- .../java/{NUSchedule => }/NUSchedule.java | 20 ++- .../{NUSchedule => }/command/Command.java | 13 +- .../{NUSchedule => }/command/ExitCommand.java | 8 +- .../command/PrintFullListCommand.java | 13 +- .../{NUSchedule => }/event/Assignment.java | 2 +- .../java/{NUSchedule => }/event/Class.java | 2 +- .../java/{NUSchedule => }/event/Event.java | 4 +- .../{NUSchedule => }/event/PersonalEvent.java | 2 +- src/main/java/eventList/EventList.java | 118 ++++++++++++++++++ .../exception/CreatingFileException.java | 2 +- .../exception/LoadingException.java | 2 +- .../exception/NUScheduleException.java | 2 +- .../exception/WritingFileException.java | 2 +- .../{NUSchedule => }/location/Location.java | 2 +- .../java/{NUSchedule => }/parser/Parser.java | 8 +- .../{NUSchedule => }/storage/Storage.java | 10 +- src/main/java/{NUSchedule => }/ui/UI.java | 39 +++--- 17 files changed, 183 insertions(+), 66 deletions(-) rename src/main/java/{NUSchedule => }/NUSchedule.java (78%) rename src/main/java/{NUSchedule => }/command/Command.java (70%) rename src/main/java/{NUSchedule => }/command/ExitCommand.java (79%) rename src/main/java/{NUSchedule => }/command/PrintFullListCommand.java (65%) rename src/main/java/{NUSchedule => }/event/Assignment.java (97%) rename src/main/java/{NUSchedule => }/event/Class.java (96%) rename src/main/java/{NUSchedule => }/event/Event.java (96%) rename src/main/java/{NUSchedule => }/event/PersonalEvent.java (97%) create mode 100644 src/main/java/eventList/EventList.java rename src/main/java/{NUSchedule => }/exception/CreatingFileException.java (94%) rename src/main/java/{NUSchedule => }/exception/LoadingException.java (92%) rename src/main/java/{NUSchedule => }/exception/NUScheduleException.java (77%) rename src/main/java/{NUSchedule => }/exception/WritingFileException.java (92%) rename src/main/java/{NUSchedule => }/location/Location.java (82%) rename src/main/java/{NUSchedule => }/parser/Parser.java (97%) rename src/main/java/{NUSchedule => }/storage/Storage.java (91%) rename src/main/java/{NUSchedule => }/ui/UI.java (74%) diff --git a/src/main/java/NUSchedule/NUSchedule.java b/src/main/java/NUSchedule.java similarity index 78% rename from src/main/java/NUSchedule/NUSchedule.java rename to src/main/java/NUSchedule.java index 573fe3e860..143f2cc97f 100644 --- a/src/main/java/NUSchedule/NUSchedule.java +++ b/src/main/java/NUSchedule.java @@ -1,19 +1,17 @@ -package NUSchedule; - -import NUSchedule.command.Command; -import NUSchedule.eventList.EventList; -import NUSchedule.exception.CreatingFileException; -import NUSchedule.exception.NUScheduleException; -import NUSchedule.parser.Parser; -import NUSchedule.storage.Storage; -import NUSchedule.ui.UI; +import command.Command; +import eventList.EventList; +import exception.CreatingFileException; +import exception.NUScheduleException; +import parser.Parser; +import storage.Storage; +import ui.UI; public class NUSchedule { /** * Main entry-point for the java.duke.Duke application. */ private Storage storage; - private EventList Events; + private EventList events; private UI ui; public NUSchedule(String filePath) { @@ -42,7 +40,7 @@ public void run() { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") Command c = Parser.parse(fullCommand); - c.execute(Events, ui, storage); + c.execute(events, ui, storage); isExit = c.isExit(); } catch (NUScheduleException e) { ui.showError(e.getMessage()); diff --git a/src/main/java/NUSchedule/command/Command.java b/src/main/java/command/Command.java similarity index 70% rename from src/main/java/NUSchedule/command/Command.java rename to src/main/java/command/Command.java index 56dc558a76..f41a4ffa32 100644 --- a/src/main/java/NUSchedule/command/Command.java +++ b/src/main/java/command/Command.java @@ -1,9 +1,9 @@ -package NUSchedule.command; +package command; -import NUSchedule.storage.Storage; -import NUSchedule.eventList.EventList; -import NUSchedule.ui.UI; -import NUSchedule.exception.NUScheduleException; +import storage.Storage; +import eventList.EventList; +import ui.UI; +import exception.NUScheduleException; /** * Represents the command to be executed. @@ -17,7 +17,8 @@ public abstract class Command { * @param Events the list of Events. * @param ui do outputs. * @param storage store the data. - * @throws NUScheduleException the exceptions can happen in this program, to be handled based on the specific exception. + * @throws NUScheduleException the exceptions can happen in this program, + * to be handled based on the specific exception. */ public abstract void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException; diff --git a/src/main/java/NUSchedule/command/ExitCommand.java b/src/main/java/command/ExitCommand.java similarity index 79% rename from src/main/java/NUSchedule/command/ExitCommand.java rename to src/main/java/command/ExitCommand.java index d1d7b3f64f..c906bb4091 100644 --- a/src/main/java/NUSchedule/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -1,8 +1,8 @@ -package NUSchedule.command; +package command; -import NUSchedule.eventList.EventList; -import NUSchedule.storage.Storage; -import NUSchedule.ui.UI; +import eventList.EventList; +import storage.Storage; +import ui.UI; /** * Represents the command call when the user exits this program. diff --git a/src/main/java/NUSchedule/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java similarity index 65% rename from src/main/java/NUSchedule/command/PrintFullListCommand.java rename to src/main/java/command/PrintFullListCommand.java index d023f57851..f84c49bc38 100644 --- a/src/main/java/NUSchedule/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -1,9 +1,9 @@ -package NUSchedule.command; +package command; -import NUSchedule.storage.Storage; -import NUSchedule.eventList.EventList; -import NUSchedule.ui.UI; -import NUSchedule.exception.NUScheduleException; +import storage.Storage; +import eventList.EventList; +import ui.UI; +import exception.NUScheduleException; public class PrintFullListCommand extends Command { @@ -13,7 +13,8 @@ public class PrintFullListCommand extends Command { * @param Events the list of Events. * @param ui do outputs. * @param storage store the data. - * @throws NUScheduleException the exceptions can happen in this function, to be handled based on the specific exception. + * @throws NUScheduleException the exceptions can happen in this function, + * to be handled based on the specific exception. */ @Override public void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException { diff --git a/src/main/java/NUSchedule/event/Assignment.java b/src/main/java/event/Assignment.java similarity index 97% rename from src/main/java/NUSchedule/event/Assignment.java rename to src/main/java/event/Assignment.java index e3801784b7..3c38ec9839 100644 --- a/src/main/java/NUSchedule/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -1,4 +1,4 @@ -package NUSchedule.event; +package event; import java.time.LocalDate; diff --git a/src/main/java/NUSchedule/event/Class.java b/src/main/java/event/Class.java similarity index 96% rename from src/main/java/NUSchedule/event/Class.java rename to src/main/java/event/Class.java index 7503c652ec..6f184da7ba 100644 --- a/src/main/java/NUSchedule/event/Class.java +++ b/src/main/java/event/Class.java @@ -1,4 +1,4 @@ -package NUSchedule.event; +package event; /** diff --git a/src/main/java/NUSchedule/event/Event.java b/src/main/java/event/Event.java similarity index 96% rename from src/main/java/NUSchedule/event/Event.java rename to src/main/java/event/Event.java index 6102bfbb1c..0e2ab8e940 100644 --- a/src/main/java/NUSchedule/event/Event.java +++ b/src/main/java/event/Event.java @@ -1,7 +1,7 @@ -package NUSchedule.event; +package event; -import NUSchedule.location.Location; +import location.Location; import java.time.LocalDate; diff --git a/src/main/java/NUSchedule/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java similarity index 97% rename from src/main/java/NUSchedule/event/PersonalEvent.java rename to src/main/java/event/PersonalEvent.java index aa9c6cd8e9..ef9ad3c019 100644 --- a/src/main/java/NUSchedule/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -1,4 +1,4 @@ -package NUSchedule.event; +package event; import java.time.LocalDate; diff --git a/src/main/java/eventList/EventList.java b/src/main/java/eventList/EventList.java new file mode 100644 index 0000000000..7cfce95552 --- /dev/null +++ b/src/main/java/eventList/EventList.java @@ -0,0 +1,118 @@ +package eventList; + + +import event.Event; + +import java.time.LocalDate; +import java.util.ArrayList; + +import static java.util.stream.Collectors.toList; + +/** + * Contains the list of the events and provides ways to delete/add/mark as done events. + */ +public class EventList { + private final ArrayList events; + + /** + * Construct the events as an empty ArrayList. + */ + public EventList() { + events = new ArrayList(); + } + + /** + * When loading from the file, create the list as provided in the file. + * + * @param events provided by Storage::load() + * @see storage.Storage + */ + public EventList(ArrayList events) { + this.events = events; + } + + /** + * Adds an event to the list. + * + * @param eventToBeAdded may be Todo/Event/Deadline based on the usage + */ + public void addEvent(Event eventToBeAdded) { + events.add(eventToBeAdded); + } + + /** + * Mark a event as done. + * + * @param eventIndex the index of the event being done +// * @throws DoneUndefinedEventException the event is not defined but the user want to mark it as done + */ + public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { +// try { + events.get(eventIndex).markAsDone(); +// } catch (IndexOutOfBoundsException e) { +// throw new DoneUndefinedEventException(eventIndex); +// } + } + + /** + * Gives the access to the list of events. + * + * @return the ArrayList object to be printed + */ + public ArrayList getEventList() { + return events; + } + + /** + * Returns how many events are in the list. + * + * @return the size of the ArrayList in the EventList object + */ + public int size() { + return events.size(); + } + + /** + * Remove the event indicated by the user. + */ + public void remove(int eventIndex) { + events.remove(eventIndex); + } + + /** + * Returns the element at the specified position in this list. + * + * @param eventIndex index of the event to return + * @return the event at the specified position in this list + */ + public Event get(int eventIndex) { + return events.get(eventIndex); + } + + /** + * Filter the event list to find the events contain the information looking for by the user. + * + * @param filterString the keyword that the user is looking for + * @return the filtered list. this list contains only the events that satisfy the requirement + */ + public ArrayList filterWith(String filterString) { + ArrayList filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getDescription().contains(filterString)) + .collect(toList()); + + return filteredEventList; + } + /** + * Filter the event list to find the events happen on the date looking for by the user. + * + * @param date the date that the user is looking for + * @return the filtered list. this list contains only the events that satisfy the requirement + */ + public ArrayList filterDateWith(LocalDate date) { + ArrayList filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getDate().isEqual(date)) + .collect(toList()); + + return filteredEventList; + } +} diff --git a/src/main/java/NUSchedule/exception/CreatingFileException.java b/src/main/java/exception/CreatingFileException.java similarity index 94% rename from src/main/java/NUSchedule/exception/CreatingFileException.java rename to src/main/java/exception/CreatingFileException.java index 113746946e..8215957f30 100644 --- a/src/main/java/NUSchedule/exception/CreatingFileException.java +++ b/src/main/java/exception/CreatingFileException.java @@ -1,4 +1,4 @@ -package NUSchedule.exception; +package exception; /** * Represents the exception happen when the file is not created successfully. diff --git a/src/main/java/NUSchedule/exception/LoadingException.java b/src/main/java/exception/LoadingException.java similarity index 92% rename from src/main/java/NUSchedule/exception/LoadingException.java rename to src/main/java/exception/LoadingException.java index d7989bdf10..fda1f7eb81 100644 --- a/src/main/java/NUSchedule/exception/LoadingException.java +++ b/src/main/java/exception/LoadingException.java @@ -1,4 +1,4 @@ -package NUSchedule.exception; +package exception; /** * Represents the exception when the user edit the file in a wrong way. diff --git a/src/main/java/NUSchedule/exception/NUScheduleException.java b/src/main/java/exception/NUScheduleException.java similarity index 77% rename from src/main/java/NUSchedule/exception/NUScheduleException.java rename to src/main/java/exception/NUScheduleException.java index b6d83f0b71..207080891b 100644 --- a/src/main/java/NUSchedule/exception/NUScheduleException.java +++ b/src/main/java/exception/NUScheduleException.java @@ -1,4 +1,4 @@ -package NUSchedule.exception; +package exception; public abstract class NUScheduleException extends Exception{ public abstract String getMessage(); diff --git a/src/main/java/NUSchedule/exception/WritingFileException.java b/src/main/java/exception/WritingFileException.java similarity index 92% rename from src/main/java/NUSchedule/exception/WritingFileException.java rename to src/main/java/exception/WritingFileException.java index 6f02013b5f..12dce4a7b8 100644 --- a/src/main/java/NUSchedule/exception/WritingFileException.java +++ b/src/main/java/exception/WritingFileException.java @@ -1,4 +1,4 @@ -package NUSchedule.exception; +package exception; /** * Represents the exception when the file is not correctly written. diff --git a/src/main/java/NUSchedule/location/Location.java b/src/main/java/location/Location.java similarity index 82% rename from src/main/java/NUSchedule/location/Location.java rename to src/main/java/location/Location.java index 3a32775755..2a201181d4 100644 --- a/src/main/java/NUSchedule/location/Location.java +++ b/src/main/java/location/Location.java @@ -1,4 +1,4 @@ -package NUSchedule.location; +package location; public class Location { private String location=""; diff --git a/src/main/java/NUSchedule/parser/Parser.java b/src/main/java/parser/Parser.java similarity index 97% rename from src/main/java/NUSchedule/parser/Parser.java rename to src/main/java/parser/Parser.java index 263e317d90..5a1d147e73 100644 --- a/src/main/java/NUSchedule/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,9 +1,9 @@ -package NUSchedule.parser; +package parser; -import NUSchedule.command.Command; -import NUSchedule.command.ExitCommand; -import NUSchedule.command.PrintFullListCommand; +import command.Command; +import command.ExitCommand; +import command.PrintFullListCommand; /** * This class contains one function -- parse, to call the respective command function according to the user input. diff --git a/src/main/java/NUSchedule/storage/Storage.java b/src/main/java/storage/Storage.java similarity index 91% rename from src/main/java/NUSchedule/storage/Storage.java rename to src/main/java/storage/Storage.java index 3abcf6b1b5..659b6a39a7 100644 --- a/src/main/java/NUSchedule/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -1,10 +1,10 @@ -package NUSchedule.storage; +package storage; -import NUSchedule.event.Event; -import NUSchedule.exception.CreatingFileException; -import NUSchedule.exception.LoadingException; -import NUSchedule.exception.WritingFileException; +import event.Event; +import exception.CreatingFileException; +import exception.LoadingException; +import exception.WritingFileException; import java.io.File; import java.io.FileWriter; diff --git a/src/main/java/NUSchedule/ui/UI.java b/src/main/java/ui/UI.java similarity index 74% rename from src/main/java/NUSchedule/ui/UI.java rename to src/main/java/ui/UI.java index 3361c93cd6..0bce0af633 100644 --- a/src/main/java/NUSchedule/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -1,7 +1,7 @@ -package NUSchedule.ui; +package ui; -import NUSchedule.event.Event; +import event.Event; import java.util.ArrayList; @@ -12,15 +12,16 @@ */ public class UI { - public static final String LOGO = " _ _ _ _ ____ _ _ _ \n" - + "| | | | | | | / ___| | | | | | | \n" - + "| \\ | | | | |/ / | | | | | |\n" - + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___ \n" - + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" - + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___|| \n" - + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/ \n" - + "| | \\ | |______| |___/ / \\\\___| | | |\\____ | |__| | |__| | |\\____\n" - + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; + public static final String LOGO = + " _ _ _ _ ____ _ _ _ \n" + + "| | | | | | | / ___| | | | | | | \n" + + "| \\ | | | | |/ / | | | | | |\n" + + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___ \n" + + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" + + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___|| \n" + + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/ \n" + + "| | \\ | |______| |___/ / \\\\___| | | |\\____ | |__| | |__| | |\\____\n" + + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; public static final String LINE_DIVIDER = "____________________________________________________________"; public static final String EXIT_MESSAGE = "Bye. Hope to see you again soon!"; private final Scanner in; @@ -73,15 +74,15 @@ public void printEventList(ArrayList Events) { /** * Prints all the Events of the filtered list with labels, based on the input list. * - * @param Events an <\code>ArrayList of Events to be printed one by one + * @param events an <\code>ArrayList of Events to be printed one by one */ - public void printFilteredEventList(ArrayList Events) { + public void printFilteredEventList(ArrayList events) { int numPrintedEvents = 0; System.out.println(" Here are the matching Events in your list:"); - for (Event Event : Events) { + for (Event event : events) { numPrintedEvents++; - System.out.println(numPrintedEvents + ". " + Event.toString()); + System.out.println(numPrintedEvents + ". " + event.toString()); } } @@ -158,6 +159,7 @@ public void printAddEventMessage(Event EventAdded) { System.out.println("Got it. I've added this Event: "); System.out.println(EventAdded.toString()); } + /** * Prints all the Events of the filtered list with labels, based on the input list. * @@ -167,14 +169,11 @@ public void printFilteredDateEventList(ArrayList filteredEventList) { int numPrintedEvents = 0; System.out.println(" Here are the Events on the given date in your list:"); - for (Event Event : filteredEventList) { + for (Event event : filteredEventList) { numPrintedEvents++; - System.out.println(numPrintedEvents + ". " + Event.toString()); + System.out.println(numPrintedEvents + ". " + event.toString()); } } - - - } From 38d0f889c7f4c2cc18898fccc28baf1877182309 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 14:23:11 +0800 Subject: [PATCH 013/299] Update comments --- src/main/java/event/Event.java | 1 - src/main/java/ui/UI.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 0e2ab8e940..33c8d4e62b 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -1,6 +1,5 @@ package event; - import location.Location; import java.time.LocalDate; diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 0bce0af633..6bf5b6624d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -159,7 +159,7 @@ public void printAddEventMessage(Event EventAdded) { System.out.println("Got it. I've added this Event: "); System.out.println(EventAdded.toString()); } - + /** * Prints all the Events of the filtered list with labels, based on the input list. * From 60ff3296babfb1925b681755c3ed77c9b163908d Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 14:25:42 +0800 Subject: [PATCH 014/299] delete NUSchedule package --- .../java/NUSchedule/eventList/EventList.java | 118 ------------------ 1 file changed, 118 deletions(-) delete mode 100644 src/main/java/NUSchedule/eventList/EventList.java diff --git a/src/main/java/NUSchedule/eventList/EventList.java b/src/main/java/NUSchedule/eventList/EventList.java deleted file mode 100644 index 0d0dbae6b4..0000000000 --- a/src/main/java/NUSchedule/eventList/EventList.java +++ /dev/null @@ -1,118 +0,0 @@ -package NUSchedule.eventList; - - -import NUSchedule.event.Event; - -import java.time.LocalDate; -import java.util.ArrayList; - -import static java.util.stream.Collectors.toList; - -/** - * Contains the list of the events and provides ways to delete/add/mark as done events. - */ -public class EventList { - private final ArrayList events; - - /** - * Construct the events as an empty ArrayList. - */ - public EventList() { - events = new ArrayList(); - } - - /** - * When loading from the file, create the list as provided in the file. - * - * @param events provided by Storage::load() - * @see NUSchedule.storage.Storage - */ - public EventList(ArrayList events) { - this.events = events; - } - - /** - * Adds an event to the list. - * - * @param eventToBeAdded may be Todo/Event/Deadline based on the usage - */ - public void addEvent(Event eventToBeAdded) { - events.add(eventToBeAdded); - } - - /** - * Mark a event as done. - * - * @param eventIndex the index of the event being done -// * @throws DoneUndefinedEventException the event is not defined but the user want to mark it as done - */ - public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { -// try { - events.get(eventIndex).markAsDone(); -// } catch (IndexOutOfBoundsException e) { -// throw new DoneUndefinedEventException(eventIndex); -// } - } - - /** - * Gives the access to the list of events. - * - * @return the ArrayList object to be printed - */ - public ArrayList getEventList() { - return events; - } - - /** - * Returns how many events are in the list. - * - * @return the size of the ArrayList in the EventList object - */ - public int size() { - return events.size(); - } - - /** - * Remove the event indicated by the user. - */ - public void remove(int eventIndex) { - events.remove(eventIndex); - } - - /** - * Returns the element at the specified position in this list. - * - * @param eventIndex index of the event to return - * @return the event at the specified position in this list - */ - public Event get(int eventIndex) { - return events.get(eventIndex); - } - - /** - * Filter the event list to find the events contain the information looking for by the user. - * - * @param filterString the keyword that the user is looking for - * @return the filtered list. this list contains only the events that satisfy the requirement - */ - public ArrayList filterWith(String filterString) { - ArrayList filteredEventList = (ArrayList) events.stream() - .filter(s -> s.getDescription().contains(filterString)) - .collect(toList()); - - return filteredEventList; - } - /** - * Filter the event list to find the events happen on the date looking for by the user. - * - * @param date the date that the user is looking for - * @return the filtered list. this list contains only the events that satisfy the requirement - */ - public ArrayList filterDateWith(LocalDate date) { - ArrayList filteredEventList = (ArrayList) events.stream() - .filter(s -> s.getDate().isEqual(date)) - .collect(toList()); - - return filteredEventList; - } -} From 2276e27af32f93b9e22423bf9ad525af570b4a36 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 22:02:50 +0800 Subject: [PATCH 015/299] Edit the files, change the names, move the indentation of comments to fulfill the coding standard. Note that some comments are not really "comments", they are code that not in use for now. --- README.md | 4 +- docs/README.md | 2 +- .../java/{NUSchedule.java => NuSchedule.java} | 26 +- src/main/java/command/Command.java | 12 +- src/main/java/command/ExitCommand.java | 2 +- .../java/command/PrintFullListCommand.java | 14 +- src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- src/main/java/event/Event.java | 11 +- src/main/java/event/PersonalEvent.java | 2 +- .../{eventList => eventlist}/EventList.java | 30 +- .../java/exception/CreatingFileException.java | 2 +- src/main/java/exception/LoadingException.java | 2 +- ...xception.java => NuScheduleException.java} | 2 +- .../java/exception/WritingFileException.java | 2 +- src/main/java/location/Location.java | 7 +- src/main/java/parser/Parser.java | 267 +++++++++--------- src/main/java/storage/Storage.java | 15 +- src/main/java/ui/UI.java | 36 +-- ...UScheduleTest.java => NuScheduleTest.java} | 2 +- 20 files changed, 226 insertions(+), 216 deletions(-) rename src/main/java/{NUSchedule.java => NuSchedule.java} (66%) rename src/main/java/{eventList => eventlist}/EventList.java (82%) rename src/main/java/exception/{NUScheduleException.java => NuScheduleException.java} (50%) rename src/test/java/seedu/duke/{NUScheduleTest.java => NuScheduleTest.java} (89%) diff --git a/README.md b/README.md index 458ca43ba2..d525f30238 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen 1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html). 1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html). -1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/NUSchedule/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: +1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/NuSchedule/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: ``` > Event :compileJava > Event :processResources NO-SOURCE @@ -39,7 +39,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen ### JUnit tests -* A skeleton JUnit test (`src/test/java/seedu/NUSchedule/DukeTest.java`) is provided with this project template. +* A skeleton JUnit test (`src/test/java/seedu/NuSchedule/DukeTest.java`) is provided with this project template. * If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html). ## Checkstyle diff --git a/docs/README.md b/docs/README.md index 718f54d772..0359bfe80e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# NUSchedule +# NuSchedule {Give product intro here} diff --git a/src/main/java/NUSchedule.java b/src/main/java/NuSchedule.java similarity index 66% rename from src/main/java/NUSchedule.java rename to src/main/java/NuSchedule.java index 143f2cc97f..b797724a38 100644 --- a/src/main/java/NUSchedule.java +++ b/src/main/java/NuSchedule.java @@ -1,32 +1,32 @@ import command.Command; -import eventList.EventList; +import eventlist.EventList; import exception.CreatingFileException; -import exception.NUScheduleException; +import exception.NuScheduleException; import parser.Parser; import storage.Storage; import ui.UI; -public class NUSchedule { +public class NuSchedule { /** - * Main entry-point for the java.duke.Duke application. + * Main entry-point for the NUSchedule application. */ private Storage storage; private EventList events; private UI ui; - public NUSchedule(String filePath) { + public NuSchedule(String filePath) { ui = new UI(); try { storage = new Storage(filePath); } catch (CreatingFileException e) { ui.showError(e.getMessage()); } -// try {todo after implement load, uncomment it -// Events = new EventList(storage.load()); -// } catch (NUScheduleException e) { -// ui.showLoadingError(); -// Events = new EventList(); -// } + try { + events = new EventList(storage.load()); + } catch (NuScheduleException e) { + ui.showLoadingError(); + events = new EventList(); + } } /** @@ -42,7 +42,7 @@ public void run() { Command c = Parser.parse(fullCommand); c.execute(events, ui, storage); isExit = c.isExit(); - } catch (NUScheduleException e) { + } catch (NuScheduleException e) { ui.showError(e.getMessage()); } finally { ui.printLine(); @@ -51,6 +51,6 @@ public void run() { } public static void main(String[] args) { - new NUSchedule("data/events.txt").run(); + new NuSchedule("data/events.txt").run(); } } diff --git a/src/main/java/command/Command.java b/src/main/java/command/Command.java index f41a4ffa32..53ec684955 100644 --- a/src/main/java/command/Command.java +++ b/src/main/java/command/Command.java @@ -1,9 +1,9 @@ package command; import storage.Storage; -import eventList.EventList; +import eventlist.EventList; import ui.UI; -import exception.NUScheduleException; +import exception.NuScheduleException; /** * Represents the command to be executed. @@ -14,13 +14,13 @@ public abstract class Command { /** * Execute the command based on the specific command type. * - * @param Events the list of Events. + * @param events the list of Events. * @param ui do outputs. * @param storage store the data. - * @throws NUScheduleException the exceptions can happen in this program, - * to be handled based on the specific exception. + * @throws NuScheduleException the exceptions can happen in this program, + * to be handled based on the specific exception. */ - public abstract void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException; + public abstract void execute(EventList events, UI ui, Storage storage) throws NuScheduleException; public boolean isExit() { return isExit; diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index c906bb4091..268855b82d 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -1,6 +1,6 @@ package command; -import eventList.EventList; +import eventlist.EventList; import storage.Storage; import ui.UI; diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index f84c49bc38..2d3fa43c84 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -1,23 +1,23 @@ package command; +import exception.NuScheduleException; import storage.Storage; -import eventList.EventList; +import eventlist.EventList; import ui.UI; -import exception.NUScheduleException; public class PrintFullListCommand extends Command { /** * Prints the list of Events. * - * @param Events the list of Events. + * @param events the list of Events. * @param ui do outputs. * @param storage store the data. - * @throws NUScheduleException the exceptions can happen in this function, - * to be handled based on the specific exception. + * @throws NuScheduleException the exceptions can happen in this function, + * to be handled based on the specific exception. */ @Override - public void execute(EventList Events, UI ui, Storage storage) throws NUScheduleException { - ui.printEventList(Events.getEventList()); + public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException { + ui.printEventList(events.getEventList()); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 3c38ec9839..6895f3dc75 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -39,7 +39,7 @@ public LocalDate getDate() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). + * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 6f184da7ba..b68129e49b 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -23,7 +23,7 @@ public String fileString() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a. + * Example of the format: [C][✘]a. */ public String toString() { return "[C]" + super.toString(); diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 33c8d4e62b..b33dacdc00 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -6,16 +6,17 @@ /** * Represents the event objects. - * Contains a String <\code>description , which is the description of the event, - * and a boolean <\code>isDone, which is the status of the Event. + * Contains a String <\code>description<\code> , which is the description of the event, + * and a boolean <\code>isDone<\code>, which is the status of the Event. * Provides methods to mark an event as done(either during user input or reading from file), - * get the value of <\code>isDone, - * convert the <\code>event object to a string to be printed out or write to a file. + * get the value of <\code>isDone<\code>, + * convert the <\code>event<\code> object to a string to be printed out or write to a file. */ public abstract class Event { protected String description; protected boolean isDone; protected Location location;//to be implemented + public Event(String description) { this.description = description; this.isDone = false; @@ -36,7 +37,7 @@ public void markAsDone() { * @return returns a tick if the Event is done, and returns a cross if the Event is not done. */ public String getStatusIcon() { - return (isDone ? "\u2713" : "\u2718"); + return (isDone ? "Done" : "Not Done"); //return tick or X symbols } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index ef9ad3c019..b402e9698d 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -40,7 +40,7 @@ public PersonalEvent(String description, LocalDateTime at) { * Prepare the string to be printed in the list. * * @return the string required in a certain format - * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) + * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/eventList/EventList.java b/src/main/java/eventlist/EventList.java similarity index 82% rename from src/main/java/eventList/EventList.java rename to src/main/java/eventlist/EventList.java index 7cfce95552..a8b6865e45 100644 --- a/src/main/java/eventList/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -1,4 +1,4 @@ -package eventList; +package eventlist; import event.Event; @@ -44,20 +44,21 @@ public void addEvent(Event eventToBeAdded) { * Mark a event as done. * * @param eventIndex the index of the event being done -// * @throws DoneUndefinedEventException the event is not defined but the user want to mark it as done + * // * @throws DoneUndefinedEventException the event is not defined but + * // the user want to mark it as done */ public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { -// try { + try { events.get(eventIndex).markAsDone(); -// } catch (IndexOutOfBoundsException e) { -// throw new DoneUndefinedEventException(eventIndex); -// } + } catch (IndexOutOfBoundsException e) { + //throw new DoneUndefinedEventException(eventIndex); + } } /** * Gives the access to the list of events. * - * @return the ArrayList object to be printed + * @return the list to be printed. */ public ArrayList getEventList() { return events; @@ -66,7 +67,7 @@ public ArrayList getEventList() { /** * Returns how many events are in the list. * - * @return the size of the ArrayList in the EventList object + * @return the size of the ArrayList in the EventList object. */ public int size() { return events.size(); @@ -82,8 +83,8 @@ public void remove(int eventIndex) { /** * Returns the element at the specified position in this list. * - * @param eventIndex index of the event to return - * @return the event at the specified position in this list + * @param eventIndex index of the event to return. + * @return the event at the specified position in this list. */ public Event get(int eventIndex) { return events.get(eventIndex); @@ -92,8 +93,8 @@ public Event get(int eventIndex) { /** * Filter the event list to find the events contain the information looking for by the user. * - * @param filterString the keyword that the user is looking for - * @return the filtered list. this list contains only the events that satisfy the requirement + * @param filterString the keyword that the user is looking for. + * @return the filtered list. this list contains only the events that satisfy the requirement. */ public ArrayList filterWith(String filterString) { ArrayList filteredEventList = (ArrayList) events.stream() @@ -102,11 +103,12 @@ public ArrayList filterWith(String filterString) { return filteredEventList; } + /** * Filter the event list to find the events happen on the date looking for by the user. * - * @param date the date that the user is looking for - * @return the filtered list. this list contains only the events that satisfy the requirement + * @param date the date that the user is looking for. + * @return the filtered list. this list contains only the events that satisfy the requirement. */ public ArrayList filterDateWith(LocalDate date) { ArrayList filteredEventList = (ArrayList) events.stream() diff --git a/src/main/java/exception/CreatingFileException.java b/src/main/java/exception/CreatingFileException.java index 8215957f30..c08c10e9d3 100644 --- a/src/main/java/exception/CreatingFileException.java +++ b/src/main/java/exception/CreatingFileException.java @@ -3,7 +3,7 @@ /** * Represents the exception happen when the file is not created successfully. */ -public class CreatingFileException extends NUScheduleException { +public class CreatingFileException extends NuScheduleException { private final String filePath; public CreatingFileException(String filePath) { diff --git a/src/main/java/exception/LoadingException.java b/src/main/java/exception/LoadingException.java index fda1f7eb81..feb8660454 100644 --- a/src/main/java/exception/LoadingException.java +++ b/src/main/java/exception/LoadingException.java @@ -3,7 +3,7 @@ /** * Represents the exception when the user edit the file in a wrong way. */ -public class LoadingException extends NUScheduleException { +public class LoadingException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * diff --git a/src/main/java/exception/NUScheduleException.java b/src/main/java/exception/NuScheduleException.java similarity index 50% rename from src/main/java/exception/NUScheduleException.java rename to src/main/java/exception/NuScheduleException.java index 207080891b..ecd82821af 100644 --- a/src/main/java/exception/NUScheduleException.java +++ b/src/main/java/exception/NuScheduleException.java @@ -1,5 +1,5 @@ package exception; -public abstract class NUScheduleException extends Exception{ +public abstract class NuScheduleException extends Exception { public abstract String getMessage(); } diff --git a/src/main/java/exception/WritingFileException.java b/src/main/java/exception/WritingFileException.java index 12dce4a7b8..8e82f3442b 100644 --- a/src/main/java/exception/WritingFileException.java +++ b/src/main/java/exception/WritingFileException.java @@ -3,7 +3,7 @@ /** * Represents the exception when the file is not correctly written. */ -public class WritingFileException extends NUScheduleException { +public class WritingFileException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 2a201181d4..2aac475e57 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -1,8 +1,9 @@ package location; public class Location { - private String location=""; - public Location(String location){ - this.location=location; + private String location = ""; + + public Location(String location) { + this.location = location; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 5a1d147e73..5283e11fe8 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -23,13 +23,13 @@ public abstract class Parser { private static final String Event_FIND_DATE = "date"; /** - * This function calls the correct command the user want to perform, by returning a <\code>Command object. + * This function calls the correct command the user want to perform, by returning a <\code>Command<\code> object. * * @param fullCommand the full string of user input - * @return the specific <\code>Command object to perform what the user want to do -// * @throws NUScheduleException includes all exceptions may happen during parsing + * @return the specific <\code>Command<\code> object to perform what the user want to do + * // * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand) /*throws NUScheduleException*/ { + public static Command parse(String fullCommand) /*throws NuScheduleException*/ { // this block deals with exit and list command if (fullCommand.equals(EXIT)) { return new ExitCommand(); @@ -39,134 +39,139 @@ public static Command parse(String fullCommand) /*throws NUScheduleException*/ { String[] words = fullCommand.split(SINGLE_SPACE); - //this block deals with find command -// if (words[0].equals(Event_FIND)) { -// if (fullCommand.substring(4).isBlank()) { -// throw new EmptyFindException(); -// } -// return new FindCommand(fullCommand.substring(5)); -// } -// -// //this block deals with find date command -// if (words[0].equals(Event_FIND_DATE)) { -// if (fullCommand.substring(4).isBlank()) { -// throw new EmptyFindDateException(); -// } -// try { -// return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); -// } catch (DateTimeParseException e) { -// throw new DateFormatException(); -// } -// } -// -// int EventIndex;//to indicate what is the Event we are dealing with. may not be used. -// -// //this block deals with done command -// if (words[0].equals(Event_DONE)) { -// if (fullCommand.substring(4).isBlank()) { -// throw new EmptyDoneException(); -// } -// try { -// EventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; -// } catch (NumberFormatException e) { -// throw new DoneNumberFormatException(); -// } -// return new DoneCommand(EventIndex); -// } -// -// //this block deals with delete command -// if (words[0].equals(Event_DELETE)) { -// if (fullCommand.substring(6).isBlank()) { -// throw new EmptyDeleteException(); -// } -// try { -// EventIndex = Integer.parseInt(fullCommand.substring(7)) - 1; -// } catch (NumberFormatException e) { -// throw new DeleteNumberFormatException(); -// } -// return new DeleteCommand(EventIndex); -// } -// -// //this block deals with add command -// //we shall check that the user input is not meant for any other command beforehand -// //because the default block will throw an exception. -// // i.e. when enter this block, the parser will not go to any other blocks -// int dividerPosition; -// int timeDivider; -// String dateTime; -// switch (words[0]) { -// case ADD_ASSIGNMENT: -// dividerPosition = fullCommand.indexOf(AT); -// -// if (fullCommand.substring(5).isBlank()) { -// throw new EmptyEventException(); -// } -// if (dividerPosition == -1) { -// throw new NoEventTimeMakerException(); -// } -// if (fullCommand.substring(5, dividerPosition).isBlank()) { -// throw new EmptyEventException(); -// } -// try { -// fullCommand.substring(dividerPosition + 4); -// } catch (StringIndexOutOfBoundsException e) { -// throw new NoEventTimeException(); -// } -// try { -// timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); -// dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) -// + "T" -// + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); -// return new AddCommand(new NUSchedule.Event.PersonalEvent(fullCommand.substring(6, dividerPosition), LocalDateTime.parse(dateTime))); -// } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { -// throw new TimeFormatException(); -// } -// -// -// case ADD_CLASS: -// dividerPosition = fullCommand.indexOf(BY); -// -// if (fullCommand.substring(8).isBlank()) { -// throw new EmptyDeadlineException(); -// } -// if (dividerPosition == -1) { -// throw new NoDeadlineTimeMarkerException(); -// } -// if (fullCommand.substring(8, dividerPosition).isBlank()) { -// throw new EmptyDeadlineException(); -// } -// try { -// fullCommand.substring(dividerPosition + 4); -// } catch (StringIndexOutOfBoundsException e) { -// throw new NoDeadlineTimeException(); -// } -// try { -// timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); -// dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) -// + "T" -// + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); -// return new AddCommand(new NUSchedule.Event.Assignment(fullCommand.substring(9, dividerPosition), LocalDateTime.parse(dateTime))); -// } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { -// throw new TimeFormatException(); -// } -// -// case ADD_PERSONAL_EVENT: -// -// try { -// if (fullCommand.substring(5).isBlank()) { -// throw new EmptyTodoException(); -// } -// return new AddCommand(new Todo(fullCommand.substring(5))); -// } catch (StringIndexOutOfBoundsException e) { -// throw new EmptyTodoException(); -// } -// -// default: -// throw new WrongCommandException(); -// -// } + // //this block deals with find command + // if (words[0].equals(Event_FIND)) { + // if (fullCommand.substring(4).isBlank()) { + // throw new EmptyFindException(); + // } + // return new FindCommand(fullCommand.substring(5)); + // } + // + // //this block deals with find date command + // if (words[0].equals(Event_FIND_DATE)) { + // if (fullCommand.substring(4).isBlank()) { + // throw new EmptyFindDateException(); + // } + // try { + // return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); + // } catch (DateTimeParseException e) { + // throw new DateFormatException(); + // } + // } + // + // int EventIndex;//to indicate what is the Event we are dealing with. may not be used. + // + // //this block deals with done command + // if (words[0].equals(Event_DONE)) { + // if (fullCommand.substring(4).isBlank()) { + // throw new EmptyDoneException(); + // } + // try { + // EventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + // } catch (NumberFormatException e) { + // throw new DoneNumberFormatException(); + // } + // return new DoneCommand(EventIndex); + // } + // + // //this block deals with delete command + // if (words[0].equals(Event_DELETE)) { + // if (fullCommand.substring(6).isBlank()) { + // throw new EmptyDeleteException(); + // } + // try { + // EventIndex = Integer.parseInt(fullCommand.substring(7)) - 1; + // } catch (NumberFormatException e) { + // throw new DeleteNumberFormatException(); + // } + // return new DeleteCommand(EventIndex); + // } + // + // //this block deals with add command + // //we shall check that the user input is not meant for any other command beforehand + // //because the default block will throw an exception. + // // i.e. when enter this block, the parser will not go to any other blocks + // int dividerPosition; + // int timeDivider; + // String dateTime; + // switch (words[0]) { + // case ADD_ASSIGNMENT: + // dividerPosition = fullCommand.indexOf(AT); + // + // if (fullCommand.substring(5).isBlank()) { + // throw new EmptyEventException(); + // } + // if (dividerPosition == -1) { + // throw new NoEventTimeMakerException(); + // } + // if (fullCommand.substring(5, dividerPosition).isBlank()) { + // throw new EmptyEventException(); + // } + // try { + // fullCommand.substring(dividerPosition + 4); + // } catch (StringIndexOutOfBoundsException e) { + // throw new NoEventTimeException(); + // } + // try { + // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + // dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + // + "T" + // + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + // return new AddCommand(new NuSchedule.Event. + // PersonalEvent(fullCommand.substring(6, dividerPosition) + // , LocalDateTime.parse(dateTime))); + // } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + // throw new TimeFormatException(); + // } + // + // + // case ADD_CLASS: + // dividerPosition = fullCommand.indexOf(BY); + // + // if (fullCommand.substring(8).isBlank()) { + // throw new EmptyDeadlineException(); + // } + // if (dividerPosition == -1) { + // throw new NoDeadlineTimeMarkerException(); + // } + // if (fullCommand.substring(8, dividerPosition).isBlank()) { + // throw new EmptyDeadlineException(); + // } + // try { + // fullCommand.substring(dividerPosition + 4); + // } catch (StringIndexOutOfBoundsException e) { + // throw new NoDeadlineTimeException(); + // } + // try { + // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + // dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + // + "T" + // + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + // return new AddCommand(new NuSchedule.Event. + // Assignment(fullCommand.substring(9, dividerPosition) + // , LocalDateTime.parse(dateTime))); + // } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + // throw new TimeFormatException(); + // } + // + // case ADD_PERSONAL_EVENT: + // + // try { + // if (fullCommand.substring(5).isBlank()) { + // throw new EmptyTodoException(); + // } + // return new AddCommand(new Todo(fullCommand.substring(5))); + // } catch (StringIndexOutOfBoundsException e) { + // throw new EmptyTodoException(); + // } + // + // default: + // throw new WrongCommandException(); + // + // } - return null;//delete later + return null; + //delete later } } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 659b6a39a7..3c9e0b14ba 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -52,14 +52,14 @@ private static void createFolderAndFIle(String filePath) throws CreatingFileExce /** * Save the data of the Event list to the file. * - * @param Events the list of Events provided by a variable from a EventList object + * @param events the list of Events provided by a variable from a EventList object * @throws WritingFileException represents the file is not correctly written */ - public void writeFile(ArrayList Events) throws WritingFileException { + public void writeFile(ArrayList events) throws WritingFileException { try { FileWriter fw = new FileWriter(filePath); - for (Event Event : Events) { - fw.write(Event.fileString()); + for (Event event : events) { + fw.write(event.fileString()); fw.write(System.lineSeparator()); } fw.close(); @@ -74,7 +74,8 @@ public void writeFile(ArrayList Events) throws WritingFileException { * @return the Events in an ArrayList * @throws LoadingException represents the Events is not correctly created */ -// public ArrayList load() throws LoadingException { -//todo to be implement -// } + public ArrayList load() throws LoadingException { + return null; + //to be implemented + } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 6bf5b6624d..eb4b61abca 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -59,22 +59,22 @@ public void printLine() { /** * Prints all the events with labels, based on the input list. * - * @param Events an <\code>ArrayList of events to be printed one by one. + * @param events an <\code>ArrayList<\code> of events to be printed one by one. */ - public void printEventList(ArrayList Events) { + public void printEventList(ArrayList events) { int numPrintedEvents = 0; System.out.println(" Here are the Events in your list:"); - for (Event Event : Events) { + for (Event event : events) { numPrintedEvents++; - System.out.println(numPrintedEvents + ". " + Event.toString()); + System.out.println(numPrintedEvents + ". " + event.toString()); } } /** * Prints all the Events of the filtered list with labels, based on the input list. * - * @param events an <\code>ArrayList of Events to be printed one by one + * @param events an <\code>ArrayList<\code> of Events to be printed one by one. */ public void printFilteredEventList(ArrayList events) { int numPrintedEvents = 0; @@ -89,7 +89,7 @@ public void printFilteredEventList(ArrayList events) { /** * Shows the error message when experiencing exceptions. * - * @param message the message get from the error + * @param message the message get from the error. */ public void showError(String message) { System.out.println(message); @@ -115,7 +115,7 @@ public void print(String message) { } /** - * Call when exit the program + * Call when exit the program. */ public void printExitMessage() { System.out.println(EXIT_MESSAGE); @@ -124,7 +124,7 @@ public void printExitMessage() { /** * Take in a size and prints the total number of Events. * - * @param size get by calling ArrayList::Size() + * @param size number of events in the list. */ public void printNumEvent(int size) { System.out.println("Now you have " + size + " Events in the list."); @@ -133,37 +133,37 @@ public void printNumEvent(int size) { /** * Prints the message when the user mark some Event as done. * - * @param Event the Event being done + * @param event the Event being done */ - public void printDoneMessage(Event Event) { + public void printDoneMessage(Event event) { System.out.println("Nice! I've marked this Event as done: "); - System.out.println(Event.toString()); + System.out.println(event.toString()); } /** * Prints the message when the user deletes some Event. * - * @param Event the Event being deleted + * @param event the Event being deleted */ - public void printDeleteMessage(Event Event) { + public void printDeleteMessage(Event event) { System.out.println("Noted. I've removed this Event: "); - System.out.println(Event.toString()); + System.out.println(event.toString()); } /** * Prints the message when the user adds some Event. * - * @param EventAdded the Event being added + * @param eventAdded the Event being added */ - public void printAddEventMessage(Event EventAdded) { + public void printAddEventMessage(Event eventAdded) { System.out.println("Got it. I've added this Event: "); - System.out.println(EventAdded.toString()); + System.out.println(eventAdded.toString()); } /** * Prints all the Events of the filtered list with labels, based on the input list. * - * @param filteredEventList an <\code>ArrayList of Events to be printed one by one + * @param filteredEventList an <\code>ArrayList<\code> of Events to be printed one by one. */ public void printFilteredDateEventList(ArrayList filteredEventList) { int numPrintedEvents = 0; diff --git a/src/test/java/seedu/duke/NUScheduleTest.java b/src/test/java/seedu/duke/NuScheduleTest.java similarity index 89% rename from src/test/java/seedu/duke/NUScheduleTest.java rename to src/test/java/seedu/duke/NuScheduleTest.java index bd60a15dd8..943daea8cb 100644 --- a/src/test/java/seedu/duke/NUScheduleTest.java +++ b/src/test/java/seedu/duke/NuScheduleTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; -class NUScheduleTest { +class NuScheduleTest { @Test public void sampleTest() { assertTrue(true); From b303a313244653cc50d889645f155a0fccbdafac Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 22:07:33 +0800 Subject: [PATCH 016/299] rename the packge of the test --- .../java/{seedu/duke => NuSchedule}/NuScheduleTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/test/java/{seedu/duke => NuSchedule}/NuScheduleTest.java (90%) diff --git a/src/test/java/seedu/duke/NuScheduleTest.java b/src/test/java/NuSchedule/NuScheduleTest.java similarity index 90% rename from src/test/java/seedu/duke/NuScheduleTest.java rename to src/test/java/NuSchedule/NuScheduleTest.java index 943daea8cb..4b3a3a790f 100644 --- a/src/test/java/seedu/duke/NuScheduleTest.java +++ b/src/test/java/NuSchedule/NuScheduleTest.java @@ -1,9 +1,9 @@ -package NUSchedule; - -import static org.junit.jupiter.api.Assertions.assertTrue; +package NuSchedule; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; + class NuScheduleTest { @Test public void sampleTest() { From 20bc0abf06dc3743b4187ee33ae658c52aab73be Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 22:12:22 +0800 Subject: [PATCH 017/299] Rename the test package --- README.md | 4 ++-- docs/README.md | 2 +- src/test/java/{NuSchedule => test}/NuScheduleTest.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/test/java/{NuSchedule => test}/NuScheduleTest.java (90%) diff --git a/README.md b/README.md index d525f30238..636c4e92aa 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen 1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html). 1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html). -1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/NuSchedule/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: +1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/test/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: ``` > Event :compileJava > Event :processResources NO-SOURCE @@ -39,7 +39,7 @@ Prerequisites: JDK 11 (use the exact version), update Intellij to the most recen ### JUnit tests -* A skeleton JUnit test (`src/test/java/seedu/NuSchedule/DukeTest.java`) is provided with this project template. +* A skeleton JUnit test (`src/test/java/seedu/test/DukeTest.java`) is provided with this project template. * If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html). ## Checkstyle diff --git a/docs/README.md b/docs/README.md index 0359bfe80e..85ccd4be17 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# NuSchedule +# test {Give product intro here} diff --git a/src/test/java/NuSchedule/NuScheduleTest.java b/src/test/java/test/NuScheduleTest.java similarity index 90% rename from src/test/java/NuSchedule/NuScheduleTest.java rename to src/test/java/test/NuScheduleTest.java index 4b3a3a790f..b090ba5b8b 100644 --- a/src/test/java/NuSchedule/NuScheduleTest.java +++ b/src/test/java/test/NuScheduleTest.java @@ -1,4 +1,4 @@ -package NuSchedule; +package test; import org.junit.jupiter.api.Test; From be4bf6c6d9577da662a3a903f0d30d2a2f42ee18 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 13 Oct 2020 22:26:53 +0800 Subject: [PATCH 018/299] edit text-ui-test as expected --- src/main/java/ui/UI.java | 2 +- text-ui-test/EXPECTED.TXT | 20 +++++++++++++------- text-ui-test/input.txt | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index eb4b61abca..8e89582b7d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -46,7 +46,7 @@ public void printGreetingMessage() { printLine(); System.out.println("Hello from\n" + LOGO); - System.out.println("What can I do for you?"); + System.out.println("What can I do for you?\n"); } /** diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 892cb6cae7..79ab9d07ac 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,9 +1,15 @@ Hello from - ____ _ -| _ \ _ _| | _____ -| | | | | | | |/ / _ \ -| |_| | |_| | < __/ -|____/ \__,_|_|\_\___| + _ _ _ _ ____ _ _ _ +| | | | | | | / ___| | | | | | | +| \ | | | | |/ / | | | | | | +| |\\ | | | | |\ \ | | ___ | | | | ___ +| | \\ | | | | | \ \ ___| |______ /___\ ____| |_ _| |/___\ +| | \\ | | | | | \ \ /___| ____ ||___||| __ | | | | ||___|| +| | \\| | | | | \ \ // | | | | ___/ | | | | | | | | ___/ +| | \ | |______| |___/ / \\___| | | |\____ | |__| | |__| | |\____ +|_| |_|__________|____/ \___|_| |_|\___/ |______|\___,_|_|\___/ -What is your name? -Hello James Gosling +What can I do for you? +____________________________________________________________ +Bye. Hope to see you again soon! +____________________________________________________________ \ No newline at end of file diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt index f6ec2e9f95..0abaeaa993 100644 --- a/text-ui-test/input.txt +++ b/text-ui-test/input.txt @@ -1 +1 @@ -James Gosling \ No newline at end of file +bye \ No newline at end of file From 63c637c11b4f86e53597739d4ce5af0594c16ce8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Wed, 14 Oct 2020 00:07:24 +0800 Subject: [PATCH 019/299] edit build.gradle to suit the project --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7635e61ec8..98fbb73b3a 100644 --- a/build.gradle +++ b/build.gradle @@ -29,11 +29,11 @@ test { } application { - mainClassName = "NUSchedule.Duke" + mainClassName = "NuSchedule" } shadowJar { - archiveBaseName = "duke" + archiveBaseName = "NUSchedule" archiveClassifier = null } From 654d565449ae5e194a7bbc14bf12fccabbc9029a Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Wed, 14 Oct 2020 00:18:25 +0800 Subject: [PATCH 020/299] Change the EXPECTED output to suit the actual behavior --- src/main/java/ui/UI.java | 2 +- text-ui-test/EXPECTED.TXT | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 8e89582b7d..eb4b61abca 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -46,7 +46,7 @@ public void printGreetingMessage() { printLine(); System.out.println("Hello from\n" + LOGO); - System.out.println("What can I do for you?\n"); + System.out.println("What can I do for you?"); } /** diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT index 79ab9d07ac..d23500deda 100644 --- a/text-ui-test/EXPECTED.TXT +++ b/text-ui-test/EXPECTED.TXT @@ -1,3 +1,4 @@ +____________________________________________________________ Hello from _ _ _ _ ____ _ _ _ | | | | | | | / ___| | | | | | | @@ -12,4 +13,4 @@ Hello from What can I do for you? ____________________________________________________________ Bye. Hope to see you again soon! -____________________________________________________________ \ No newline at end of file +____________________________________________________________ From 11d49fe2af5f731a12b14b843bf98513febeabea Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 14 Oct 2020 14:41:58 +0800 Subject: [PATCH 021/299] added classes and lists for different types of locations --- src/main/java/NuSchedule.java | 8 +++ src/main/java/location/Building.java | 24 ++++++++ src/main/java/location/BusStop.java | 25 +++++++++ src/main/java/location/Hostel.java | 24 ++++++++ src/main/java/location/LectureTheatre.java | 16 ++++++ src/main/java/location/Location.java | 38 ++++++++++++- src/main/java/locationlist/BusStopList.java | 50 +++++++++++++++++ src/main/java/locationlist/LocationList.java | 59 ++++++++++++++++++++ 8 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 src/main/java/location/Building.java create mode 100644 src/main/java/location/BusStop.java create mode 100644 src/main/java/location/Hostel.java create mode 100644 src/main/java/location/LectureTheatre.java create mode 100644 src/main/java/locationlist/BusStopList.java create mode 100644 src/main/java/locationlist/LocationList.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index b797724a38..5c4bae3646 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -2,6 +2,8 @@ import eventlist.EventList; import exception.CreatingFileException; import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; import parser.Parser; import storage.Storage; import ui.UI; @@ -12,6 +14,8 @@ public class NuSchedule { */ private Storage storage; private EventList events; + private static BusStopList busStops; + private static LocationList locations; private UI ui; public NuSchedule(String filePath) { @@ -33,6 +37,10 @@ public NuSchedule(String filePath) { * Runs the program until termination. */ public void run() { + busStops = new BusStopList(); + locations = new LocationList(); + // busStops.loadBusStopData(); + // locations.loadLocationData(); ui.printGreetingMessage(); boolean isExit = false; while (!isExit) { diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java new file mode 100644 index 0000000000..025f3ec995 --- /dev/null +++ b/src/main/java/location/Building.java @@ -0,0 +1,24 @@ +package location; + +import java.util.Arrays; + +public class Building extends Location{ + private String[] nearestBusStops; + + public Building(String name, String[] nearestBusStops) { + super(name); + this.nearestBusStops = nearestBusStops; + this.type = locationType.BUILDING; + } + + @Override + public String toString() { + return "(Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + } + + private String printNearestBusStops() { + String str = Arrays.toString(nearestBusStops); + str = str.substring(1, str.indexOf("]")); + return str; + } +} diff --git a/src/main/java/location/BusStop.java b/src/main/java/location/BusStop.java new file mode 100644 index 0000000000..f2453c9f89 --- /dev/null +++ b/src/main/java/location/BusStop.java @@ -0,0 +1,25 @@ +package location; + +import java.util.Arrays; + +public class BusStop { + private String name; + private String[] buses; + + public BusStop(String name, String[] buses) { + this.name = name; + this.buses = buses; + } + + public String toString() { + return name + "\nBuses Available: " + Arrays.toString(buses); + } + + public String getName() { + return name; + } + + public String[] getBuses() { + return buses; + } +} diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java new file mode 100644 index 0000000000..f34f48d54c --- /dev/null +++ b/src/main/java/location/Hostel.java @@ -0,0 +1,24 @@ +package location; + +import java.util.Arrays; + +public class Hostel extends Location{ + String[] nearestBusStops; + + public Hostel(String name, String[] nearestBusStops) { + super(name); + this.type = locationType.HOSTEL; + this.nearestBusStops = nearestBusStops; + } + + @Override + public String toString() { + return "(Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + } + + private String printNearestBusStops() { + String str = Arrays.toString(nearestBusStops); + str = str.substring(1, str.indexOf("]")); + return str; + } +} diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java new file mode 100644 index 0000000000..c7bb10df7e --- /dev/null +++ b/src/main/java/location/LectureTheatre.java @@ -0,0 +1,16 @@ +package location; + +public class LectureTheatre extends Location{ + private String nearestBuilding; + + public LectureTheatre(String name, String nearestBuilding) { + super(name); + this.type = locationType.LT; + this.nearestBuilding = nearestBuilding; + } + + @Override + public String toString() { + return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; + } +} diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 2aac475e57..859e7f5f72 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -1,9 +1,41 @@ package location; +enum locationType { + BUILDING, + HOSTEL, + LT +} + public class Location { - private String location = ""; + protected String name; + protected locationType type; + // private int[] coordinates = new int[2]; // will implement in version 2.0 + + public Location(String name) { + this.name = name; + } + + public String printType() { + String str; + + switch (type) { + case BUILDING: + str = "Building"; + break; + case HOSTEL: + str = "Hostel"; + break; + case LT: + str = "Lecture Theatre"; + break; + default: + str = "invalid location type"; + } + + return str; + } - public Location(String location) { - this.location = location; + public String toString() { + return "(" + printType() + ")" + name; } } diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java new file mode 100644 index 0000000000..bebe97dd88 --- /dev/null +++ b/src/main/java/locationlist/BusStopList.java @@ -0,0 +1,50 @@ +package locationlist; + +import location.BusStop; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; + +public class BusStopList { + private static final String filePath = "data/BusStops.txt"; + private ArrayList busStopList = new ArrayList<>(); + + public void loadBusStopData() { + File f = new File(filePath); + Scanner s = null; + try { + s = new Scanner(f); + } catch (FileNotFoundException e) { + System.out.println(f.getName() + "not found: " + e.getMessage()); + } + + while(s.hasNext()) { + String input = s.nextLine(); + String[] split = input.split(":",2); + String name = split[0]; + String[] buses = split[1].split(","); + BusStop stop = new BusStop(name, buses); + this.busStopList.add(stop); + } + } + + public boolean checkExistence(String name) { + for (BusStop busStop : busStopList) { + if (name.equals(busStop.getName())) { + return true; + } + } + return false; + } + + public void printBusStopList() { + int i = 1; + System.out.println("List of bus stops: "); + for(BusStop busStop : busStopList) { + System.out.println(i + ". " + busStop); + i++; + } + } +} diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java new file mode 100644 index 0000000000..e06d14ab83 --- /dev/null +++ b/src/main/java/locationlist/LocationList.java @@ -0,0 +1,59 @@ +package locationlist; + +import location.Building; +import location.Hostel; +import location.LectureTheatre; +import location.Location; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; + +public class LocationList { + private static final String filePath = "data/locations.txt"; + public ArrayList locationList = new ArrayList<>(); + + public void loadLocationData() { + File f = new File(filePath); + Scanner s = null; + try { + s = new Scanner(f); + } catch (FileNotFoundException e) { + System.out.println(f.getName() + "not found: " + e.getMessage()); + } + + while(s.hasNext()) { + String input = s.nextLine(); + // info[0] = type, info[1] = name, info[2] = nearest buildings/bus stops + String[] info = input.split("/"); + String[] additionalInfo = info[2].split(","); + Location location = null; + switch(info[0]) { + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + } + if (location!=null) { + locationList.add(location); + } else { + System.out.println("Invalid Location Type"); + } + } + } + + public void printLocationList() { + int i = 1; + System.out.println("Lists of locations: "); + for (Location location : locationList) { + System.out.println(i + ". " + location); + i++; + } + } +} From 29f14479f80e557bc8322ca27d1aaf800d5b4401 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 14 Oct 2020 14:42:11 +0800 Subject: [PATCH 022/299] added location data files --- data/bus_stops.txt | 7 +++++++ data/locations.txt | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 data/bus_stops.txt create mode 100644 data/locations.txt diff --git a/data/bus_stops.txt b/data/bus_stops.txt new file mode 100644 index 0000000000..2151b17204 --- /dev/null +++ b/data/bus_stops.txt @@ -0,0 +1,7 @@ +EA:B2,C,BTC2 +Raffles Hall:B2,C +Information Technology:A2,B1,B2,D1 +Opp YIH:A2,B1,B2,D1 +NUS Museum:A2,BTC1,BTC2,C,D1,D2 +YIH:A1,B1,BTC1,D1 +CLB:A1,B1,BTC1,D1 \ No newline at end of file diff --git a/data/locations.txt b/data/locations.txt new file mode 100644 index 0000000000..64a3bb1a09 --- /dev/null +++ b/data/locations.txt @@ -0,0 +1,20 @@ +BLK/EA/EA +BLK/EA/Information Technology +BLK/E1A/EA +BLK/EW1/EA,Information Technology +BLK/EW1A/EA +BLK/E2/EA +BLK/E3/EA,Raffles Hall +BLK/E3A/EA +BLK/E4/Information Technology +BLK/E4A/Opp YIH,YIH +BLK/E5/Information Technology +BLK/E5A/Raffles Hall +BLK/E6/Opp YIH,YIH +BLK/IT/Information Technology,CLB +H/Raffles Hall/Raffles Hall,NUS Museum +L/LT1/E2 +L/LT2/E2 +L/LT6/E4 +L/LT7/EA +L/LT7A/EA \ No newline at end of file From 8d918d92859b59e92dafa2a6724184678e56c3cb Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 14 Oct 2020 15:25:08 +0800 Subject: [PATCH 023/299] corrected typo error in BusStopList and corrected code to make runtest.sh pass --- src/main/java/NuSchedule.java | 8 ++++---- src/main/java/locationlist/BusStopList.java | 2 +- src/main/java/ui/UI.java | 14 +++++++------- text-ui-test/data/events.txt | 0 4 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 text-ui-test/data/events.txt diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 5c4bae3646..3c49805cec 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -20,6 +20,10 @@ public class NuSchedule { public NuSchedule(String filePath) { ui = new UI(); + busStops = new BusStopList(); + locations = new LocationList(); + busStops.loadBusStopData(); + locations.loadLocationData(); try { storage = new Storage(filePath); } catch (CreatingFileException e) { @@ -37,10 +41,6 @@ public NuSchedule(String filePath) { * Runs the program until termination. */ public void run() { - busStops = new BusStopList(); - locations = new LocationList(); - // busStops.loadBusStopData(); - // locations.loadLocationData(); ui.printGreetingMessage(); boolean isExit = false; while (!isExit) { diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index bebe97dd88..a61021ba58 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -8,7 +8,7 @@ import java.util.Scanner; public class BusStopList { - private static final String filePath = "data/BusStops.txt"; + private static final String filePath = "data/bus_stops.txt"; private ArrayList busStopList = new ArrayList<>(); public void loadBusStopData() { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index eb4b61abca..d3ed4e6834 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -13,15 +13,15 @@ public class UI { public static final String LOGO = - " _ _ _ _ ____ _ _ _ \n" - + "| | | | | | | / ___| | | | | | | \n" + " _ _ _ _ ____ _ _ _\n" + + "| | | | | | | / ___| | | | | | |\n" + "| \\ | | | | |/ / | | | | | |\n" - + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___ \n" - + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" - + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___|| \n" - + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/ \n" + + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___\n" + + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\\n" + + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___||\n" + + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/\n" + "| | \\ | |______| |___/ / \\\\___| | | |\\____ | |__| | |__| | |\\____\n" - + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; + + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/\n"; public static final String LINE_DIVIDER = "____________________________________________________________"; public static final String EXIT_MESSAGE = "Bye. Hope to see you again soon!"; private final Scanner in; diff --git a/text-ui-test/data/events.txt b/text-ui-test/data/events.txt new file mode 100644 index 0000000000..e69de29bb2 From 9125edcdcc1df9531f730f5b19259b49afab1d75 Mon Sep 17 00:00:00 2001 From: Brendan Date: Thu, 15 Oct 2020 00:59:12 +0800 Subject: [PATCH 024/299] Added AddCommand class and relevant exceptions. Updated parser class. --- src/main/java/NuSchedule.java | 24 ++- src/main/java/command/AddCommand.java | 39 ++++ src/main/java/event/Class.java | 9 +- src/main/java/eventlist/EventList.java | 4 +- .../java/exception/EmptyEventException.java | 15 ++ src/main/java/exception/LoadingException.java | 2 +- .../java/exception/NoEventTimeException.java | 15 ++ .../exception/NoEventTimeMarkerException.java | 15 ++ .../java/exception/TimeFormatException.java | 15 ++ .../java/exception/WritingFileException.java | 2 +- .../java/exception/WrongCommandException.java | 15 ++ src/main/java/parser/Parser.java | 197 ++++++++++-------- src/main/java/ui/UI.java | 18 +- 13 files changed, 261 insertions(+), 109 deletions(-) create mode 100644 src/main/java/command/AddCommand.java create mode 100644 src/main/java/exception/EmptyEventException.java create mode 100644 src/main/java/exception/NoEventTimeException.java create mode 100644 src/main/java/exception/NoEventTimeMarkerException.java create mode 100644 src/main/java/exception/TimeFormatException.java create mode 100644 src/main/java/exception/WrongCommandException.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index b797724a38..8704707637 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -6,6 +6,8 @@ import storage.Storage; import ui.UI; +import exception.LoadingException; + public class NuSchedule { /** * Main entry-point for the NUSchedule application. @@ -16,17 +18,17 @@ public class NuSchedule { public NuSchedule(String filePath) { ui = new UI(); - try { - storage = new Storage(filePath); - } catch (CreatingFileException e) { - ui.showError(e.getMessage()); - } - try { - events = new EventList(storage.load()); - } catch (NuScheduleException e) { - ui.showLoadingError(); +// try { +// storage = new Storage(filePath); +// } catch (CreatingFileException e) { +// ui.showError(e.getMessage()); +// } +// try { +// events = new EventList(storage.load()); +// } catch (LoadingException e) { +// ui.showLoadingError(); events = new EventList(); - } + // } } /** @@ -50,7 +52,7 @@ public void run() { } } - public static void main(String[] args) { + public static void main(String[] args){ new NuSchedule("data/events.txt").run(); } } diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java new file mode 100644 index 0000000000..198a945727 --- /dev/null +++ b/src/main/java/command/AddCommand.java @@ -0,0 +1,39 @@ +package command; + +import event.Event; +import eventlist.EventList; +import exception.NuScheduleException; +import storage.Storage; +import ui.UI; + + +/** + * Represents the command call when the user adds a new event. + */ +public class AddCommand extends Command { + private Event event; + + /** + * Sets the task to be added to the list + * + * @param event The event to be added + */ + public AddCommand(Event event){ + this.event = event; + } + + /** + * Adds the appropriate type of event/task to the list. + * + * @param events the list of events. + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException{ + events.addEvent(event); + ui.printAddEventMessage(event); + ui.printNumEvent(events.getSize()); + //storage.writeFile(tasks.getEventList()); + } +} diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index b68129e49b..e714be661d 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -1,13 +1,18 @@ package event; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + /** * Represents the Class events. */ public class Class extends Event { + protected LocalDateTime at; - public Class(String description) { + public Class(String description, LocalDateTime at) { super(description); + this.at = at; } /** @@ -26,6 +31,6 @@ public String fileString() { * Example of the format: [C][✘]a. */ public String toString() { - return "[C]" + super.toString(); + return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index a8b6865e45..82416481a8 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -34,7 +34,7 @@ public EventList(ArrayList events) { /** * Adds an event to the list. * - * @param eventToBeAdded may be Todo/Event/Deadline based on the usage + * @param eventToBeAdded may be Assignment/Class/Personal Event based on the usage */ public void addEvent(Event eventToBeAdded) { events.add(eventToBeAdded); @@ -69,7 +69,7 @@ public ArrayList getEventList() { * * @return the size of the ArrayList in the EventList object. */ - public int size() { + public int getSize() { return events.size(); } diff --git a/src/main/java/exception/EmptyEventException.java b/src/main/java/exception/EmptyEventException.java new file mode 100644 index 0000000000..a85b1b12e8 --- /dev/null +++ b/src/main/java/exception/EmptyEventException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when no description is provided for the event + */ +public class EmptyEventException extends NuScheduleException{ + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Your input is incomplete. Please enter an event description."; + } +} diff --git a/src/main/java/exception/LoadingException.java b/src/main/java/exception/LoadingException.java index feb8660454..5cc0598960 100644 --- a/src/main/java/exception/LoadingException.java +++ b/src/main/java/exception/LoadingException.java @@ -10,6 +10,6 @@ public class LoadingException extends NuScheduleException { * @return the message */ public String getMessage() { - return "You edit the file in a wrong format. Please check."; + return "You edited the file in a wrong format. Please check."; } } diff --git a/src/main/java/exception/NoEventTimeException.java b/src/main/java/exception/NoEventTimeException.java new file mode 100644 index 0000000000..6c6304f475 --- /dev/null +++ b/src/main/java/exception/NoEventTimeException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when no date/time is inputted as expected. + */ +public class NoEventTimeException extends NuScheduleException{ + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Please input the date/time."; + } +} diff --git a/src/main/java/exception/NoEventTimeMarkerException.java b/src/main/java/exception/NoEventTimeMarkerException.java new file mode 100644 index 0000000000..3ad30c944c --- /dev/null +++ b/src/main/java/exception/NoEventTimeMarkerException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception where there is no timer marker in the command + */ +public class NoEventTimeMarkerException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Please enter your command in the correct format."; + } +} diff --git a/src/main/java/exception/TimeFormatException.java b/src/main/java/exception/TimeFormatException.java new file mode 100644 index 0000000000..4550a7e1a7 --- /dev/null +++ b/src/main/java/exception/TimeFormatException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when the date/time are entered incorrectly + */ +public class TimeFormatException extends NuScheduleException{ + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Please enter the date/time in the correct format."; + } +} diff --git a/src/main/java/exception/WritingFileException.java b/src/main/java/exception/WritingFileException.java index 8e82f3442b..d764b25732 100644 --- a/src/main/java/exception/WritingFileException.java +++ b/src/main/java/exception/WritingFileException.java @@ -10,6 +10,6 @@ public class WritingFileException extends NuScheduleException { * @return the message */ public String getMessage() { - return "something went wrong when writing to file"; + return "Something went wrong when writing to the file."; } } diff --git a/src/main/java/exception/WrongCommandException.java b/src/main/java/exception/WrongCommandException.java new file mode 100644 index 0000000000..7f005387e3 --- /dev/null +++ b/src/main/java/exception/WrongCommandException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when an invalid command is inputted. + */ +public class WrongCommandException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Please enter a valid command."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 5283e11fe8..75e5bd95b2 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,10 +1,24 @@ package parser; +import command.AddCommand; import command.Command; import command.ExitCommand; import command.PrintFullListCommand; +import event.Assignment; +import event.PersonalEvent; + +import exception.NoEventTimeMarkerException; +import exception.TimeFormatException; +import exception.EmptyEventException; +import exception.NuScheduleException; +import exception.NoEventTimeException; +import exception.WrongCommandException; + +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; + /** * This class contains one function -- parse, to call the respective command function according to the user input. */ @@ -14,7 +28,7 @@ public abstract class Parser { public static final String Event_DONE = "done"; public static final String ADD_ASSIGNMENT = "assignment"; public static final String ADD_CLASS = "class"; - public static final String ADD_PERSONAL_EVENT = "personal event"; + public static final String ADD_PERSONAL_EVENT = "personalevent"; public static final String Event_DELETE = "delete"; public static final String Event_FIND = "find"; public static final String BY = "/by"; @@ -29,7 +43,7 @@ public abstract class Parser { * @return the specific <\code>Command<\code> object to perform what the user want to do * // * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand) /*throws NuScheduleException*/ { + public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command if (fullCommand.equals(EXIT)) { return new ExitCommand(); @@ -87,91 +101,102 @@ public static Command parse(String fullCommand) /*throws NuScheduleException*/ { // return new DeleteCommand(EventIndex); // } // - // //this block deals with add command - // //we shall check that the user input is not meant for any other command beforehand - // //because the default block will throw an exception. - // // i.e. when enter this block, the parser will not go to any other blocks - // int dividerPosition; - // int timeDivider; - // String dateTime; - // switch (words[0]) { - // case ADD_ASSIGNMENT: - // dividerPosition = fullCommand.indexOf(AT); - // - // if (fullCommand.substring(5).isBlank()) { - // throw new EmptyEventException(); - // } - // if (dividerPosition == -1) { - // throw new NoEventTimeMakerException(); - // } - // if (fullCommand.substring(5, dividerPosition).isBlank()) { - // throw new EmptyEventException(); - // } - // try { - // fullCommand.substring(dividerPosition + 4); - // } catch (StringIndexOutOfBoundsException e) { - // throw new NoEventTimeException(); - // } - // try { - // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - // dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - // + "T" - // + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - // return new AddCommand(new NuSchedule.Event. - // PersonalEvent(fullCommand.substring(6, dividerPosition) - // , LocalDateTime.parse(dateTime))); - // } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - // throw new TimeFormatException(); - // } - // - // - // case ADD_CLASS: - // dividerPosition = fullCommand.indexOf(BY); - // - // if (fullCommand.substring(8).isBlank()) { - // throw new EmptyDeadlineException(); - // } - // if (dividerPosition == -1) { - // throw new NoDeadlineTimeMarkerException(); - // } - // if (fullCommand.substring(8, dividerPosition).isBlank()) { - // throw new EmptyDeadlineException(); - // } - // try { - // fullCommand.substring(dividerPosition + 4); - // } catch (StringIndexOutOfBoundsException e) { - // throw new NoDeadlineTimeException(); - // } - // try { - // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - // dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - // + "T" - // + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - // return new AddCommand(new NuSchedule.Event. - // Assignment(fullCommand.substring(9, dividerPosition) - // , LocalDateTime.parse(dateTime))); - // } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - // throw new TimeFormatException(); - // } - // - // case ADD_PERSONAL_EVENT: - // - // try { - // if (fullCommand.substring(5).isBlank()) { - // throw new EmptyTodoException(); - // } - // return new AddCommand(new Todo(fullCommand.substring(5))); - // } catch (StringIndexOutOfBoundsException e) { - // throw new EmptyTodoException(); - // } - // - // default: - // throw new WrongCommandException(); - // - // } + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when this block is entered, the parser will not go to any other blocks + int dividerPosition; + int timeDivider; + String dateTime; + switch (words[0]) { + case ADD_ASSIGNMENT: + dividerPosition = fullCommand.indexOf(BY); + + if (fullCommand.substring(10).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(10, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new Assignment(fullCommand.substring(10, dividerPosition) + , LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + + case ADD_CLASS: + dividerPosition = fullCommand.indexOf(AT); + + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(5, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + + return new AddCommand(new event.Class(fullCommand.substring(5, dividerPosition) + , LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + case ADD_PERSONAL_EVENT: + dividerPosition = fullCommand.indexOf(AT); + if (fullCommand.substring(13).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(13, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new PersonalEvent(fullCommand.substring(13,dividerPosition),LocalDateTime.parse(dateTime))); + } catch (StringIndexOutOfBoundsException e) { + throw new EmptyEventException(); + } + + default: + throw new WrongCommandException(); - return null; - //delete later + } } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index eb4b61abca..9ff4d8cddb 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -3,7 +3,6 @@ import event.Event; - import java.util.ArrayList; import java.util.Scanner; @@ -63,11 +62,18 @@ public void printLine() { */ public void printEventList(ArrayList events) { int numPrintedEvents = 0; - - System.out.println(" Here are the Events in your list:"); - for (Event event : events) { - numPrintedEvents++; - System.out.println(numPrintedEvents + ". " + event.toString()); + if (events.size() == 0){ + System.out.println("The list is empty."); + } else { + try { + System.out.println("Here are the Events in your list:"); + for (Event event : events) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + event.toString()); + } + } catch (NullPointerException e){ + System.out.println("The list is empty."); + } } } From 38867c8ca34bcb64434bb3e252430dc6993688af Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 15 Oct 2020 11:38:14 +0800 Subject: [PATCH 025/299] update ui to remove unnecessary spaces --- src/main/java/ui/UI.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index eb4b61abca..d3ed4e6834 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -13,15 +13,15 @@ public class UI { public static final String LOGO = - " _ _ _ _ ____ _ _ _ \n" - + "| | | | | | | / ___| | | | | | | \n" + " _ _ _ _ ____ _ _ _\n" + + "| | | | | | | / ___| | | | | | |\n" + "| \\ | | | | |/ / | | | | | |\n" - + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___ \n" - + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\ \n" - + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___|| \n" - + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/ \n" + + "| |\\\\ | | | | |\\ \\ | | ___ | | | | ___\n" + + "| | \\\\ | | | | | \\ \\ ___| |______ /___\\ ____| |_ _| |/___\\\n" + + "| | \\\\ | | | | | \\ \\ /___| ____ ||___||| __ | | | | ||___||\n" + + "| | \\\\| | | | | \\ \\ // | | | | ___/ | | | | | | | | ___/\n" + "| | \\ | |______| |___/ / \\\\___| | | |\\____ | |__| | |__| | |\\____\n" - + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/ \n"; + + "|_| |_|__________|____/ \\___|_| |_|\\___/ |______|\\___,_|_|\\___/\n"; public static final String LINE_DIVIDER = "____________________________________________________________"; public static final String EXIT_MESSAGE = "Bye. Hope to see you again soon!"; private final Scanner in; From 0f3b9476bb6b9b85cced97ff1beb1ce07aeb2ce0 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 15 Oct 2020 15:31:34 +0800 Subject: [PATCH 026/299] Adding exceptions --- .../java/exception/AssignmentException.java | 7 +++++ src/main/java/exception/ClassException.java | 7 +++++ .../java/exception/CreatingFileException.java | 2 +- .../java/exception/DateFormatException.java | 18 +++++++++++ src/main/java/exception/DeleteException.java | 7 +++++ .../DeleteNumberFormatException.java | 15 +++++++++ .../DeleteUndefinedTaskException.java | 31 +++++++++++++++++++ src/main/java/exception/DoneException.java | 7 +++++ .../exception/DoneNumberFormatException.java | 15 +++++++++ .../exception/DoneUndefinedTaskException.java | 31 +++++++++++++++++++ .../exception/EmptyAssignmentException.java | 15 +++++++++ .../java/exception/EmptyClassException.java | 15 +++++++++ .../java/exception/EmptyDeleteException.java | 16 ++++++++++ .../java/exception/EmptyDoneException.java | 16 ++++++++++ .../exception/EmptyFindDateException.java | 15 +++++++++ .../java/exception/EmptyFindException.java | 16 ++++++++++ .../EmptyPersonalEventException.java | 15 +++++++++ .../exception/InvalidCommandException.java | 7 +++++ .../java/exception/NoClassTimeException.java | 16 ++++++++++ .../exception/NoClassTimeMarkerException.java | 16 ++++++++++ .../exception/NoMatchingTaskException.java | 16 ++++++++++ .../NoPersonalEventTimeException.java | 16 ++++++++++ .../NoPersonalEventTimeMakerException.java | 16 ++++++++++ .../java/exception/NoTaskDateException.java | 15 +++++++++ .../exception/PersonalEventException.java | 7 +++++ .../java/exception/TimeFormatException.java | 19 ++++++++++++ .../java/exception/WrongCommandException.java | 15 +++++++++ src/main/java/parser/Parser.java | 20 ++++++------ 28 files changed, 400 insertions(+), 11 deletions(-) create mode 100644 src/main/java/exception/AssignmentException.java create mode 100644 src/main/java/exception/ClassException.java create mode 100644 src/main/java/exception/DateFormatException.java create mode 100644 src/main/java/exception/DeleteException.java create mode 100644 src/main/java/exception/DeleteNumberFormatException.java create mode 100644 src/main/java/exception/DeleteUndefinedTaskException.java create mode 100644 src/main/java/exception/DoneException.java create mode 100644 src/main/java/exception/DoneNumberFormatException.java create mode 100644 src/main/java/exception/DoneUndefinedTaskException.java create mode 100644 src/main/java/exception/EmptyAssignmentException.java create mode 100644 src/main/java/exception/EmptyClassException.java create mode 100644 src/main/java/exception/EmptyDeleteException.java create mode 100644 src/main/java/exception/EmptyDoneException.java create mode 100644 src/main/java/exception/EmptyFindDateException.java create mode 100644 src/main/java/exception/EmptyFindException.java create mode 100644 src/main/java/exception/EmptyPersonalEventException.java create mode 100644 src/main/java/exception/InvalidCommandException.java create mode 100644 src/main/java/exception/NoClassTimeException.java create mode 100644 src/main/java/exception/NoClassTimeMarkerException.java create mode 100644 src/main/java/exception/NoMatchingTaskException.java create mode 100644 src/main/java/exception/NoPersonalEventTimeException.java create mode 100644 src/main/java/exception/NoPersonalEventTimeMakerException.java create mode 100644 src/main/java/exception/NoTaskDateException.java create mode 100644 src/main/java/exception/PersonalEventException.java create mode 100644 src/main/java/exception/TimeFormatException.java create mode 100644 src/main/java/exception/WrongCommandException.java diff --git a/src/main/java/exception/AssignmentException.java b/src/main/java/exception/AssignmentException.java new file mode 100644 index 0000000000..1dabcd8e78 --- /dev/null +++ b/src/main/java/exception/AssignmentException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions related to Assignment class. + */ +public abstract class AssignmentException extends InvalidCommandException { +} diff --git a/src/main/java/exception/ClassException.java b/src/main/java/exception/ClassException.java new file mode 100644 index 0000000000..a2e145b109 --- /dev/null +++ b/src/main/java/exception/ClassException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions related to Class class. + */ +public abstract class ClassException extends InvalidCommandException { +} diff --git a/src/main/java/exception/CreatingFileException.java b/src/main/java/exception/CreatingFileException.java index c08c10e9d3..c1b25bbfd3 100644 --- a/src/main/java/exception/CreatingFileException.java +++ b/src/main/java/exception/CreatingFileException.java @@ -13,7 +13,7 @@ public CreatingFileException(String filePath) { /** * Prepare the message to be printed when this exception is experienced. * - * @return the error message + * @return the error message. */ public String getMessage() { return "The file \"" + filePath + "\" is not created"; diff --git a/src/main/java/exception/DateFormatException.java b/src/main/java/exception/DateFormatException.java new file mode 100644 index 0000000000..1531492f61 --- /dev/null +++ b/src/main/java/exception/DateFormatException.java @@ -0,0 +1,18 @@ +package exception; +/** + * Represents the exception happens when the user trying to find the tasks on a certain date + * but the date is not given in the correct format. + */ +public class DateFormatException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced, + * gives suggestion to the user on how to solve the error. + * + * @return the message. + */ + public String getMessage() { + return "You entered a date in a format that is not accepted by this function.\n" + + "The format should be \"yyyy-MM-dd\"\n" + + "For example, 2000-01-01"; + } +} diff --git a/src/main/java/exception/DeleteException.java b/src/main/java/exception/DeleteException.java new file mode 100644 index 0000000000..754cc56b58 --- /dev/null +++ b/src/main/java/exception/DeleteException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions when performing delete. + */ +public abstract class DeleteException extends InvalidCommandException { +} diff --git a/src/main/java/exception/DeleteNumberFormatException.java b/src/main/java/exception/DeleteNumberFormatException.java new file mode 100644 index 0000000000..7d13d687e3 --- /dev/null +++ b/src/main/java/exception/DeleteNumberFormatException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exceptions when performing delete to a task not labeled with an int. + */ +public class DeleteNumberFormatException extends DeleteException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message + */ + public String getMessage() { + return "Please enter an integer after delete."; + } +} diff --git a/src/main/java/exception/DeleteUndefinedTaskException.java b/src/main/java/exception/DeleteUndefinedTaskException.java new file mode 100644 index 0000000000..406464ab4b --- /dev/null +++ b/src/main/java/exception/DeleteUndefinedTaskException.java @@ -0,0 +1,31 @@ +package exception; + +/** + * Represents the case when the the user trying to delete + * some tasks that does not exist. + */ +public class DeleteUndefinedTaskException extends DeleteException { + private int label;//Task label of the task + + public DeleteUndefinedTaskException() { + } + + + /** + * Create an exception according to the input of the user. + * + * @param label the label of the task that the user want to delete + */ + public DeleteUndefinedTaskException(int label) { + this.label = label; + } + + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message + */ + public String getMessage() { + return "☹ OOPS!!! There isn't a task labeled " + label; + } +} diff --git a/src/main/java/exception/DoneException.java b/src/main/java/exception/DoneException.java new file mode 100644 index 0000000000..f684309ef1 --- /dev/null +++ b/src/main/java/exception/DoneException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions when performing done. + */ +public abstract class DoneException extends InvalidCommandException { +} diff --git a/src/main/java/exception/DoneNumberFormatException.java b/src/main/java/exception/DoneNumberFormatException.java new file mode 100644 index 0000000000..f1aad04563 --- /dev/null +++ b/src/main/java/exception/DoneNumberFormatException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exceptions when performing done to a task not labeled with an int. + */ +public class DoneNumberFormatException extends DoneException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message + */ + public String getMessage() { + return "Please enter an integer after done."; + } +} diff --git a/src/main/java/exception/DoneUndefinedTaskException.java b/src/main/java/exception/DoneUndefinedTaskException.java new file mode 100644 index 0000000000..6bd8d83a47 --- /dev/null +++ b/src/main/java/exception/DoneUndefinedTaskException.java @@ -0,0 +1,31 @@ +package exception; + +/** + * Represents the case when the the user trying to done + * some tasks that does not exist. + */ +public class DoneUndefinedTaskException extends DoneException { + private int label;//Task label of the task + + public DoneUndefinedTaskException() { + } + + + /** + * Create an exception according to the input of the user. + * + * @param label the label of the task that the user want to mark as done + */ + public DoneUndefinedTaskException(int label) { + this.label = label; + } + + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message + */ + public String getMessage() { + return "☹ OOPS!!! There isn't a task labeled " + label; + } +} diff --git a/src/main/java/exception/EmptyAssignmentException.java b/src/main/java/exception/EmptyAssignmentException.java new file mode 100644 index 0000000000..c43af6d7e0 --- /dev/null +++ b/src/main/java/exception/EmptyAssignmentException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the case when the user want to create an empty Todo. + */ +public class EmptyAssignmentException extends AssignmentException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! The description of a todo cannot be empty."; + } +} diff --git a/src/main/java/exception/EmptyClassException.java b/src/main/java/exception/EmptyClassException.java new file mode 100644 index 0000000000..8387e61644 --- /dev/null +++ b/src/main/java/exception/EmptyClassException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the case when the user want to create an empty Deadline. + */ +public class EmptyClassException extends ClassException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! The description of a deadline cannot be empty."; + } +} diff --git a/src/main/java/exception/EmptyDeleteException.java b/src/main/java/exception/EmptyDeleteException.java new file mode 100644 index 0000000000..ef39a98f0c --- /dev/null +++ b/src/main/java/exception/EmptyDeleteException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the case when the user types delete but do not specify + * the task that should be deleted. + */ +public class EmptyDeleteException extends DeleteException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter the index of the task you want to delete."; + } +} diff --git a/src/main/java/exception/EmptyDoneException.java b/src/main/java/exception/EmptyDoneException.java new file mode 100644 index 0000000000..e96b433f9e --- /dev/null +++ b/src/main/java/exception/EmptyDoneException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the case when the user types done but do not specify + * the task that should be done. + */ +public class EmptyDoneException extends DoneException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter the index of the task you have done."; + } +} diff --git a/src/main/java/exception/EmptyFindDateException.java b/src/main/java/exception/EmptyFindDateException.java new file mode 100644 index 0000000000..9b404c4eec --- /dev/null +++ b/src/main/java/exception/EmptyFindDateException.java @@ -0,0 +1,15 @@ +package exception; +/** + * Represents the case when the user types date but do not specify + * the date. + */ +public class EmptyFindDateException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter the date you are looking for."; + } +} diff --git a/src/main/java/exception/EmptyFindException.java b/src/main/java/exception/EmptyFindException.java new file mode 100644 index 0000000000..075fc23062 --- /dev/null +++ b/src/main/java/exception/EmptyFindException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the case when the user types find but do not specify + * the keyword. + */ +public class EmptyFindException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter the keyword of the tasks you want to find."; + } +} diff --git a/src/main/java/exception/EmptyPersonalEventException.java b/src/main/java/exception/EmptyPersonalEventException.java new file mode 100644 index 0000000000..3c2fc124c8 --- /dev/null +++ b/src/main/java/exception/EmptyPersonalEventException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the case when the user want to create an empty Event. + */ +public class EmptyPersonalEventException extends PersonalEventException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! The description of an event cannot be empty."; + } +} diff --git a/src/main/java/exception/InvalidCommandException.java b/src/main/java/exception/InvalidCommandException.java new file mode 100644 index 0000000000..c83334c591 --- /dev/null +++ b/src/main/java/exception/InvalidCommandException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions happen when the user input invalid command. + */ +public abstract class InvalidCommandException extends NuScheduleException { +} diff --git a/src/main/java/exception/NoClassTimeException.java b/src/main/java/exception/NoClassTimeException.java new file mode 100644 index 0000000000..23952aa0e7 --- /dev/null +++ b/src/main/java/exception/NoClassTimeException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to create a Deadline + * without giving it a time. + */ +public class NoClassTimeException extends ClassException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter a time for deadline."; + } +} diff --git a/src/main/java/exception/NoClassTimeMarkerException.java b/src/main/java/exception/NoClassTimeMarkerException.java new file mode 100644 index 0000000000..c65812342c --- /dev/null +++ b/src/main/java/exception/NoClassTimeMarkerException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to create a Deadline + * without using \by to give it a time. + */ +public class NoClassTimeMarkerException extends ClassException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should mark the time for a deadline with \"/by\""; + } +} diff --git a/src/main/java/exception/NoMatchingTaskException.java b/src/main/java/exception/NoMatchingTaskException.java new file mode 100644 index 0000000000..0778144c1d --- /dev/null +++ b/src/main/java/exception/NoMatchingTaskException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to find a Task with a certain keyword, but such + * task does not exist in the list. + */ +public class NoMatchingTaskException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Sorry, there isn't such task in the list with the given keyword."; + } +} diff --git a/src/main/java/exception/NoPersonalEventTimeException.java b/src/main/java/exception/NoPersonalEventTimeException.java new file mode 100644 index 0000000000..715fd74c38 --- /dev/null +++ b/src/main/java/exception/NoPersonalEventTimeException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to create an Event + * without giving it a time. + */ +public class NoPersonalEventTimeException extends PersonalEventException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should enter a time for event."; + } +} diff --git a/src/main/java/exception/NoPersonalEventTimeMakerException.java b/src/main/java/exception/NoPersonalEventTimeMakerException.java new file mode 100644 index 0000000000..782b0a92b8 --- /dev/null +++ b/src/main/java/exception/NoPersonalEventTimeMakerException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to create an Event + * without using \by to give it a time. + */ +public class NoPersonalEventTimeMakerException extends PersonalEventException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! You should mark the time for an event with \"/at\""; + } +} diff --git a/src/main/java/exception/NoTaskDateException.java b/src/main/java/exception/NoTaskDateException.java new file mode 100644 index 0000000000..35c0996fa1 --- /dev/null +++ b/src/main/java/exception/NoTaskDateException.java @@ -0,0 +1,15 @@ +package exception; +/** + * Represents the exception happens when the user trying to find a Task with a certain date, but such + * task does not exist in the list. + */ +public class NoTaskDateException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Sorry, there isn't such task in the list on the given date."; + } +} diff --git a/src/main/java/exception/PersonalEventException.java b/src/main/java/exception/PersonalEventException.java new file mode 100644 index 0000000000..befd64bc06 --- /dev/null +++ b/src/main/java/exception/PersonalEventException.java @@ -0,0 +1,7 @@ +package exception; + +/** + * Represents the exceptions related to PersonalEvent class. + */ +public abstract class PersonalEventException extends InvalidCommandException { +} diff --git a/src/main/java/exception/TimeFormatException.java b/src/main/java/exception/TimeFormatException.java new file mode 100644 index 0000000000..91e4f0f1fa --- /dev/null +++ b/src/main/java/exception/TimeFormatException.java @@ -0,0 +1,19 @@ +package exception; + +/** + * Represents the exception happens when the user trying to create an Event or a Deadline + * but the time is not given in the correct format. + */ +public class TimeFormatException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced, + * gives suggestion to the user on how to solve the error. + * + * @return the message + */ + public String getMessage() { + return "You entered the time in a format that is not accepted by this program.\n" + + "The format should be \"yyyy-MM-dd HH:mm\"\n" + + "For example, 2000-01-01 00:00"; + } +} diff --git a/src/main/java/exception/WrongCommandException.java b/src/main/java/exception/WrongCommandException.java new file mode 100644 index 0000000000..bf22ac3339 --- /dev/null +++ b/src/main/java/exception/WrongCommandException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when the user types something meaningless. + */ +public class WrongCommandException extends InvalidCommandException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "☹ OOPS!!! I'm sorry, but I don't know what that means :-("; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 5283e11fe8..1c7d0899ef 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -99,18 +99,18 @@ public static Command parse(String fullCommand) /*throws NuScheduleException*/ { // dividerPosition = fullCommand.indexOf(AT); // // if (fullCommand.substring(5).isBlank()) { - // throw new EmptyEventException(); + // throw new EmptyPersonalEventException(); // } // if (dividerPosition == -1) { - // throw new NoEventTimeMakerException(); + // throw new NoPersonalEventTimeMakerException(); // } // if (fullCommand.substring(5, dividerPosition).isBlank()) { - // throw new EmptyEventException(); + // throw new EmptyPersonalEventException(); // } // try { // fullCommand.substring(dividerPosition + 4); // } catch (StringIndexOutOfBoundsException e) { - // throw new NoEventTimeException(); + // throw new NoPersonalEventTimeException(); // } // try { // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); @@ -129,18 +129,18 @@ public static Command parse(String fullCommand) /*throws NuScheduleException*/ { // dividerPosition = fullCommand.indexOf(BY); // // if (fullCommand.substring(8).isBlank()) { - // throw new EmptyDeadlineException(); + // throw new EmptyClassException(); // } // if (dividerPosition == -1) { - // throw new NoDeadlineTimeMarkerException(); + // throw new NoClassTimeMarkerException(); // } // if (fullCommand.substring(8, dividerPosition).isBlank()) { - // throw new EmptyDeadlineException(); + // throw new EmptyClassException(); // } // try { // fullCommand.substring(dividerPosition + 4); // } catch (StringIndexOutOfBoundsException e) { - // throw new NoDeadlineTimeException(); + // throw new NoClassTimeException(); // } // try { // timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); @@ -158,11 +158,11 @@ public static Command parse(String fullCommand) /*throws NuScheduleException*/ { // // try { // if (fullCommand.substring(5).isBlank()) { - // throw new EmptyTodoException(); + // throw new EmptyAssignmentException(); // } // return new AddCommand(new Todo(fullCommand.substring(5))); // } catch (StringIndexOutOfBoundsException e) { - // throw new EmptyTodoException(); + // throw new EmptyAssignmentException(); // } // // default: From 698cfc4cecc707098c5a611eb76ff681075b7b78 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 15 Oct 2020 17:30:51 +0800 Subject: [PATCH 027/299] added print location list command --- src/main/java/command/AddCommand.java | 4 +++- src/main/java/command/Command.java | 4 +++- src/main/java/command/ExitCommand.java | 4 +++- .../java/command/PrintFullListCommand.java | 4 +++- .../java/command/PrintLocationCommand.java | 23 +++++++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/java/command/PrintLocationCommand.java diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 198a945727..6b869c7742 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -3,6 +3,8 @@ import event.Event; import eventlist.EventList; import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; import storage.Storage; import ui.UI; @@ -30,7 +32,7 @@ public AddCommand(Event event){ * @param storage store the data. */ @Override - public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException{ + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException{ events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/Command.java b/src/main/java/command/Command.java index 53ec684955..9e43c315c8 100644 --- a/src/main/java/command/Command.java +++ b/src/main/java/command/Command.java @@ -1,5 +1,7 @@ package command; +import locationlist.BusStopList; +import locationlist.LocationList; import storage.Storage; import eventlist.EventList; import ui.UI; @@ -20,7 +22,7 @@ public abstract class Command { * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ - public abstract void execute(EventList events, UI ui, Storage storage) throws NuScheduleException; + public abstract void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException; public boolean isExit() { return isExit; diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 268855b82d..386f3f63b2 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -1,6 +1,8 @@ package command; import eventlist.EventList; +import locationlist.BusStopList; +import locationlist.LocationList; import storage.Storage; import ui.UI; @@ -17,7 +19,7 @@ public class ExitCommand extends Command { * @param storage store the data. */ @Override - public void execute(EventList tasks, UI ui, Storage storage) { + public void execute(EventList tasks, LocationList locations, BusStopList busStops, UI ui, Storage storage) { isExit = true; ui.printExitMessage(); diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 2d3fa43c84..5ee7db1695 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -1,6 +1,8 @@ package command; import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; import storage.Storage; import eventlist.EventList; import ui.UI; @@ -17,7 +19,7 @@ public class PrintFullListCommand extends Command { * to be handled based on the specific exception. */ @Override - public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { ui.printEventList(events.getEventList()); } } diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java new file mode 100644 index 0000000000..ee5744057f --- /dev/null +++ b/src/main/java/command/PrintLocationCommand.java @@ -0,0 +1,23 @@ +package command; + +import eventlist.EventList; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + + +public class PrintLocationCommand extends Command { + /** + * + * @param events the list of Events. + * @param locations the list of Locations + * @param busStops the list of BusStops + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + ui.printLocationList(locations.getLocationList()); + } +} From 10b939acabe9992c7a4fb27927786596f8abee38 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 15 Oct 2020 17:32:04 +0800 Subject: [PATCH 028/299] moved load busstop and location data functions to storage for OOP --- src/main/java/command/ExitCommand.java | 2 + .../java/command/PrintFullListCommand.java | 2 + .../java/command/PrintLocationCommand.java | 1 + src/main/java/locationlist/BusStopList.java | 37 +++------- src/main/java/locationlist/LocationList.java | 58 ++++------------ src/main/java/storage/Storage.java | 69 +++++++++++++++++++ text-ui-test/data/bus_stops.txt | 7 ++ text-ui-test/data/locations.txt | 20 ++++++ 8 files changed, 123 insertions(+), 73 deletions(-) create mode 100644 text-ui-test/data/bus_stops.txt create mode 100644 text-ui-test/data/locations.txt diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 386f3f63b2..1c545117d9 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -15,6 +15,8 @@ public class ExitCommand extends Command { * Also prints the exit message. * * @param tasks the list of tasks. + * @param locations the list of Locations + * @param busStops the list of BusStops * @param ui do outputs. * @param storage store the data. */ diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 5ee7db1695..4de4b83bd8 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -13,6 +13,8 @@ public class PrintFullListCommand extends Command { * Prints the list of Events. * * @param events the list of Events. + * @param locations the list of Locations + * @param busStops the list of BusStops * @param ui do outputs. * @param storage store the data. * @throws NuScheduleException the exceptions can happen in this function, diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java index ee5744057f..3dd19d350c 100644 --- a/src/main/java/command/PrintLocationCommand.java +++ b/src/main/java/command/PrintLocationCommand.java @@ -9,6 +9,7 @@ public class PrintLocationCommand extends Command { /** + * Prints list of locations * * @param events the list of Events. * @param locations the list of Locations diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index a61021ba58..27666fb750 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -2,34 +2,22 @@ import location.BusStop; -import java.io.File; -import java.io.FileNotFoundException; import java.util.ArrayList; -import java.util.Scanner; public class BusStopList { private static final String filePath = "data/bus_stops.txt"; private ArrayList busStopList = new ArrayList<>(); - public void loadBusStopData() { - File f = new File(filePath); - Scanner s = null; - try { - s = new Scanner(f); - } catch (FileNotFoundException e) { - System.out.println(f.getName() + "not found: " + e.getMessage()); - } - - while(s.hasNext()) { - String input = s.nextLine(); - String[] split = input.split(":",2); - String name = split[0]; - String[] buses = split[1].split(","); - BusStop stop = new BusStop(name, buses); - this.busStopList.add(stop); - } + public ArrayList getBusStopList() { + return busStopList; } + /** + * Flag to check if the bus stop exists + * + * @param name name of bus stop to be checked + * @return boolean value of if the bus stop exist in the list + */ public boolean checkExistence(String name) { for (BusStop busStop : busStopList) { if (name.equals(busStop.getName())) { @@ -38,13 +26,4 @@ public boolean checkExistence(String name) { } return false; } - - public void printBusStopList() { - int i = 1; - System.out.println("List of bus stops: "); - for(BusStop busStop : busStopList) { - System.out.println(i + ". " + busStop); - i++; - } - } } diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index e06d14ab83..5cc115837a 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -1,59 +1,29 @@ package locationlist; -import location.Building; -import location.Hostel; -import location.LectureTheatre; import location.Location; -import java.io.File; -import java.io.FileNotFoundException; import java.util.ArrayList; -import java.util.Scanner; public class LocationList { private static final String filePath = "data/locations.txt"; - public ArrayList locationList = new ArrayList<>(); + private ArrayList locationList = new ArrayList<>(); - public void loadLocationData() { - File f = new File(filePath); - Scanner s = null; - try { - s = new Scanner(f); - } catch (FileNotFoundException e) { - System.out.println(f.getName() + "not found: " + e.getMessage()); - } - - while(s.hasNext()) { - String input = s.nextLine(); - // info[0] = type, info[1] = name, info[2] = nearest buildings/bus stops - String[] info = input.split("/"); - String[] additionalInfo = info[2].split(","); - Location location = null; - switch(info[0]) { - case "BLK": - location = new Building(info[1], additionalInfo); - break; - case "H": - location = new Hostel(info[1], additionalInfo); - break; - case "L": - location = new LectureTheatre(info[1], info[2]); - break; - } - if (location!=null) { - locationList.add(location); - } else { - System.out.println("Invalid Location Type"); - } - } + public ArrayList getLocationList() { + return locationList; } - public void printLocationList() { - int i = 1; - System.out.println("Lists of locations: "); + /** + * Flag to check if location exists + * + * @param name name of the location to be checked + * @return boolean value of if the location is found in the location list + */ + public boolean checkValidLocation(String name) { for (Location location : locationList) { - System.out.println(i + ". " + location); - i++; + if (name.equals(location.getName())) { + return true; + } } + return false; } } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 3c9e0b14ba..a8566da1ce 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -5,11 +5,14 @@ import exception.CreatingFileException; import exception.LoadingException; import exception.WritingFileException; +import location.*; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.Scanner; /** * This class creates the folder and file path if it's not already created, and @@ -78,4 +81,70 @@ public ArrayList load() throws LoadingException { return null; //to be implemented } + + /** + * Loads data from bus_stop text file to an ArrayList, which is stored in a BusStopList + * + * @param busStopList ArrayList of BusStops in BusStopList + */ + public void loadBusStopData(ArrayList busStopList) { + File f = new File("data/bus_stops.txt"); + Scanner s = null; + try { + s = new Scanner(f); + } catch (FileNotFoundException e) { + System.out.println(f.getName() + " not found: " + e.getMessage()); + } + + while(s.hasNext()) { + String input = s.nextLine(); + String[] split = input.split(":",2); + String name = split[0]; + String[] buses = split[1].split(","); + BusStop stop = new BusStop(name, buses); + busStopList.add(stop); + } + } + + /** + * Loads data from location text file into an ArrayList, which is stored in a LocationList + * + * @param locationList ArrayList of Locations in LocationList + */ + public void loadLocationData(ArrayList locationList) { + File f = new File("data/locations.txt"); + Scanner s = null; + try { + s = new Scanner(f); + } catch (FileNotFoundException e) { + System.out.println(f.getName() + "not found: " + e.getMessage()); + } + + while(s.hasNext()) { + String input = s.nextLine(); + // info[0] = type, info[1] = name, info[2] = nearest buildings/bus stops + String[] info = input.split("/"); + String[] additionalInfo = info[2].split(","); + Location location = null; + switch(info[0]) { + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + case "OUT": + location = new OutOfNUS(info[1]); + break; + } + if (location!=null) { + locationList.add(location); + } else { + System.out.println("Invalid Location Type"); + } + } + } } diff --git a/text-ui-test/data/bus_stops.txt b/text-ui-test/data/bus_stops.txt new file mode 100644 index 0000000000..2151b17204 --- /dev/null +++ b/text-ui-test/data/bus_stops.txt @@ -0,0 +1,7 @@ +EA:B2,C,BTC2 +Raffles Hall:B2,C +Information Technology:A2,B1,B2,D1 +Opp YIH:A2,B1,B2,D1 +NUS Museum:A2,BTC1,BTC2,C,D1,D2 +YIH:A1,B1,BTC1,D1 +CLB:A1,B1,BTC1,D1 \ No newline at end of file diff --git a/text-ui-test/data/locations.txt b/text-ui-test/data/locations.txt new file mode 100644 index 0000000000..64a3bb1a09 --- /dev/null +++ b/text-ui-test/data/locations.txt @@ -0,0 +1,20 @@ +BLK/EA/EA +BLK/EA/Information Technology +BLK/E1A/EA +BLK/EW1/EA,Information Technology +BLK/EW1A/EA +BLK/E2/EA +BLK/E3/EA,Raffles Hall +BLK/E3A/EA +BLK/E4/Information Technology +BLK/E4A/Opp YIH,YIH +BLK/E5/Information Technology +BLK/E5A/Raffles Hall +BLK/E6/Opp YIH,YIH +BLK/IT/Information Technology,CLB +H/Raffles Hall/Raffles Hall,NUS Museum +L/LT1/E2 +L/LT2/E2 +L/LT6/E4 +L/LT7/EA +L/LT7A/EA \ No newline at end of file From 28bc80d4283d72bedc0781ac82396e018c365bed Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 15 Oct 2020 17:33:08 +0800 Subject: [PATCH 029/299] moved print location list function to ui for oop and added comments --- src/main/java/NuSchedule.java | 14 ++++++----- src/main/java/command/AddCommand.java | 2 ++ src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- src/main/java/event/Event.java | 4 +++ src/main/java/event/PersonalEvent.java | 2 +- src/main/java/location/Building.java | 9 +++++++ src/main/java/location/BusStop.java | 18 +++++++++----- src/main/java/location/Hostel.java | 9 +++++++ src/main/java/location/LectureTheatre.java | 9 +++++++ src/main/java/location/Location.java | 18 +++++++++++--- src/main/java/location/OutOfNUS.java | 12 +++++++++ src/main/java/parser/Parser.java | 12 ++++++--- src/main/java/ui/UI.java | 29 ++++++++++++++++++++++ 14 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 src/main/java/location/OutOfNUS.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 690147cc9d..a2eca45e69 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -22,11 +22,6 @@ public class NuSchedule { public NuSchedule(String filePath) { ui = new UI(); - - busStops = new BusStopList(); - locations = new LocationList(); - busStops.loadBusStopData(); - locations.loadLocationData(); try { storage = new Storage(filePath); } catch (CreatingFileException e) { @@ -38,6 +33,13 @@ public NuSchedule(String filePath) { ui.showLoadingError(); events = new EventList(); } + + busStops = new BusStopList(); + locations = new LocationList(); + storage.loadBusStopData(busStops.getBusStopList()); + storage.loadLocationData(locations.getLocationList()); + // ui.printBusStopList(busStops.getBusStopList()); + // ui.printLocationList(locations.getLocationList()); } /** @@ -51,7 +53,7 @@ public void run() { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") Command c = Parser.parse(fullCommand); - c.execute(events, ui, storage); + c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); } catch (NuScheduleException e) { ui.showError(e.getMessage()); diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 6b869c7742..b0dcf72a53 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -28,6 +28,8 @@ public AddCommand(Event event){ * Adds the appropriate type of event/task to the list. * * @param events the list of events. + * @param locations the list of Locations + * @param busStops the list of BusStops * @param ui do outputs. * @param storage store the data. */ diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 6895f3dc75..b01d52864d 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -18,7 +18,7 @@ public class Assignment extends Event { * @return the result string to be stored */ public String fileString() { - return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by; + return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + location; } public Assignment(String description, LocalDateTime by) { diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index e714be661d..b864bec9ef 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -21,7 +21,7 @@ public Class(String description, LocalDateTime at) { * @return the result string to be stored. */ public String fileString() { - return "C//" + (isDone ? 1 : 0) + "//" + description; + return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + location; } /** diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index b33dacdc00..5de6defdf3 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -67,6 +67,10 @@ public LocalDate getDate() { public String getDescription() { return description; } + + public Location getLocation() { + return location; + } } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index b402e9698d..389aab780f 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -19,7 +19,7 @@ public class PersonalEvent extends Event { * @return the result string to be stored */ public String fileString() { - return "E//" + (isDone ? 1 : 0) + "//" + description + "//" + at; + return "E//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + location; } /** diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index 025f3ec995..fb08a589e2 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -2,6 +2,10 @@ import java.util.Arrays; +/** + * Represents Building objects + * Contains an array of Strings nearestBusStops which represents the bus stops nearby + */ public class Building extends Location{ private String[] nearestBusStops; @@ -11,6 +15,11 @@ public Building(String name, String[] nearestBusStops) { this.type = locationType.BUILDING; } + /** + * Prepares string to be printed in a list + * + * @return object to be printed in a certain format + */ @Override public String toString() { return "(Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); diff --git a/src/main/java/location/BusStop.java b/src/main/java/location/BusStop.java index f2453c9f89..d9b5b9cff9 100644 --- a/src/main/java/location/BusStop.java +++ b/src/main/java/location/BusStop.java @@ -2,6 +2,11 @@ import java.util.Arrays; +/** + * Represents bus stop objects + * Contains String name which is the name of the bus stop and + * an array of Strings which is the list of buses available at the bus stop + */ public class BusStop { private String name; private String[] buses; @@ -11,15 +16,16 @@ public BusStop(String name, String[] buses) { this.buses = buses; } - public String toString() { - return name + "\nBuses Available: " + Arrays.toString(buses); - } - public String getName() { return name; } - public String[] getBuses() { - return buses; + /** + * Prepares string to be printed in a list + * + * @return object to be printed in a certain format + */ + public String toString() { + return name + "\nBuses Available: " + Arrays.toString(buses); } } diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index f34f48d54c..a55c52818c 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -2,6 +2,10 @@ import java.util.Arrays; +/** + * Represents Hostel objects + * Contains an array of Strings nearestBusStops which represents the bus stops nearby + */ public class Hostel extends Location{ String[] nearestBusStops; @@ -11,6 +15,11 @@ public Hostel(String name, String[] nearestBusStops) { this.nearestBusStops = nearestBusStops; } + /** + * Prepares string to be printed in a list + * + * @return object to be printed in a certain format + */ @Override public String toString() { return "(Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index c7bb10df7e..9cb7961c75 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -1,5 +1,9 @@ package location; +/** + * Represents lecture theatre objects + * Contains a String nearestBuilding which represents the name of nearest building + */ public class LectureTheatre extends Location{ private String nearestBuilding; @@ -9,6 +13,11 @@ public LectureTheatre(String name, String nearestBuilding) { this.nearestBuilding = nearestBuilding; } + /** + * Prepares string to be printed in a list + * + * @return object to be printed in a certain format + */ @Override public String toString() { return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 859e7f5f72..bfdfdf585b 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -3,9 +3,14 @@ enum locationType { BUILDING, HOSTEL, - LT + LT, + OUT_OF_NUS } +/** + * Represents location objects + * Contains String name, which is the name of location, and type of location + */ public class Location { protected String name; protected locationType type; @@ -15,7 +20,11 @@ public Location(String name) { this.name = name; } - public String printType() { + public String getName() { + return name; + } + + protected String printType() { String str; switch (type) { @@ -28,8 +37,11 @@ public String printType() { case LT: str = "Lecture Theatre"; break; + case OUT_OF_NUS: + str = "Out of NUS"; + break; default: - str = "invalid location type"; + str = "ERROR"; } return str; diff --git a/src/main/java/location/OutOfNUS.java b/src/main/java/location/OutOfNUS.java new file mode 100644 index 0000000000..841db25783 --- /dev/null +++ b/src/main/java/location/OutOfNUS.java @@ -0,0 +1,12 @@ +package location; + +public class OutOfNUS extends Location { + public OutOfNUS(String name) { + super(name); + } + + @Override + public String toString() { + return "(Out of NUS): " + name; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 75e5bd95b2..7b8cef1822 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,10 +1,7 @@ package parser; -import command.AddCommand; -import command.Command; -import command.ExitCommand; -import command.PrintFullListCommand; +import command.*; import event.Assignment; import event.PersonalEvent; @@ -25,6 +22,8 @@ public abstract class Parser { public static final String EXIT = "bye"; public static final String PRINT_Event_LIST = "list"; + public static final String PRINT_LOCATION_LIST = "locations"; + public static final String LOCATE_EVENT = "locate"; public static final String Event_DONE = "done"; public static final String ADD_ASSIGNMENT = "assignment"; public static final String ADD_CLASS = "class"; @@ -49,6 +48,8 @@ public static Command parse(String fullCommand) throws NuScheduleException { return new ExitCommand(); } else if (fullCommand.equals(PRINT_Event_LIST)) { return new PrintFullListCommand(); + } else if (fullCommand.equals(PRINT_LOCATION_LIST)) { + return new PrintLocationCommand(); } String[] words = fullCommand.split(SINGLE_SPACE); @@ -193,6 +194,9 @@ public static Command parse(String fullCommand) throws NuScheduleException { throw new EmptyEventException(); } + case LOCATE_EVENT: + + default: throw new WrongCommandException(); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index f20b5d6961..c07581f29e 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -2,6 +2,9 @@ import event.Event; +import location.BusStop; +import location.Location; +import locationlist.LocationList; import java.util.ArrayList; import java.util.Scanner; @@ -181,5 +184,31 @@ public void printFilteredDateEventList(ArrayList filteredEventList) { } } + /** + * Prints all the locations stored in the location list with nearest bus stops + * + * @param locationsList an Array List of Locations to be printed + */ + public void printLocationList(ArrayList locationsList) { + int i = 1; + System.out.println("Lists of locations: "); + for (Location location : locationsList) { + System.out.println(i + ". " + location); + i++; + } + } + /** + * Prints all the bus stops stored in the bus stop list with buses that goes there + * + * @param busStopList an Array List of Bus Stops to be printed + */ + public void printBusStopList(ArrayList busStopList) { + int i = 1; + System.out.println("List of bus stops: "); + for(BusStop busStop : busStopList) { + System.out.println(i + ". " + busStop); + i++; + } + } } From b90cd4350b8b1b261045d8067f9ea60a25b6b567 Mon Sep 17 00:00:00 2001 From: Brendan Date: Thu, 15 Oct 2020 19:54:57 +0800 Subject: [PATCH 030/299] Updated add functionalities with locations. --- src/main/java/event/Assignment.java | 5 +- src/main/java/event/Class.java | 5 +- src/main/java/event/PersonalEvent.java | 5 +- .../exception/NoEventLocationException.java | 15 + ...ption.java => NoEventMarkerException.java} | 2 +- src/main/java/parser/Parser.java | 268 +++++++++++------- 6 files changed, 195 insertions(+), 105 deletions(-) create mode 100644 src/main/java/exception/NoEventLocationException.java rename src/main/java/exception/{NoEventTimeMarkerException.java => NoEventMarkerException.java} (82%) diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 6895f3dc75..1c61db6c40 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -1,6 +1,8 @@ package event; +import location.Location; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -21,8 +23,9 @@ public String fileString() { return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by; } - public Assignment(String description, LocalDateTime by) { + public Assignment(String description, Location location, LocalDateTime by) { super(description); + this.location = location; this.by = by; } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index e714be661d..91cb44eea3 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -1,6 +1,8 @@ package event; +import location.Location; + import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -10,8 +12,9 @@ public class Class extends Event { protected LocalDateTime at; - public Class(String description, LocalDateTime at) { + public Class(String description, Location location, LocalDateTime at) { super(description); + this.location = location; this.at = at; } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index b402e9698d..c84b249cd2 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -1,6 +1,8 @@ package event; +import location.Location; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -31,8 +33,9 @@ public LocalDate getDate() { return LocalDate.from(at); } - public PersonalEvent(String description, LocalDateTime at) { + public PersonalEvent(String description, Location location, LocalDateTime at) { super(description); + this.location = location; this.at = at; } diff --git a/src/main/java/exception/NoEventLocationException.java b/src/main/java/exception/NoEventLocationException.java new file mode 100644 index 0000000000..d6f18b8232 --- /dev/null +++ b/src/main/java/exception/NoEventLocationException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents the exception when no location is provided when adding a new event + */ +public class NoEventLocationException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Please input a valid location."; + } +} diff --git a/src/main/java/exception/NoEventTimeMarkerException.java b/src/main/java/exception/NoEventMarkerException.java similarity index 82% rename from src/main/java/exception/NoEventTimeMarkerException.java rename to src/main/java/exception/NoEventMarkerException.java index 3ad30c944c..739c312fde 100644 --- a/src/main/java/exception/NoEventTimeMarkerException.java +++ b/src/main/java/exception/NoEventMarkerException.java @@ -3,7 +3,7 @@ /** * Represents the exception where there is no timer marker in the command */ -public class NoEventTimeMarkerException extends NuScheduleException { +public class NoEventMarkerException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 75e5bd95b2..6084358fc8 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -9,12 +9,8 @@ import event.Assignment; import event.PersonalEvent; -import exception.NoEventTimeMarkerException; -import exception.TimeFormatException; -import exception.EmptyEventException; -import exception.NuScheduleException; -import exception.NoEventTimeException; -import exception.WrongCommandException; +import exception.*; +import location.*; import java.time.LocalDateTime; import java.time.format.DateTimeParseException; @@ -34,6 +30,7 @@ public abstract class Parser { public static final String BY = "/by"; public static final String SINGLE_SPACE = " "; public static final String AT = "/at"; + public static final String LOCATION = "/l"; private static final String Event_FIND_DATE = "date"; /** @@ -41,7 +38,7 @@ public abstract class Parser { * * @param fullCommand the full string of user input * @return the specific <\code>Command<\code> object to perform what the user want to do - * // * @throws NuScheduleException includes all exceptions may happen during parsing + * // * @throws NuScheduleException includes all exceptions may happen during parsing */ public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command @@ -101,103 +98,172 @@ public static Command parse(String fullCommand) throws NuScheduleException { // return new DeleteCommand(EventIndex); // } // - //this block deals with add command - //we shall check that the user input is not meant for any other command beforehand - //because the default block will throw an exception. - // i.e. when this block is entered, the parser will not go to any other blocks - int dividerPosition; - int timeDivider; - String dateTime; - switch (words[0]) { - case ADD_ASSIGNMENT: - dividerPosition = fullCommand.indexOf(BY); - - if (fullCommand.substring(10).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(10, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new Assignment(fullCommand.substring(10, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - - case ADD_CLASS: - dividerPosition = fullCommand.indexOf(AT); - - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(5, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - - return new AddCommand(new event.Class(fullCommand.substring(5, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - case ADD_PERSONAL_EVENT: - dividerPosition = fullCommand.indexOf(AT); - if (fullCommand.substring(13).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(13, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new PersonalEvent(fullCommand.substring(13,dividerPosition),LocalDateTime.parse(dateTime))); - } catch (StringIndexOutOfBoundsException e) { - throw new EmptyEventException(); - } - - default: - throw new WrongCommandException(); + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when this block is entered, the parser will not go to any other blocks + int timeDividerPosition; + int timeDivider; + int locationDividerPosition; + String dateTime; + Location location; + switch (words[0]) { + case ADD_ASSIGNMENT: + timeDividerPosition = fullCommand.indexOf(BY); + locationDividerPosition = fullCommand.indexOf(LOCATION); + if (fullCommand.substring(10).isBlank()) { + throw new EmptyEventException(); } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventMarkerException(); + } + if (fullCommand.substring(10, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + return new AddCommand(new Assignment(fullCommand.substring(10, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + + case ADD_CLASS: + timeDividerPosition = fullCommand.indexOf(AT); + locationDividerPosition = fullCommand.indexOf(LOCATION); + + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventException(); + } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventMarkerException(); + } + if (fullCommand.substring(5, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + if (location == null){ + throw new NoEventLocationException(); + } + + return new AddCommand(new event.Class(fullCommand.substring(5, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + case ADD_PERSONAL_EVENT: + timeDividerPosition = fullCommand.indexOf(AT); + locationDividerPosition = fullCommand.indexOf(LOCATION); + + if (fullCommand.substring(13).isBlank()) { + throw new EmptyEventException(); + } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventMarkerException(); + } + if (fullCommand.substring(13, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + return new AddCommand(new PersonalEvent(fullCommand.substring(13, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + default: + throw new WrongCommandException(); + + } } + /** + * This method parses the inputted location + * + * @param input the string inputted by the user + * @return the parsed location + */ + public static Location parseLocation(String input) { + Location location = null; + try { + String[] info = input.split("/"); + String[] additionalInfo = info[2].split(","); + + + switch (info[0]) { + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; +// case "OUT": +// location = new OutOfNUS(info[1]); +// break; + default: + location = null; + } + + } catch (ArrayIndexOutOfBoundsException e) { + location = null; + } + return location; + } } From 514381fcd4a1c6a54bcb503426201de94e96d769 Mon Sep 17 00:00:00 2001 From: Brendan Date: Thu, 15 Oct 2020 19:56:30 +0800 Subject: [PATCH 031/299] Updated Parser --- src/main/java/parser/Parser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 6084358fc8..822edc163a 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -253,9 +253,9 @@ public static Location parseLocation(String input) { case "L": location = new LectureTheatre(info[1], info[2]); break; -// case "OUT": -// location = new OutOfNUS(info[1]); -// break; + case "OUT": + location = new OutOfNUS(info[1]); + break; default: location = null; } From 308cf3ea330302aaca1a5d7e51bb21267e46e1cc Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 15 Oct 2020 20:25:51 +0800 Subject: [PATCH 032/299] Add new EditCommand function --- src/main/java/NuSchedule.java | 3 + src/main/java/command/EditCommand.java | 35 ++++++++ src/main/java/eventlist/EventList.java | 4 + .../java/exception/EditIndexException.java | 7 ++ src/main/java/exception/EmptyEventIndex.java | 7 ++ src/main/java/parser/Parser.java | 79 ++++++++++++++++--- src/main/java/ui/UI.java | 12 ++- 7 files changed, 135 insertions(+), 12 deletions(-) create mode 100644 src/main/java/command/EditCommand.java create mode 100644 src/main/java/exception/EditIndexException.java create mode 100644 src/main/java/exception/EmptyEventIndex.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 690147cc9d..b2520bc11c 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -27,6 +27,7 @@ public NuSchedule(String filePath) { locations = new LocationList(); busStops.loadBusStopData(); locations.loadLocationData(); + /* try { storage = new Storage(filePath); } catch (CreatingFileException e) { @@ -38,6 +39,8 @@ public NuSchedule(String filePath) { ui.showLoadingError(); events = new EventList(); } + */ + events = new EventList(); } /** diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java new file mode 100644 index 0000000000..763d29a969 --- /dev/null +++ b/src/main/java/command/EditCommand.java @@ -0,0 +1,35 @@ +package command; + +import event.Event; +import eventlist.EventList; +import exception.EditIndexException; +import exception.NuScheduleException; +import storage.Storage; +import ui.UI; + +/** + * Represents the command call when the user adds a new event. + */ +public class EditCommand extends Command{ + private int index; + private Event event; + + public EditCommand(Event event, int index) { + this.event = event; + this.index = index; + } + + /** + * Edits the corresponding event/task in the list. + * + * @param events the list of events. + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException { + events.editEvent(this.event, this.index); + ui.printEditEventMessage(event); + ui.printNumEvent(events.getSize()); + } +} diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 82416481a8..55f28be0a3 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -54,6 +54,10 @@ public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { //throw new DoneUndefinedEventException(eventIndex); } } + + public void editEvent(Event event, int index) { + events.set(index, event); + } /** * Gives the access to the list of events. diff --git a/src/main/java/exception/EditIndexException.java b/src/main/java/exception/EditIndexException.java new file mode 100644 index 0000000000..11242c8e46 --- /dev/null +++ b/src/main/java/exception/EditIndexException.java @@ -0,0 +1,7 @@ +package exception; + +public class EditIndexException extends NuScheduleException{ + public String getMessage() { + return "Please provide a valid number."; + } +} diff --git a/src/main/java/exception/EmptyEventIndex.java b/src/main/java/exception/EmptyEventIndex.java new file mode 100644 index 0000000000..7bca58d068 --- /dev/null +++ b/src/main/java/exception/EmptyEventIndex.java @@ -0,0 +1,7 @@ +package exception; + +public class EmptyEventIndex extends NuScheduleException{ + public String getMessage() { + return "Please provide a valid number."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 75e5bd95b2..56f4b8cb50 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,24 +1,19 @@ package parser; -import command.AddCommand; -import command.Command; -import command.ExitCommand; -import command.PrintFullListCommand; +import command.*; import event.Assignment; +import event.Event; import event.PersonalEvent; -import exception.NoEventTimeMarkerException; -import exception.TimeFormatException; -import exception.EmptyEventException; -import exception.NuScheduleException; -import exception.NoEventTimeException; -import exception.WrongCommandException; +import exception.*; +import ui.UI; import java.time.LocalDateTime; import java.time.format.DateTimeParseException; + /** * This class contains one function -- parse, to call the respective command function according to the user input. */ @@ -31,6 +26,7 @@ public abstract class Parser { public static final String ADD_PERSONAL_EVENT = "personalevent"; public static final String Event_DELETE = "delete"; public static final String Event_FIND = "find"; + public static final String EDIT = "edit"; public static final String BY = "/by"; public static final String SINGLE_SPACE = " "; public static final String AT = "/at"; @@ -109,6 +105,69 @@ public static Command parse(String fullCommand) throws NuScheduleException { int timeDivider; String dateTime; switch (words[0]) { + case EDIT: + UI ui = new UI(); + int index = -1; + if(fullCommand.length() <= 4) { + throw new EmptyEventIndex(); + } + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventIndex(); + } + + try { + index = Integer.parseInt(fullCommand.substring(5)) - 1; + } catch (NumberFormatException e) { + throw new EditIndexException(); + } + + + + System.out.println("enter new event:"); + String newCommand = ui.readCommand(); + int firstDivider; + + if (newCommand.startsWith("assignment")) { + firstDivider = 10; + } else if (newCommand.startsWith("class")) { + firstDivider = 5; + } else if (newCommand.startsWith("personalevent")) { + firstDivider = 13; + } else { + firstDivider = 0; + } + + if (firstDivider != 0) { + dividerPosition = newCommand.indexOf(BY); + + if (newCommand.substring(firstDivider).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (newCommand.substring(firstDivider, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + newCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = newCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = newCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + newCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new EditCommand(new Assignment(newCommand.substring(firstDivider, dividerPosition) + , LocalDateTime.parse(dateTime)), index); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + } + + + case ADD_ASSIGNMENT: dividerPosition = fullCommand.indexOf(BY); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index f20b5d6961..9cf72a558f 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -165,7 +165,15 @@ public void printAddEventMessage(Event eventAdded) { System.out.println("Got it. I've added this Event: "); System.out.println(eventAdded.toString()); } - + /** + * Prints the message when the user adds some Event. + * + * @param eventEdited the Event being edited + */ + public void printEditEventMessage(Event eventEdited) { + System.out.println("Got it. I've edited this Event: "); + System.out.println(eventEdited.toString()); + } /** * Prints all the Events of the filtered list with labels, based on the input list. * @@ -182,4 +190,4 @@ public void printFilteredDateEventList(ArrayList filteredEventList) { } -} +} \ No newline at end of file From 39f02264c9942b65737e01cfadb17a43a1d16af5 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 16 Oct 2020 02:47:25 +0800 Subject: [PATCH 033/299] update storage to make it work --- data/events.txt | 1 + src/main/java/NuSchedule.java | 3 +- src/main/java/command/AddCommand.java | 2 +- src/main/java/event/PersonalEvent.java | 2 +- src/main/java/eventlist/EventList.java | 5 +- .../DeleteUndefinedTaskException.java | 2 +- ....java => DoneUndefinedEventException.java} | 8 +-- .../exception/EmptyAssignmentException.java | 2 +- .../java/exception/EmptyClassException.java | 2 +- .../java/exception/EmptyDeleteException.java | 2 +- .../java/exception/EmptyDoneException.java | 2 +- .../exception/EmptyFindDateException.java | 2 +- .../java/exception/EmptyFindException.java | 2 +- .../EmptyPersonalEventException.java | 2 +- .../java/exception/NoClassTimeException.java | 2 +- .../exception/NoClassTimeMarkerException.java | 2 +- .../NoPersonalEventTimeException.java | 2 +- .../NoPersonalEventTimeMakerException.java | 2 +- .../java/exception/TimeFormatException.java | 1 + .../java/exception/WrongCommandException.java | 2 +- src/main/java/parser/Parser.java | 9 +-- src/main/java/storage/Storage.java | 55 +++++++++++++++++-- 22 files changed, 82 insertions(+), 30 deletions(-) rename src/main/java/exception/{DoneUndefinedTaskException.java => DoneUndefinedEventException.java} (71%) diff --git a/data/events.txt b/data/events.txt index e69de29bb2..5488b17878 100644 --- a/data/events.txt +++ b/data/events.txt @@ -0,0 +1 @@ +A//0// a //2020-10-10T20:00 diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 690147cc9d..d2fe10afea 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -33,7 +33,7 @@ public NuSchedule(String filePath) { ui.showError(e.getMessage()); } try { - events = new EventList(storage.load()); + events = new EventList(storage.loadEvents()); } catch (NuScheduleException e) { ui.showLoadingError(); events = new EventList(); @@ -63,5 +63,6 @@ public void run() { public static void main(String[] args){ new NuSchedule("data/events.txt").run(); + //todo add more files for different purposes } } diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 198a945727..99a06ca2a7 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -34,6 +34,6 @@ public void execute(EventList events, UI ui, Storage storage) throws NuScheduleE events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); - //storage.writeFile(tasks.getEventList()); + storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index b402e9698d..7f73f67248 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -19,7 +19,7 @@ public class PersonalEvent extends Event { * @return the result string to be stored */ public String fileString() { - return "E//" + (isDone ? 1 : 0) + "//" + description + "//" + at; + return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at; } /** diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 82416481a8..b9a5fb2099 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -2,6 +2,7 @@ import event.Event; +import exception.DoneUndefinedEventException; import java.time.LocalDate; import java.util.ArrayList; @@ -47,11 +48,11 @@ public void addEvent(Event eventToBeAdded) { * // * @throws DoneUndefinedEventException the event is not defined but * // the user want to mark it as done */ - public void doneEvent(int eventIndex) /*throws DoneUndefinedEventException*/ { + public void doneEvent(int eventIndex) throws DoneUndefinedEventException { try { events.get(eventIndex).markAsDone(); } catch (IndexOutOfBoundsException e) { - //throw new DoneUndefinedEventException(eventIndex); + throw new DoneUndefinedEventException(eventIndex); } } diff --git a/src/main/java/exception/DeleteUndefinedTaskException.java b/src/main/java/exception/DeleteUndefinedTaskException.java index 406464ab4b..6ba885d0c7 100644 --- a/src/main/java/exception/DeleteUndefinedTaskException.java +++ b/src/main/java/exception/DeleteUndefinedTaskException.java @@ -26,6 +26,6 @@ public DeleteUndefinedTaskException(int label) { * @return the error message */ public String getMessage() { - return "☹ OOPS!!! There isn't a task labeled " + label; + return "OOPS!!! There isn't a task labeled " + label; } } diff --git a/src/main/java/exception/DoneUndefinedTaskException.java b/src/main/java/exception/DoneUndefinedEventException.java similarity index 71% rename from src/main/java/exception/DoneUndefinedTaskException.java rename to src/main/java/exception/DoneUndefinedEventException.java index 6bd8d83a47..213ddd4ccb 100644 --- a/src/main/java/exception/DoneUndefinedTaskException.java +++ b/src/main/java/exception/DoneUndefinedEventException.java @@ -4,10 +4,10 @@ * Represents the case when the the user trying to done * some tasks that does not exist. */ -public class DoneUndefinedTaskException extends DoneException { +public class DoneUndefinedEventException extends DoneException { private int label;//Task label of the task - public DoneUndefinedTaskException() { + public DoneUndefinedEventException() { } @@ -16,7 +16,7 @@ public DoneUndefinedTaskException() { * * @param label the label of the task that the user want to mark as done */ - public DoneUndefinedTaskException(int label) { + public DoneUndefinedEventException(int label) { this.label = label; } @@ -26,6 +26,6 @@ public DoneUndefinedTaskException(int label) { * @return the error message */ public String getMessage() { - return "☹ OOPS!!! There isn't a task labeled " + label; + return "OOPS!!! There isn't a task labeled " + label; } } diff --git a/src/main/java/exception/EmptyAssignmentException.java b/src/main/java/exception/EmptyAssignmentException.java index c43af6d7e0..9239ac79de 100644 --- a/src/main/java/exception/EmptyAssignmentException.java +++ b/src/main/java/exception/EmptyAssignmentException.java @@ -10,6 +10,6 @@ public class EmptyAssignmentException extends AssignmentException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! The description of a todo cannot be empty."; + return "OOPS!!! The description of a todo cannot be empty."; } } diff --git a/src/main/java/exception/EmptyClassException.java b/src/main/java/exception/EmptyClassException.java index 8387e61644..b928333845 100644 --- a/src/main/java/exception/EmptyClassException.java +++ b/src/main/java/exception/EmptyClassException.java @@ -10,6 +10,6 @@ public class EmptyClassException extends ClassException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! The description of a deadline cannot be empty."; + return "OOPS!!! The description of a deadline cannot be empty."; } } diff --git a/src/main/java/exception/EmptyDeleteException.java b/src/main/java/exception/EmptyDeleteException.java index ef39a98f0c..6f8a63e5fa 100644 --- a/src/main/java/exception/EmptyDeleteException.java +++ b/src/main/java/exception/EmptyDeleteException.java @@ -11,6 +11,6 @@ public class EmptyDeleteException extends DeleteException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter the index of the task you want to delete."; + return "OOPS!!! You should enter the index of the task you want to delete."; } } diff --git a/src/main/java/exception/EmptyDoneException.java b/src/main/java/exception/EmptyDoneException.java index e96b433f9e..2b6faae821 100644 --- a/src/main/java/exception/EmptyDoneException.java +++ b/src/main/java/exception/EmptyDoneException.java @@ -11,6 +11,6 @@ public class EmptyDoneException extends DoneException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter the index of the task you have done."; + return "OOPS!!! You should enter the index of the task you have done."; } } diff --git a/src/main/java/exception/EmptyFindDateException.java b/src/main/java/exception/EmptyFindDateException.java index 9b404c4eec..3abf3832ef 100644 --- a/src/main/java/exception/EmptyFindDateException.java +++ b/src/main/java/exception/EmptyFindDateException.java @@ -10,6 +10,6 @@ public class EmptyFindDateException extends NuScheduleException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter the date you are looking for."; + return "OOPS!!! You should enter the date you are looking for."; } } diff --git a/src/main/java/exception/EmptyFindException.java b/src/main/java/exception/EmptyFindException.java index 075fc23062..7cbbf05cce 100644 --- a/src/main/java/exception/EmptyFindException.java +++ b/src/main/java/exception/EmptyFindException.java @@ -11,6 +11,6 @@ public class EmptyFindException extends NuScheduleException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter the keyword of the tasks you want to find."; + return "OOPS!!! You should enter the keyword of the tasks you want to find."; } } diff --git a/src/main/java/exception/EmptyPersonalEventException.java b/src/main/java/exception/EmptyPersonalEventException.java index 3c2fc124c8..973ac88e77 100644 --- a/src/main/java/exception/EmptyPersonalEventException.java +++ b/src/main/java/exception/EmptyPersonalEventException.java @@ -10,6 +10,6 @@ public class EmptyPersonalEventException extends PersonalEventException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! The description of an event cannot be empty."; + return "OOPS!!! The description of an event cannot be empty."; } } diff --git a/src/main/java/exception/NoClassTimeException.java b/src/main/java/exception/NoClassTimeException.java index 23952aa0e7..aa2a6fae8d 100644 --- a/src/main/java/exception/NoClassTimeException.java +++ b/src/main/java/exception/NoClassTimeException.java @@ -11,6 +11,6 @@ public class NoClassTimeException extends ClassException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter a time for deadline."; + return "OOPS!!! You should enter a time for deadline."; } } diff --git a/src/main/java/exception/NoClassTimeMarkerException.java b/src/main/java/exception/NoClassTimeMarkerException.java index c65812342c..9146c28b34 100644 --- a/src/main/java/exception/NoClassTimeMarkerException.java +++ b/src/main/java/exception/NoClassTimeMarkerException.java @@ -11,6 +11,6 @@ public class NoClassTimeMarkerException extends ClassException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should mark the time for a deadline with \"/by\""; + return "OOPS!!! You should mark the time for a deadline with \"/by\""; } } diff --git a/src/main/java/exception/NoPersonalEventTimeException.java b/src/main/java/exception/NoPersonalEventTimeException.java index 715fd74c38..2e621f51f4 100644 --- a/src/main/java/exception/NoPersonalEventTimeException.java +++ b/src/main/java/exception/NoPersonalEventTimeException.java @@ -11,6 +11,6 @@ public class NoPersonalEventTimeException extends PersonalEventException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should enter a time for event."; + return "OOPS!!! You should enter a time for event."; } } diff --git a/src/main/java/exception/NoPersonalEventTimeMakerException.java b/src/main/java/exception/NoPersonalEventTimeMakerException.java index 782b0a92b8..16a2a2222d 100644 --- a/src/main/java/exception/NoPersonalEventTimeMakerException.java +++ b/src/main/java/exception/NoPersonalEventTimeMakerException.java @@ -11,6 +11,6 @@ public class NoPersonalEventTimeMakerException extends PersonalEventException { * @return the message */ public String getMessage() { - return "☹ OOPS!!! You should mark the time for an event with \"/at\""; + return "OOPS!!! You should mark the time for an event with \"/at\""; } } diff --git a/src/main/java/exception/TimeFormatException.java b/src/main/java/exception/TimeFormatException.java index 2d2def5576..ccdbca3ab7 100644 --- a/src/main/java/exception/TimeFormatException.java +++ b/src/main/java/exception/TimeFormatException.java @@ -2,6 +2,7 @@ /** * Represents the exception when the date/time are entered incorrectly. + */ public class TimeFormatException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced, diff --git a/src/main/java/exception/WrongCommandException.java b/src/main/java/exception/WrongCommandException.java index fe9a4eb4ce..cdab685866 100644 --- a/src/main/java/exception/WrongCommandException.java +++ b/src/main/java/exception/WrongCommandException.java @@ -1,8 +1,8 @@ package exception; /** - * Represents the exception when an invalid command is inputted. + */ public class WrongCommandException extends InvalidCommandException { /** diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 24d3e06f2e..90f0545265 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -8,7 +8,7 @@ import event.Assignment; import event.PersonalEvent; - +import event.Class; import exception.NoEventTimeMarkerException; import exception.TimeFormatException; import exception.EmptyEventException; @@ -28,7 +28,7 @@ public abstract class Parser { public static final String Event_DONE = "done"; public static final String ADD_ASSIGNMENT = "assignment"; public static final String ADD_CLASS = "class"; - public static final String ADD_PERSONAL_EVENT = "personalevent"; + public static final String ADD_PERSONAL_EVENT = "personalEvent"; public static final String Event_DELETE = "delete"; public static final String Event_FIND = "find"; public static final String BY = "/by"; @@ -162,7 +162,7 @@ public static Command parse(String fullCommand) throws NuScheduleException { + "T" + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new event.Class(fullCommand.substring(5, dividerPosition) + return new AddCommand(new Class(fullCommand.substring(5, dividerPosition) , LocalDateTime.parse(dateTime))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); @@ -189,7 +189,8 @@ public static Command parse(String fullCommand) throws NuScheduleException { dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + "T" + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new PersonalEvent(fullCommand.substring(13,dividerPosition),LocalDateTime.parse(dateTime))); + return new AddCommand(new PersonalEvent(fullCommand.substring(13,dividerPosition) + ,LocalDateTime.parse(dateTime))); } catch (StringIndexOutOfBoundsException e) { throw new EmptyEventException(); } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 3c9e0b14ba..9acaf828e7 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -1,15 +1,21 @@ package storage; - import event.Event; +import event.Assignment; +import event.Class; +import event.PersonalEvent; import exception.CreatingFileException; import exception.LoadingException; import exception.WritingFileException; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; import java.util.ArrayList; +import java.util.Scanner; /** * This class creates the folder and file path if it's not already created, and @@ -74,8 +80,49 @@ public void writeFile(ArrayList events) throws WritingFileException { * @return the Events in an ArrayList * @throws LoadingException represents the Events is not correctly created */ - public ArrayList load() throws LoadingException { - return null; - //to be implemented + public ArrayList loadEvents() throws LoadingException { + ArrayList events = new ArrayList(); + File dataFile = new File(filePath); + try { + Scanner s = new Scanner(dataFile); + while (s.hasNext()) { + String[] words = s.nextLine().split(REGEX_IN_FILE); + switch (words[0]) { + case "C": + events.add(new Class(words[2],LocalDateTime.parse(words[3]))); + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + case "A": + try { + events.add(new Assignment(words[2], LocalDateTime.parse(words[3]))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + case "P": + try { + events.add(new PersonalEvent(words[2], LocalDateTime.parse(words[3]))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + default: + throw new LoadingException(); + } + } + } catch (FileNotFoundException e) { + System.out.println("file not found"); + } catch (IndexOutOfBoundsException | NumberFormatException e) { + throw new LoadingException(); + } + return events; } } From f169d9f182bb62cda2b38f3884105bd1e689bb5e Mon Sep 17 00:00:00 2001 From: max Date: Fri, 16 Oct 2020 11:44:09 +0800 Subject: [PATCH 034/299] added printHelp() mothod under UI class added clearEvents() method under EventList class --- src/main/java/eventlist/EventList.java | 7 +++++++ src/main/java/ui/UI.java | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 4e2020dfbe..b957548d88 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -122,4 +122,11 @@ public ArrayList filterDateWith(LocalDate date) { return filteredEventList; } + + /** + * Clear the ArrayList events if it is not empty. + */ + public void clearEvents() { + events.clear(); + } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 3c1a05ec77..14e2fcfabb 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -220,5 +220,20 @@ public void printBusStopList(ArrayList busStopList) { i++; } } + + /** + * Prints the help information when user inpur command 'help' + * relevant command information with reference to the current user guide draft + */ + public void printHelp() { + printLine(); + System.out.println("Below are all the commands and their functions in the form of command - function: "); + System.out.println("help - view all the commands"); + System.out.println("add - add any type of event"); + System.out.println("edit - edit event information"); + System.out.println("locate - find location information"); + System.out.println("list - view all events added"); + System.out.println("clear - clear all events"); + } } From a29853256d1d6b05d7c418784976b55037a9b11e Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 16 Oct 2020 12:05:20 +0800 Subject: [PATCH 035/299] changes some exception names --- src/main/java/command/EditCommand.java | 5 +- .../java/exception/EditIndexException.java | 7 - src/main/java/exception/EmptyEventIndex.java | 7 - .../exception/EmptyEventIndexException.java | 7 + .../java/exception/NoClassTimeException.java | 6 +- .../exception/NoClassTimeMarkerException.java | 8 +- ...n.java => NoEventTimeMarkerException.java} | 6 +- src/main/java/location/Building.java | 8 +- src/main/java/location/BusStop.java | 8 +- src/main/java/location/Hostel.java | 8 +- src/main/java/location/LectureTheatre.java | 8 +- src/main/java/parser/Parser.java | 463 +++++++++--------- 12 files changed, 269 insertions(+), 272 deletions(-) delete mode 100644 src/main/java/exception/EditIndexException.java delete mode 100644 src/main/java/exception/EmptyEventIndex.java create mode 100644 src/main/java/exception/EmptyEventIndexException.java rename src/main/java/exception/{NoEventMarkerException.java => NoEventTimeMarkerException.java} (57%) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 763d29a969..e833bf0c73 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -2,8 +2,9 @@ import event.Event; import eventlist.EventList; -import exception.EditIndexException; import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; import storage.Storage; import ui.UI; @@ -27,7 +28,7 @@ public EditCommand(Event event, int index) { * @param storage store the data. */ @Override - public void execute(EventList events, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { events.editEvent(this.event, this.index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/exception/EditIndexException.java b/src/main/java/exception/EditIndexException.java deleted file mode 100644 index 11242c8e46..0000000000 --- a/src/main/java/exception/EditIndexException.java +++ /dev/null @@ -1,7 +0,0 @@ -package exception; - -public class EditIndexException extends NuScheduleException{ - public String getMessage() { - return "Please provide a valid number."; - } -} diff --git a/src/main/java/exception/EmptyEventIndex.java b/src/main/java/exception/EmptyEventIndex.java deleted file mode 100644 index 7bca58d068..0000000000 --- a/src/main/java/exception/EmptyEventIndex.java +++ /dev/null @@ -1,7 +0,0 @@ -package exception; - -public class EmptyEventIndex extends NuScheduleException{ - public String getMessage() { - return "Please provide a valid number."; - } -} diff --git a/src/main/java/exception/EmptyEventIndexException.java b/src/main/java/exception/EmptyEventIndexException.java new file mode 100644 index 0000000000..c01b3401d0 --- /dev/null +++ b/src/main/java/exception/EmptyEventIndexException.java @@ -0,0 +1,7 @@ +package exception; + +public class EmptyEventIndexException extends NuScheduleException{ + public String getMessage() { + return "Please provide a valid index."; + } +} diff --git a/src/main/java/exception/NoClassTimeException.java b/src/main/java/exception/NoClassTimeException.java index aa2a6fae8d..c7a637bd86 100644 --- a/src/main/java/exception/NoClassTimeException.java +++ b/src/main/java/exception/NoClassTimeException.java @@ -1,16 +1,16 @@ package exception; /** - * Represents the exception happens when the user trying to create a Deadline + * Represents the exception happens when the user trying to create a class * without giving it a time. */ public class NoClassTimeException extends ClassException { /** * Prepare the message to be printed when this exception is experienced. * - * @return the message + * @return the message. */ public String getMessage() { - return "OOPS!!! You should enter a time for deadline."; + return "OOPS!!! You should enter a time for class."; } } diff --git a/src/main/java/exception/NoClassTimeMarkerException.java b/src/main/java/exception/NoClassTimeMarkerException.java index 9146c28b34..db6be80cf9 100644 --- a/src/main/java/exception/NoClassTimeMarkerException.java +++ b/src/main/java/exception/NoClassTimeMarkerException.java @@ -1,16 +1,16 @@ package exception; /** - * Represents the exception happens when the user trying to create a Deadline - * without using \by to give it a time. + * Represents the exception happens when the user trying to create a Class + * without using \at to give it a time. */ public class NoClassTimeMarkerException extends ClassException { /** * Prepare the message to be printed when this exception is experienced. * - * @return the message + * @return the message. */ public String getMessage() { - return "OOPS!!! You should mark the time for a deadline with \"/by\""; + return "OOPS!!! You should mark the time for a class with \"/at\""; } } diff --git a/src/main/java/exception/NoEventMarkerException.java b/src/main/java/exception/NoEventTimeMarkerException.java similarity index 57% rename from src/main/java/exception/NoEventMarkerException.java rename to src/main/java/exception/NoEventTimeMarkerException.java index 739c312fde..5599ec9fe1 100644 --- a/src/main/java/exception/NoEventMarkerException.java +++ b/src/main/java/exception/NoEventTimeMarkerException.java @@ -1,13 +1,13 @@ package exception; /** - * Represents the exception where there is no timer marker in the command + * Represents the exception where there is no time marker in the command. */ -public class NoEventMarkerException extends NuScheduleException { +public class NoEventTimeMarkerException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * - * @return the message + * @return the message. */ public String getMessage() { return "Please enter your command in the correct format."; diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index fb08a589e2..691e8605a7 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -3,8 +3,8 @@ import java.util.Arrays; /** - * Represents Building objects - * Contains an array of Strings nearestBusStops which represents the bus stops nearby + * Represents Building objects. + * Contains an array of Strings nearestBusStops which represents the bus stops nearby. */ public class Building extends Location{ private String[] nearestBusStops; @@ -16,9 +16,9 @@ public Building(String name, String[] nearestBusStops) { } /** - * Prepares string to be printed in a list + * Prepares string to be printed in a list. * - * @return object to be printed in a certain format + * @return object to be printed in a certain format. */ @Override public String toString() { diff --git a/src/main/java/location/BusStop.java b/src/main/java/location/BusStop.java index d9b5b9cff9..b302688117 100644 --- a/src/main/java/location/BusStop.java +++ b/src/main/java/location/BusStop.java @@ -3,9 +3,9 @@ import java.util.Arrays; /** - * Represents bus stop objects + * Represents bus stop objects. * Contains String name which is the name of the bus stop and - * an array of Strings which is the list of buses available at the bus stop + * an array of Strings which is the list of buses available at the bus stop. */ public class BusStop { private String name; @@ -21,9 +21,9 @@ public String getName() { } /** - * Prepares string to be printed in a list + * Prepares string to be printed in a list. * - * @return object to be printed in a certain format + * @return object to be printed in a certain format. */ public String toString() { return name + "\nBuses Available: " + Arrays.toString(buses); diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index a55c52818c..ad64887c5a 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -3,8 +3,8 @@ import java.util.Arrays; /** - * Represents Hostel objects - * Contains an array of Strings nearestBusStops which represents the bus stops nearby + * Represents Hostel objects. + * Contains an array of Strings nearestBusStops which represents the bus stops nearby. */ public class Hostel extends Location{ String[] nearestBusStops; @@ -16,9 +16,9 @@ public Hostel(String name, String[] nearestBusStops) { } /** - * Prepares string to be printed in a list + * Prepares string to be printed in a list. * - * @return object to be printed in a certain format + * @return object to be printed in a certain format. */ @Override public String toString() { diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index 9cb7961c75..2801f8bd89 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -1,8 +1,8 @@ package location; /** - * Represents lecture theatre objects - * Contains a String nearestBuilding which represents the name of nearest building + * Represents lecture theatre objects. + * Contains a String nearestBuilding which represents the name of nearest building. */ public class LectureTheatre extends Location{ private String nearestBuilding; @@ -14,9 +14,9 @@ public LectureTheatre(String name, String nearestBuilding) { } /** - * Prepares string to be printed in a list + * Prepares string to be printed in a list. * - * @return object to be printed in a certain format + * @return object to be printed in a certain format. */ @Override public String toString() { diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 9bc670a96b..05c5bb8429 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -4,10 +4,11 @@ import command.*; import event.Assignment; -import event.Event; import event.PersonalEvent; +import exception.EmptyEventIndexException; +import location.Location; import ui.UI; import event.Class; import exception.NoEventTimeMarkerException; @@ -18,7 +19,6 @@ import exception.WrongCommandException; - import java.time.LocalDateTime; import java.time.format.DateTimeParseException; @@ -38,11 +38,11 @@ public abstract class Parser { public static final String Event_DELETE = "delete"; public static final String Event_FIND = "find"; public static final String EDIT = "edit"; - public static final String BY = "/by"; + public static final String TIME_MARKER = "/t"; public static final String SINGLE_SPACE = " "; - public static final String AT = "/at"; public static final String LOCATION = "/l"; private static final String Event_FIND_DATE = "date"; + public static final String EDIT_INSTRUCTION = "Enter new event:"; /** * This function calls the correct command the user want to perform, by returning a <\code>Command<\code> object. @@ -53,12 +53,18 @@ public abstract class Parser { */ public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command - if (fullCommand.equals(EXIT)) { - return new ExitCommand(); - } else if (fullCommand.equals(PRINT_Event_LIST)) { - return new PrintFullListCommand(); - } else if (fullCommand.equals(PRINT_LOCATION_LIST)) { - return new PrintLocationCommand(); + switch (fullCommand) { + case EXIT: + return new ExitCommand(); + break; + case PRINT_Event_LIST: + return new PrintFullListCommand(); + break; + case PRINT_LOCATION_LIST: + return new PrintLocationCommand(); + break; + default: + break; } String[] words = fullCommand.split(SINGLE_SPACE); @@ -111,287 +117,284 @@ public static Command parse(String fullCommand) throws NuScheduleException { // return new DeleteCommand(EventIndex); // } // - - //this block deals with add command - //we shall check that the user input is not meant for any other command beforehand - //because the default block will throw an exception. - // i.e. when this block is entered, the parser will not go to any other blocks - int dividerPosition; - int timeDivider; - String dateTime; - switch (words[0]) { - case EDIT: - UI ui = new UI(); - int index = -1; - if(fullCommand.length() <= 4) { - throw new EmptyEventIndex(); - } - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventIndex(); - } - - try { - index = Integer.parseInt(fullCommand.substring(5)) - 1; - } catch (NumberFormatException e) { - throw new EditIndexException(); - } - - - - System.out.println("enter new event:"); - String newCommand = ui.readCommand(); - int firstDivider; - - if (newCommand.startsWith("assignment")) { - firstDivider = 10; - } else if (newCommand.startsWith("class")) { - firstDivider = 5; - } else if (newCommand.startsWith("personalevent")) { - firstDivider = 13; - } else { - firstDivider = 0; - } - - if (firstDivider != 0) { - dividerPosition = newCommand.indexOf(BY); - - if (newCommand.substring(firstDivider).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (newCommand.substring(firstDivider, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - newCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = newCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = newCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + newCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new EditCommand(new Assignment(newCommand.substring(firstDivider, dividerPosition) - , LocalDateTime.parse(dateTime)), index); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - } - - - - case ADD_ASSIGNMENT: - dividerPosition = fullCommand.indexOf(BY); - - if (fullCommand.substring(10).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(10, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new Assignment(fullCommand.substring(10, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - - case ADD_CLASS: - dividerPosition = fullCommand.indexOf(AT); - - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(5, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - - return new AddCommand(new Class(fullCommand.substring(5, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - case ADD_PERSONAL_EVENT: - dividerPosition = fullCommand.indexOf(AT); - if (fullCommand.substring(13).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { + + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when this block is entered, the parser will not go to any other blocks + int dividerPosition; + int timeDivider; + String dateTime; + switch (words[0]) { + case EDIT: + UI ui = new UI(); + int index = -1; + if (fullCommand.length() <= 4) { + throw new EmptyEventIndexException(); + } + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventIndexException(); + } + + try { + index = Integer.parseInt(fullCommand.substring(5)) - 1; + } catch (NumberFormatException e) { + throw new EmptyEventIndexException(); + } + + ui.print(EDIT_INSTRUCTION); + String newCommand = ui.readCommand(); + int firstDivider; + + if (newCommand.startsWith(ADD_ASSIGNMENT)) { + firstDivider = 10; + } else if (newCommand.startsWith(ADD_CLASS)) { + firstDivider = 5; + } else if (newCommand.startsWith(ADD_PERSONAL_EVENT)) { + firstDivider = 13; + } else { + firstDivider = 0; + } + + if (firstDivider != 0) { + dividerPosition = newCommand.indexOf(TIME_MARKER); + + if (newCommand.substring(firstDivider).isBlank()) { + throw new EmptyEventException(); + } + if (dividerPosition == -1) { throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(13, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new PersonalEvent(fullCommand.substring(13,dividerPosition) - ,LocalDateTime.parse(dateTime))); - } catch (StringIndexOutOfBoundsException e) { - throw new EmptyEventException(); - } - - case LOCATE_EVENT: - - - default: - throw new WrongCommandException(); + } + if (newCommand.substring(firstDivider, dividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + newCommand.substring(dividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + timeDivider = newCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = newCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + newCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new EditCommand(new Assignment(newCommand.substring(firstDivider, dividerPosition) + , LocalDateTime.parse(dateTime), new Location()), index); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + } + case ADD_ASSIGNMENT: + dividerPosition = fullCommand.indexOf(TIME_MARKER); + if (fullCommand.substring(10).isBlank()) { + throw new EmptyEventException(); } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventMarkerException(); + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); } - if (fullCommand.substring(10, timeDividerPosition).isBlank()) { + if (fullCommand.substring(10, dividerPosition).isBlank()) { throw new EmptyEventException(); } try { - fullCommand.substring(timeDividerPosition + 4); + fullCommand.substring(dividerPosition + 4); } catch (StringIndexOutOfBoundsException e) { throw new NoEventTimeException(); } try { - fullCommand.substring(locationDividerPosition + 3); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); - } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - - return new AddCommand(new Assignment(fullCommand.substring(10, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new Assignment(fullCommand.substring(10, dividerPosition) + , LocalDateTime.parse(dateTime))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } case ADD_CLASS: - timeDividerPosition = fullCommand.indexOf(AT); - locationDividerPosition = fullCommand.indexOf(LOCATION); + dividerPosition = fullCommand.indexOf(TIME_MARKER); if (fullCommand.substring(5).isBlank()) { throw new EmptyEventException(); } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventMarkerException(); + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); } - if (fullCommand.substring(5, timeDividerPosition).isBlank()) { + if (fullCommand.substring(5, dividerPosition).isBlank()) { throw new EmptyEventException(); } try { - fullCommand.substring(timeDividerPosition + 4); + fullCommand.substring(dividerPosition + 4); } catch (StringIndexOutOfBoundsException e) { throw new NoEventTimeException(); } try { - fullCommand.substring(locationDividerPosition + 3); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); - } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - - if (location == null){ - throw new NoEventLocationException(); - } + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new event.Class(fullCommand.substring(5, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); + return new AddCommand(new Class(fullCommand.substring(5, dividerPosition) + , LocalDateTime.parse(dateTime))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } case ADD_PERSONAL_EVENT: - timeDividerPosition = fullCommand.indexOf(AT); - locationDividerPosition = fullCommand.indexOf(LOCATION); - + dividerPosition = fullCommand.indexOf(TIME_MARKER); if (fullCommand.substring(13).isBlank()) { throw new EmptyEventException(); } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventMarkerException(); + if (dividerPosition == -1) { + throw new NoEventTimeMarkerException(); } - if (fullCommand.substring(13, timeDividerPosition).isBlank()) { + if (fullCommand.substring(13, dividerPosition).isBlank()) { throw new EmptyEventException(); } try { - fullCommand.substring(timeDividerPosition + 4); + fullCommand.substring(dividerPosition + 4); } catch (StringIndexOutOfBoundsException e) { throw new NoEventTimeException(); } try { - fullCommand.substring(locationDividerPosition + 3); + timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); + return new AddCommand(new PersonalEvent(fullCommand.substring(13, dividerPosition) + , LocalDateTime.parse(dateTime))); } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); + throw new EmptyEventException(); } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + case LOCATE_EVENT: - return new AddCommand(new PersonalEvent(fullCommand.substring(13, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } default: throw new WrongCommandException(); + + } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(10, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + return new AddCommand(new Assignment(fullCommand.substring(10, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + + case ADD_CLASS: + timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION); + + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventException(); + } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(5, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + if (location == null) { + throw new NoEventLocationException(); + } + + return new AddCommand(new event.Class(fullCommand.substring(5, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + case ADD_PERSONAL_EVENT: + timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION); + + if (fullCommand.substring(13).isBlank()) { + throw new EmptyEventException(); + } + if (timeDividerPosition == -1 | locationDividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + if (fullCommand.substring(13, timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + try { + fullCommand.substring(timeDividerPosition + 4); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventTimeException(); + } + try { + fullCommand.substring(locationDividerPosition + 3); + } catch (StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); } + try { + timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + + return new AddCommand(new PersonalEvent(fullCommand.substring(13, timeDividerPosition) + , location, LocalDateTime.parse(dateTime))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + + default: + throw new WrongCommandException(); + } +} + /** * This method parses the inputted location * From 0f80547a3545d7f4d0e8a81e8f13b53021c8494c Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 20:25:47 +0800 Subject: [PATCH 036/299] Make the parser class much more precise and easy to be understood. Fix bugs in parser class. The use of EditCommand is revised. --- .github/workflows/gradle.yml | 30 +- .gitignore | 3 +- src/main/java/command/EditCommand.java | 2 +- src/main/java/eventlist/EventList.java | 8 +- .../DeleteUndefinedTaskException.java | 31 -- .../DoneUndefinedEventException.java | 31 -- .../exception/UndefinedEventException.java | 27 ++ .../exception/WrongEditFormatException.java | 15 + src/main/java/parser/Parser.java | 363 ++++++------------ text-ui-test/EXPECTED.TXT | 16 - text-ui-test/input.txt | 1 - text-ui-test/runtest.bat | 19 - text-ui-test/runtest.sh | 23 -- 13 files changed, 178 insertions(+), 391 deletions(-) delete mode 100644 src/main/java/exception/DeleteUndefinedTaskException.java delete mode 100644 src/main/java/exception/DoneUndefinedEventException.java create mode 100644 src/main/java/exception/UndefinedEventException.java create mode 100644 src/main/java/exception/WrongEditFormatException.java delete mode 100644 text-ui-test/EXPECTED.TXT delete mode 100644 text-ui-test/input.txt delete mode 100644 text-ui-test/runtest.bat delete mode 100755 text-ui-test/runtest.sh diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index fd8c44d086..e2062c4201 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -33,18 +33,18 @@ jobs: - name: Build and check with Gradle run: ./gradlew check - - name: Perform IO redirection test (*NIX) - if: runner.os == 'Linux' - working-directory: ${{ github.workspace }}/text-ui-test - run: ./runtest.sh - - - name: Perform IO redirection test (MacOS) - if: always() && runner.os == 'macOS' - working-directory: ${{ github.workspace }}/text-ui-test - run: ./runtest.sh - - - name: Perform IO redirection test (Windows) - if: always() && runner.os == 'Windows' - working-directory: ${{ github.workspace }}/text-ui-test - shell: cmd - run: runtest.bat \ No newline at end of file +# - name: Perform IO redirection test (*NIX) +# if: runner.os == 'Linux' +# working-directory: ${{ github.workspace }}/text-ui-test +# run: ./runtest.sh +# +# - name: Perform IO redirection test (MacOS) +# if: always() && runner.os == 'macOS' +# working-directory: ${{ github.workspace }}/text-ui-test +# run: ./runtest.sh +# +# - name: Perform IO redirection test (Windows) +# if: always() && runner.os == 'Windows' +# working-directory: ${{ github.workspace }}/text-ui-test +# shell: cmd +# run: runtest.bat \ No newline at end of file diff --git a/.gitignore b/.gitignore index f69985ef1f..3f105975d5 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,4 @@ src/main/resources/docs/ *.iml bin/ -/text-ui-test/ACTUAL.txt -text-ui-test/EXPECTED-UNIX.TXT + diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index e833bf0c73..2d2200bf13 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -29,7 +29,7 @@ public EditCommand(Event event, int index) { */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { - events.editEvent(this.event, this.index); + events.editEvent(event, index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 4e2020dfbe..0a94c786ba 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -2,7 +2,7 @@ import event.Event; -import exception.DoneUndefinedEventException; +import exception.UndefinedEventException; import java.time.LocalDate; import java.util.ArrayList; @@ -45,14 +45,14 @@ public void addEvent(Event eventToBeAdded) { * Mark a event as done. * * @param eventIndex the index of the event being done - * // * @throws DoneUndefinedEventException the event is not defined but + * // * @throws UndefinedEventException the event is not defined but * // the user want to mark it as done */ - public void doneEvent(int eventIndex) throws DoneUndefinedEventException { + public void doneEvent(int eventIndex) throws UndefinedEventException { try { events.get(eventIndex).markAsDone(); } catch (IndexOutOfBoundsException e) { - throw new DoneUndefinedEventException(eventIndex); + throw new UndefinedEventException(eventIndex); } } diff --git a/src/main/java/exception/DeleteUndefinedTaskException.java b/src/main/java/exception/DeleteUndefinedTaskException.java deleted file mode 100644 index 6ba885d0c7..0000000000 --- a/src/main/java/exception/DeleteUndefinedTaskException.java +++ /dev/null @@ -1,31 +0,0 @@ -package exception; - -/** - * Represents the case when the the user trying to delete - * some tasks that does not exist. - */ -public class DeleteUndefinedTaskException extends DeleteException { - private int label;//Task label of the task - - public DeleteUndefinedTaskException() { - } - - - /** - * Create an exception according to the input of the user. - * - * @param label the label of the task that the user want to delete - */ - public DeleteUndefinedTaskException(int label) { - this.label = label; - } - - /** - * Prepare the message to be printed when this exception is experienced. - * - * @return the error message - */ - public String getMessage() { - return "OOPS!!! There isn't a task labeled " + label; - } -} diff --git a/src/main/java/exception/DoneUndefinedEventException.java b/src/main/java/exception/DoneUndefinedEventException.java deleted file mode 100644 index 213ddd4ccb..0000000000 --- a/src/main/java/exception/DoneUndefinedEventException.java +++ /dev/null @@ -1,31 +0,0 @@ -package exception; - -/** - * Represents the case when the the user trying to done - * some tasks that does not exist. - */ -public class DoneUndefinedEventException extends DoneException { - private int label;//Task label of the task - - public DoneUndefinedEventException() { - } - - - /** - * Create an exception according to the input of the user. - * - * @param label the label of the task that the user want to mark as done - */ - public DoneUndefinedEventException(int label) { - this.label = label; - } - - /** - * Prepare the message to be printed when this exception is experienced. - * - * @return the error message - */ - public String getMessage() { - return "OOPS!!! There isn't a task labeled " + label; - } -} diff --git a/src/main/java/exception/UndefinedEventException.java b/src/main/java/exception/UndefinedEventException.java new file mode 100644 index 0000000000..ecaf1fc641 --- /dev/null +++ b/src/main/java/exception/UndefinedEventException.java @@ -0,0 +1,27 @@ +package exception; + +/** + * Represents the case when the the user trying to operate (delete/edit/done) + * some events that does not exist. + */ +public class UndefinedEventException extends NuScheduleException { + private int index;//Task label of the task + + /** + * Create an exception according to the input of the user. + * + * @param index the label of the event that the user want to operate on。 + */ + public UndefinedEventException(int index) { + this.index = index; + } + + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the error message. + */ + public String getMessage() { + return "OOPS!!! There isn't a event labeled " + index; + } +} diff --git a/src/main/java/exception/WrongEditFormatException.java b/src/main/java/exception/WrongEditFormatException.java new file mode 100644 index 0000000000..9616170cb4 --- /dev/null +++ b/src/main/java/exception/WrongEditFormatException.java @@ -0,0 +1,15 @@ +package exception; +/** + * Represents the exception when the index for edit is of a wrong format. + */ +public class WrongEditFormatException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Please enter the index of the event that you want to edit."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 05c5bb8429..fac88ba488 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -8,7 +8,13 @@ import exception.EmptyEventIndexException; +import exception.NoEventLocationException; +import exception.WrongEditFormatException; +import location.Building; +import location.Hostel; +import location.LectureTheatre; import location.Location; +import location.OutOfNUS; import ui.UI; import event.Class; import exception.NoEventTimeMarkerException; @@ -32,15 +38,15 @@ public abstract class Parser { public static final String PRINT_LOCATION_LIST = "locations"; public static final String LOCATE_EVENT = "locate"; public static final String Event_DONE = "done"; - public static final String ADD_ASSIGNMENT = "assignment"; - public static final String ADD_CLASS = "class"; - public static final String ADD_PERSONAL_EVENT = "personalEvent"; + public static final String ASSIGNMENT = "assignment"; + public static final String CLASS = "class"; + public static final String PERSONAL_EVENT = "personalEvent"; public static final String Event_DELETE = "delete"; public static final String Event_FIND = "find"; public static final String EDIT = "edit"; public static final String TIME_MARKER = "/t"; public static final String SINGLE_SPACE = " "; - public static final String LOCATION = "/l"; + public static final String LOCATION_MARKER = "/l"; private static final String Event_FIND_DATE = "date"; public static final String EDIT_INSTRUCTION = "Enter new event:"; @@ -56,13 +62,10 @@ public static Command parse(String fullCommand) throws NuScheduleException { switch (fullCommand) { case EXIT: return new ExitCommand(); - break; case PRINT_Event_LIST: return new PrintFullListCommand(); - break; case PRINT_LOCATION_LIST: return new PrintLocationCommand(); - break; default: break; } @@ -118,283 +121,147 @@ public static Command parse(String fullCommand) throws NuScheduleException { // } // - //this block deals with add command - //we shall check that the user input is not meant for any other command beforehand - //because the default block will throw an exception. - // i.e. when this block is entered, the parser will not go to any other blocks - int dividerPosition; + //these variables are used by either Edit or Add + //the position of /t + int timeDividerPosition; + //the position of the space when the user enters a date time in the format yyyy-mm-dd HH:mm int timeDivider; + //the position of /l + int locationDividerPosition; String dateTime; - switch (words[0]) { - case EDIT: - UI ui = new UI(); - int index = -1; - if (fullCommand.length() <= 4) { - throw new EmptyEventIndexException(); - } - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventIndexException(); - } + Location location; + + //this block deals with edit command + //this block will change fullCommand, but this does not affect the later block since + //it either return an EditCommand, or throw an exception + if (words[0].equals(EDIT)) { + UI ui = new UI(); + int eventIndex = -1; + if (fullCommand.substring(5).isBlank()) { + throw new EmptyEventIndexException(); + } - try { - index = Integer.parseInt(fullCommand.substring(5)) - 1; - } catch (NumberFormatException e) { - throw new EmptyEventIndexException(); - } + try { + eventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + } catch (NumberFormatException e) { + throw new WrongEditFormatException(); + } - ui.print(EDIT_INSTRUCTION); - String newCommand = ui.readCommand(); - int firstDivider; - - if (newCommand.startsWith(ADD_ASSIGNMENT)) { - firstDivider = 10; - } else if (newCommand.startsWith(ADD_CLASS)) { - firstDivider = 5; - } else if (newCommand.startsWith(ADD_PERSONAL_EVENT)) { - firstDivider = 13; - } else { - firstDivider = 0; - } + ui.print(EDIT_INSTRUCTION); + fullCommand = ui.readCommand(); + words = fullCommand.split(SINGLE_SPACE); - if (firstDivider != 0) { - dividerPosition = newCommand.indexOf(TIME_MARKER); + //the following part is almost the same as AddCommand, but returns EditCommand + timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); - if (newCommand.substring(firstDivider).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { + switch (words[0]) { + case ASSIGNMENT: + case CLASS: + case PERSONAL_EVENT: + if (timeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } - if (newCommand.substring(firstDivider, dividerPosition).isBlank()) { + + if (locationDividerPosition == -1) { + throw new NoEventLocationException(); + } + + if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { throw new EmptyEventException(); } - try { - newCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { + + if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } + + if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } + try { - timeDivider = newCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = newCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + "T" - + newCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new EditCommand(new Assignment(newCommand.substring(firstDivider, dividerPosition) - , LocalDateTime.parse(dateTime), new Location()), index); + + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 + , locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + switch (words[0]) { + case ASSIGNMENT: + return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + case CLASS: + return new EditCommand(new Class(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + case PERSONAL_EVENT: + return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - } - - - case ADD_ASSIGNMENT: - dividerPosition = fullCommand.indexOf(TIME_MARKER); + default: + throw new WrongCommandException(); + } + } - if (fullCommand.substring(10).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when this block is entered, the parser will not go to any other blocks + switch (words[0]) { + case ASSIGNMENT: + case CLASS: + case PERSONAL_EVENT: + timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + if (timeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } - if (fullCommand.substring(10, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new Assignment(fullCommand.substring(10, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - case ADD_CLASS: - dividerPosition = fullCommand.indexOf(TIME_MARKER); - - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); + if (locationDividerPosition == -1) { + throw new NoEventLocationException(); } - if (fullCommand.substring(5, dividerPosition).isBlank()) { + + if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { throw new EmptyEventException(); } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { + + if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } - try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new Class(fullCommand.substring(5, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); + if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); } - case ADD_PERSONAL_EVENT: - dividerPosition = fullCommand.indexOf(TIME_MARKER); - if (fullCommand.substring(13).isBlank()) { - throw new EmptyEventException(); - } - if (dividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(13, dividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(dividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } try { - timeDivider = fullCommand.substring(dividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(dividerPosition + 4, dividerPosition + 4 + timeDivider) + timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + "T" - + fullCommand.substring(dividerPosition + 4 + timeDivider + 1); - return new AddCommand(new PersonalEvent(fullCommand.substring(13, dividerPosition) - , LocalDateTime.parse(dateTime))); - } catch (StringIndexOutOfBoundsException e) { - throw new EmptyEventException(); + + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 + , locationDividerPosition - 1); + + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + switch (words[0]) { + case ASSIGNMENT: + return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + case CLASS: + return new AddCommand(new Class(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + case PERSONAL_EVENT: + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); } - - case LOCATE_EVENT: - - default: throw new WrongCommandException(); - - - } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(10, timeDividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(timeDividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - fullCommand.substring(locationDividerPosition + 3); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); - } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - - return new AddCommand(new Assignment(fullCommand.substring(10, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - - case ADD_CLASS: - timeDividerPosition = fullCommand.indexOf(TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION); - - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventException(); - } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventTimeMarkerException(); } - if (fullCommand.substring(5, timeDividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(timeDividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - fullCommand.substring(locationDividerPosition + 3); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); - } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - - if (location == null) { - throw new NoEventLocationException(); - } - - return new AddCommand(new event.Class(fullCommand.substring(5, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - case ADD_PERSONAL_EVENT: - timeDividerPosition = fullCommand.indexOf(TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION); - - if (fullCommand.substring(13).isBlank()) { - throw new EmptyEventException(); - } - if (timeDividerPosition == -1 | locationDividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - if (fullCommand.substring(13, timeDividerPosition).isBlank()) { - throw new EmptyEventException(); - } - try { - fullCommand.substring(timeDividerPosition + 4); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventTimeException(); - } - try { - fullCommand.substring(locationDividerPosition + 3); - } catch (StringIndexOutOfBoundsException e) { - throw new NoEventLocationException(); - } - try { - timeDivider = fullCommand.substring(timeDividerPosition + 4).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 4, timeDividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(timeDividerPosition + 4 + timeDivider + 1, locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - - return new AddCommand(new PersonalEvent(fullCommand.substring(13, timeDividerPosition) - , location, LocalDateTime.parse(dateTime))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - default: - throw new WrongCommandException(); - } - -} - /** * This method parses the inputted location * diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT deleted file mode 100644 index d23500deda..0000000000 --- a/text-ui-test/EXPECTED.TXT +++ /dev/null @@ -1,16 +0,0 @@ -____________________________________________________________ -Hello from - _ _ _ _ ____ _ _ _ -| | | | | | | / ___| | | | | | | -| \ | | | | |/ / | | | | | | -| |\\ | | | | |\ \ | | ___ | | | | ___ -| | \\ | | | | | \ \ ___| |______ /___\ ____| |_ _| |/___\ -| | \\ | | | | | \ \ /___| ____ ||___||| __ | | | | ||___|| -| | \\| | | | | \ \ // | | | | ___/ | | | | | | | | ___/ -| | \ | |______| |___/ / \\___| | | |\____ | |__| | |__| | |\____ -|_| |_|__________|____/ \___|_| |_|\___/ |______|\___,_|_|\___/ - -What can I do for you? -____________________________________________________________ -Bye. Hope to see you again soon! -____________________________________________________________ diff --git a/text-ui-test/input.txt b/text-ui-test/input.txt deleted file mode 100644 index 0abaeaa993..0000000000 --- a/text-ui-test/input.txt +++ /dev/null @@ -1 +0,0 @@ -bye \ No newline at end of file diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat deleted file mode 100644 index 25ac7a2989..0000000000 --- a/text-ui-test/runtest.bat +++ /dev/null @@ -1,19 +0,0 @@ -@echo off -setlocal enableextensions -pushd %~dp0 - -cd .. -call gradlew clean shadowJar - -cd build\libs -for /f "tokens=*" %%a in ( - 'dir /b *.jar' -) do ( - set jarloc=%%a -) - -java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TXT - -cd ..\..\text-ui-test - -FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed! diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh deleted file mode 100755 index 1dcbd12021..0000000000 --- a/text-ui-test/runtest.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# change to script directory -cd "${0%/*}" - -cd .. -./gradlew clean shadowJar - -cd text-ui-test - -java -jar $(find ../build/libs/ -mindepth 1 -print -quit) < input.txt > ACTUAL.TXT - -cp EXPECTED.TXT EXPECTED-UNIX.TXT -dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT -diff EXPECTED-UNIX.TXT ACTUAL.TXT -if [ $? -eq 0 ] -then - echo "Test passed!" - exit 0 -else - echo "Test failed!" - exit 1 -fi From 94f4620cca867be284080f7d3a781aa75240b8ac Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 21:16:42 +0800 Subject: [PATCH 037/299] change the parser for add and edit to avoid extra spaces --- .gitignore | 2 +- .../exception/UndefinedEventException.java | 2 +- src/main/java/parser/Parser.java | 34 +++++++++---------- src/main/java/storage/Storage.java | 20 ++++++----- 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 3f105975d5..ba6dfb3fc9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ /.gradle/ /build/ src/main/resources/docs/ - +data/events.txt # MacOS custom attributes files created by Finder .DS_Store *.iml diff --git a/src/main/java/exception/UndefinedEventException.java b/src/main/java/exception/UndefinedEventException.java index ecaf1fc641..e12ac8c378 100644 --- a/src/main/java/exception/UndefinedEventException.java +++ b/src/main/java/exception/UndefinedEventException.java @@ -10,7 +10,7 @@ public class UndefinedEventException extends NuScheduleException { /** * Create an exception according to the input of the user. * - * @param index the label of the event that the user want to operate on。 + * @param index the label of the event that the user want to operate on. */ public UndefinedEventException(int index) { this.index = index; diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index fac88ba488..547fcdccfa 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -189,14 +189,14 @@ public static Command parse(String fullCommand) throws NuScheduleException { location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new Assignment(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); case CLASS: - return new EditCommand(new Class(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new Class(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); @@ -238,22 +238,22 @@ public static Command parse(String fullCommand) throws NuScheduleException { try { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + "T" + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 , locationDividerPosition - 1); - + System.out.println(dateTime); location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { case ASSIGNMENT: - return new AddCommand(new Assignment(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new Assignment(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); case CLASS: - return new AddCommand(new Class(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new Class(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); case PERSONAL_EVENT: - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() - , timeDividerPosition), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length()+1 + , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); @@ -263,10 +263,10 @@ public static Command parse(String fullCommand) throws NuScheduleException { } } /** - * This method parses the inputted location + * This method parses the inputted location. * - * @param input the string inputted by the user - * @return the parsed location + * @param input the string inputted by the user. + * @return the parsed location. */ public static Location parseLocation(String input) { Location location = null; diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index c15f5359df..07c71b795a 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -8,6 +8,7 @@ import exception.LoadingException; import exception.WritingFileException; import location.*; +import parser.Parser; import java.io.File; import java.io.FileNotFoundException; @@ -90,14 +91,16 @@ public ArrayList loadEvents() throws LoadingException { String[] words = s.nextLine().split(REGEX_IN_FILE); switch (words[0]) { case "C": - events.add(new Class(words[2],LocalDateTime.parse(words[3]))); + events.add(new Class(words[2], Parser.parseLocation(words[4]) + , LocalDateTime.parse(words[3]))); if (Integer.parseInt(words[1]) == 1) { events.get(events.size() - 1).markAsDone(); } break; case "A": try { - events.add(new Assignment(words[2], LocalDateTime.parse(words[3]))); + events.add(new Assignment(words[2], Parser.parseLocation(words[4]) + , LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } @@ -107,7 +110,8 @@ public ArrayList loadEvents() throws LoadingException { break; case "P": try { - events.add(new PersonalEvent(words[2], LocalDateTime.parse(words[3]))); + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]) + , LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } @@ -141,9 +145,9 @@ public void loadBusStopData(ArrayList busStopList) { System.out.println(f.getName() + " not found: " + e.getMessage()); } - while(s.hasNext()) { + while (s.hasNext()) { String input = s.nextLine(); - String[] split = input.split(":",2); + String[] split = input.split(":", 2); String name = split[0]; String[] buses = split[1].split(","); BusStop stop = new BusStop(name, buses); @@ -165,13 +169,13 @@ public void loadLocationData(ArrayList locationList) { System.out.println(f.getName() + "not found: " + e.getMessage()); } - while(s.hasNext()) { + while (s.hasNext()) { String input = s.nextLine(); // info[0] = type, info[1] = name, info[2] = nearest buildings/bus stops String[] info = input.split("/"); String[] additionalInfo = info[2].split(","); Location location = null; - switch(info[0]) { + switch (info[0]) { case "BLK": location = new Building(info[1], additionalInfo); break; @@ -185,7 +189,7 @@ public void loadLocationData(ArrayList locationList) { location = new OutOfNUS(info[1]); break; } - if (location!=null) { + if (location != null) { locationList.add(location); } else { System.out.println("Invalid Location Type"); From 779b9251a9ac7f12d36298bbfca6124d497041b7 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 21:17:42 +0800 Subject: [PATCH 038/299] ignore events.txt --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ba6dfb3fc9..dbe650aaa4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,10 +7,10 @@ /.gradle/ /build/ src/main/resources/docs/ -data/events.txt + # MacOS custom attributes files created by Finder .DS_Store *.iml bin/ - +data/events.txt From 0c07fe967abfe414b89490f62a31219e1b1a163d Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 21:38:24 +0800 Subject: [PATCH 039/299] modify the main class to start storage --- data/events.txt | 1 - src/main/java/NuSchedule.java | 2 +- src/main/java/storage/Storage.java | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 data/events.txt diff --git a/data/events.txt b/data/events.txt deleted file mode 100644 index 5488b17878..0000000000 --- a/data/events.txt +++ /dev/null @@ -1 +0,0 @@ -A//0// a //2020-10-10T20:00 diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 69832e2f7f..1378acd6cd 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -41,7 +41,7 @@ public NuSchedule(String filePath) { events = new EventList(); } - events = new EventList(); + storage.loadBusStopData(busStops.getBusStopList()); storage.loadLocationData(locations.getLocationList()); // ui.printBusStopList(busStops.getBusStopList()); diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 07c71b795a..3638ba3f75 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -128,6 +128,7 @@ public ArrayList loadEvents() throws LoadingException { } catch (IndexOutOfBoundsException | NumberFormatException e) { throw new LoadingException(); } + return events; } From dd258dde117afb5ee1ac25de0a07f12efd10f6b4 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 21:41:14 +0800 Subject: [PATCH 040/299] nothing changed --- src/main/java/storage/Storage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 3638ba3f75..14372fb420 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -128,7 +128,7 @@ public ArrayList loadEvents() throws LoadingException { } catch (IndexOutOfBoundsException | NumberFormatException e) { throw new LoadingException(); } - + return events; } From ccfa1a5152ad51e8529ea0bde6eb9fbca1b825a8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 21:51:50 +0800 Subject: [PATCH 041/299] better indentation! --- src/main/java/NuSchedule.java | 11 +- src/main/java/command/AddCommand.java | 14 +- src/main/java/command/EditCommand.java | 8 +- src/main/java/command/ExitCommand.java | 8 +- .../java/command/PrintFullListCommand.java | 8 +- .../java/command/PrintLocationCommand.java | 8 +- src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- src/main/java/event/PersonalEvent.java | 2 +- src/main/java/eventlist/EventList.java | 2 +- .../java/exception/DateFormatException.java | 1 + .../java/exception/EmptyEventException.java | 2 +- .../exception/EmptyEventIndexException.java | 2 +- .../exception/EmptyFindDateException.java | 1 + .../java/exception/NoEventTimeException.java | 2 +- .../java/exception/NoTaskDateException.java | 1 + .../exception/UndefinedEventException.java | 2 +- .../exception/WrongEditFormatException.java | 1 + src/main/java/location/Building.java | 4 +- src/main/java/location/BusStop.java | 4 +- src/main/java/location/Hostel.java | 2 +- src/main/java/location/LectureTheatre.java | 4 +- src/main/java/location/Location.java | 33 ++-- src/main/java/locationlist/BusStopList.java | 2 +- src/main/java/locationlist/LocationList.java | 2 +- src/main/java/parser/Parser.java | 181 +++++++++--------- src/main/java/storage/Storage.java | 82 ++++---- src/main/java/ui/UI.java | 8 +- 28 files changed, 203 insertions(+), 196 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 1378acd6cd..5dab784d34 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -9,17 +9,18 @@ import ui.UI; import exception.LoadingException; + /** - * Main entry-point for the NUSchedule application. - */ + * Main entry-point for the NUSchedule application. + */ public class NuSchedule { - + private Storage storage; private EventList events; private static BusStopList busStops; private static LocationList locations; private UI ui; - + public NuSchedule(String filePath) { ui = new UI(); @@ -70,7 +71,7 @@ public void run() { } } - public static void main(String[] args){ + public static void main(String[] args) { new NuSchedule("data/events.txt").run(); //todo add more files for different purposes } diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index c54cc31a36..b812d3ad2f 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -13,28 +13,28 @@ * Represents the command call when the user adds a new event. */ public class AddCommand extends Command { - private Event event; + private final Event event; /** * Sets the task to be added to the list * * @param event The event to be added */ - public AddCommand(Event event){ + public AddCommand(Event event) { this.event = event; } /** * Adds the appropriate type of event/task to the list. * - * @param events the list of events. + * @param events the list of events. * @param locations the list of Locations - * @param busStops the list of BusStops - * @param ui do outputs. - * @param storage store the data. + * @param busStops the list of BusStops + * @param ui do outputs. + * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException{ + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 2d2200bf13..ba8eea5402 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -11,9 +11,9 @@ /** * Represents the command call when the user adds a new event. */ -public class EditCommand extends Command{ - private int index; - private Event event; +public class EditCommand extends Command { + private final int index; + private final Event event; public EditCommand(Event event, int index) { this.event = event; @@ -23,7 +23,7 @@ public EditCommand(Event event, int index) { /** * Edits the corresponding event/task in the list. * - * @param events the list of events. + * @param events the list of events. * @param ui do outputs. * @param storage store the data. */ diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 1c545117d9..3a96fafc56 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -14,11 +14,11 @@ public class ExitCommand extends Command { * Mark the status of the program, isExit, as true. * Also prints the exit message. * - * @param tasks the list of tasks. + * @param tasks the list of tasks. * @param locations the list of Locations - * @param busStops the list of BusStops - * @param ui do outputs. - * @param storage store the data. + * @param busStops the list of BusStops + * @param ui do outputs. + * @param storage store the data. */ @Override public void execute(EventList tasks, LocationList locations, BusStopList busStops, UI ui, Storage storage) { diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 4de4b83bd8..d4432b0184 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -12,11 +12,11 @@ public class PrintFullListCommand extends Command { /** * Prints the list of Events. * - * @param events the list of Events. + * @param events the list of Events. * @param locations the list of Locations - * @param busStops the list of BusStops - * @param ui do outputs. - * @param storage store the data. + * @param busStops the list of BusStops + * @param ui do outputs. + * @param storage store the data. * @throws NuScheduleException the exceptions can happen in this function, * to be handled based on the specific exception. */ diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java index 3dd19d350c..526e2624a3 100644 --- a/src/main/java/command/PrintLocationCommand.java +++ b/src/main/java/command/PrintLocationCommand.java @@ -11,11 +11,11 @@ public class PrintLocationCommand extends Command { /** * Prints list of locations * - * @param events the list of Events. + * @param events the list of Events. * @param locations the list of Locations - * @param busStops the list of BusStops - * @param ui do outputs. - * @param storage store the data. + * @param busStops the list of BusStops + * @param ui do outputs. + * @param storage store the data. */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 729a545149..7c830d0472 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -42,7 +42,7 @@ public LocalDate getDate() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). + * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 67ae03ac11..60d22e0933 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -31,7 +31,7 @@ public String fileString() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a. + * Example of the format: [C][✘]a. */ public String toString() { return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 06b9688b64..6eaef24db4 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -43,7 +43,7 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { * Prepare the string to be printed in the list. * * @return the string required in a certain format - * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) + * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 0a94c786ba..af4dca76ae 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -55,7 +55,7 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { throw new UndefinedEventException(eventIndex); } } - + public void editEvent(Event event, int index) { events.set(index, event); } diff --git a/src/main/java/exception/DateFormatException.java b/src/main/java/exception/DateFormatException.java index 1531492f61..cadcb8061e 100644 --- a/src/main/java/exception/DateFormatException.java +++ b/src/main/java/exception/DateFormatException.java @@ -1,4 +1,5 @@ package exception; + /** * Represents the exception happens when the user trying to find the tasks on a certain date * but the date is not given in the correct format. diff --git a/src/main/java/exception/EmptyEventException.java b/src/main/java/exception/EmptyEventException.java index a85b1b12e8..6132d400b6 100644 --- a/src/main/java/exception/EmptyEventException.java +++ b/src/main/java/exception/EmptyEventException.java @@ -3,7 +3,7 @@ /** * Represents the exception when no description is provided for the event */ -public class EmptyEventException extends NuScheduleException{ +public class EmptyEventException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * diff --git a/src/main/java/exception/EmptyEventIndexException.java b/src/main/java/exception/EmptyEventIndexException.java index c01b3401d0..71b2e21e02 100644 --- a/src/main/java/exception/EmptyEventIndexException.java +++ b/src/main/java/exception/EmptyEventIndexException.java @@ -1,6 +1,6 @@ package exception; -public class EmptyEventIndexException extends NuScheduleException{ +public class EmptyEventIndexException extends NuScheduleException { public String getMessage() { return "Please provide a valid index."; } diff --git a/src/main/java/exception/EmptyFindDateException.java b/src/main/java/exception/EmptyFindDateException.java index 3abf3832ef..bff47736f7 100644 --- a/src/main/java/exception/EmptyFindDateException.java +++ b/src/main/java/exception/EmptyFindDateException.java @@ -1,4 +1,5 @@ package exception; + /** * Represents the case when the user types date but do not specify * the date. diff --git a/src/main/java/exception/NoEventTimeException.java b/src/main/java/exception/NoEventTimeException.java index 6c6304f475..9a85c49fe9 100644 --- a/src/main/java/exception/NoEventTimeException.java +++ b/src/main/java/exception/NoEventTimeException.java @@ -3,7 +3,7 @@ /** * Represents the exception when no date/time is inputted as expected. */ -public class NoEventTimeException extends NuScheduleException{ +public class NoEventTimeException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * diff --git a/src/main/java/exception/NoTaskDateException.java b/src/main/java/exception/NoTaskDateException.java index 35c0996fa1..1221dbaf06 100644 --- a/src/main/java/exception/NoTaskDateException.java +++ b/src/main/java/exception/NoTaskDateException.java @@ -1,4 +1,5 @@ package exception; + /** * Represents the exception happens when the user trying to find a Task with a certain date, but such * task does not exist in the list. diff --git a/src/main/java/exception/UndefinedEventException.java b/src/main/java/exception/UndefinedEventException.java index e12ac8c378..bf774ffddb 100644 --- a/src/main/java/exception/UndefinedEventException.java +++ b/src/main/java/exception/UndefinedEventException.java @@ -5,7 +5,7 @@ * some events that does not exist. */ public class UndefinedEventException extends NuScheduleException { - private int index;//Task label of the task + private final int index;//Task label of the task /** * Create an exception according to the input of the user. diff --git a/src/main/java/exception/WrongEditFormatException.java b/src/main/java/exception/WrongEditFormatException.java index 9616170cb4..593f1890dc 100644 --- a/src/main/java/exception/WrongEditFormatException.java +++ b/src/main/java/exception/WrongEditFormatException.java @@ -1,4 +1,5 @@ package exception; + /** * Represents the exception when the index for edit is of a wrong format. */ diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index 691e8605a7..34f9f4a805 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -6,8 +6,8 @@ * Represents Building objects. * Contains an array of Strings nearestBusStops which represents the bus stops nearby. */ -public class Building extends Location{ - private String[] nearestBusStops; +public class Building extends Location { + private final String[] nearestBusStops; public Building(String name, String[] nearestBusStops) { super(name); diff --git a/src/main/java/location/BusStop.java b/src/main/java/location/BusStop.java index b302688117..0f2f883173 100644 --- a/src/main/java/location/BusStop.java +++ b/src/main/java/location/BusStop.java @@ -8,8 +8,8 @@ * an array of Strings which is the list of buses available at the bus stop. */ public class BusStop { - private String name; - private String[] buses; + private final String name; + private final String[] buses; public BusStop(String name, String[] buses) { this.name = name; diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index ad64887c5a..f4dd56d4fc 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -6,7 +6,7 @@ * Represents Hostel objects. * Contains an array of Strings nearestBusStops which represents the bus stops nearby. */ -public class Hostel extends Location{ +public class Hostel extends Location { String[] nearestBusStops; public Hostel(String name, String[] nearestBusStops) { diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index 2801f8bd89..35e007611d 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -4,8 +4,8 @@ * Represents lecture theatre objects. * Contains a String nearestBuilding which represents the name of nearest building. */ -public class LectureTheatre extends Location{ - private String nearestBuilding; +public class LectureTheatre extends Location { + private final String nearestBuilding; public LectureTheatre(String name, String nearestBuilding) { super(name); diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index bfdfdf585b..3f56b60ccd 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -8,8 +8,8 @@ enum locationType { } /** - * Represents location objects - * Contains String name, which is the name of location, and type of location + * Represents location objects. + * Contains String name, which is the name of location, and type of location. */ public class Location { protected String name; @@ -26,22 +26,21 @@ public String getName() { protected String printType() { String str; - switch (type) { - case BUILDING: - str = "Building"; - break; - case HOSTEL: - str = "Hostel"; - break; - case LT: - str = "Lecture Theatre"; - break; - case OUT_OF_NUS: - str = "Out of NUS"; - break; - default: - str = "ERROR"; + case BUILDING: + str = "Building"; + break; + case HOSTEL: + str = "Hostel"; + break; + case LT: + str = "Lecture Theatre"; + break; + case OUT_OF_NUS: + str = "Out of NUS"; + break; + default: + str = "ERROR"; } return str; diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index 27666fb750..bf560cf363 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -6,7 +6,7 @@ public class BusStopList { private static final String filePath = "data/bus_stops.txt"; - private ArrayList busStopList = new ArrayList<>(); + private final ArrayList busStopList = new ArrayList<>(); public ArrayList getBusStopList() { return busStopList; diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index 5cc115837a..71d28e6c9c 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -6,7 +6,7 @@ public class LocationList { private static final String filePath = "data/locations.txt"; - private ArrayList locationList = new ArrayList<>(); + private final ArrayList locationList = new ArrayList<>(); public ArrayList getLocationList() { return locationList; diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 547fcdccfa..2e1e3dcedb 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -60,14 +60,14 @@ public abstract class Parser { public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command switch (fullCommand) { - case EXIT: - return new ExitCommand(); - case PRINT_Event_LIST: - return new PrintFullListCommand(); - case PRINT_LOCATION_LIST: - return new PrintLocationCommand(); - default: - break; + case EXIT: + return new ExitCommand(); + case PRINT_Event_LIST: + return new PrintFullListCommand(); + case PRINT_LOCATION_LIST: + return new PrintLocationCommand(); + default: + break; } String[] words = fullCommand.split(SINGLE_SPACE); @@ -156,66 +156,9 @@ public static Command parse(String fullCommand) throws NuScheduleException { locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); switch (words[0]) { - case ASSIGNMENT: - case CLASS: - case PERSONAL_EVENT: - if (timeDividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - - if (locationDividerPosition == -1) { - throw new NoEventLocationException(); - } - - if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { - throw new EmptyEventException(); - } - - if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { - throw new NoEventTimeException(); - } - - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); - } - - try { - timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) - + "T" - + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 - , locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); - switch (words[0]) { - case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); - case CLASS: - return new EditCommand(new Class(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); - case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime)), eventIndex); - } - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - default: - throw new WrongCommandException(); - } - } - - //this block deals with add command - //we shall check that the user input is not meant for any other command beforehand - //because the default block will throw an exception. - // i.e. when this block is entered, the parser will not go to any other blocks - switch (words[0]) { case ASSIGNMENT: case CLASS: case PERSONAL_EVENT: - timeDividerPosition = fullCommand.indexOf(TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); if (timeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } @@ -238,30 +181,88 @@ public static Command parse(String fullCommand) throws NuScheduleException { try { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + "T" + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 , locationDividerPosition - 1); - System.out.println(dateTime); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { - case ASSIGNMENT: - return new AddCommand(new Assignment(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); - case CLASS: - return new AddCommand(new Class(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); - case PERSONAL_EVENT: - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length()+1 - , timeDividerPosition-1), location, LocalDateTime.parse(dateTime))); + case ASSIGNMENT: + return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + case CLASS: + return new EditCommand(new Class(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + case PERSONAL_EVENT: + return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } default: throw new WrongCommandException(); + } + } + + //this block deals with add command + //we shall check that the user input is not meant for any other command beforehand + //because the default block will throw an exception. + // i.e. when this block is entered, the parser will not go to any other blocks + switch (words[0]) { + case ASSIGNMENT: + case CLASS: + case PERSONAL_EVENT: + timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + if (timeDividerPosition == -1) { + throw new NoEventTimeMarkerException(); + } + + if (locationDividerPosition == -1) { + throw new NoEventLocationException(); + } + + if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { + throw new EmptyEventException(); + } + + if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + throw new NoEventTimeException(); + } + + if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } + + try { + timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 + , locationDividerPosition - 1); + System.out.println(dateTime); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + switch (words[0]) { + case ASSIGNMENT: + return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + case CLASS: + return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + case PERSONAL_EVENT: + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1 + , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } + default: + throw new WrongCommandException(); } } + /** * This method parses the inputted location. * @@ -276,20 +277,20 @@ public static Location parseLocation(String input) { switch (info[0]) { - case "BLK": - location = new Building(info[1], additionalInfo); - break; - case "H": - location = new Hostel(info[1], additionalInfo); - break; - case "L": - location = new LectureTheatre(info[1], info[2]); - break; - case "OUT": - location = new OutOfNUS(info[1]); - break; - default: - location = null; + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + case "OUT": + location = new OutOfNUS(info[1]); + break; + default: + location = null; } } catch (ArrayIndexOutOfBoundsException e) { diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 14372fb420..565b3cc47c 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -90,37 +90,37 @@ public ArrayList loadEvents() throws LoadingException { while (s.hasNext()) { String[] words = s.nextLine().split(REGEX_IN_FILE); switch (words[0]) { - case "C": - events.add(new Class(words[2], Parser.parseLocation(words[4]) + case "C": + events.add(new Class(words[2], Parser.parseLocation(words[4]) + , LocalDateTime.parse(words[3]))); + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + case "A": + try { + events.add(new Assignment(words[2], Parser.parseLocation(words[4]) , LocalDateTime.parse(words[3]))); - if (Integer.parseInt(words[1]) == 1) { - events.get(events.size() - 1).markAsDone(); - } - break; - case "A": - try { - events.add(new Assignment(words[2], Parser.parseLocation(words[4]) - , LocalDateTime.parse(words[3]))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new LoadingException(); - } - if (Integer.parseInt(words[1]) == 1) { - events.get(events.size() - 1).markAsDone(); - } - break; - case "P": - try { - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]) - , LocalDateTime.parse(words[3]))); - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new LoadingException(); - } - if (Integer.parseInt(words[1]) == 1) { - events.get(events.size() - 1).markAsDone(); - } - break; - default: + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + case "P": + try { + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]) + , LocalDateTime.parse(words[3]))); + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + default: + throw new LoadingException(); } } } catch (FileNotFoundException e) { @@ -177,18 +177,18 @@ public void loadLocationData(ArrayList locationList) { String[] additionalInfo = info[2].split(","); Location location = null; switch (info[0]) { - case "BLK": - location = new Building(info[1], additionalInfo); - break; - case "H": - location = new Hostel(info[1], additionalInfo); - break; - case "L": - location = new LectureTheatre(info[1], info[2]); - break; - case "OUT": - location = new OutOfNUS(info[1]); - break; + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + case "OUT": + location = new OutOfNUS(info[1]); + break; } if (location != null) { locationList.add(location); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 3c1a05ec77..df7278814b 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -65,7 +65,7 @@ public void printLine() { */ public void printEventList(ArrayList events) { int numPrintedEvents = 0; - if (events.size() == 0){ + if (events.size() == 0) { System.out.println("The list is empty."); } else { try { @@ -74,7 +74,7 @@ public void printEventList(ArrayList events) { numPrintedEvents++; System.out.println(numPrintedEvents + ". " + event.toString()); } - } catch (NullPointerException e){ + } catch (NullPointerException e) { System.out.println("The list is empty."); } } @@ -168,6 +168,7 @@ public void printAddEventMessage(Event eventAdded) { System.out.println("Got it. I've added this Event: "); System.out.println(eventAdded.toString()); } + /** * Prints the message when the user adds some Event. * @@ -177,6 +178,7 @@ public void printEditEventMessage(Event eventEdited) { System.out.println("Got it. I've edited this Event: "); System.out.println(eventEdited.toString()); } + /** * Prints all the Events of the filtered list with labels, based on the input list. * @@ -215,7 +217,7 @@ public void printLocationList(ArrayList locationsList) { public void printBusStopList(ArrayList busStopList) { int i = 1; System.out.println("List of bus stops: "); - for(BusStop busStop : busStopList) { + for (BusStop busStop : busStopList) { System.out.println(i + ". " + busStop); i++; } From bfeab7abdd8dcebff4fe4f155a67428e22386519 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:06:14 +0800 Subject: [PATCH 042/299] coding standard fix --- src/main/java/NuSchedule.java | 2 +- src/main/java/command/AddCommand.java | 11 +++-- src/main/java/command/Command.java | 3 +- src/main/java/command/EditCommand.java | 3 +- .../java/command/PrintFullListCommand.java | 4 +- .../java/command/PrintLocationCommand.java | 6 +-- src/main/java/event/Assignment.java | 4 +- src/main/java/event/Class.java | 2 +- src/main/java/event/PersonalEvent.java | 2 +- .../java/exception/DateFormatException.java | 6 +-- .../java/exception/EmptyEventException.java | 2 +- .../java/exception/TimeFormatException.java | 6 +-- src/main/java/location/Building.java | 2 +- src/main/java/location/Hostel.java | 2 +- src/main/java/location/LectureTheatre.java | 2 +- src/main/java/location/Location.java | 9 +--- src/main/java/location/LocationType.java | 8 +++ .../location/{OutOfNUS.java => OutOfNuS.java} | 4 +- src/main/java/locationlist/BusStopList.java | 2 +- src/main/java/locationlist/LocationList.java | 2 +- src/main/java/parser/Parser.java | 49 +++++++++++-------- src/main/java/storage/Storage.java | 19 +++++-- src/main/java/ui/UI.java | 6 +-- 23 files changed, 90 insertions(+), 66 deletions(-) create mode 100644 src/main/java/location/LocationType.java rename src/main/java/location/{OutOfNUS.java => OutOfNuS.java} (64%) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 5dab784d34..cd1205ee1f 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -19,7 +19,7 @@ public class NuSchedule { private EventList events; private static BusStopList busStops; private static LocationList locations; - private UI ui; + private final UI ui; public NuSchedule(String filePath) { diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index b812d3ad2f..34d984c842 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -16,9 +16,9 @@ public class AddCommand extends Command { private final Event event; /** - * Sets the task to be added to the list + * Sets the task to be added to the list. * - * @param event The event to be added + * @param event The event to be added. */ public AddCommand(Event event) { this.event = event; @@ -28,13 +28,14 @@ public AddCommand(Event event) { * Adds the appropriate type of event/task to the list. * * @param events the list of events. - * @param locations the list of Locations - * @param busStops the list of BusStops + * @param locations the list of Locations. + * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NuScheduleException { events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/Command.java b/src/main/java/command/Command.java index 9e43c315c8..6b796828a7 100644 --- a/src/main/java/command/Command.java +++ b/src/main/java/command/Command.java @@ -22,7 +22,8 @@ public abstract class Command { * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ - public abstract void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException; + public abstract void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NuScheduleException; public boolean isExit() { return isExit; diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index ba8eea5402..4b246ec6f1 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -28,7 +28,8 @@ public EditCommand(Event event, int index) { * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NuScheduleException { events.editEvent(event, index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index d4432b0184..80f9345d60 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -17,11 +17,9 @@ public class PrintFullListCommand extends Command { * @param busStops the list of BusStops * @param ui do outputs. * @param storage store the data. - * @throws NuScheduleException the exceptions can happen in this function, - * to be handled based on the specific exception. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { ui.printEventList(events.getEventList()); } } diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java index 526e2624a3..2f0510b49a 100644 --- a/src/main/java/command/PrintLocationCommand.java +++ b/src/main/java/command/PrintLocationCommand.java @@ -9,11 +9,11 @@ public class PrintLocationCommand extends Command { /** - * Prints list of locations + * Prints list of locations. * * @param events the list of Events. - * @param locations the list of Locations - * @param busStops the list of BusStops + * @param locations the list of Locations. + * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. */ diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 7c830d0472..238598a995 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -17,7 +17,7 @@ public class Assignment extends Event { /** * Convert the information about this deadline to a string that is to be stored in a file. * - * @return the result string to be stored + * @return the result string to be stored. */ public String fileString() { return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + location; @@ -42,7 +42,7 @@ public LocalDate getDate() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). + * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 60d22e0933..67ae03ac11 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -31,7 +31,7 @@ public String fileString() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a. + * Example of the format: [C][✘]a. */ public String toString() { return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 6eaef24db4..faf092e9c7 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -43,7 +43,7 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { * Prepare the string to be printed in the list. * * @return the string required in a certain format - * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) + * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; diff --git a/src/main/java/exception/DateFormatException.java b/src/main/java/exception/DateFormatException.java index cadcb8061e..891e3c72d7 100644 --- a/src/main/java/exception/DateFormatException.java +++ b/src/main/java/exception/DateFormatException.java @@ -12,8 +12,8 @@ public class DateFormatException extends NuScheduleException { * @return the message. */ public String getMessage() { - return "You entered a date in a format that is not accepted by this function.\n" + - "The format should be \"yyyy-MM-dd\"\n" + - "For example, 2000-01-01"; + return "You entered a date in a format that is not accepted by this function.\n" + + "The format should be \"yyyy-MM-dd\"\n" + + "For example, 2000-01-01"; } } diff --git a/src/main/java/exception/EmptyEventException.java b/src/main/java/exception/EmptyEventException.java index 6132d400b6..e8e0520801 100644 --- a/src/main/java/exception/EmptyEventException.java +++ b/src/main/java/exception/EmptyEventException.java @@ -1,7 +1,7 @@ package exception; /** - * Represents the exception when no description is provided for the event + * Represents the exception when no description is provided for the event. */ public class EmptyEventException extends NuScheduleException { /** diff --git a/src/main/java/exception/TimeFormatException.java b/src/main/java/exception/TimeFormatException.java index ccdbca3ab7..735eaaf66d 100644 --- a/src/main/java/exception/TimeFormatException.java +++ b/src/main/java/exception/TimeFormatException.java @@ -11,8 +11,8 @@ public class TimeFormatException extends NuScheduleException { * @return the message. */ public String getMessage() { - return "You entered the time in a format that is not accepted by this program.\n" + - "The format should be \"yyyy-MM-dd HH:mm\"\n" + - "For example, 2000-01-01 00:00"; + return "You entered the time in a format that is not accepted by this program.\n" + + "The format should be \"yyyy-MM-dd HH:mm\"\n" + + "For example, 2000-01-01 00:00"; } } diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index 34f9f4a805..3f1ef20ed1 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -12,7 +12,7 @@ public class Building extends Location { public Building(String name, String[] nearestBusStops) { super(name); this.nearestBusStops = nearestBusStops; - this.type = locationType.BUILDING; + this.type = LocationType.BUILDING; } /** diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index f4dd56d4fc..a53ace6d4f 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -11,7 +11,7 @@ public class Hostel extends Location { public Hostel(String name, String[] nearestBusStops) { super(name); - this.type = locationType.HOSTEL; + this.type = LocationType.HOSTEL; this.nearestBusStops = nearestBusStops; } diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index 35e007611d..d23cd5af12 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -9,7 +9,7 @@ public class LectureTheatre extends Location { public LectureTheatre(String name, String nearestBuilding) { super(name); - this.type = locationType.LT; + this.type = LocationType.LT; this.nearestBuilding = nearestBuilding; } diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 3f56b60ccd..cc5e86b434 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -1,11 +1,6 @@ package location; -enum locationType { - BUILDING, - HOSTEL, - LT, - OUT_OF_NUS -} + /** * Represents location objects. @@ -13,7 +8,7 @@ enum locationType { */ public class Location { protected String name; - protected locationType type; + protected LocationType type; // private int[] coordinates = new int[2]; // will implement in version 2.0 public Location(String name) { diff --git a/src/main/java/location/LocationType.java b/src/main/java/location/LocationType.java new file mode 100644 index 0000000000..177e2a9b46 --- /dev/null +++ b/src/main/java/location/LocationType.java @@ -0,0 +1,8 @@ +package location; + +public enum LocationType { + BUILDING, + HOSTEL, + LT, + OUT_OF_NUS +} diff --git a/src/main/java/location/OutOfNUS.java b/src/main/java/location/OutOfNuS.java similarity index 64% rename from src/main/java/location/OutOfNUS.java rename to src/main/java/location/OutOfNuS.java index 841db25783..ee8203b020 100644 --- a/src/main/java/location/OutOfNUS.java +++ b/src/main/java/location/OutOfNuS.java @@ -1,7 +1,7 @@ package location; -public class OutOfNUS extends Location { - public OutOfNUS(String name) { +public class OutOfNuS extends Location { + public OutOfNuS(String name) { super(name); } diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index bf560cf363..6434cbaa56 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -13,7 +13,7 @@ public ArrayList getBusStopList() { } /** - * Flag to check if the bus stop exists + * Flag to check if the bus stop exists. * * @param name name of bus stop to be checked * @return boolean value of if the bus stop exist in the list diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index 71d28e6c9c..aea3ced0b8 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -13,7 +13,7 @@ public ArrayList getLocationList() { } /** - * Flag to check if location exists + * Flag to check if location exists. * * @param name name of the location to be checked * @return boolean value of if the location is found in the location list diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 2e1e3dcedb..f602639743 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,7 +1,12 @@ package parser; -import command.*; +import command.AddCommand; +import command.EditCommand; +import command.ExitCommand; +import command.PrintFullListCommand; +import command.PrintLocationCommand; +import command.Command; import event.Assignment; import event.PersonalEvent; @@ -14,7 +19,7 @@ import location.Hostel; import location.LectureTheatre; import location.Location; -import location.OutOfNUS; +import location.OutOfNuS; import ui.UI; import event.Class; import exception.NoEventTimeMarkerException; @@ -55,7 +60,7 @@ public abstract class Parser { * * @param fullCommand the full string of user input * @return the specific <\code>Command<\code> object to perform what the user want to do - * // * @throws NuScheduleException includes all exceptions may happen during parsing + * @throws NuScheduleException includes all exceptions may happen during parsing */ public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command @@ -183,20 +188,22 @@ public static Command parse(String fullCommand) throws NuScheduleException { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 - , locationDividerPosition - 1); + + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case CLASS: - return new EditCommand(new Class(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new Class(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + default: + break; } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); @@ -240,20 +247,22 @@ public static Command parse(String fullCommand) throws NuScheduleException { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1 - , locationDividerPosition - 1); + + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); System.out.println(dateTime); location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { case ASSIGNMENT: - return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); case CLASS: - return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); case PERSONAL_EVENT: - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1 - , timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + default: + break; } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); @@ -287,7 +296,7 @@ public static Location parseLocation(String input) { location = new LectureTheatre(info[1], info[2]); break; case "OUT": - location = new OutOfNUS(info[1]); + location = new OutOfNuS(info[1]); break; default: location = null; diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 565b3cc47c..0e927dc0d7 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -7,7 +7,14 @@ import exception.CreatingFileException; import exception.LoadingException; import exception.WritingFileException; -import location.*; +import location.Building; +import location.BusStop; +import location.Hostel; +import location.LectureTheatre; +import location.Location; +import location.LocationType; + +import location.OutOfNuS; import parser.Parser; import java.io.File; @@ -133,7 +140,7 @@ public ArrayList loadEvents() throws LoadingException { } /** - * Loads data from bus_stop text file to an ArrayList, which is stored in a BusStopList + * Loads data from bus_stop text file to an ArrayList, which is stored in a BusStopList. * * @param busStopList ArrayList of BusStops in BusStopList */ @@ -144,6 +151,7 @@ public void loadBusStopData(ArrayList busStopList) { s = new Scanner(f); } catch (FileNotFoundException e) { System.out.println(f.getName() + " not found: " + e.getMessage()); + return; } while (s.hasNext()) { @@ -157,7 +165,7 @@ public void loadBusStopData(ArrayList busStopList) { } /** - * Loads data from location text file into an ArrayList, which is stored in a LocationList + * Loads data from location text file into an ArrayList, which is stored in a LocationList. * * @param locationList ArrayList of Locations in LocationList */ @@ -168,6 +176,7 @@ public void loadLocationData(ArrayList locationList) { s = new Scanner(f); } catch (FileNotFoundException e) { System.out.println(f.getName() + "not found: " + e.getMessage()); + return; } while (s.hasNext()) { @@ -187,7 +196,9 @@ public void loadLocationData(ArrayList locationList) { location = new LectureTheatre(info[1], info[2]); break; case "OUT": - location = new OutOfNUS(info[1]); + location = new OutOfNuS(info[1]); + break; + default: break; } if (location != null) { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index df7278814b..b7d844d4d8 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -195,9 +195,9 @@ public void printFilteredDateEventList(ArrayList filteredEventList) { } /** - * Prints all the locations stored in the location list with nearest bus stops + * Prints all the locations stored in the location list with nearest bus stops. * - * @param locationsList an Array List of Locations to be printed + * @param locationsList an Array List of Locations to be printed. */ public void printLocationList(ArrayList locationsList) { int i = 1; @@ -210,7 +210,7 @@ public void printLocationList(ArrayList locationsList) { /** - * Prints all the bus stops stored in the bus stop list with buses that goes there + * Prints all the bus stops stored in the bus stop list with buses that goes there. * * @param busStopList an Array List of Bus Stops to be printed */ From 1a18996f3113f7a6db5f30e2a5199ef0b02fd065 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:28:40 +0800 Subject: [PATCH 043/299] coding standard revised --- src/main/java/command/HelpCommand.java | 2 ++ .../{NoTaskDateException.java => NoEventDateException.java} | 0 2 files changed, 2 insertions(+) create mode 100644 src/main/java/command/HelpCommand.java rename src/main/java/exception/{NoTaskDateException.java => NoEventDateException.java} (100%) diff --git a/src/main/java/command/HelpCommand.java b/src/main/java/command/HelpCommand.java new file mode 100644 index 0000000000..fdbc489d6a --- /dev/null +++ b/src/main/java/command/HelpCommand.java @@ -0,0 +1,2 @@ +package command;public class HelpCommand { +} diff --git a/src/main/java/exception/NoTaskDateException.java b/src/main/java/exception/NoEventDateException.java similarity index 100% rename from src/main/java/exception/NoTaskDateException.java rename to src/main/java/exception/NoEventDateException.java From 29fae751f72818c474259f7458a77f928de64952 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:28:54 +0800 Subject: [PATCH 044/299] better coding standard --- src/main/java/command/Command.java | 8 ++++-- src/main/java/command/EditCommand.java | 8 ++++-- src/main/java/command/ExitCommand.java | 8 +++--- src/main/java/command/HelpCommand.java | 28 ++++++++++++++++++- .../java/command/PrintFullListCommand.java | 4 +-- .../java/exception/NoEventDateException.java | 8 +++--- src/main/java/parser/Parser.java | 4 ++- src/main/java/storage/Storage.java | 12 ++++---- 8 files changed, 56 insertions(+), 24 deletions(-) diff --git a/src/main/java/command/Command.java b/src/main/java/command/Command.java index 6b796828a7..f5caf338e0 100644 --- a/src/main/java/command/Command.java +++ b/src/main/java/command/Command.java @@ -16,9 +16,11 @@ public abstract class Command { /** * Execute the command based on the specific command type. * - * @param events the list of Events. - * @param ui do outputs. - * @param storage store the data. + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 4b246ec6f1..680b1ba795 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -23,9 +23,11 @@ public EditCommand(Event event, int index) { /** * Edits the corresponding event/task in the list. * - * @param events the list of events. - * @param ui do outputs. - * @param storage store the data. + * @param events the list of events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 3a96fafc56..f7774837e0 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -14,14 +14,14 @@ public class ExitCommand extends Command { * Mark the status of the program, isExit, as true. * Also prints the exit message. * - * @param tasks the list of tasks. - * @param locations the list of Locations - * @param busStops the list of BusStops + * @param events the list of tasks. + * @param locations the list of Locations. + * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. */ @Override - public void execute(EventList tasks, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { isExit = true; ui.printExitMessage(); diff --git a/src/main/java/command/HelpCommand.java b/src/main/java/command/HelpCommand.java index fdbc489d6a..cdd3c7c2b5 100644 --- a/src/main/java/command/HelpCommand.java +++ b/src/main/java/command/HelpCommand.java @@ -1,2 +1,28 @@ -package command;public class HelpCommand { +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; +/** + * Represents the command call when the user asking for helps. + */ +public class HelpCommand extends Command { + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NuScheduleException the exceptions can happen in this program, + * to be handled based on the specific exception. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + + } } diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 80f9345d60..34c12395ed 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -13,8 +13,8 @@ public class PrintFullListCommand extends Command { * Prints the list of Events. * * @param events the list of Events. - * @param locations the list of Locations - * @param busStops the list of BusStops + * @param locations the list of Locations. + * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. */ diff --git a/src/main/java/exception/NoEventDateException.java b/src/main/java/exception/NoEventDateException.java index 1221dbaf06..fddb1efcb4 100644 --- a/src/main/java/exception/NoEventDateException.java +++ b/src/main/java/exception/NoEventDateException.java @@ -1,16 +1,16 @@ package exception; /** - * Represents the exception happens when the user trying to find a Task with a certain date, but such - * task does not exist in the list. + * Represents the exception happens when the user trying to find a Event with a certain date, + * but such Event does not exist in the list. */ -public class NoTaskDateException extends NuScheduleException { +public class NoEventDateException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * * @return the message */ public String getMessage() { - return "Sorry, there isn't such task in the list on the given date."; + return "Sorry, there isn't any event in the list on the given date."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index f602639743..ae769d38b5 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -208,7 +208,9 @@ public static Command parse(String fullCommand) throws NuScheduleException { } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - default: + + break; + default: throw new WrongCommandException(); } } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 0e927dc0d7..4405cc4e16 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -98,16 +98,16 @@ public ArrayList loadEvents() throws LoadingException { String[] words = s.nextLine().split(REGEX_IN_FILE); switch (words[0]) { case "C": - events.add(new Class(words[2], Parser.parseLocation(words[4]) - , LocalDateTime.parse(words[3]))); + events.add(new Class(words[2], Parser.parseLocation(words[4]), + LocalDateTime.parse(words[3]))); if (Integer.parseInt(words[1]) == 1) { events.get(events.size() - 1).markAsDone(); } break; case "A": try { - events.add(new Assignment(words[2], Parser.parseLocation(words[4]) - , LocalDateTime.parse(words[3]))); + events.add(new Assignment(words[2], Parser.parseLocation(words[4]), + LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } @@ -117,8 +117,8 @@ public ArrayList loadEvents() throws LoadingException { break; case "P": try { - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]) - , LocalDateTime.parse(words[3]))); + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]), + LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } From 82e3ee4d5c4210f88800d8604df90853ff6d46d9 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:30:24 +0800 Subject: [PATCH 045/299] stop tracking events.txt --- data/events.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 data/events.txt diff --git a/data/events.txt b/data/events.txt deleted file mode 100644 index 5488b17878..0000000000 --- a/data/events.txt +++ /dev/null @@ -1 +0,0 @@ -A//0// a //2020-10-10T20:00 From a973c4be04f4c866d54570cb542a91c37a003cca Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:30:53 +0800 Subject: [PATCH 046/299] update ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f69985ef1f..90b50af35d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ bin/ /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT +data/events.txt From e2144472c04ce4661f41b877e5049426eae945e6 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sat, 17 Oct 2020 23:39:27 +0800 Subject: [PATCH 047/299] create HelpCommand --- src/main/java/command/HelpCommand.java | 4 +--- src/main/java/ui/UI.java | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/command/HelpCommand.java b/src/main/java/command/HelpCommand.java index cdd3c7c2b5..f77bf684f1 100644 --- a/src/main/java/command/HelpCommand.java +++ b/src/main/java/command/HelpCommand.java @@ -18,11 +18,9 @@ public class HelpCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. - * @throws NuScheduleException the exceptions can happen in this program, - * to be handled based on the specific exception. */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { - + ui.printHelp(); } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 225bf70075..244b3f3364 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -236,6 +236,7 @@ public void printHelp() { System.out.println("locate - find location information"); System.out.println("list - view all events added"); System.out.println("clear - clear all events"); + printLine(); } } From 71c7c3331bc168e874d6a7e923891497133fa368 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 18 Oct 2020 00:17:35 +0800 Subject: [PATCH 048/299] Create ClearCommand and EmptyEventListException. Also improve coding standard. --- src/main/java/command/ClearCommand.java | 36 +++++++++++++++++++ .../java/command/PrintFullListCommand.java | 5 ++- src/main/java/event/Event.java | 8 ++--- src/main/java/eventlist/EventList.java | 2 ++ .../exception/EmptyEventListException.java | 11 ++++++ .../exception/NoEventLocationException.java | 2 +- .../java/exception/UnknownErrorException.java | 11 ++++++ src/main/java/parser/Parser.java | 24 +++++++++---- src/main/java/storage/Storage.java | 2 +- src/main/java/ui/UI.java | 25 ++++++++----- 10 files changed, 104 insertions(+), 22 deletions(-) create mode 100644 src/main/java/command/ClearCommand.java create mode 100644 src/main/java/exception/EmptyEventListException.java create mode 100644 src/main/java/exception/UnknownErrorException.java diff --git a/src/main/java/command/ClearCommand.java b/src/main/java/command/ClearCommand.java new file mode 100644 index 0000000000..58689b7d3f --- /dev/null +++ b/src/main/java/command/ClearCommand.java @@ -0,0 +1,36 @@ +package command; + +import eventlist.EventList; +import exception.EmptyEventListException; +import exception.NuScheduleException; +import exception.WritingFileException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +/** + * Represents the command call when the user clears all events. + */ +public class ClearCommand extends Command { + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws EmptyEventListException the exceptions when the user try to clear an empty list. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws EmptyEventListException, WritingFileException { + if (events.getSize() == 0) { + throw new EmptyEventListException(); + } + events.clearEvents(); + storage.writeFile(events.getEventList()); + ui.printClearEventsSuccessful(); + } +} diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 34c12395ed..0984c930a5 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -1,5 +1,6 @@ package command; +import exception.EmptyEventListException; import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; @@ -17,9 +18,11 @@ public class PrintFullListCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @throws EmptyEventListException the exception when the user want to print an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws EmptyEventListException { ui.printEventList(events.getEventList()); } } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 5de6defdf3..b24eb5d611 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -6,11 +6,11 @@ /** * Represents the event objects. - * Contains a String <\code>description<\code> , which is the description of the event, - * and a boolean <\code>isDone<\code>, which is the status of the Event. + * Contains a String description , which is the description of the event, + * and a boolean isDone, which is the status of the Event. * Provides methods to mark an event as done(either during user input or reading from file), - * get the value of <\code>isDone<\code>, - * convert the <\code>event<\code> object to a string to be printed out or write to a file. + * get the value of isDone, + * convert the event object to a string to be printed out or write to a file. */ public abstract class Event { protected String description; diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 10af3e4874..73b8f3cf7f 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -57,6 +57,7 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { } public void editEvent(Event event, int index) { + assert events!=null; events.set(index, event); } @@ -127,6 +128,7 @@ public ArrayList filterDateWith(LocalDate date) { * Clear the ArrayList events if it is not empty. */ public void clearEvents() { + assert events!=null; events.clear(); } } diff --git a/src/main/java/exception/EmptyEventListException.java b/src/main/java/exception/EmptyEventListException.java new file mode 100644 index 0000000000..d947a99430 --- /dev/null +++ b/src/main/java/exception/EmptyEventListException.java @@ -0,0 +1,11 @@ +package exception; + +/** + * Represents the exception when the event list is empty but the user want to print or clear the list. + */ +public class EmptyEventListException extends NuScheduleException{ + @Override + public String getMessage() { + return "Sorry, the list is empty."; + } +} diff --git a/src/main/java/exception/NoEventLocationException.java b/src/main/java/exception/NoEventLocationException.java index d6f18b8232..167bc5a1f8 100644 --- a/src/main/java/exception/NoEventLocationException.java +++ b/src/main/java/exception/NoEventLocationException.java @@ -1,7 +1,7 @@ package exception; /** - * Represents the exception when no location is provided when adding a new event + * Represents the exception when no location is provided when adding a new event. */ public class NoEventLocationException extends NuScheduleException { /** diff --git a/src/main/java/exception/UnknownErrorException.java b/src/main/java/exception/UnknownErrorException.java new file mode 100644 index 0000000000..5ab8ac1ce2 --- /dev/null +++ b/src/main/java/exception/UnknownErrorException.java @@ -0,0 +1,11 @@ +package exception; + +/** + * Represents the exception when it should not happen. + */ +public class UnknownErrorException extends NuScheduleException { + @Override + public String getMessage() { + return "There shouldn't be such error."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ae769d38b5..f9e8eb63ac 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -2,8 +2,10 @@ import command.AddCommand; +import command.ClearCommand; import command.EditCommand; import command.ExitCommand; +import command.HelpCommand; import command.PrintFullListCommand; import command.PrintLocationCommand; import command.Command; @@ -14,6 +16,7 @@ import exception.EmptyEventIndexException; import exception.NoEventLocationException; +import exception.UnknownErrorException; import exception.WrongEditFormatException; import location.Building; import location.Hostel; @@ -54,23 +57,29 @@ public abstract class Parser { public static final String LOCATION_MARKER = "/l"; private static final String Event_FIND_DATE = "date"; public static final String EDIT_INSTRUCTION = "Enter new event:"; + public static final String HELP = "help"; + public static final String CLEAR = "clear"; /** - * This function calls the correct command the user want to perform, by returning a <\code>Command<\code> object. + * This function calls the correct command the user want to perform, by returning a Command object. * * @param fullCommand the full string of user input - * @return the specific <\code>Command<\code> object to perform what the user want to do + * @return the specific Command object to perform what the user want to do * @throws NuScheduleException includes all exceptions may happen during parsing */ public static Command parse(String fullCommand) throws NuScheduleException { // this block deals with exit and list command - switch (fullCommand) { + switch (fullCommand.trim()) { case EXIT: return new ExitCommand(); case PRINT_Event_LIST: return new PrintFullListCommand(); case PRINT_LOCATION_LIST: return new PrintLocationCommand(); + case HELP: + return new HelpCommand(); + case CLEAR: + return new ClearCommand(); default: break; } @@ -208,9 +217,8 @@ public static Command parse(String fullCommand) throws NuScheduleException { } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - - break; - default: + break; + default: throw new WrongCommandException(); } } @@ -269,9 +277,13 @@ public static Command parse(String fullCommand) throws NuScheduleException { } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } + break; default: throw new WrongCommandException(); } + + assert false;//nothing should reach here + throw new UnknownErrorException(); } /** diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 4405cc4e16..df97c8056b 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -153,7 +153,7 @@ public void loadBusStopData(ArrayList busStopList) { System.out.println(f.getName() + " not found: " + e.getMessage()); return; } - + assert s != null; while (s.hasNext()) { String input = s.nextLine(); String[] split = input.split(":", 2); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 244b3f3364..a77b2dcd6d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -2,6 +2,7 @@ import event.Event; +import exception.EmptyEventListException; import location.BusStop; import location.Location; import locationlist.LocationList; @@ -61,12 +62,12 @@ public void printLine() { /** * Prints all the events with labels, based on the input list. * - * @param events an <\code>ArrayList<\code> of events to be printed one by one. + * @param events an ArrayList of events to be printed one by one. */ - public void printEventList(ArrayList events) { + public void printEventList(ArrayList events) throws EmptyEventListException { int numPrintedEvents = 0; if (events.size() == 0) { - System.out.println("The list is empty."); + throw new EmptyEventListException(); } else { try { System.out.println("Here are the Events in your list:"); @@ -83,7 +84,7 @@ public void printEventList(ArrayList events) { /** * Prints all the Events of the filtered list with labels, based on the input list. * - * @param events an <\code>ArrayList<\code> of Events to be printed one by one. + * @param events an ArrayList of Events to be printed one by one. */ public void printFilteredEventList(ArrayList events) { int numPrintedEvents = 0; @@ -182,7 +183,7 @@ public void printEditEventMessage(Event eventEdited) { /** * Prints all the Events of the filtered list with labels, based on the input list. * - * @param filteredEventList an <\code>ArrayList<\code> of Events to be printed one by one. + * @param filteredEventList an ArrayList of Events to be printed one by one. */ public void printFilteredDateEventList(ArrayList filteredEventList) { int numPrintedEvents = 0; @@ -224,11 +225,10 @@ public void printBusStopList(ArrayList busStopList) { } /** - * Prints the help information when user inpur command 'help' - * relevant command information with reference to the current user guide draft + * Prints the help information when user input command 'help'. + * Relevant command information with reference to the current user guide draft. */ public void printHelp() { - printLine(); System.out.println("Below are all the commands and their functions in the form of command - function: "); System.out.println("help - view all the commands"); System.out.println("add - add any type of event"); @@ -236,7 +236,14 @@ public void printHelp() { System.out.println("locate - find location information"); System.out.println("list - view all events added"); System.out.println("clear - clear all events"); - printLine(); + + } + + /** + * Prints the message when the user clears the list. + */ + public void printClearEventsSuccessful() { + System.out.println("Clear successful. The list is now empty."); } } From 8a7e400157533f6185f1bc3cedb9654ac36b9628 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 18 Oct 2020 00:21:43 +0800 Subject: [PATCH 049/299] improve for coding standard --- src/main/java/command/ExitCommand.java | 2 +- src/main/java/command/HelpCommand.java | 3 ++- src/main/java/eventlist/EventList.java | 4 ++-- src/main/java/exception/EmptyEventListException.java | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index f7774837e0..03bc926f3b 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -14,7 +14,7 @@ public class ExitCommand extends Command { * Mark the status of the program, isExit, as true. * Also prints the exit message. * - * @param events the list of tasks. + * @param events the list of tasks. * @param locations the list of Locations. * @param busStops the list of BusStops. * @param ui do outputs. diff --git a/src/main/java/command/HelpCommand.java b/src/main/java/command/HelpCommand.java index f77bf684f1..b658c6a326 100644 --- a/src/main/java/command/HelpCommand.java +++ b/src/main/java/command/HelpCommand.java @@ -6,6 +6,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; + /** * Represents the command call when the user asking for helps. */ @@ -21,6 +22,6 @@ public class HelpCommand extends Command { */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { - ui.printHelp(); + ui.printHelp(); } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 73b8f3cf7f..976221ace7 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -57,7 +57,7 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { } public void editEvent(Event event, int index) { - assert events!=null; + assert events != null; events.set(index, event); } @@ -128,7 +128,7 @@ public ArrayList filterDateWith(LocalDate date) { * Clear the ArrayList events if it is not empty. */ public void clearEvents() { - assert events!=null; + assert events != null; events.clear(); } } diff --git a/src/main/java/exception/EmptyEventListException.java b/src/main/java/exception/EmptyEventListException.java index d947a99430..59f44c7350 100644 --- a/src/main/java/exception/EmptyEventListException.java +++ b/src/main/java/exception/EmptyEventListException.java @@ -3,7 +3,7 @@ /** * Represents the exception when the event list is empty but the user want to print or clear the list. */ -public class EmptyEventListException extends NuScheduleException{ +public class EmptyEventListException extends NuScheduleException { @Override public String getMessage() { return "Sorry, the list is empty."; From 4f0600339a1c34d0cb27cfd29ee4a0506b8822e8 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 18 Oct 2020 20:00:23 +0800 Subject: [PATCH 050/299] Add assertion testing for EditCommand --- src/main/java/parser/Parser.java | 3 ++ src/test/java/command/EditCommandTest.java | 39 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/test/java/command/EditCommandTest.java diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index f9e8eb63ac..be9766dfa9 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -151,6 +151,9 @@ public static Command parse(String fullCommand) throws NuScheduleException { if (words[0].equals(EDIT)) { UI ui = new UI(); int eventIndex = -1; + if (fullCommand.length() == 4) { + throw new EmptyEventIndexException(); + } if (fullCommand.substring(5).isBlank()) { throw new EmptyEventIndexException(); } diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java new file mode 100644 index 0000000000..32c7a189ca --- /dev/null +++ b/src/test/java/command/EditCommandTest.java @@ -0,0 +1,39 @@ +package command; + +import exception.EmptyEventIndexException; +import exception.WrongEditFormatException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import command.Command; +import eventlist.EventList; +import exception.CreatingFileException; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import parser.Parser; +import storage.Storage; +import ui.UI; + + + +class EditCommandTest { + + + @Test + void execute_noIndexSpecified_emptyEventIndexException() { + Assertions.assertThrows(EmptyEventIndexException.class, () -> + { + Command c = Parser.parse("edit"); + }); + + } + + @Test + void execute_inputIsNotInteger_WrongEditFormatException() { + Assertions.assertThrows(WrongEditFormatException.class, () -> + { + Command c = Parser.parse("edit c"); + }); + } +} \ No newline at end of file From 6521f188ba2ff51e510b79f9d62d49785aba7362 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 19 Oct 2020 15:05:15 +0800 Subject: [PATCH 051/299] Fix codestyle issue --- src/main/java/parser/Parser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index be9766dfa9..2d0870d810 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -149,7 +149,6 @@ public static Command parse(String fullCommand) throws NuScheduleException { //this block will change fullCommand, but this does not affect the later block since //it either return an EditCommand, or throw an exception if (words[0].equals(EDIT)) { - UI ui = new UI(); int eventIndex = -1; if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); @@ -163,7 +162,7 @@ public static Command parse(String fullCommand) throws NuScheduleException { } catch (NumberFormatException e) { throw new WrongEditFormatException(); } - + UI ui = new UI(); ui.print(EDIT_INSTRUCTION); fullCommand = ui.readCommand(); words = fullCommand.split(SINGLE_SPACE); From 3c409c733d1db0b8ab70f54f0900cc6454452eea Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 19 Oct 2020 15:12:57 +0800 Subject: [PATCH 052/299] Fix coding style issues --- src/test/java/command/EditCommandTest.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 32c7a189ca..1789aaf947 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -18,12 +18,9 @@ class EditCommandTest { - - @Test void execute_noIndexSpecified_emptyEventIndexException() { - Assertions.assertThrows(EmptyEventIndexException.class, () -> - { + Assertions.assertThrows(EmptyEventIndexException.class, () -> { Command c = Parser.parse("edit"); }); @@ -31,8 +28,7 @@ void execute_noIndexSpecified_emptyEventIndexException() { @Test void execute_inputIsNotInteger_WrongEditFormatException() { - Assertions.assertThrows(WrongEditFormatException.class, () -> - { + Assertions.assertThrows(WrongEditFormatException.class, () -> { Command c = Parser.parse("edit c"); }); } From 67398603a7fabc8f5373be9228684375b6e86cb8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 19 Oct 2020 15:18:32 +0800 Subject: [PATCH 053/299] enable assertion --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 98fbb73b3a..d346705471 100644 --- a/build.gradle +++ b/build.gradle @@ -43,4 +43,5 @@ checkstyle { run{ standardInput = System.in + enableAssertions = true } From 2b4485023d737a6b0612b50643e241bea07c51be Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 19 Oct 2020 17:46:42 +0800 Subject: [PATCH 054/299] The app can store the information about location correctly now --- src/main/java/command/ExitCommand.java | 1 - src/main/java/event/Assignment.java | 8 ++++---- src/main/java/event/Class.java | 8 ++++---- src/main/java/event/Event.java | 3 ++- src/main/java/event/PersonalEvent.java | 7 +++---- src/main/java/exception/WrongCommandException.java | 3 ++- src/main/java/location/Building.java | 14 ++++++++++++++ src/main/java/location/Hostel.java | 13 +++++++++++++ src/main/java/location/LectureTheatre.java | 8 ++++++++ src/main/java/location/Location.java | 9 ++++++++- src/main/java/parser/Parser.java | 3 ++- src/main/java/storage/Storage.java | 2 +- 12 files changed, 61 insertions(+), 18 deletions(-) diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 03bc926f3b..9cb69a30af 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -24,6 +24,5 @@ public class ExitCommand extends Command { public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { isExit = true; ui.printExitMessage(); - } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 238598a995..df8870ae07 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -15,17 +15,17 @@ public class Assignment extends Event { protected LocalDateTime by; /** - * Convert the information about this deadline to a string that is to be stored in a file. + * Convert the information about this assignment to a string that is to be stored in a file. * * @return the result string to be stored. */ public String fileString() { - return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + location; + return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + location.fileString(); } public Assignment(String description, Location location, LocalDateTime by) { - super(description); - this.location = location; + super(description, location); + this.by = by; } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 67ae03ac11..38f2b8ce6b 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -13,18 +13,18 @@ public class Class extends Event { protected LocalDateTime at; public Class(String description, Location location, LocalDateTime at) { - super(description); - this.location = location; + super(description, location); + this.at = at; } /** - * Convert the information about this Class to a string that is to be stored in a file. + * Convert the information about this class to a string that is to be stored in a file. * * @return the result string to be stored. */ public String fileString() { - return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + location; + return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + location.fileString(); } /** diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index b24eb5d611..323a7f046e 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -17,9 +17,10 @@ public abstract class Event { protected boolean isDone; protected Location location;//to be implemented - public Event(String description) { + public Event(String description,Location location) { this.description = description; this.isDone = false; + this.location = location; } /** diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index faf092e9c7..92b27ddcf8 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -16,12 +16,12 @@ public class PersonalEvent extends Event { protected LocalDateTime at; /** - * Convert the information about this event to a string that is to be stored in a file. + * Convert the information about this personal event to a string that is to be stored in a file. * * @return the result string to be stored */ public String fileString() { - return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at; + return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + location.fileString(); } /** @@ -34,8 +34,7 @@ public LocalDate getDate() { } public PersonalEvent(String description, Location location, LocalDateTime at) { - super(description); - this.location = location; + super(description, location); this.at = at; } diff --git a/src/main/java/exception/WrongCommandException.java b/src/main/java/exception/WrongCommandException.java index cdab685866..313444b6e0 100644 --- a/src/main/java/exception/WrongCommandException.java +++ b/src/main/java/exception/WrongCommandException.java @@ -11,6 +11,7 @@ public class WrongCommandException extends InvalidCommandException { * @return the message */ public String getMessage() { - return "OOPS!!! I'm sorry, but I don't know what that means :-("; + return "OOPS!!! I'm sorry, but I don't know what that means :-(\n" + + "You may enter \"help\" for more information."; } } diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index 3f1ef20ed1..feccd42121 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -25,6 +25,20 @@ public String toString() { return "(Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } + /** + * Convert the information about this Building to a string that is to be stored in a file. + * + * @return the result string to be stored. + */ + public String fileString(){ + String busStops = null; + for(String additionalInfo: nearestBusStops){ + busStops=additionalInfo + ","; + } + assert busStops != null; + return "BLK/"+name+ "/" + busStops.substring(0,busStops.length()-1); + } + private String printNearestBusStops() { String str = Arrays.toString(nearestBusStops); str = str.substring(1, str.indexOf("]")); diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index a53ace6d4f..786650d3f6 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -25,6 +25,19 @@ public String toString() { return "(Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } + /** + * Convert the information about this Hostel to a string that is to be stored in a file. + * + * @return the result string to be stored. + */ + public String fileString(){ + String busStops = null; + for(String additionalInfo: nearestBusStops){ + busStops=additionalInfo + ","; + } + assert busStops != null; + return "H/"+name+ "/" + busStops.substring(0,busStops.length()-1); + } private String printNearestBusStops() { String str = Arrays.toString(nearestBusStops); str = str.substring(1, str.indexOf("]")); diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index d23cd5af12..9dc7945a2a 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -22,4 +22,12 @@ public LectureTheatre(String name, String nearestBuilding) { public String toString() { return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; } + /** + * Convert the information about this LT to a string that is to be stored in a file. + * + * @return the result string to be stored. + */ + public String fileString(){ + return "L/"+name+ "/" + nearestBuilding; + } } diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index cc5e86b434..d1b9024937 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -1,7 +1,6 @@ package location; - /** * Represents location objects. * Contains String name, which is the name of location, and type of location. @@ -44,4 +43,12 @@ protected String printType() { public String toString() { return "(" + printType() + ")" + name; } + + /** + * All location class objects should have this methods, except BusStop. + * @return the string to be wrote in the file. + */ + public String fileString() { + return null; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 2d0870d810..ec0a10d557 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -295,7 +295,7 @@ public static Command parse(String fullCommand) throws NuScheduleException { * @return the parsed location. */ public static Location parseLocation(String input) { - Location location = null; + Location location; try { String[] info = input.split("/"); String[] additionalInfo = info[2].split(","); @@ -316,6 +316,7 @@ public static Location parseLocation(String input) { break; default: location = null; + break; } } catch (ArrayIndexOutOfBoundsException e) { diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index df97c8056b..652d311f2d 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -146,7 +146,7 @@ public ArrayList loadEvents() throws LoadingException { */ public void loadBusStopData(ArrayList busStopList) { File f = new File("data/bus_stops.txt"); - Scanner s = null; + Scanner s; try { s = new Scanner(f); } catch (FileNotFoundException e) { From aa7b8a3aae3796ff678da9135f654709ce1c8699 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 19 Oct 2020 17:55:41 +0800 Subject: [PATCH 055/299] better coding standard --- src/main/java/location/Building.java | 8 ++++---- src/main/java/location/Hostel.java | 9 +++++---- src/main/java/location/LectureTheatre.java | 5 +++-- src/main/java/location/Location.java | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index feccd42121..055a01b502 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -30,13 +30,13 @@ public String toString() { * * @return the result string to be stored. */ - public String fileString(){ + public String fileString() { String busStops = null; - for(String additionalInfo: nearestBusStops){ - busStops=additionalInfo + ","; + for (String additionalInfo : nearestBusStops) { + busStops = additionalInfo + ","; } assert busStops != null; - return "BLK/"+name+ "/" + busStops.substring(0,busStops.length()-1); + return "BLK/" + name + "/" + busStops.substring(0, busStops.length() - 1); } private String printNearestBusStops() { diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index 786650d3f6..9105256caa 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -30,14 +30,15 @@ public String toString() { * * @return the result string to be stored. */ - public String fileString(){ + public String fileString() { String busStops = null; - for(String additionalInfo: nearestBusStops){ - busStops=additionalInfo + ","; + for (String additionalInfo : nearestBusStops) { + busStops = additionalInfo + ","; } assert busStops != null; - return "H/"+name+ "/" + busStops.substring(0,busStops.length()-1); + return "H/" + name + "/" + busStops.substring(0, busStops.length() - 1); } + private String printNearestBusStops() { String str = Arrays.toString(nearestBusStops); str = str.substring(1, str.indexOf("]")); diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index 9dc7945a2a..e8fa54d1d2 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -22,12 +22,13 @@ public LectureTheatre(String name, String nearestBuilding) { public String toString() { return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; } + /** * Convert the information about this LT to a string that is to be stored in a file. * * @return the result string to be stored. */ - public String fileString(){ - return "L/"+name+ "/" + nearestBuilding; + public String fileString() { + return "L/" + name + "/" + nearestBuilding; } } diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index d1b9024937..47d522ed46 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -46,6 +46,7 @@ public String toString() { /** * All location class objects should have this methods, except BusStop. + * * @return the string to be wrote in the file. */ public String fileString() { From a2bf4cd60bf2c1ea1bd87297adf288487cd8e994 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 19 Oct 2020 17:58:44 +0800 Subject: [PATCH 056/299] Coding standard --- src/main/java/exception/WrongCommandException.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/exception/WrongCommandException.java b/src/main/java/exception/WrongCommandException.java index 313444b6e0..ca20dc6480 100644 --- a/src/main/java/exception/WrongCommandException.java +++ b/src/main/java/exception/WrongCommandException.java @@ -11,7 +11,7 @@ public class WrongCommandException extends InvalidCommandException { * @return the message */ public String getMessage() { - return "OOPS!!! I'm sorry, but I don't know what that means :-(\n" + - "You may enter \"help\" for more information."; + return "OOPS!!! I'm sorry, but I don't know what that means :-(\n" + + "You may enter \"help\" for more information."; } } From 8f8595d5d979c18dd518708c38749d5352afc920 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 19 Oct 2020 19:53:36 +0800 Subject: [PATCH 057/299] Add more exceptions for EditCommand --- src/main/java/NuSchedule.java | 5 ++-- .../EditIndexOutOfBoundsException.java | 8 ++++++ src/main/java/parser/Parser.java | 7 +++-- src/test/java/command/EditCommandTest.java | 27 +++++++++++-------- 4 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 src/main/java/exception/EditIndexOutOfBoundsException.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index cd1205ee1f..a0726b2f1b 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -8,8 +8,6 @@ import storage.Storage; import ui.UI; -import exception.LoadingException; - /** * Main entry-point for the NUSchedule application. */ @@ -60,7 +58,8 @@ public void run() { try { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") - Command c = Parser.parse(fullCommand); + int eventCount = events.getSize(); + Command c = Parser.parse(fullCommand, eventCount); c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); } catch (NuScheduleException e) { diff --git a/src/main/java/exception/EditIndexOutOfBoundsException.java b/src/main/java/exception/EditIndexOutOfBoundsException.java new file mode 100644 index 0000000000..ab048baabf --- /dev/null +++ b/src/main/java/exception/EditIndexOutOfBoundsException.java @@ -0,0 +1,8 @@ +package exception; + +public class EditIndexOutOfBoundsException extends NuScheduleException { + @Override + public String getMessage() { + return "Index provided is out of bound. Please provide a valid integer."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 2d0870d810..0d689dc2bd 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -14,6 +14,7 @@ import event.PersonalEvent; +import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; import exception.NoEventLocationException; import exception.UnknownErrorException; @@ -67,7 +68,7 @@ public abstract class Parser { * @return the specific Command object to perform what the user want to do * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand) throws NuScheduleException { + public static Command parse(String fullCommand, int eventCount) throws NuScheduleException { // this block deals with exit and list command switch (fullCommand.trim()) { case EXIT: @@ -156,12 +157,14 @@ public static Command parse(String fullCommand) throws NuScheduleException { if (fullCommand.substring(5).isBlank()) { throw new EmptyEventIndexException(); } - try { eventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; } catch (NumberFormatException e) { throw new WrongEditFormatException(); } + if (eventIndex >= eventCount) { + throw new EditIndexOutOfBoundsException(); + } UI ui = new UI(); ui.print(EDIT_INSTRUCTION); fullCommand = ui.readCommand(); diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 1789aaf947..39dcaa2a48 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -1,27 +1,22 @@ package command; +import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; import exception.WrongEditFormatException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import command.Command; -import eventlist.EventList; -import exception.CreatingFileException; import exception.NuScheduleException; -import locationlist.BusStopList; -import locationlist.LocationList; import parser.Parser; -import storage.Storage; -import ui.UI; - class EditCommandTest { + @Test - void execute_noIndexSpecified_emptyEventIndexException() { + void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleException { + Assertions.assertThrows(EmptyEventIndexException.class, () -> { - Command c = Parser.parse("edit"); + Command d = Parser.parse("edit", 0); }); } @@ -29,7 +24,17 @@ void execute_noIndexSpecified_emptyEventIndexException() { @Test void execute_inputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { - Command c = Parser.parse("edit c"); + Command c = Parser.parse("edit c", 0); + }); + } + + @Test + void execute_indexOutOfBounds_editIndexOutOfBoundsException() { + Assertions.assertThrows(EditIndexOutOfBoundsException.class, () -> { + Command c = Parser.parse("edit 1", 0); }); } + + + } \ No newline at end of file From dd36e322d0d27a708620123ca4c46be973c55520 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 20 Oct 2020 11:25:42 +0800 Subject: [PATCH 058/299] okok --- src/main/java/NuSchedule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 69832e2f7f..ee1fae7a9f 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -71,7 +71,8 @@ public void run() { } public static void main(String[] args){ - new NuSchedule("data/events.txt").run(); + assert false : "dummy assertion set to fail"; + //new NuSchedule("data/events.txt").run(); //todo add more files for different purposes } } From f68da0928ea39e84a3807a47f031b472f71bc327 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 20 Oct 2020 13:07:19 +0800 Subject: [PATCH 059/299] make the print list function be able to print the location info --- src/main/java/event/Assignment.java | 4 ++-- src/main/java/event/Class.java | 3 ++- src/main/java/event/PersonalEvent.java | 3 ++- src/main/java/location/Building.java | 2 +- src/main/java/location/Hostel.java | 2 +- src/main/java/location/LectureTheatre.java | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index df8870ae07..1fa0f4914a 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -25,7 +25,6 @@ public String fileString() { public Assignment(String description, Location location, LocalDateTime by) { super(description, location); - this.by = by; } @@ -45,6 +44,7 @@ public LocalDate getDate() { * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { - return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + + "\n" + location; } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 38f2b8ce6b..fe1bf6c227 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -34,6 +34,7 @@ public String fileString() { * Example of the format: [C][✘]a. */ public String toString() { - return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + + "\n" + location; } } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 92b27ddcf8..742dc66d27 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -45,6 +45,7 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) */ public String toString() { - return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")"; + return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + + "\n" + location; } } diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index 055a01b502..dae69118ff 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -22,7 +22,7 @@ public Building(String name, String[] nearestBusStops) { */ @Override public String toString() { - return "(Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + return "location: (Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } /** diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index 9105256caa..aa277c90d0 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -22,7 +22,7 @@ public Hostel(String name, String[] nearestBusStops) { */ @Override public String toString() { - return "(Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + return "location: (Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } /** diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index e8fa54d1d2..b2d393b751 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -20,7 +20,7 @@ public LectureTheatre(String name, String nearestBuilding) { */ @Override public String toString() { - return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; + return "location: (Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; } /** From 423dbf5c4431a0682de24e5e1a4233ae7540b428 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 20 Oct 2020 23:31:22 +0800 Subject: [PATCH 060/299] fixes the problem of printing date/time unsuccessful on non English OS --- build.gradle | 3 ++- src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- src/main/java/event/PersonalEvent.java | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index d346705471..78e8182f98 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,8 @@ checkstyle { toolVersion = '8.23' } -run{ +run { standardInput = System.in enableAssertions = true } + diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 1fa0f4914a..4e2dbbe9b7 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -44,7 +44,7 @@ public LocalDate getDate() { * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). */ public String toString() { - return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index fe1bf6c227..a587e1bcb1 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -34,7 +34,7 @@ public String fileString() { * Example of the format: [C][✘]a. */ public String toString() { - return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 742dc66d27..4104f47977 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -42,10 +42,10 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { * Prepare the string to be printed in the list. * * @return the string required in a certain format - * Example of the format: [P][✘]a (at: Feb 20 2020 08:00) + * Example of the format: [P][✘]a (at: 2020/02/20 08:00) */ public String toString() { - return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("MMM d yyyy HH':'mm")) + ")" + return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } } From 8e897875395736cc76d13c69ee0a8be622bcce87 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Wed, 21 Oct 2020 13:13:44 +0800 Subject: [PATCH 061/299] Add SortCommand function --- src/main/java/command/EditCommand.java | 3 +-- src/main/java/command/SortCommand.java | 16 ++++++++++++++++ src/main/java/event/Assignment.java | 8 ++++++++ src/main/java/event/Class.java | 8 ++++++++ src/main/java/event/Event.java | 11 +++++++++++ src/main/java/event/PersonalEvent.java | 8 ++++++++ src/main/java/eventlist/EventList.java | 16 ++++++++++++++++ src/main/java/parser/Parser.java | 4 ++++ src/main/java/ui/UI.java | 7 +++++++ 9 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/main/java/command/SortCommand.java diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 680b1ba795..f306f9ceba 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -30,8 +30,7 @@ public EditCommand(Event event, int index) { * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { events.editEvent(event, index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java new file mode 100644 index 0000000000..ec727ca521 --- /dev/null +++ b/src/main/java/command/SortCommand.java @@ -0,0 +1,16 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +public class SortCommand extends Command { + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + events.sortEvent(); + ui.printSortEventMessage(); + } +} diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 4e2dbbe9b7..1052760647 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -6,6 +6,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** * Represents the Assignment Events. @@ -47,4 +48,11 @@ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(11).compareToIgnoreCase(o1.getDescription().substring(11)); + } + }; } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index a587e1bcb1..8c830ec444 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** * Represents the Class events. @@ -37,4 +38,11 @@ public String toString() { return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(6).compareToIgnoreCase(o1.getDescription().substring(6)); + } + }; } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 323a7f046e..9016799fb3 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -1,6 +1,7 @@ package event; import location.Location; +import java.util.Comparator; import java.time.LocalDate; @@ -72,6 +73,16 @@ public String getDescription() { public Location getLocation() { return location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + char description1 = o1.getDescription().charAt(0); + char description2 = o2.getDescription().charAt(0); + + return description1 - description2; + } + }; } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 4104f47977..0bab5cf510 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -6,6 +6,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** @@ -48,4 +49,11 @@ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(14).compareToIgnoreCase(o1.getDescription().substring(14)); + } + }; } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 976221ace7..8d944f17c7 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -6,6 +6,8 @@ import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import static java.util.stream.Collectors.toList; @@ -56,11 +58,25 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { } } + /** + * Edit the contents of an existing event + * + * @param event the particular event to be edited + * @param index the index of the event being edited + */ public void editEvent(Event event, int index) { assert events != null; events.set(index, event); } + /** + * Edit the contents of an existing event + */ + public void sortEvent() { + assert events != null; + Collections.sort(events, Event.descriptionComparator); + } + /** * Gives the access to the list of events. * diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index b67e282c67..4980e04897 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -9,6 +9,7 @@ import command.PrintFullListCommand; import command.PrintLocationCommand; import command.Command; +import command.SortCommand; import event.Assignment; import event.PersonalEvent; @@ -60,6 +61,7 @@ public abstract class Parser { public static final String EDIT_INSTRUCTION = "Enter new event:"; public static final String HELP = "help"; public static final String CLEAR = "clear"; + public static final String SORT = "sort"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -81,6 +83,8 @@ public static Command parse(String fullCommand, int eventCount) throws NuSchedul return new HelpCommand(); case CLEAR: return new ClearCommand(); + case SORT: + return new SortCommand(); default: break; } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index a77b2dcd6d..c5084048bc 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -180,6 +180,13 @@ public void printEditEventMessage(Event eventEdited) { System.out.println(eventEdited.toString()); } + /** + * Prints the message when the user sorts the events. + */ + public void printSortEventMessage() { + System.out.println("Got it. The events have been sorted."); + } + /** * Prints all the Events of the filtered list with labels, based on the input list. * From fad8487ce32e6bbcf07239e2f72f61ffeb52dca2 Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 21 Oct 2020 22:50:19 +0800 Subject: [PATCH 062/299] Updated the parser. --- src/main/java/parser/Parser.java | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ec0a10d557..d155003f29 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -261,7 +261,6 @@ public static Command parse(String fullCommand) throws NuScheduleException { + "T" + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); - System.out.println(dateTime); location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); switch (words[0]) { case ASSIGNMENT: @@ -296,31 +295,30 @@ public static Command parse(String fullCommand) throws NuScheduleException { */ public static Location parseLocation(String input) { Location location; + String[] info = input.split("/"); try { - String[] info = input.split("/"); String[] additionalInfo = info[2].split(","); - switch (info[0]) { - case "BLK": - location = new Building(info[1], additionalInfo); - break; - case "H": - location = new Hostel(info[1], additionalInfo); - break; - case "L": - location = new LectureTheatre(info[1], info[2]); - break; - case "OUT": - location = new OutOfNuS(info[1]); - break; - default: - location = null; - break; + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + case "OUT": + location = new OutOfNuS(info[1]); + break; + default: + location = new OutOfNuS(info[0]); + break; } - } catch (ArrayIndexOutOfBoundsException e) { - location = null; + System.out.print("Invalid Location Format."); + location = new OutOfNuS(info[0]); } return location; } From 57555207c19589816bcf5ef948b15c21ef871b86 Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 21 Oct 2020 22:50:40 +0800 Subject: [PATCH 063/299] Changed OutOfNuS to write to file correctly. --- src/main/java/location/OutOfNuS.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/location/OutOfNuS.java b/src/main/java/location/OutOfNuS.java index ee8203b020..49a99bbe71 100644 --- a/src/main/java/location/OutOfNuS.java +++ b/src/main/java/location/OutOfNuS.java @@ -5,8 +5,22 @@ public OutOfNuS(String name) { super(name); } + /** + * Prepares string to be printed in a list. + * + * @return object to be printed in a certain format. + */ @Override public String toString() { return "(Out of NUS): " + name; } + + /** + * Convert the information about this location to a string that is to be stored in a file. + * + * @return the result string to be stored. + */ + public String fileString() { + return name; + } } From 88344ecddb84e01295eb786ae126105eb61084f4 Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 21 Oct 2020 23:08:38 +0800 Subject: [PATCH 064/299] Fixed code style issues --- src/main/java/parser/Parser.java | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index d155003f29..aee4877504 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -300,21 +300,21 @@ public static Location parseLocation(String input) { String[] additionalInfo = info[2].split(","); switch (info[0]) { - case "BLK": - location = new Building(info[1], additionalInfo); - break; - case "H": - location = new Hostel(info[1], additionalInfo); - break; - case "L": - location = new LectureTheatre(info[1], info[2]); - break; - case "OUT": - location = new OutOfNuS(info[1]); - break; - default: - location = new OutOfNuS(info[0]); - break; + case "BLK": + location = new Building(info[1], additionalInfo); + break; + case "H": + location = new Hostel(info[1], additionalInfo); + break; + case "L": + location = new LectureTheatre(info[1], info[2]); + break; + case "OUT": + location = new OutOfNuS(info[1]); + break; + default: + location = new OutOfNuS(info[0]); + break; } } catch (ArrayIndexOutOfBoundsException e) { System.out.print("Invalid Location Format."); From ed9a46f7586fb7f3439788800461cae4535a4de4 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 22 Oct 2020 04:48:01 +0800 Subject: [PATCH 065/299] edit LocationList and Parser to allow saving locations in events from the data file --- src/main/java/NuSchedule.java | 4 +-- src/main/java/location/OutOfNuS.java | 2 +- src/main/java/locationlist/LocationList.java | 26 +++++++++++++++++++- src/main/java/parser/Parser.java | 23 +++++++++++------ src/main/java/storage/Storage.java | 9 ++++--- src/test/java/command/EditCommandTest.java | 4 +-- 6 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index cd1205ee1f..a9c995b2cb 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -36,7 +36,7 @@ public NuSchedule(String filePath) { ui.showError(e.getMessage()); } try { - events = new EventList(storage.loadEvents()); + events = new EventList(storage.loadEvents(locations)); } catch (NuScheduleException e) { ui.showLoadingError(); events = new EventList(); @@ -60,7 +60,7 @@ public void run() { try { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") - Command c = Parser.parse(fullCommand); + Command c = Parser.parse(fullCommand, locations); c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); } catch (NuScheduleException e) { diff --git a/src/main/java/location/OutOfNuS.java b/src/main/java/location/OutOfNuS.java index 49a99bbe71..b239ab6281 100644 --- a/src/main/java/location/OutOfNuS.java +++ b/src/main/java/location/OutOfNuS.java @@ -21,6 +21,6 @@ public String toString() { * @return the result string to be stored. */ public String fileString() { - return name; + return "OUT/" + name; } } diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index aea3ced0b8..7d0ff4334a 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -1,11 +1,11 @@ package locationlist; import location.Location; +import location.OutOfNuS; import java.util.ArrayList; public class LocationList { - private static final String filePath = "data/locations.txt"; private final ArrayList locationList = new ArrayList<>(); public ArrayList getLocationList() { @@ -26,4 +26,28 @@ public boolean checkValidLocation(String name) { } return false; } + + /** + * Finds location in the list based on the name input + * + * @param name String that represents name of location to find + * @return Location that is found in the list to be returned + */ + public Location findLocation(String name) { + Location locationReturned = null; + int i = 0; + for (Location location : locationList) { + if (name.equals(location.getName())) { + locationReturned = locationList.get(i); + return locationReturned; + } + i++; + } + + if (locationReturned == null) { + locationReturned = new OutOfNuS(name); + locationList.add(locationReturned); + } + return locationReturned; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index aee4877504..6a633b4020 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -23,6 +23,7 @@ import location.LectureTheatre; import location.Location; import location.OutOfNuS; +import locationlist.LocationList; import ui.UI; import event.Class; import exception.NoEventTimeMarkerException; @@ -67,7 +68,7 @@ public abstract class Parser { * @return the specific Command object to perform what the user want to do * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand) throws NuScheduleException { + public static Command parse(String fullCommand, LocationList locations) throws NuScheduleException { // this block deals with exit and list command switch (fullCommand.trim()) { case EXIT: @@ -202,7 +203,7 @@ public static Command parse(String fullCommand) throws NuScheduleException { + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[0]) { case ASSIGNMENT: return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + 1, @@ -261,7 +262,7 @@ public static Command parse(String fullCommand) throws NuScheduleException { + "T" + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); - location = parseLocation(fullCommand.substring(locationDividerPosition + 3)); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[0]) { case ASSIGNMENT: return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, @@ -293,12 +294,12 @@ public static Command parse(String fullCommand) throws NuScheduleException { * @param input the string inputted by the user. * @return the parsed location. */ - public static Location parseLocation(String input) { + public static Location parseLocation(String input, LocationList locations) { Location location; String[] info = input.split("/"); + // parse location from event.txt file try { String[] additionalInfo = info[2].split(","); - switch (info[0]) { case "BLK": location = new Building(info[1], additionalInfo); @@ -317,8 +318,16 @@ public static Location parseLocation(String input) { break; } } catch (ArrayIndexOutOfBoundsException e) { - System.out.print("Invalid Location Format."); - location = new OutOfNuS(info[0]); + if (input.contains("/")) { + location = new OutOfNuS(info[1]); + locations.getLocationList().add(location); + } + // parse location from user input + // System.out.print("Invalid Location Format."); + location = locations.findLocation(input.trim()); + if (location == null) { + location = new OutOfNuS(input.trim()); + } } return location; } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 652d311f2d..102ba18469 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -15,6 +15,7 @@ import location.LocationType; import location.OutOfNuS; +import locationlist.LocationList; import parser.Parser; import java.io.File; @@ -89,7 +90,7 @@ public void writeFile(ArrayList events) throws WritingFileException { * @return the Events in an ArrayList * @throws LoadingException represents the Events is not correctly created */ - public ArrayList loadEvents() throws LoadingException { + public ArrayList loadEvents(LocationList locations) throws LoadingException { ArrayList events = new ArrayList(); File dataFile = new File(filePath); try { @@ -98,7 +99,7 @@ public ArrayList loadEvents() throws LoadingException { String[] words = s.nextLine().split(REGEX_IN_FILE); switch (words[0]) { case "C": - events.add(new Class(words[2], Parser.parseLocation(words[4]), + events.add(new Class(words[2], Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); if (Integer.parseInt(words[1]) == 1) { events.get(events.size() - 1).markAsDone(); @@ -106,7 +107,7 @@ public ArrayList loadEvents() throws LoadingException { break; case "A": try { - events.add(new Assignment(words[2], Parser.parseLocation(words[4]), + events.add(new Assignment(words[2], Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); @@ -117,7 +118,7 @@ public ArrayList loadEvents() throws LoadingException { break; case "P": try { - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4]), + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 1789aaf947..492fd43449 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -21,7 +21,7 @@ class EditCommandTest { @Test void execute_noIndexSpecified_emptyEventIndexException() { Assertions.assertThrows(EmptyEventIndexException.class, () -> { - Command c = Parser.parse("edit"); + Command c = Parser.parse("edit", null); }); } @@ -29,7 +29,7 @@ void execute_noIndexSpecified_emptyEventIndexException() { @Test void execute_inputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { - Command c = Parser.parse("edit c"); + Command c = Parser.parse("edit c", null); }); } } \ No newline at end of file From a9e55026cef7f1c447e00b7a9e892cf3714719c1 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 22 Oct 2020 15:13:44 +0800 Subject: [PATCH 066/299] Add SortCommand function --- src/main/java/command/SortCommand.java | 16 ++++++++++++++++ src/main/java/event/Assignment.java | 8 ++++++++ src/main/java/event/Class.java | 8 ++++++++ src/main/java/event/Event.java | 11 +++++++++++ src/main/java/event/PersonalEvent.java | 8 ++++++++ src/main/java/eventlist/EventList.java | 16 ++++++++++++++++ src/main/java/parser/Parser.java | 5 +++++ src/main/java/ui/UI.java | 7 +++++++ 8 files changed, 79 insertions(+) create mode 100644 src/main/java/command/SortCommand.java diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java new file mode 100644 index 0000000000..ec727ca521 --- /dev/null +++ b/src/main/java/command/SortCommand.java @@ -0,0 +1,16 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +public class SortCommand extends Command { + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + events.sortEvent(); + ui.printSortEventMessage(); + } +} diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 4e2dbbe9b7..1052760647 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -6,6 +6,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** * Represents the Assignment Events. @@ -47,4 +48,11 @@ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(11).compareToIgnoreCase(o1.getDescription().substring(11)); + } + }; } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index a587e1bcb1..8c830ec444 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** * Represents the Class events. @@ -37,4 +38,11 @@ public String toString() { return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(6).compareToIgnoreCase(o1.getDescription().substring(6)); + } + }; } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 323a7f046e..e5625fe4fc 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -3,6 +3,7 @@ import location.Location; import java.time.LocalDate; +import java.util.Comparator; /** * Represents the event objects. @@ -72,6 +73,16 @@ public String getDescription() { public Location getLocation() { return location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + char description1 = o1.getDescription().charAt(0); + char description2 = o2.getDescription().charAt(0); + + return description1 - description2; + } + }; } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 4104f47977..0bab5cf510 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -6,6 +6,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Comparator; /** @@ -48,4 +49,11 @@ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } + + public static Comparator descriptionComparator = new Comparator() { + @Override + public int compare(Event o1, Event o2) { + return o2.getDescription().substring(14).compareToIgnoreCase(o1.getDescription().substring(14)); + } + }; } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 976221ace7..92400aff3f 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -6,6 +6,7 @@ import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import static java.util.stream.Collectors.toList; @@ -56,11 +57,26 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { } } + /** + * Edit the contents of an existing event + * + * @param event the new edited event + * @param index the index of the event being edited + */ public void editEvent(Event event, int index) { assert events != null; events.set(index, event); } + /** + * Edit the contents of an existing event + */ + public void sortEvent() { + assert events != null; + Collections.sort(events, Event.descriptionComparator); + } + + /** * Gives the access to the list of events. * diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index aee4877504..577c7a809d 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -9,6 +9,7 @@ import command.PrintFullListCommand; import command.PrintLocationCommand; import command.Command; +import command.SortCommand; import event.Assignment; import event.PersonalEvent; @@ -59,6 +60,8 @@ public abstract class Parser { public static final String EDIT_INSTRUCTION = "Enter new event:"; public static final String HELP = "help"; public static final String CLEAR = "clear"; + public static final String SORT = "sort"; + /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -80,6 +83,8 @@ public static Command parse(String fullCommand) throws NuScheduleException { return new HelpCommand(); case CLEAR: return new ClearCommand(); + case SORT: + return new SortCommand(); default: break; } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index a77b2dcd6d..c5084048bc 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -180,6 +180,13 @@ public void printEditEventMessage(Event eventEdited) { System.out.println(eventEdited.toString()); } + /** + * Prints the message when the user sorts the events. + */ + public void printSortEventMessage() { + System.out.println("Got it. The events have been sorted."); + } + /** * Prints all the Events of the filtered list with labels, based on the input list. * From a8731fa97b738f1b9c4da44376e2a3bbffb0d8ae Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 22 Oct 2020 15:16:43 +0800 Subject: [PATCH 067/299] Fix codestyle issues --- src/main/java/command/EditCommand.java | 3 +-- src/main/java/command/SortCommand.java | 2 +- src/main/java/eventlist/EventList.java | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 680b1ba795..f306f9ceba 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -30,8 +30,7 @@ public EditCommand(Event event, int index) { * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { events.editEvent(event, index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index ec727ca521..4a7c7fe53b 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -9,7 +9,7 @@ public class SortCommand extends Command { @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { events.sortEvent(); ui.printSortEventMessage(); } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 92400aff3f..86db1f0da8 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -58,7 +58,7 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { } /** - * Edit the contents of an existing event + * Edit the contents of an existing event. * * @param event the new edited event * @param index the index of the event being edited @@ -69,7 +69,7 @@ public void editEvent(Event event, int index) { } /** - * Edit the contents of an existing event + * Sorts the events alphabetically. */ public void sortEvent() { assert events != null; From 7b844159bcc4e57f639172cb080ae15381d1c8cd Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 22 Oct 2020 16:56:40 +0800 Subject: [PATCH 068/299] Add new sorting criteria for SortCommand --- src/main/java/command/SortCommand.java | 9 ++++++-- src/main/java/event/Assignment.java | 7 ------ src/main/java/event/Class.java | 6 ----- src/main/java/event/Event.java | 23 +++++++++++++------ src/main/java/event/PersonalEvent.java | 7 ------ src/main/java/eventlist/EventList.java | 17 ++++++++++++-- .../InvalidSortCriteriaException.java | 9 ++++++++ .../exception/NoSortCriteriaException.java | 9 ++++++++ src/main/java/parser/Parser.java | 22 +++++++++++++++--- 9 files changed, 75 insertions(+), 34 deletions(-) create mode 100644 src/main/java/exception/InvalidSortCriteriaException.java create mode 100644 src/main/java/exception/NoSortCriteriaException.java diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index 4a7c7fe53b..b0184b85a1 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -1,16 +1,21 @@ package command; import eventlist.EventList; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; public class SortCommand extends Command { + private final String type; + + public SortCommand(String type) { + this.type = type; + } + @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { - events.sortEvent(); + events.sortEvent(type); ui.printSortEventMessage(); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 1052760647..84ec169af7 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -48,11 +48,4 @@ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } - - public static Comparator descriptionComparator = new Comparator() { - @Override - public int compare(Event o1, Event o2) { - return o2.getDescription().substring(11).compareToIgnoreCase(o1.getDescription().substring(11)); - } - }; } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 8c830ec444..7ad9643de1 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -39,10 +39,4 @@ public String toString() { + "\n" + location; } - public static Comparator descriptionComparator = new Comparator() { - @Override - public int compare(Event o1, Event o2) { - return o2.getDescription().substring(6).compareToIgnoreCase(o1.getDescription().substring(6)); - } - }; } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 4e68249db4..1b211ea140 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -75,15 +75,24 @@ public Location getLocation() { return location; } - public static Comparator descriptionComparator = new Comparator() { - @Override - public int compare(Event o1, Event o2) { - char description1 = o1.getDescription().charAt(0); - char description2 = o2.getDescription().charAt(0); - - return description1 - description2; + public static Comparator descriptionComparator = (o1, o2) -> + o1.getDescription().compareToIgnoreCase(o2.getDescription()); + + public static Comparator timeComparator = (o1, o2) -> { + LocalDate o2Date = o2.getDate(); + LocalDate o1Date = o1.getDate(); + int comparator = o1Date.getYear() - o2Date.getYear(); + if (comparator == 0) { + comparator = o1Date.getMonthValue() - o2Date.getMonthValue(); + if (comparator == 0) { + comparator = o1Date.getDayOfMonth() - o2Date.getDayOfMonth(); + } } + return comparator; }; + + public static Comparator locationComparator = (o1, o2) -> + o1.getLocation().getName().compareToIgnoreCase(o2.getLocation().getName()); } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 0bab5cf510..197d931133 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -49,11 +49,4 @@ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + location; } - - public static Comparator descriptionComparator = new Comparator() { - @Override - public int compare(Event o1, Event o2) { - return o2.getDescription().substring(14).compareToIgnoreCase(o1.getDescription().substring(14)); - } - }; } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 2f6c50d732..6c2f593cbe 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -70,10 +70,23 @@ public void editEvent(Event event, int index) { /** * Sorts the events alphabetically. + * + * @param type the sorting criteria. */ - public void sortEvent() { + public void sortEvent(String type) { assert events != null; - Collections.sort(events, Event.descriptionComparator); + switch (type) { + case "description": + Collections.sort(events, Event.descriptionComparator); + break; + case "time": + Collections.sort(events, Event.timeComparator); + break; + default: + Collections.sort(events, Event.locationComparator); + break; + } + } /** diff --git a/src/main/java/exception/InvalidSortCriteriaException.java b/src/main/java/exception/InvalidSortCriteriaException.java new file mode 100644 index 0000000000..f08fc8c470 --- /dev/null +++ b/src/main/java/exception/InvalidSortCriteriaException.java @@ -0,0 +1,9 @@ +package exception; + +public class InvalidSortCriteriaException extends NuScheduleException{ + @Override + public String getMessage() { + return "Invalid sorting criteria given. Possible sorting criteria includes" + + " description, location and time."; + } +} diff --git a/src/main/java/exception/NoSortCriteriaException.java b/src/main/java/exception/NoSortCriteriaException.java new file mode 100644 index 0000000000..65aad3d978 --- /dev/null +++ b/src/main/java/exception/NoSortCriteriaException.java @@ -0,0 +1,9 @@ +package exception; + +public class NoSortCriteriaException extends NuScheduleException{ + @Override + public String getMessage() { + return "No sorting criteria given. Possible sorting criteria includes" + + " description, location and time."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index b12a46784c..18a39ea5a3 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -17,7 +17,9 @@ import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; +import exception.InvalidSortCriteriaException; import exception.NoEventLocationException; +import exception.NoSortCriteriaException; import exception.UnknownErrorException; import exception.WrongEditFormatException; import location.Building; @@ -83,8 +85,6 @@ public static Command parse(String fullCommand, int eventCount) throws NuSchedul return new HelpCommand(); case CLEAR: return new ClearCommand(); - case SORT: - return new SortCommand(); default: break; } @@ -140,6 +140,22 @@ public static Command parse(String fullCommand, int eventCount) throws NuSchedul // } // + if (words[0].equals(SORT)) { + if (fullCommand.length() == 4) { + throw new NoSortCriteriaException(); + } + String type = words[1]; + switch(type) { + case "description": + case "time": + case "location": + return new SortCommand(type); + default: + throw new InvalidSortCriteriaException(); + } + } + + //these variables are used by either Edit or Add //the position of /t int timeDividerPosition; @@ -166,7 +182,7 @@ public static Command parse(String fullCommand, int eventCount) throws NuSchedul } catch (NumberFormatException e) { throw new WrongEditFormatException(); } - if (eventIndex >= eventCount) { + if (eventIndex >= eventCount || eventIndex == -1) { throw new EditIndexOutOfBoundsException(); } UI ui = new UI(); From d487d59b57bd65d602f84d5b2036c0e94cb52d45 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 22 Oct 2020 16:59:17 +0800 Subject: [PATCH 069/299] Fix checkstyle issues --- src/main/java/exception/InvalidSortCriteriaException.java | 6 +++--- src/main/java/exception/NoSortCriteriaException.java | 6 +++--- src/main/java/parser/Parser.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/exception/InvalidSortCriteriaException.java b/src/main/java/exception/InvalidSortCriteriaException.java index f08fc8c470..f0bc38633c 100644 --- a/src/main/java/exception/InvalidSortCriteriaException.java +++ b/src/main/java/exception/InvalidSortCriteriaException.java @@ -1,9 +1,9 @@ package exception; -public class InvalidSortCriteriaException extends NuScheduleException{ +public class InvalidSortCriteriaException extends NuScheduleException { @Override public String getMessage() { - return "Invalid sorting criteria given. Possible sorting criteria includes" + - " description, location and time."; + return "Invalid sorting criteria given. Possible sorting criteria includes" + + " description, location and time."; } } diff --git a/src/main/java/exception/NoSortCriteriaException.java b/src/main/java/exception/NoSortCriteriaException.java index 65aad3d978..9eeb3216bd 100644 --- a/src/main/java/exception/NoSortCriteriaException.java +++ b/src/main/java/exception/NoSortCriteriaException.java @@ -1,9 +1,9 @@ package exception; -public class NoSortCriteriaException extends NuScheduleException{ +public class NoSortCriteriaException extends NuScheduleException { @Override public String getMessage() { - return "No sorting criteria given. Possible sorting criteria includes" + - " description, location and time."; + return "No sorting criteria given. Possible sorting criteria includes" + + " description, location and time."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 18a39ea5a3..ba22f58de3 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -145,7 +145,7 @@ public static Command parse(String fullCommand, int eventCount) throws NuSchedul throw new NoSortCriteriaException(); } String type = words[1]; - switch(type) { + switch (type) { case "description": case "time": case "location": From 2fadf9bb46f453557ad3bab9eb05520cd3737b92 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 22 Oct 2020 18:38:25 +0800 Subject: [PATCH 070/299] fixed coding style error --- src/main/java/locationlist/LocationList.java | 2 +- src/main/java/parser/Parser.java | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index 7d0ff4334a..ef615dffd3 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -28,7 +28,7 @@ public boolean checkValidLocation(String name) { } /** - * Finds location in the list based on the name input + * Finds location in the list based on the name input. * * @param name String that represents name of location to find * @return Location that is found in the list to be returned diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 205e2aba55..70cc8a179e 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -73,11 +73,8 @@ public abstract class Parser { * @return the specific Command object to perform what the user want to do * @throws NuScheduleException includes all exceptions may happen during parsing */ -//<<<<<<< HEAD -// public static Command parse(String fullCommand, LocationList locations) throws NuScheduleException { -//======= + public static Command parse(String fullCommand, int eventCount, LocationList locations) throws NuScheduleException { -//>>>>>>> bd1c5f180f39ed273a550025c3dc5dee6f270077 // this block deals with exit and list command switch (fullCommand.trim()) { case EXIT: From 94afa495d2d0138f5333c240b5f42750e8bbe9f2 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 22 Oct 2020 19:35:40 +0800 Subject: [PATCH 071/299] adding more texts in help message to be more user friendly --- src/main/java/ui/UI.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index c5084048bc..348af909ec 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -236,6 +236,7 @@ public void printBusStopList(ArrayList busStopList) { * Relevant command information with reference to the current user guide draft. */ public void printHelp() { + System.out.println("Current version: v1.0"); System.out.println("Below are all the commands and their functions in the form of command - function: "); System.out.println("help - view all the commands"); System.out.println("add - add any type of event"); @@ -243,7 +244,8 @@ public void printHelp() { System.out.println("locate - find location information"); System.out.println("list - view all events added"); System.out.println("clear - clear all events"); - + System.out.println("There will be more upcoming features in later versions."); + System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4.github.io/tp/"); } /** From 211e76057267d608ae81a7e7d81591ad0da644d9 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 22 Oct 2020 19:51:45 +0800 Subject: [PATCH 072/299] edited clearEvents() function so that it throws EmptyEventListException --- src/main/java/eventlist/EventList.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 6c2f593cbe..9667ba7cd8 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -2,6 +2,7 @@ import event.Event; +import exception.EmptyEventListException; import exception.UndefinedEventException; import java.time.LocalDate; @@ -154,9 +155,15 @@ public ArrayList filterDateWith(LocalDate date) { /** * Clear the ArrayList events if it is not empty. + * + * @throws EmptyEventListException when the user tries to clear a list that is already empty. */ - public void clearEvents() { - assert events != null; - events.clear(); + public void clearEvents() throws EmptyEventListException { + //assert events != null; + if (events == null) { + throw new EmptyEventListException(); + } else { + events.clear(); + } } } From 74fec0cd13357560b25cd55cbe518f4c0f467724 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 02:54:05 +0800 Subject: [PATCH 073/299] update the examples given --- .gitignore | 1 + src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 05909981a7..460bace592 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ text-ui-test/EXPECTED-UNIX.TXT data/events.txt ======= >>>>>>> Coding_Standard +src/main/java/META-INF/MANIFEST.MF diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 4e2dbbe9b7..af07771732 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -41,7 +41,7 @@ public LocalDate getDate() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a (by: Feb 20 2020 08:00). + * Example of the format: [A][✘]a (by: 2020/02/20 08:00). */ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index a587e1bcb1..6e1342fa39 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -31,7 +31,7 @@ public String fileString() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][✘]a. + * Example of the format: [C][Not Done]a (at: 2020/02/20). */ public String toString() { return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" From 009f67e15131aadb5c1938dcde45784608894e30 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 20:15:41 +0800 Subject: [PATCH 074/299] Adds delete, find, date, done and some tests --- META-INF/MANIFEST.MF | 3 + build.gradle | 2 +- src/main/java/NuSchedule.java | 3 +- src/main/java/command/AddCommand.java | 4 +- src/main/java/command/DeleteCommand.java | 45 +++++++ src/main/java/command/DoneCommand.java | 44 ++++++ src/main/java/command/EditCommand.java | 10 +- src/main/java/command/FindCommand.java | 45 +++++++ src/main/java/command/FindDateCommand.java | 46 +++++++ src/main/java/eventlist/EventList.java | 6 +- .../java/exception/EmptyClassException.java | 2 +- .../exception/NoClassTimeMarkerException.java | 4 +- .../NoEventLocationMarkerException.java | 15 +++ .../exception/NoEventTimeMarkerException.java | 2 +- ...ion.java => NoMatchingEventException.java} | 4 +- src/main/java/parser/Parser.java | 126 ++++++++++-------- src/test/java/command/AddCommandTest.java | 35 +++++ src/test/java/command/EditCommandTest.java | 6 +- 18 files changed, 329 insertions(+), 73 deletions(-) create mode 100644 META-INF/MANIFEST.MF create mode 100644 src/main/java/command/DeleteCommand.java create mode 100644 src/main/java/command/DoneCommand.java create mode 100644 src/main/java/command/FindCommand.java create mode 100644 src/main/java/command/FindDateCommand.java create mode 100644 src/main/java/exception/NoEventLocationMarkerException.java rename src/main/java/exception/{NoMatchingTaskException.java => NoMatchingEventException.java} (68%) create mode 100644 src/test/java/command/AddCommandTest.java diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..ebc874c807 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: NuSchedule + diff --git a/build.gradle b/build.gradle index 78e8182f98..1162749d95 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ application { } shadowJar { - archiveBaseName = "NUSchedule" + archiveBaseName = "TPv1.0" archiveClassifier = null } diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index a1c7e71b87..eddfb74b72 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -58,8 +58,7 @@ public void run() { try { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") - int eventCount = events.getSize(); - Command c = Parser.parse(fullCommand, eventCount, locations); + Command c = Parser.parse(fullCommand, locations); c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); } catch (NuScheduleException e) { diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 34d984c842..1e2c33d7fd 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -3,6 +3,7 @@ import event.Event; import eventlist.EventList; import exception.NuScheduleException; +import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -32,10 +33,11 @@ public AddCommand(Event event) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @throws WritingFileException the file is not correctly written. */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws NuScheduleException { + throws WritingFileException { events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/DeleteCommand.java b/src/main/java/command/DeleteCommand.java new file mode 100644 index 0000000000..0d844ac71f --- /dev/null +++ b/src/main/java/command/DeleteCommand.java @@ -0,0 +1,45 @@ +package command; + + +import eventlist.EventList; +import exception.NuScheduleException; +import exception.UndefinedEventException; +import exception.WritingFileException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +/** + * Represents the command call when the user deletes some event. + */ +public class DeleteCommand extends Command { + private final int eventIndex; + + public DeleteCommand(int eventIndex) { + this.eventIndex = eventIndex; + } + + /** + * Delete the event, and update the file. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws UndefinedEventException the user trying to operate (delete/edit/done) some events that does not exist. + * @throws WritingFileException the file is not correctly written. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws UndefinedEventException, WritingFileException { + if (eventIndex <= -1 || eventIndex >= events.getSize()) { + throw new UndefinedEventException(eventIndex + 1); + } + ui.printDeleteMessage(events.get(eventIndex)); + events.remove(eventIndex); + ui.printNumEvent(events.getSize()); + storage.writeFile(events.getEventList()); + } +} diff --git a/src/main/java/command/DoneCommand.java b/src/main/java/command/DoneCommand.java new file mode 100644 index 0000000000..75b6430af5 --- /dev/null +++ b/src/main/java/command/DoneCommand.java @@ -0,0 +1,44 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import exception.UndefinedEventException; +import exception.WritingFileException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +/** + * Represents the command call when the user mark a task as done. + */ +public class DoneCommand extends Command { + private final int eventIndex; + + public DoneCommand(int eventIndex) { + this.eventIndex = eventIndex; + } + + /** + * Mark the task as done, and update the file. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws UndefinedEventException the case when the the user trying to operate (delete/edit/done) some events + * that does not exist. + * @throws WritingFileException the file is not correctly written. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws UndefinedEventException, WritingFileException { + if (eventIndex <= -1 || eventIndex >= events.getSize()) { + throw new UndefinedEventException(eventIndex + 1); + } + events.doneEvent(eventIndex); + ui.printDoneMessage(events.get(eventIndex)); + storage.writeFile(events.getEventList()); + } +} diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index f306f9ceba..241c076c89 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -2,7 +2,9 @@ import event.Event; import eventlist.EventList; +import exception.EditIndexOutOfBoundsException; import exception.NuScheduleException; +import exception.UndefinedEventException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -28,9 +30,15 @@ public EditCommand(Event event, int index) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @throws UndefinedEventException the the user trying to operate (delete/edit/done) some events that does not + * exist. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws UndefinedEventException { + if (index >= events.getSize() || index == -1) { + throw new UndefinedEventException(index + 1); + } events.editEvent(event, index); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/command/FindCommand.java b/src/main/java/command/FindCommand.java new file mode 100644 index 0000000000..25a961b3af --- /dev/null +++ b/src/main/java/command/FindCommand.java @@ -0,0 +1,45 @@ +package command; + + +import event.Event; +import eventlist.EventList; +import exception.NoMatchingEventException; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.util.ArrayList; + +/** + * Represents the command call when the user want to find the tasks having a certain keyword. + */ +public class FindCommand extends Command { + private final String filterString; + + public FindCommand(String filterString) { + this.filterString = filterString; + } + + /** + * Find the tasks having the keyword provided by the user, and print that filtered list. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NoMatchingEventException the user trying to find a Task with a certain keyword, but such task does not + * exist in the list. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NoMatchingEventException { + ArrayList filteredEventList = events.filterWith(filterString); + if (filteredEventList.size() == 0) { + throw new NoMatchingEventException(); + } + ui.printFilteredEventList(filteredEventList); + } +} diff --git a/src/main/java/command/FindDateCommand.java b/src/main/java/command/FindDateCommand.java new file mode 100644 index 0000000000..428fbf5fb9 --- /dev/null +++ b/src/main/java/command/FindDateCommand.java @@ -0,0 +1,46 @@ +package command; + + +import event.Event; +import eventlist.EventList; +import exception.NoEventDateException; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.time.LocalDate; +import java.util.ArrayList; + +/** + * Represents the command call when the user want to find the tasks in certain date. + */ +public class FindDateCommand extends Command { + private final LocalDate date; + + public FindDateCommand(LocalDate date) { + this.date = date; + } + + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NoEventDateException the user trying to find a Event with a certain date, but such Event does not + * exist in the list. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NoEventDateException { + ArrayList filteredEventList = events.filterDateWith(date); + if (filteredEventList.size() == 0) { + throw new NoEventDateException(); + } + ui.printFilteredDateEventList(filteredEventList); + } +} diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 9667ba7cd8..59955f4352 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -78,13 +78,13 @@ public void sortEvent(String type) { assert events != null; switch (type) { case "description": - Collections.sort(events, Event.descriptionComparator); + events.sort(Event.descriptionComparator); break; case "time": - Collections.sort(events, Event.timeComparator); + events.sort(Event.timeComparator); break; default: - Collections.sort(events, Event.locationComparator); + events.sort(Event.locationComparator); break; } diff --git a/src/main/java/exception/EmptyClassException.java b/src/main/java/exception/EmptyClassException.java index b928333845..aeac0e4467 100644 --- a/src/main/java/exception/EmptyClassException.java +++ b/src/main/java/exception/EmptyClassException.java @@ -10,6 +10,6 @@ public class EmptyClassException extends ClassException { * @return the message */ public String getMessage() { - return "OOPS!!! The description of a deadline cannot be empty."; + return "OOPS!!! The description of a class cannot be empty."; } } diff --git a/src/main/java/exception/NoClassTimeMarkerException.java b/src/main/java/exception/NoClassTimeMarkerException.java index db6be80cf9..1cd4ad8f26 100644 --- a/src/main/java/exception/NoClassTimeMarkerException.java +++ b/src/main/java/exception/NoClassTimeMarkerException.java @@ -2,7 +2,7 @@ /** * Represents the exception happens when the user trying to create a Class - * without using \at to give it a time. + * without using /t to give it a time. */ public class NoClassTimeMarkerException extends ClassException { /** @@ -11,6 +11,6 @@ public class NoClassTimeMarkerException extends ClassException { * @return the message. */ public String getMessage() { - return "OOPS!!! You should mark the time for a class with \"/at\""; + return "OOPS!!! You should mark the time for a class with \"/t\""; } } diff --git a/src/main/java/exception/NoEventLocationMarkerException.java b/src/main/java/exception/NoEventLocationMarkerException.java new file mode 100644 index 0000000000..61f10474f0 --- /dev/null +++ b/src/main/java/exception/NoEventLocationMarkerException.java @@ -0,0 +1,15 @@ +package exception; +/** + * Represents the exception happens when the user trying to create an event + * without using /l to give it a location. + */ +public class NoEventLocationMarkerException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + public String getMessage() { + return "Please mark the location of the event by \"/l\"."; + } +} diff --git a/src/main/java/exception/NoEventTimeMarkerException.java b/src/main/java/exception/NoEventTimeMarkerException.java index 5599ec9fe1..e756a75ef4 100644 --- a/src/main/java/exception/NoEventTimeMarkerException.java +++ b/src/main/java/exception/NoEventTimeMarkerException.java @@ -10,6 +10,6 @@ public class NoEventTimeMarkerException extends NuScheduleException { * @return the message. */ public String getMessage() { - return "Please enter your command in the correct format."; + return "Please mark the time of the event by \"/t\"."; } } diff --git a/src/main/java/exception/NoMatchingTaskException.java b/src/main/java/exception/NoMatchingEventException.java similarity index 68% rename from src/main/java/exception/NoMatchingTaskException.java rename to src/main/java/exception/NoMatchingEventException.java index 0778144c1d..f2b44a79d7 100644 --- a/src/main/java/exception/NoMatchingTaskException.java +++ b/src/main/java/exception/NoMatchingEventException.java @@ -4,13 +4,13 @@ * Represents the exception happens when the user trying to find a Task with a certain keyword, but such * task does not exist in the list. */ -public class NoMatchingTaskException extends NuScheduleException { +public class NoMatchingEventException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. * * @return the message */ public String getMessage() { - return "Sorry, there isn't such task in the list with the given keyword."; + return "Sorry, there isn't such event in the list with the given keyword."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 70cc8a179e..743e3f1fb7 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -3,8 +3,12 @@ import command.AddCommand; import command.ClearCommand; +import command.DeleteCommand; +import command.DoneCommand; import command.EditCommand; import command.ExitCommand; +import command.FindCommand; +import command.FindDateCommand; import command.HelpCommand; import command.PrintFullListCommand; import command.PrintLocationCommand; @@ -15,10 +19,18 @@ import event.PersonalEvent; +import exception.DateFormatException; +import exception.DeleteNumberFormatException; +import exception.DoneNumberFormatException; import exception.EditIndexOutOfBoundsException; +import exception.EmptyDeleteException; +import exception.EmptyDoneException; import exception.EmptyEventIndexException; +import exception.EmptyFindDateException; +import exception.EmptyFindException; import exception.InvalidSortCriteriaException; import exception.NoEventLocationException; +import exception.NoEventLocationMarkerException; import exception.NoSortCriteriaException; import exception.UnknownErrorException; import exception.WrongEditFormatException; @@ -38,6 +50,7 @@ import exception.WrongCommandException; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeParseException; @@ -47,7 +60,7 @@ */ public abstract class Parser { public static final String EXIT = "bye"; - public static final String PRINT_Event_LIST = "list"; + public static final String PRINT_EVENT_LIST = "list"; public static final String PRINT_LOCATION_LIST = "locations"; public static final String LOCATE_EVENT = "locate"; public static final String Event_DONE = "done"; @@ -74,12 +87,12 @@ public abstract class Parser { * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand, int eventCount, LocationList locations) throws NuScheduleException { + public static Command parse(String fullCommand, LocationList locations) throws NuScheduleException { // this block deals with exit and list command switch (fullCommand.trim()) { case EXIT: return new ExitCommand(); - case PRINT_Event_LIST: + case PRINT_EVENT_LIST: return new PrintFullListCommand(); case PRINT_LOCATION_LIST: return new PrintLocationCommand(); @@ -93,55 +106,55 @@ public static Command parse(String fullCommand, int eventCount, LocationList loc String[] words = fullCommand.split(SINGLE_SPACE); - // //this block deals with find command - // if (words[0].equals(Event_FIND)) { - // if (fullCommand.substring(4).isBlank()) { - // throw new EmptyFindException(); - // } - // return new FindCommand(fullCommand.substring(5)); - // } - // - // //this block deals with find date command - // if (words[0].equals(Event_FIND_DATE)) { - // if (fullCommand.substring(4).isBlank()) { - // throw new EmptyFindDateException(); - // } - // try { - // return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); - // } catch (DateTimeParseException e) { - // throw new DateFormatException(); - // } - // } - // - // int EventIndex;//to indicate what is the Event we are dealing with. may not be used. - // - // //this block deals with done command - // if (words[0].equals(Event_DONE)) { - // if (fullCommand.substring(4).isBlank()) { - // throw new EmptyDoneException(); - // } - // try { - // EventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; - // } catch (NumberFormatException e) { - // throw new DoneNumberFormatException(); - // } - // return new DoneCommand(EventIndex); - // } - // - // //this block deals with delete command - // if (words[0].equals(Event_DELETE)) { - // if (fullCommand.substring(6).isBlank()) { - // throw new EmptyDeleteException(); - // } - // try { - // EventIndex = Integer.parseInt(fullCommand.substring(7)) - 1; - // } catch (NumberFormatException e) { - // throw new DeleteNumberFormatException(); - // } - // return new DeleteCommand(EventIndex); - // } - // + //this block deals with find command + if (words[0].equals(Event_FIND)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyFindException(); + } + return new FindCommand(fullCommand.substring(5)); + } + + //this block deals with find date command + if (words[0].equals(Event_FIND_DATE)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyFindDateException(); + } + try { + return new FindDateCommand(LocalDate.parse(fullCommand.substring(5))); + } catch (DateTimeParseException e) { + throw new DateFormatException(); + } + } + int eventIndex;//to indicate what is the Event we are dealing with. may not be used. + + //this block deals with done command + if (words[0].equals(Event_DONE)) { + if (fullCommand.substring(4).isBlank()) { + throw new EmptyDoneException(); + } + try { + eventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + } catch (NumberFormatException e) { + throw new DoneNumberFormatException(); + } + return new DoneCommand(eventIndex); + } + + //this block deals with delete command + if (words[0].equals(Event_DELETE)) { + if (fullCommand.substring(6).isBlank()) { + throw new EmptyDeleteException(); + } + try { + eventIndex = Integer.parseInt(fullCommand.substring(7)) - 1; + } catch (NumberFormatException e) { + throw new DeleteNumberFormatException(); + } + return new DeleteCommand(eventIndex); + } + + //this block deals with sorting if (words[0].equals(SORT)) { if (fullCommand.length() == 4) { throw new NoSortCriteriaException(); @@ -172,7 +185,7 @@ public static Command parse(String fullCommand, int eventCount, LocationList loc //this block will change fullCommand, but this does not affect the later block since //it either return an EditCommand, or throw an exception if (words[0].equals(EDIT)) { - int eventIndex = -1; + if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); } @@ -184,9 +197,6 @@ public static Command parse(String fullCommand, int eventCount, LocationList loc } catch (NumberFormatException e) { throw new WrongEditFormatException(); } - if (eventIndex >= eventCount || eventIndex == -1) { - throw new EditIndexOutOfBoundsException(); - } UI ui = new UI(); ui.print(EDIT_INSTRUCTION); fullCommand = ui.readCommand(); @@ -260,12 +270,16 @@ public static Command parse(String fullCommand, int eventCount, LocationList loc case PERSONAL_EVENT: timeDividerPosition = fullCommand.indexOf(TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + if (fullCommand.substring(words[0].length()).isBlank()) { + throw new EmptyEventException(); + } + if (timeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } if (locationDividerPosition == -1) { - throw new NoEventLocationException(); + throw new NoEventLocationMarkerException(); } if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { diff --git a/src/test/java/command/AddCommandTest.java b/src/test/java/command/AddCommandTest.java new file mode 100644 index 0000000000..054cb33584 --- /dev/null +++ b/src/test/java/command/AddCommandTest.java @@ -0,0 +1,35 @@ +package command; + +import exception.EmptyEventException; +import exception.EmptyEventIndexException; +import exception.NoEventLocationMarkerException; +import exception.NoEventTimeMarkerException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +import static org.junit.jupiter.api.Assertions.*; + +class AddCommandTest { + + @Test + void execute_NoDescriptionGiven_EmptyEventException() { + Assertions.assertThrows(EmptyEventException.class, () -> { + Command d = Parser.parse("class", null); + }); + } + + @Test + void execute_NoTimeMarkerGiven_NoEventTimeMarkerException() { + Assertions.assertThrows(NoEventTimeMarkerException.class, () -> { + Command d = Parser.parse("class something", null); + }); + } + + @Test + void execute_NoLocationMarkerGiven_NoEventLocationMarkerException() { + Assertions.assertThrows(NoEventLocationMarkerException.class, () -> { + Command d = Parser.parse("class something /t 2020-02-02 20:00", null); + }); + } +} \ No newline at end of file diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index e7cd391cf7..0e8b495175 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -16,7 +16,7 @@ class EditCommandTest { void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleException { Assertions.assertThrows(EmptyEventIndexException.class, () -> { - Command d = Parser.parse("edit", 0, null); + Command d = Parser.parse("edit", null); }); } @@ -24,14 +24,14 @@ void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleExcept @Test void execute_inputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { - Command c = Parser.parse("edit c", 0, null); + Command c = Parser.parse("edit c", null); }); } @Test void execute_indexOutOfBounds_editIndexOutOfBoundsException() { Assertions.assertThrows(EditIndexOutOfBoundsException.class, () -> { - Command c = Parser.parse("edit 1", 0, null); + Command c = Parser.parse("edit 1", null); }); } From 830004ce6123ce15256fbede0c52207522a6e3c4 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 20:18:58 +0800 Subject: [PATCH 075/299] coding style --- src/main/java/exception/NoEventLocationMarkerException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/exception/NoEventLocationMarkerException.java b/src/main/java/exception/NoEventLocationMarkerException.java index 61f10474f0..ee3ba1417d 100644 --- a/src/main/java/exception/NoEventLocationMarkerException.java +++ b/src/main/java/exception/NoEventLocationMarkerException.java @@ -1,4 +1,5 @@ package exception; + /** * Represents the exception happens when the user trying to create an event * without using /l to give it a location. From 0be91cf428013d839f807d1f25d5613128c1c57f Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 20:21:55 +0800 Subject: [PATCH 076/299] delete one unnecessary import --- src/test/java/command/AddCommandTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/command/AddCommandTest.java b/src/test/java/command/AddCommandTest.java index 054cb33584..ac6b5fd71c 100644 --- a/src/test/java/command/AddCommandTest.java +++ b/src/test/java/command/AddCommandTest.java @@ -8,7 +8,6 @@ import org.junit.jupiter.api.Test; import parser.Parser; -import static org.junit.jupiter.api.Assertions.*; class AddCommandTest { From 86061c6b6ccd750a090ede988e56b27e53fa54e5 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 21:30:23 +0800 Subject: [PATCH 077/299] edit the format to edit some task, also update the relevant test --- .../exception/WrongEditFormatException.java | 2 +- src/main/java/parser/Parser.java | 40 +++++++++---------- src/test/java/command/EditCommandTest.java | 23 ++++++++--- 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/main/java/exception/WrongEditFormatException.java b/src/main/java/exception/WrongEditFormatException.java index 593f1890dc..a288fbac2f 100644 --- a/src/main/java/exception/WrongEditFormatException.java +++ b/src/main/java/exception/WrongEditFormatException.java @@ -11,6 +11,6 @@ public class WrongEditFormatException extends NuScheduleException { */ @Override public String getMessage() { - return "Please enter the index of the event that you want to edit."; + return "Please enter the index of the event that you want to edit as an integer."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 743e3f1fb7..f5315ed3c2 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -22,7 +22,6 @@ import exception.DateFormatException; import exception.DeleteNumberFormatException; import exception.DoneNumberFormatException; -import exception.EditIndexOutOfBoundsException; import exception.EmptyDeleteException; import exception.EmptyDoneException; import exception.EmptyEventIndexException; @@ -63,17 +62,17 @@ public abstract class Parser { public static final String PRINT_EVENT_LIST = "list"; public static final String PRINT_LOCATION_LIST = "locations"; public static final String LOCATE_EVENT = "locate"; - public static final String Event_DONE = "done"; + public static final String EVENT_DONE = "done"; public static final String ASSIGNMENT = "assignment"; public static final String CLASS = "class"; public static final String PERSONAL_EVENT = "personalEvent"; - public static final String Event_DELETE = "delete"; - public static final String Event_FIND = "find"; + public static final String EVENT_DELETE = "delete"; + public static final String EVENT_FIND = "find"; public static final String EDIT = "edit"; public static final String TIME_MARKER = "/t"; public static final String SINGLE_SPACE = " "; public static final String LOCATION_MARKER = "/l"; - private static final String Event_FIND_DATE = "date"; + public static final String EVENT_FIND_DATE = "date"; public static final String EDIT_INSTRUCTION = "Enter new event:"; public static final String HELP = "help"; public static final String CLEAR = "clear"; @@ -107,7 +106,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N String[] words = fullCommand.split(SINGLE_SPACE); //this block deals with find command - if (words[0].equals(Event_FIND)) { + if (words[0].equals(EVENT_FIND)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyFindException(); } @@ -115,7 +114,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N } //this block deals with find date command - if (words[0].equals(Event_FIND_DATE)) { + if (words[0].equals(EVENT_FIND_DATE)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyFindDateException(); } @@ -129,7 +128,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N int eventIndex;//to indicate what is the Event we are dealing with. may not be used. //this block deals with done command - if (words[0].equals(Event_DONE)) { + if (words[0].equals(EVENT_DONE)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyDoneException(); } @@ -142,7 +141,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N } //this block deals with delete command - if (words[0].equals(Event_DELETE)) { + if (words[0].equals(EVENT_DELETE)) { if (fullCommand.substring(6).isBlank()) { throw new EmptyDeleteException(); } @@ -193,20 +192,16 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new EmptyEventIndexException(); } try { - eventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + eventIndex = Integer.parseInt(words[1]) - 1; } catch (NumberFormatException e) { throw new WrongEditFormatException(); } - UI ui = new UI(); - ui.print(EDIT_INSTRUCTION); - fullCommand = ui.readCommand(); - words = fullCommand.split(SINGLE_SPACE); //the following part is almost the same as AddCommand, but returns EditCommand timeDividerPosition = fullCommand.indexOf(TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); - switch (words[0]) { + switch (words[2]) { case ASSIGNMENT: case CLASS: case PERSONAL_EVENT: @@ -217,8 +212,10 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (locationDividerPosition == -1) { throw new NoEventLocationException(); } + int prefixLength=words[0].length() + words[1].length() + words[2].length(); - if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { + if (fullCommand.substring(prefixLength, + timeDividerPosition).isBlank()) { throw new EmptyEventException(); } @@ -232,21 +229,21 @@ public static Command parse(String fullCommand, LocationList locations) throws N try { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 4 + timeDivider) + dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + "T" + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); - switch (words[0]) { + switch (words[2]) { case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(words[0].length() + 1, + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case CLASS: - return new EditCommand(new Class(fullCommand.substring(words[0].length() + 1, + return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); default: break; @@ -333,6 +330,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N * @return the parsed location. */ public static Location parseLocation(String input, LocationList locations) { + assert locations != null; Location location; String[] info = input.split("/"); // parse location from event.txt file diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 0e8b495175..832353733b 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -1,13 +1,20 @@ package command; +import eventlist.EventList; +import exception.CreatingFileException; import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; +import exception.UndefinedEventException; import exception.WrongEditFormatException; +import locationlist.BusStopList; +import locationlist.LocationList; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import exception.NuScheduleException; import parser.Parser; +import storage.Storage; +import ui.UI; class EditCommandTest { @@ -16,7 +23,7 @@ class EditCommandTest { void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleException { Assertions.assertThrows(EmptyEventIndexException.class, () -> { - Command d = Parser.parse("edit", null); + Command d = Parser.parse("edit", null); }); } @@ -24,17 +31,21 @@ void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleExcept @Test void execute_inputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { - Command c = Parser.parse("edit c", null); + Command c = Parser.parse("edit c", null); }); } @Test - void execute_indexOutOfBounds_editIndexOutOfBoundsException() { - Assertions.assertThrows(EditIndexOutOfBoundsException.class, () -> { - Command c = Parser.parse("edit 1", null); + void execute_indexOutOfBounds_UndefinedEventException() throws CreatingFileException { + Storage storage = new Storage("data/events.txt"); + LocationList locations = new LocationList(); + storage.loadLocationData(locations.getLocationList()); + Assertions.assertThrows(UndefinedEventException.class, () -> { + Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations). + execute(new EventList(), new LocationList(), new BusStopList(), new UI(), + storage); }); } - } \ No newline at end of file From 923204c20b9966b8d8c2bafb3bb889ebf77f5fd7 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 22:06:29 +0800 Subject: [PATCH 078/299] coding style --- src/main/java/parser/Parser.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index f5315ed3c2..25c38291cb 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -212,10 +212,9 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (locationDividerPosition == -1) { throw new NoEventLocationException(); } - int prefixLength=words[0].length() + words[1].length() + words[2].length(); + int prefixLength = words[0].length() + words[1].length() + words[2].length(); - if (fullCommand.substring(prefixLength, - timeDividerPosition).isBlank()) { + if (fullCommand.substring(prefixLength, timeDividerPosition).isBlank()) { throw new EmptyEventException(); } From 2ff15483369c71f86ad0b7a3eb3200ed61c0c317 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 23 Oct 2020 22:41:02 +0800 Subject: [PATCH 079/299] coding style --- src/test/java/command/EditCommandTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 832353733b..4624b5d6e5 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -41,9 +41,8 @@ void execute_indexOutOfBounds_UndefinedEventException() throws CreatingFileExcep LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { - Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations). - execute(new EventList(), new LocationList(), new BusStopList(), new UI(), - storage); + Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations) + .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage); }); } From e7f8e4b5b0c737095dcdf775bc90b883bb100c2e Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Sat, 24 Oct 2020 13:41:39 +0800 Subject: [PATCH 080/299] created jar file for v1.0 --- META-INF/MANIFEST.MF | 3 +++ src/test/java/location/LocationListTest.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 META-INF/MANIFEST.MF create mode 100644 src/test/java/location/LocationListTest.java diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..7ab5d3776f --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: NuSchedule + diff --git a/src/test/java/location/LocationListTest.java b/src/test/java/location/LocationListTest.java new file mode 100644 index 0000000000..20cb6664f8 --- /dev/null +++ b/src/test/java/location/LocationListTest.java @@ -0,0 +1,15 @@ +package location; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +public class LocationListTest { + + @Test + void execute_cannotFindLocation_NullPointerException() { + Assertions.assertThrows(NullPointerException.class, ()-> { + Location l = Parser.parseLocation("location", null); + }); + } +} From 12461491145311e361bb49a0ef1749fcc619b4d4 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 00:56:55 +0800 Subject: [PATCH 081/299] added locate command --- src/main/java/command/LocateCommand.java | 44 ++++++++++++++++++++++ src/main/java/location/Building.java | 2 +- src/main/java/location/Hostel.java | 2 +- src/main/java/location/LectureTheatre.java | 2 +- src/main/java/parser/Parser.java | 18 +++------ src/main/java/storage/Storage.java | 6 +-- text-ui-test/data/events.txt | 0 7 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 src/main/java/command/LocateCommand.java delete mode 100644 text-ui-test/data/events.txt diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java new file mode 100644 index 0000000000..3c52df3113 --- /dev/null +++ b/src/main/java/command/LocateCommand.java @@ -0,0 +1,44 @@ +package command; + +import event.Event; +import eventlist.EventList; +import exception.NuScheduleException; +import location.Location; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.util.ArrayList; + +/** + * Represents the command call when the user wants to locate an event + */ +public class LocateCommand extends Command { + private String input; + + public LocateCommand(String input) { + this.input = input; + } + + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { + int event_num; + try { + event_num = Integer.parseInt(input); + Event event = events.get(event_num-1); + Location location = event.getLocation(); + System.out.println(event.getDescription() + " is located at:"); + System.out.println(location); + } catch (NumberFormatException e) { + boolean checkValidLocation = locations.checkValidLocation(input); + if (checkValidLocation) { + Location location = locations.findLocation(input); + System.out.println("Location Information: "); + System.out.println(location); + } else { + System.out.println("Please input a valid location or event number."); + } + } + } +} diff --git a/src/main/java/location/Building.java b/src/main/java/location/Building.java index dae69118ff..055a01b502 100644 --- a/src/main/java/location/Building.java +++ b/src/main/java/location/Building.java @@ -22,7 +22,7 @@ public Building(String name, String[] nearestBusStops) { */ @Override public String toString() { - return "location: (Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + return "(Building): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } /** diff --git a/src/main/java/location/Hostel.java b/src/main/java/location/Hostel.java index aa277c90d0..9105256caa 100644 --- a/src/main/java/location/Hostel.java +++ b/src/main/java/location/Hostel.java @@ -22,7 +22,7 @@ public Hostel(String name, String[] nearestBusStops) { */ @Override public String toString() { - return "location: (Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); + return "(Hostel): " + name + "\nNearest bus stop(s): " + printNearestBusStops(); } /** diff --git a/src/main/java/location/LectureTheatre.java b/src/main/java/location/LectureTheatre.java index b2d393b751..e8fa54d1d2 100644 --- a/src/main/java/location/LectureTheatre.java +++ b/src/main/java/location/LectureTheatre.java @@ -20,7 +20,7 @@ public LectureTheatre(String name, String nearestBuilding) { */ @Override public String toString() { - return "location: (Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; + return "(Lecture Theatre): " + name + "\nNearest building: " + nearestBuilding; } /** diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 25c38291cb..d3161eea9d 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,19 +1,7 @@ package parser; -import command.AddCommand; -import command.ClearCommand; -import command.DeleteCommand; -import command.DoneCommand; -import command.EditCommand; -import command.ExitCommand; -import command.FindCommand; -import command.FindDateCommand; -import command.HelpCommand; -import command.PrintFullListCommand; -import command.PrintLocationCommand; -import command.Command; -import command.SortCommand; +import command.*; import event.Assignment; import event.PersonalEvent; @@ -105,6 +93,10 @@ public static Command parse(String fullCommand, LocationList locations) throws N String[] words = fullCommand.split(SINGLE_SPACE); + if (words[0].equals(LOCATE_EVENT)) { + return new LocateCommand(words[1]); + } + //this block deals with find command if (words[0].equals(EVENT_FIND)) { if (fullCommand.substring(4).isBlank()) { diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 102ba18469..068f2daeba 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -146,7 +146,7 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti * @param busStopList ArrayList of BusStops in BusStopList */ public void loadBusStopData(ArrayList busStopList) { - File f = new File("data/bus_stops.txt"); + File f = new File("./data/bus_stops.txt"); Scanner s; try { s = new Scanner(f); @@ -171,12 +171,12 @@ public void loadBusStopData(ArrayList busStopList) { * @param locationList ArrayList of Locations in LocationList */ public void loadLocationData(ArrayList locationList) { - File f = new File("data/locations.txt"); + File f = new File("./data/locations.txt"); Scanner s = null; try { s = new Scanner(f); } catch (FileNotFoundException e) { - System.out.println(f.getName() + "not found: " + e.getMessage()); + System.out.println(f.getName() + " not found: " + e.getMessage()); return; } diff --git a/text-ui-test/data/events.txt b/text-ui-test/data/events.txt deleted file mode 100644 index e69de29bb2..0000000000 From 5b559335a9b71116f3ce09def8f40fedc0c836b8 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 00:59:29 +0800 Subject: [PATCH 082/299] fixed import class error --- src/main/java/parser/Parser.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index d3161eea9d..802c06a5a8 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,8 +1,20 @@ package parser; -import command.*; - +import command.AddCommand; +import command.ClearCommand; +import command.Command; +import command.DeleteCommand; +import command.DoneCommand; +import command.EditCommand; +import command.ExitCommand; +import command.FindCommand; +import command.FindDateCommand; +import command.HelpCommand; +import command.LocateCommand; +import command.PrintFullListCommand; +import command.PrintLocationCommand; +import command.SortCommand; import event.Assignment; import event.PersonalEvent; From 71a507cb8e536915fdbec6ce554c8b1f0ceb342a Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 01:01:59 +0800 Subject: [PATCH 083/299] add method description comments --- src/main/java/command/LocateCommand.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 3c52df3113..499468a3f9 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -21,6 +21,16 @@ public LocateCommand(String input) { this.input = input; } + /** + * Provides location information when user gives a number within size of EventList or name of a location + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NuScheduleException + */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { int event_num; From 95b2bbc7c5e5c137135bee41970f0cd3127c5b5f Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 01:08:01 +0800 Subject: [PATCH 084/299] fix coding style error --- src/main/java/command/LocateCommand.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 499468a3f9..1e69f8961b 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -12,7 +12,7 @@ import java.util.ArrayList; /** - * Represents the command call when the user wants to locate an event + * Represents the command call when the user wants to locate an event. */ public class LocateCommand extends Command { private String input; @@ -22,21 +22,20 @@ public LocateCommand(String input) { } /** - * Provides location information when user gives a number within size of EventList or name of a location + * Provides location information when user gives a number within size of EventList or name of a location. * * @param events the list of Events. * @param locations the list of Locations. * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. - * @throws NuScheduleException */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NuScheduleException { - int event_num; + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + int eventNum; try { - event_num = Integer.parseInt(input); - Event event = events.get(event_num-1); + eventNum = Integer.parseInt(input); + Event event = events.get(eventNum-1); Location location = event.getLocation(); System.out.println(event.getDescription() + " is located at:"); System.out.println(location); From 7c6be5cbe9217490b2a640f16fcc2235b37d2972 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 01:12:27 +0800 Subject: [PATCH 085/299] correct whitespace error at minus sign --- src/main/java/command/LocateCommand.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 1e69f8961b..cc3b816ad9 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -34,14 +34,13 @@ public LocateCommand(String input) { public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { int eventNum; try { - eventNum = Integer.parseInt(input); - Event event = events.get(eventNum-1); + eventNum = Integer.parseInt(input) - 1; + Event event = events.get(eventNum); Location location = event.getLocation(); System.out.println(event.getDescription() + " is located at:"); System.out.println(location); } catch (NumberFormatException e) { - boolean checkValidLocation = locations.checkValidLocation(input); - if (checkValidLocation) { + if (locations.checkValidLocation(input)) { Location location = locations.findLocation(input); System.out.println("Location Information: "); System.out.println(location); From fae3edc3ed19cabc63bc569b1a20d3daceda33b5 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 01:23:40 +0800 Subject: [PATCH 086/299] removed unnecessary test --- src/test/java/location/LocationListTest.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/test/java/location/LocationListTest.java b/src/test/java/location/LocationListTest.java index 20cb6664f8..d304b4f73c 100644 --- a/src/test/java/location/LocationListTest.java +++ b/src/test/java/location/LocationListTest.java @@ -5,11 +5,4 @@ import parser.Parser; public class LocationListTest { - - @Test - void execute_cannotFindLocation_NullPointerException() { - Assertions.assertThrows(NullPointerException.class, ()-> { - Location l = Parser.parseLocation("location", null); - }); - } } From 425b9f34d870fc024b35cb2f525a9779a73c195c Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 26 Oct 2020 02:03:13 +0800 Subject: [PATCH 087/299] delete unnecessary classes --- src/main/java/command/LocateCommand.java | 3 --- src/test/java/location/LocationListTest.java | 8 -------- 2 files changed, 11 deletions(-) delete mode 100644 src/test/java/location/LocationListTest.java diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index cc3b816ad9..dc259e6f10 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -2,15 +2,12 @@ import event.Event; import eventlist.EventList; -import exception.NuScheduleException; import location.Location; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; -import java.util.ArrayList; - /** * Represents the command call when the user wants to locate an event. */ diff --git a/src/test/java/location/LocationListTest.java b/src/test/java/location/LocationListTest.java deleted file mode 100644 index d304b4f73c..0000000000 --- a/src/test/java/location/LocationListTest.java +++ /dev/null @@ -1,8 +0,0 @@ -package location; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import parser.Parser; - -public class LocationListTest { -} From 8fd2f67a819acd5987a2344ca65dbb2f530de828 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 28 Oct 2020 02:10:27 +0800 Subject: [PATCH 088/299] added a missed out exception --- src/main/java/command/LocateCommand.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index dc259e6f10..9648bcfff9 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -44,6 +44,8 @@ public void execute(EventList events, LocationList locations, BusStopList busSto } else { System.out.println("Please input a valid location or event number."); } + } catch (IndexOutOfBoundsException e) { + System.out.println("Please input an event number that is within the event list."); } } } From 0b612f1b9d811a5d2fd6d2b1f0d5b0afbf0a1094 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 28 Oct 2020 04:50:50 +0800 Subject: [PATCH 089/299] update developer guide --- docs/DeveloperGuide.md | 72 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 0ec3db103d..b968707d92 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,20 +1,80 @@ # Developer Guide +google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFXK3VgL6807x5ivZ5yJk/edit) -## Design & implementation +## Table of Contents +1. [Introduction](#introduction) +2. [Setting Up](#setting-up) +3. [Design](#design)
+3.1 [Architecture](#architecture)
+3.2 [UI](#ui)
+3.3 [Storage](#storage)
+3.4 [Logic](#logic)
+3.5 [Events](#events)
+3.6 [Locations](#locations)
+4. [Implementation](#implementation)
+4.1 [Add events](#add-events)
+4.2 [Clear events](#clear-events)
+4.3 [Edit events](#edit-events)
+4.4 [Locate events](#locate-events)
+4.5 [Reminders](#reminders)
+4.6 [Sort events](#sort-events)
+4.7 [View events](#view-events)
+4.8 [Summary of Features](#summary-of-features)
+5. [Documentation](#documentation)
+5.1 [Product scope](#product-scope)
+5.2 [User stories](#user-stories)
-{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.} +## Introduction +NUSchedule is a Command-Line based application written in Java. It provides a simple +and intuitive way to keep track of commitments. This guide provides information on the Architecture +and system design of NUSchedule that will help developers, designers and software testers of NUSchedule. +## Setting up +Step 1: __Fork__ the repo, and __clone__ the fork onto your computer. +
Step 2: Using IntelliJ IDEA (recommended), import the project as a Gradle project. + Ensure you have configured IntelliJ to use JDK 11. +
Step 3: Verify you have set the project up correctly by running `NuSchedule` and trying a + few commands. -## Product scope -### Target user profile +## Design +This section describes the different components of the application and how each component interact with +each other to run the program. -{Describe the target user profile} +### Architecture +### UI +### Storage +### Logic +### Events +### Location + +## Implementation +This section describes some noteworthy features of how each feature is implemented. + +### Add events +### Clear events +### Edit events +### Locate events +### Reminders +### Sort events +### View events +### Summary of Features + +## Documentation + +### Product scope +__Target user profile:__ +* NUS student or staff +* able to type quickly +* has quite a number of events to keep track of +* prefers to use desktop apps +* prefers using Command Line Interface (CLI) apps +* prefers typing instead of mouse interactions ### Value proposition {Describe the value proposition: what problem does it solve?} -## User Stories +### User Stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| From b9aa963525a9eaa5bef15fef8079bcd43835ac97 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Wed, 28 Oct 2020 11:23:31 +0800 Subject: [PATCH 090/299] Update Developer Guide --- diagrams/ArchitechtureSequence.puml | 34 +++++++ diagrams/ArchitectureSequence.png | Bin 0 -> 16474 bytes diagrams/architecture.png | Bin 0 -> 25552 bytes docs/DeveloperGuide.md | 146 +++++++++++++++++++++++----- docs/architecture.png | Bin 0 -> 25552 bytes 5 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 diagrams/ArchitechtureSequence.puml create mode 100644 diagrams/ArchitectureSequence.png create mode 100644 diagrams/architecture.png create mode 100644 docs/architecture.png diff --git a/diagrams/ArchitechtureSequence.puml b/diagrams/ArchitechtureSequence.puml new file mode 100644 index 0000000000..83f327cfa0 --- /dev/null +++ b/diagrams/ArchitechtureSequence.puml @@ -0,0 +1,34 @@ +@startuml + +@startuml +Actor User + +User -> ui : "edit 1" +activate ui +ui -> logic : readCommand("edit 1") +activate logic + +logic -> model :execute(1) +activate model + +model -> logic +deactivate model + +logic -> storage : +activate storage + +storage -> storage : Save to file +activate storage +storage --> storage +deactivate storage + +storage --> logic +deactivate storage + +logic --> ui +deactivate logic + +ui--> user +deactivate ui +@enduml +@enduml \ No newline at end of file diff --git a/diagrams/ArchitectureSequence.png b/diagrams/ArchitectureSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..b95a34f83186ba339e89b6355dcfd6cdc1324ce7 GIT binary patch literal 16474 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 literal 0 HcmV?d00001 diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b968707d92..3420c5c779 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,7 +3,10 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFX ## Table of Contents 1. [Introduction](#introduction) -2. [Setting Up](#setting-up) +2. [Getting Started](#getting-started)
+2.1 [Prerequisites](#prerequisites)
+2.2 [Setting Up]()
+2.3 [Running The Program]()
3. [Design](#design)
3.1 [Architecture](#architecture)
3.2 [UI](#ui)
@@ -24,36 +27,130 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFX 5.1 [Product scope](#product-scope)
5.2 [User stories](#user-stories)
-## Introduction -NUSchedule is a Command-Line based application written in Java. It provides a simple -and intuitive way to keep track of commitments. This guide provides information on the Architecture -and system design of NUSchedule that will help developers, designers and software testers of NUSchedule. - -## Setting up -Step 1: __Fork__ the repo, and __clone__ the fork onto your computer. -
Step 2: Using IntelliJ IDEA (recommended), import the project as a Gradle project. - Ensure you have configured IntelliJ to use JDK 11. -
Step 3: Verify you have set the project up correctly by running `NuSchedule` and trying a - few commands. +## 1. Introduction +NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive +interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, +NUSchedule will prove itself to be the most efficient way to manage your commitments. + +This developer guide provides information on the architecture and design of the application, NUSchedule. This guide +provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful +to refer to even if you are already a contributor + + + +## 2.Getting Started +This section provides information to help you get NUSchedule up and running on your own computers. + +### Prerequisites +1. JDK 11 +2. Intellij IDEA + +### Setting Up +1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. +2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project +to close the existing project dialog +first). +3. Set up the correct JDK version for Gradle + 1. Click Configure > Project Defaults > Project Structure + 2. Click New… and set it to the directory of the JDK. +4. Click Import Project (or Open or Import in newer version of Intellij). +5. Locate the build.gradle file (not the root folder as you would do in a normal importing) and select it. Click OK. + If asked, choose to Open as Project (not Open as File). +6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK + being used for the project. ## Design This section describes the different components of the application and how each component interact with each other to run the program. ### Architecture -### UI -### Storage +![architecture](../diagrams/architecture.png) + +The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into +5 different components: +1. Main: Initializes the other components and connects them with each other. +2. UI: Manages the User Interface that the user interacts with. +3. Logic: Interprets user commands. +4. Storage: Reads data from and writes data to the hard disk. +5. Model: Stores the data the app uses in memory. + +__How the architecture components interact with each other__ +The sequence diagram below shows how each individual component interacts with each other when the user inputs a command. +![sequence](../diagrams/ArchitectureSequence.png) + +### UI + __API__:`UI.java` +The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, `showError`, `printNumEvent`, etc. + +The `UI` component executes user commands according to the Logic component. + +### Storage +__API__:`Storage.java` +The `Storage` component can save the list of event data in .txt format and read it back. ### Logic -### Events -### Location - +__API__:`Parser.java` +The `logic` component parses the user input and executes commands based on the given input. + 1. Parser reads the user input and returns a command to be executed. + 2. The command execution affects the EventList (e.g. clearing the list). + 3. The result passes back to the UI, which then displays relevant feedback to the user. + +### Model +__API__:`EventList.java` +The `Model` component stores an ArrayList, events, that represents the current list of events. ## Implementation -This section describes some noteworthy features of how each feature is implemented. +This section describes the implementation of some noteworthy features. ### Add events -### Clear events +This feature allows users to add events and relevant information about them (description, time and location) to the list +. There are three possible types of events that can be added: classes, assignments, and personal events. + +Given below is an example usage scenario: + +Step 1. The user launches the application to add a class to his schedule. The user executes +`class CS1010 Lecture /t 2020-05-05 10:00 /l LT27` to add a new class to the list. + +Step 2. The Parser class parses the input as a new class with description ‘CS1010 Lecture’, time ‘2020-05-05 at 10:00’, +and location ‘LT27’. + +Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. + +### Clear events +This feature allows users to completely delete the existing event information that is previously typed in by users. + +Given below is an example usage scenario: + +Step 1. The user launches the application and wants to delete everything previously stored by using `clear` command. + +Step 2. If there is no information stored before the user input the `clear` command, the user will be reminded about +that the list is already empty. + ### Edit events +This feature allows users to edit the information of events that was previously added. + +Given below is an example usage scenario: + +Step 1. The user launches the application and inputs a command to add one event. + +Step 2. The user realises that there was a mistake in the event added and decides to edit the task information using the +edit 1 command to edit the event that was added (index = 1 as it is the one and only event currently). + +Step 3. The Parser class parses the 'edit 1' command. The user enters a new event. + +Step 4. 'editCommand()' function replaces the original event with the edited one. + + ### Locate events +This feature allows users to add locations as part of the event information. If the place is located within the school, +additional information about the location will be provided such as nearest bus stops or buildings. If the place is a +bus stop, the buses available will be provided instead. + +Given below is an example usage scenario: + +Step 1. The user will add location name as the last piece of information when adding an event. + +Step 2. The LocationList has a method that searches for the place with the exact same name, if such a place is not +found, it will create a location and allocate it to be OutOfNUS. + ### Reminders ### Sort events ### View events @@ -78,9 +175,14 @@ __Target user profile:__ |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| -|v1.0|new user|see usage instructions|refer to them when I forget how to use the application| -|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| - +|1.0|busy individual|keep track of both personal and school activities|avoid clashing events +|1.0|freshman|know module details and lesson venues|be on time for my activities +|1.0|forgetful person|be reminded of the deadlines for my assignments|submit on time +|1.0|tutor|know the estimated time for my students to travel to their next class|pace my lesson suitably +|1.0|hardworking student|track how much time I have spent studying\allocate my time efficiently +|2.0|exchange student|know the optimal path to reach my next destination|avoid getting lost +|2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| +|2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately ## Non-Functional Requirements {Give non-functional requirements} diff --git a/docs/architecture.png b/docs/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..d24ae29b6963989a1d81431c8db7bed268ee534e GIT binary patch literal 25552 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 literal 0 HcmV?d00001 From 7637bbf04febc086b215ad109909270c863239c5 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Wed, 28 Oct 2020 14:28:05 +0800 Subject: [PATCH 091/299] added diagrams for location and locate (dg) --- docs/DeveloperGuide.md | 148 +++++++++++++------- docs/diagrams/Locate.jpg | Bin 0 -> 56693 bytes docs/diagrams/Location.jpeg | Bin 0 -> 93863 bytes src/main/java/command/LocateCommand.java | 5 +- src/main/java/command/ReminderCommand.java | 23 +++ src/main/java/locationlist/BusStopList.java | 1 - 6 files changed, 124 insertions(+), 53 deletions(-) create mode 100644 docs/diagrams/Locate.jpg create mode 100644 docs/diagrams/Location.jpeg create mode 100644 src/main/java/command/ReminderCommand.java diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b968707d92..a8a9fdc3b3 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -2,66 +2,116 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFXK3VgL6807x5ivZ5yJk/edit) ## Table of Contents -1. [Introduction](#introduction) -2. [Setting Up](#setting-up) -3. [Design](#design)
-3.1 [Architecture](#architecture)
-3.2 [UI](#ui)
-3.3 [Storage](#storage)
-3.4 [Logic](#logic)
-3.5 [Events](#events)
-3.6 [Locations](#locations)
-4. [Implementation](#implementation)
-4.1 [Add events](#add-events)
-4.2 [Clear events](#clear-events)
-4.3 [Edit events](#edit-events)
-4.4 [Locate events](#locate-events)
-4.5 [Reminders](#reminders)
-4.6 [Sort events](#sort-events)
-4.7 [View events](#view-events)
-4.8 [Summary of Features](#summary-of-features)
-5. [Documentation](#documentation)
-5.1 [Product scope](#product-scope)
-5.2 [User stories](#user-stories)
- -## Introduction +1. [Introduction](#1-introduction) +2. [Setting Up](#2-setting-up) +3. [Design](#3-design)
+3.1 [Architecture](#31-architecture)
+3.2 [UI](#32-ui)
+3.3 [Storage](#33-storage)
+3.4 [Logic](#34-logic)
+3.5 [Events](#35-events)
+3.6 [Location](#36-location)
+4. [Implementation](#4-implementation)
+4.1 [Add events](#41-add-events)
+4.2 [Clear events](#42-clear-events)
+4.3 [Edit events](#43-edit-events)
+4.4 [Locate](#44-locate)
+4.5 [Reminders](#45-reminders)
+4.6 [Sort events](#46-sort-events)
+4.7 [View events](#47-view-events)
+5. [Documentation](#5-documentation)
+5.1 [Product scope](#51-product-scope)
+5.2 [User stories](#52-user-stories)
+ +## 1. Introduction NUSchedule is a Command-Line based application written in Java. It provides a simple and intuitive way to keep track of commitments. This guide provides information on the Architecture and system design of NUSchedule that will help developers, designers and software testers of NUSchedule. -## Setting up +## 2. Setting up Step 1: __Fork__ the repo, and __clone__ the fork onto your computer. -
Step 2: Using IntelliJ IDEA (recommended), import the project as a Gradle project. - Ensure you have configured IntelliJ to use JDK 11. -
Step 3: Verify you have set the project up correctly by running `NuSchedule` and trying a - few commands. +
Step 2: Ensure that you have configures IntelliJ IDEA (recommended) or your preferred IDE to use JDK 11. +
Step 3: Import the project as a Gradle project. +
Step 4: Verify you have set the project up correctly by running `NuSchedule` and typing in a + few commands. -## Design +## 3. Design This section describes the different components of the application and how each component interact with each other to run the program. -### Architecture -### UI -### Storage -### Logic -### Events -### Location +### 3.1 Architecture +### 3.2 UI +__API:__ `UI.java`
-## Implementation -This section describes some noteworthy features of how each feature is implemented. +### 3.3 Storage +__API:__ `Storage.java`
-### Add events -### Clear events -### Edit events -### Locate events -### Reminders -### Sort events -### View events -### Summary of Features +### 3.4 Logic +__API:__ `Parser.java`
-## Documentation +### 3.5 Events +__API:__ `EventList.java`
-### Product scope +### 3.6 Location +![Location class diagram](diagrams/Location.jpeg) +*Figure 3.6.1 Class diagram for location component* + +__API:__ `LocationList.java`
+ +The `LocationList` is made up of an ArrayList of Locations, which is a type of variable that stores different information +for different types of location (eg. `Building`, `Hostel`, etc.). However, do note that any place that is +not within the list of saved locations will be saved as type `OutOfNUS`, and would not be saved into the `location.txt` +file. The location will still be part of the location list before the app closes, and it will also be +saved as part of the Event information. + +
There is a separate api for bus stops (`BusStopList.java`), which stores all available bus stops +and their information. Although the variable is declared in the main NUScheule class, it is only referenced +and not edited in any part of the program. + +
The `Location` component +* stores information about various types of locations +* prints the list of locations that is saved in the data file +* checks if a location is saved in the list and returns the location when asked + +## 4. Implementation +This section describes some noteworthy details of how each feature is implemented. + +### 4.1 Add events + +### 4.2 Clear events + +### 4.3 Edit events + +### 4.4 Locate +The `locate` command executes with the following steps: +Step 1. When the user type in `locate [input]`, the Parser class will extract the input from the command and call a +`LocateCommand` object. +* `input` will always be a String when passed into the command object. + +Step 2. `LocateCommand` will then try to convert the input into an integer, if possible. + +Step 3. If conversion is possible, the method will obtain the event at the given index and return its location +information. +* Try to catch `IndexOutOfBoundException` to check if the given index is within the range of the +event list. + +Step 4. If conversion is not possible, then it will check if the given string is a valid location. +* Returns the location if valid +* Prints an error message if invalid + +The sequence diagram below shows exactly which methods, from which classes, are called to obtain the required location. +![](diagrams/Locate.jpg) +*Figure 4.4.1 Sequence diagram for locate function* + +### 4.5 Reminders + +### 4.6 Sort events + +### 4.7 View events + +## 5. Documentation + +### 5.1 Product scope __Target user profile:__ * NUS student or staff * able to type quickly @@ -70,11 +120,11 @@ __Target user profile:__ * prefers using Command Line Interface (CLI) apps * prefers typing instead of mouse interactions -### Value proposition +### 5.2 Value proposition {Describe the value proposition: what problem does it solve?} -### User Stories +### 5.3 User Stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| diff --git a/docs/diagrams/Locate.jpg b/docs/diagrams/Locate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ff28257c95621b02c4650923d710b1b740697cd GIT binary patch literal 56693 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 JSuzJRzXPf}H$?yd literal 0 HcmV?d00001 diff --git a/docs/diagrams/Location.jpeg b/docs/diagrams/Location.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e0dd816f4f4fbd45701e674aa0d555f97fc7be07 GIT binary patch literal 93863 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≶eC1$avCj!y~P&#@gPs2!57+gSZ=E!XVui%v|PhC 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%0D+v@BfZA=l_ToNo>DH$o6L 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 MsKQXe%>Qo!0LUv*zW@LL literal 0 HcmV?d00001 diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 9648bcfff9..0fe03a60d8 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -32,9 +32,8 @@ public void execute(EventList events, LocationList locations, BusStopList busSto int eventNum; try { eventNum = Integer.parseInt(input) - 1; - Event event = events.get(eventNum); - Location location = event.getLocation(); - System.out.println(event.getDescription() + " is located at:"); + Location location = events.get(eventNum).getLocation(); + System.out.println(events.get(eventNum).getDescription() + " is located at:"); System.out.println(location); } catch (NumberFormatException e) { if (locations.checkValidLocation(input)) { diff --git a/src/main/java/command/ReminderCommand.java b/src/main/java/command/ReminderCommand.java new file mode 100644 index 0000000000..7b6ede57e6 --- /dev/null +++ b/src/main/java/command/ReminderCommand.java @@ -0,0 +1,23 @@ +package command; + +import eventlist.EventList; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +public class ReminderCommand extends Command { + /** + * Command to print list of events within the day when called. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + + } +} diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index 6434cbaa56..94759b933f 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -5,7 +5,6 @@ import java.util.ArrayList; public class BusStopList { - private static final String filePath = "data/bus_stops.txt"; private final ArrayList busStopList = new ArrayList<>(); public ArrayList getBusStopList() { From 6687bdcdf35f4630d672739ad455a14dff5f4272 Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 28 Oct 2020 22:06:45 +0800 Subject: [PATCH 092/299] Updated DG, added some diagrams --- docs/DeveloperGuide.md | 17 +++++++++++++++-- docs/diagrams/AddCommand.png | Bin 0 -> 43725 bytes docs/diagrams/AddCommand.puml | 16 ++++++++++++++++ docs/diagrams/LogicClass.png | Bin 0 -> 34588 bytes docs/diagrams/LogicClass.puml | 24 ++++++++++++++++++++++++ docs/diagrams/Ui.png | Bin 0 -> 14705 bytes docs/diagrams/Ui.puml | 14 ++++++++++++++ 7 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 docs/diagrams/AddCommand.png create mode 100644 docs/diagrams/AddCommand.puml create mode 100644 docs/diagrams/LogicClass.png create mode 100644 docs/diagrams/LogicClass.puml create mode 100644 docs/diagrams/Ui.png create mode 100644 docs/diagrams/Ui.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 6e10184c69..acfb8eb853 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -73,18 +73,27 @@ The sequence diagram below shows how each individual component interacts with ea ![sequence](../diagrams/ArchitectureSequence.png) ### 3.2 UI +![UI Class Diagram](diagrams/Ui.png) + +*Figure 3.2.1 Class diagram for UI component* + __API__:`UI.java` The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, `showError`, `printNumEvent`, etc. -The `UI` component executes user commands according to the Logic component. +The `UI` component reads user input using readCommand() and executes user commands according to the Logic component. ### 3.3 Storage __API__:`Storage.java` The `Storage` component can save the list of event data in .txt format and read it back. ### 3.4 Logic __API__:`Parser.java` + +![Logic Class Diagram](diagrams/LogicClass.png) + +*Figure 3.4.1 Class diagram for Logic component* + The `logic` component parses the user input and executes commands based on the given input. - 1. Parser reads the user input and returns a command to be executed. + 1. Parser reads the user input and returns a command to be executed by `NuSchedule`. 2. The command execution affects the EventList (e.g. clearing the list). 3. The result passes back to the UI, which then displays relevant feedback to the user. @@ -130,6 +139,10 @@ and location ‘LT27’. Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. +The sequence diagram below shows the process of adding a new event. +![AddCommand Sequence Diagram](diagrams/AddCommand.png) +*Figure 4.1.1 Sequence Diagram for add function* + ### 4.2 Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. diff --git a/docs/diagrams/AddCommand.png b/docs/diagrams/AddCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..25b7e2fffd3d8fb40b3d328eed90eefb19458e83 GIT binary patch literal 43725 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 UI ++ : add +UI --> NuSchedule -- : fullCommand +NuSchedule --> Parser ++ : parse(fullCommand) +Parser --> NuSchedule -- : parsed command +NuSchedule --> AddCommand ++ : execute() +AddCommand --> EventList ++ : events.addEvent() +EventList --> AddCommand -- : event +AddCommand --> UI ++ : ui.printMessage() +UI --> AddCommand -- : message +AddCommand --> NuSchedule -- : return + +@enduml \ No newline at end of file diff --git a/docs/diagrams/LogicClass.png b/docs/diagrams/LogicClass.png new file mode 100644 index 0000000000000000000000000000000000000000..da92d8fac9e06955c0ff470e18323e8a4d0247a9 GIT binary patch literal 34588 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 XYZCommand : creates > +parser --> eventlist +XYZCommand ..> eventlist + +XYZCommand -u|> command + +@enduml \ No newline at end of file diff --git a/docs/diagrams/Ui.png b/docs/diagrams/Ui.png new file mode 100644 index 0000000000000000000000000000000000000000..2564cddff77197725ae9b4abb6bbf165f417c810 GIT binary patch literal 14705 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ℑ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 NBrl^3t&}nj{vUu*>Qev! literal 0 HcmV?d00001 diff --git a/docs/diagrams/Ui.puml b/docs/diagrams/Ui.puml new file mode 100644 index 0000000000..00b8193183 --- /dev/null +++ b/docs/diagrams/Ui.puml @@ -0,0 +1,14 @@ +@startuml + +package ui{ +class UI { ++printGreetingMessage() ++printLine() ++printEventList() ++printLocationList() ++printHelp() ++showError() ++printExitMessage() +} + +@enduml \ No newline at end of file From dfe32eb12e05902be2f1604aa181bce4948f0452 Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 28 Oct 2020 23:25:08 +0800 Subject: [PATCH 093/299] Added tests for delete and find --- src/test/java/command/DeleteCommandTest.java | 20 ++++++++++++ src/test/java/command/FindCommandTest.java | 32 ++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/test/java/command/DeleteCommandTest.java create mode 100644 src/test/java/command/FindCommandTest.java diff --git a/src/test/java/command/DeleteCommandTest.java b/src/test/java/command/DeleteCommandTest.java new file mode 100644 index 0000000000..4c9f49b964 --- /dev/null +++ b/src/test/java/command/DeleteCommandTest.java @@ -0,0 +1,20 @@ +package command; + +import exception.DeleteException; +import exception.DeleteNumberFormatException; +import exception.UndefinedEventException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class DeleteCommandTest { + + @Test + void execute_InvalidIndexGiven_DeleteNumberFormatException() { + Assertions.assertThrows(DeleteNumberFormatException.class,() -> { + Command c = Parser.parse("delete f", null); + }); + } +} diff --git a/src/test/java/command/FindCommandTest.java b/src/test/java/command/FindCommandTest.java new file mode 100644 index 0000000000..3ec4b3c085 --- /dev/null +++ b/src/test/java/command/FindCommandTest.java @@ -0,0 +1,32 @@ +package command; + +import exception.DateFormatException; +import exception.EmptyFindDateException; +import exception.EmptyFindException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +public class FindCommandTest { + + @Test + void execute_NoDescriptionGiven_EmptyEventException() { + Assertions.assertThrows(EmptyFindException.class, () -> { + Command c = Parser.parse("find", null); + }); + } + + @Test + void execute_NoDateGiven_EmptyFindDateException() { + Assertions.assertThrows(EmptyFindDateException.class, () -> { + Command c = Parser.parse("date", null); + }); + } + + @Test + void execute_InvalidTimeDate_DateFormatException() { + Assertions.assertThrows(DateFormatException.class, () -> { + Command c = Parser.parse("date 2100", null); + }); + } +} From aa93b5768009006ddb4647a0cf772b37e3df23ba Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 28 Oct 2020 23:25:29 +0800 Subject: [PATCH 094/299] Implemented reminder function --- src/main/java/command/ReminderCommand.java | 23 +++++++++++++++++-- src/main/java/event/Class.java | 11 +++++++++ src/main/java/eventlist/EventList.java | 1 + .../exception/NoEventDateRemindException.java | 16 +++++++++++++ src/main/java/parser/Parser.java | 22 ++++++------------ 5 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 src/main/java/exception/NoEventDateRemindException.java diff --git a/src/main/java/command/ReminderCommand.java b/src/main/java/command/ReminderCommand.java index 7b6ede57e6..28563c99ad 100644 --- a/src/main/java/command/ReminderCommand.java +++ b/src/main/java/command/ReminderCommand.java @@ -1,12 +1,26 @@ package command; +import event.Event; import eventlist.EventList; +import exception.NoEventDateRemindException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import java.time.LocalDate; +import java.util.ArrayList; + +/** + * Represents the command call when the user wants a list of events within the day. + */ public class ReminderCommand extends Command { + private final LocalDate filterDate; + + public ReminderCommand (){ + filterDate = LocalDate.now(); + } + /** * Command to print list of events within the day when called. * @@ -17,7 +31,12 @@ public class ReminderCommand extends Command { * @param storage store the data. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { - + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NoEventDateRemindException { + ArrayList filteredEventList = events.filterDateWith(filterDate); + if (filteredEventList.size() == 0) { + throw new NoEventDateRemindException(); + } + ui.printFilteredEventList(filteredEventList); } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index f577845809..5924777de7 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -3,6 +3,7 @@ import location.Location; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Comparator; @@ -19,6 +20,16 @@ public Class(String description, Location location, LocalDateTime at) { this.at = at; } + /** + * Provides the date of the Class. + * + * @return the LocalDate get from LocalDateTime. + */ + @Override + public LocalDate getDate() { + return LocalDate.from(at); + } + /** * Convert the information about this class to a string that is to be stored in a file. * diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 59955f4352..ca16fcf984 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -112,6 +112,7 @@ public int getSize() { * Remove the event indicated by the user. */ public void remove(int eventIndex) { + assert events != null; events.remove(eventIndex); } diff --git a/src/main/java/exception/NoEventDateRemindException.java b/src/main/java/exception/NoEventDateRemindException.java new file mode 100644 index 0000000000..02ad84554b --- /dev/null +++ b/src/main/java/exception/NoEventDateRemindException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the exception happens when the user trying to find a Event with a certain date, + * but such Event does not exist in the list. + */ +public class NoEventDateRemindException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "Sorry, there are no events in the list for today."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 802c06a5a8..c4ee5dccc8 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,20 +1,7 @@ package parser; -import command.AddCommand; -import command.ClearCommand; -import command.Command; -import command.DeleteCommand; -import command.DoneCommand; -import command.EditCommand; -import command.ExitCommand; -import command.FindCommand; -import command.FindDateCommand; -import command.HelpCommand; -import command.LocateCommand; -import command.PrintFullListCommand; -import command.PrintLocationCommand; -import command.SortCommand; +import command.*; import event.Assignment; import event.PersonalEvent; @@ -77,6 +64,7 @@ public abstract class Parser { public static final String HELP = "help"; public static final String CLEAR = "clear"; public static final String SORT = "sort"; + public static final String REMIND = "reminder"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -129,6 +117,10 @@ public static Command parse(String fullCommand, LocationList locations) throws N } } + if (words[0].equals(REMIND)) { + return new ReminderCommand(); + } + int eventIndex;//to indicate what is the Event we are dealing with. may not be used. //this block deals with done command @@ -293,7 +285,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { throw new NoEventLocationException(); } - + try { timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) From 1b51133e3bd3ccaa51fd3d9835b82b9022d3f75b Mon Sep 17 00:00:00 2001 From: Brendan Date: Wed, 28 Oct 2020 23:34:15 +0800 Subject: [PATCH 095/299] Updated parser --- src/main/java/command/ReminderCommand.java | 2 +- src/main/java/parser/Parser.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/command/ReminderCommand.java b/src/main/java/command/ReminderCommand.java index 28563c99ad..0660aa7c0a 100644 --- a/src/main/java/command/ReminderCommand.java +++ b/src/main/java/command/ReminderCommand.java @@ -17,7 +17,7 @@ public class ReminderCommand extends Command { private final LocalDate filterDate; - public ReminderCommand (){ + public ReminderCommand() { filterDate = LocalDate.now(); } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index c4ee5dccc8..112864de88 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -1,7 +1,23 @@ package parser; +import command.AddCommand; +import command.ClearCommand; +import command.Command; +import command.DeleteCommand; +import command.DoneCommand; +import command.EditCommand; +import command.ExitCommand; +import command.FindCommand; +import command.FindDateCommand; +import command.HelpCommand; +import command.LocateCommand; +import command.PrintFullListCommand; +import command.PrintLocationCommand; +import command.ReminderCommand; +import command.SortCommand; -import command.*; +import event.Assignment; +import event.PersonalEvent; import event.Assignment; import event.PersonalEvent; From b397d41864a374daa0a0556b6d2b74635d018f8c Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 00:37:00 +0800 Subject: [PATCH 096/299] adds OnlineLocation and adjust related classes accrodingly. adds a compulsory end time for class, and optional end time for personal event --- src/main/java/event/Assignment.java | 12 +++- src/main/java/event/Class.java | 21 +++++-- src/main/java/event/Event.java | 14 ++++- src/main/java/event/PersonalEvent.java | 32 ++++++++-- src/main/java/location/OnlineLocation.java | 54 ++++++++++++++++ src/main/java/parser/Parser.java | 72 +++++++++++++--------- 6 files changed, 158 insertions(+), 47 deletions(-) create mode 100644 src/main/java/location/OnlineLocation.java diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index d99e881e73..96a706e9b3 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -2,6 +2,7 @@ import location.Location; +import location.OnlineLocation; import java.time.LocalDate; import java.time.LocalDateTime; @@ -21,7 +22,8 @@ public class Assignment extends Event { * @return the result string to be stored. */ public String fileString() { - return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + location.fileString(); + return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + (location != null ? + location.fileString() : link.fileString()); } public Assignment(String description, Location location, LocalDateTime by) { @@ -29,6 +31,11 @@ public Assignment(String description, Location location, LocalDateTime by) { this.by = by; } + public Assignment(String description, OnlineLocation location, LocalDateTime by) { + super(description, location); + this.by = by; + } + /** * Provides the date of the Assignment. * @@ -42,10 +49,9 @@ public LocalDate getDate() { * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [A][✘]a (by: 2020/02/20 08:00). */ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" - + "\n" + location; + + "\n" + (location != null ? location : link); } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index f577845809..84bde1e9af 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -2,21 +2,28 @@ import location.Location; +import location.OnlineLocation; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Comparator; /** * Represents the Class events. */ public class Class extends Event { protected LocalDateTime at; + protected LocalDateTime end; - public Class(String description, Location location, LocalDateTime at) { + public Class(String description, Location location, LocalDateTime at, LocalDateTime end) { super(description, location); + this.at = at; + this.end = end; + } + public Class(String description, OnlineLocation meeting, LocalDateTime at, LocalDateTime end) { + super(description, meeting); this.at = at; + this.end = end; } /** @@ -25,18 +32,20 @@ public Class(String description, Location location, LocalDateTime at) { * @return the result string to be stored. */ public String fileString() { - return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + location.fileString(); + return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + end + "//" + (location != null ? + location.fileString() : link.fileString()); } /** * Prepare the string to be printed in the list. * * @return the string required in a certain format. - * Example of the format: [C][Not Done]a (at: 2020/02/20). */ public String toString() { - return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" - + "\n" + location; + return "[C]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + + ")\n" + + "(end at: " + end.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + + "\n" + (location != null ? location : link); } } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 1b211ea140..10d1360b19 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -1,10 +1,11 @@ package event; import location.Location; +import location.OnlineLocation; + import java.util.Comparator; import java.time.LocalDate; -import java.util.Comparator; /** * Represents the event objects. @@ -17,14 +18,21 @@ public abstract class Event { protected String description; protected boolean isDone; - protected Location location;//to be implemented + protected Location location = null; + protected OnlineLocation link = null; - public Event(String description,Location location) { + public Event(String description, Location location) { this.description = description; this.isDone = false; this.location = location; } + public Event(String description, OnlineLocation location) { + this.description = description; + this.isDone = false; + this.link = location; + } + /** * Mark a Event's status as done. */ diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 197d931133..40ab182e44 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -2,6 +2,7 @@ import location.Location; +import location.OnlineLocation; import java.time.LocalDate; import java.time.LocalDateTime; @@ -10,11 +11,13 @@ /** - * Represents the Event Events. + * Represents the PersonalEvent Events. + * PersonalEvent may or may not have an end time. */ public class PersonalEvent extends Event { protected LocalDateTime at; + protected LocalDateTime end = null; /** * Convert the information about this personal event to a string that is to be stored in a file. @@ -22,7 +25,8 @@ public class PersonalEvent extends Event { * @return the result string to be stored */ public String fileString() { - return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + location.fileString(); + return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (location != null ? + location.fileString() : link.fileString()); } /** @@ -39,14 +43,32 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { this.at = at; } + public PersonalEvent(String description, Location location, LocalDateTime at, LocalDateTime end) { + super(description, location); + this.at = at; + this.end = end; + } + + public PersonalEvent(String description, OnlineLocation location, LocalDateTime at) { + super(description, location); + this.at = at; + } + + public PersonalEvent(String description, OnlineLocation location, LocalDateTime at, LocalDateTime end) { + super(description, location); + this.at = at; + this.end = end; + } + /** * Prepare the string to be printed in the list. * - * @return the string required in a certain format - * Example of the format: [P][✘]a (at: 2020/02/20 08:00) + * @return the string required in a certain format。 */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" - + "\n" + location; + + (end != null ? "\n(end at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : + null) + + "\n" + (location != null ? location : link); } } diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java new file mode 100644 index 0000000000..1054d951ea --- /dev/null +++ b/src/main/java/location/OnlineLocation.java @@ -0,0 +1,54 @@ +package location; + +/** + * Virtual location is also location! + * This class represents the online meetings (e.g. zoom sessions) for people to attend, or the link to submit + * assignment. + * This format should be /o url /p pwd, or /o url, since not all sessions need a password, and the submission link + * does not require a password. + */ +public class OnlineLocation { + private String link; + private String password; + + /** + * the constructor of the object if the meeting does not need pwd. + * + * @param link the url of the online meeting + */ + public OnlineLocation(String link) { + assert link != null; + this.link = link; + } + + /** + * the constructor of the object if the meeting needs pwd. + * + * @param link the url of the online meeting + * @param pwd the password of the online meeting + */ + public OnlineLocation(String link, String pwd) { + assert link != null; + assert pwd != null; + this.link = link; + this.password = pwd; + } + + /** + * Returns the details of the online location. + * + * @return the link of the location. If there is password, return the password also. + */ + public String toString() { + return "\nmeeting link:" + link + (password != null ? " password: " + password : null); + } + + /** + * Returns the details of the location to be printed in a file. + * + * @return the link of the meeting. If there is password, return the password also. + */ + public String fileString() { + return link + (password != null ? "//" + password : null); + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 802c06a5a8..a572137a6c 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -77,6 +77,9 @@ public abstract class Parser { public static final String HELP = "help"; public static final String CLEAR = "clear"; public static final String SORT = "sort"; + public static final String END_TIME_MARKER = "/et"; + public static final String ONLINE_LOCATION_MARKER = "/o"; + public static final String PASSWORD_MARKER = "/p"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -105,6 +108,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N String[] words = fullCommand.split(SINGLE_SPACE); + //this block deals with locate command if (words[0].equals(LOCATE_EVENT)) { return new LocateCommand(words[1]); } @@ -176,11 +180,18 @@ public static Command parse(String fullCommand, LocationList locations) throws N //these variables are used by either Edit or Add //the position of /t - int timeDividerPosition; + int startTimeDividerPosition; //the position of the space when the user enters a date time in the format yyyy-mm-dd HH:mm + //may use twice if the end time is needed int timeDivider; + //the position of /et + int endTimeDividerPosition; //the position of /l int locationDividerPosition; + //the position of /o + int onlineLocationDividerPosition; + //the position of /p + int pwdDividerPosition; String dateTime; Location location; @@ -202,27 +213,28 @@ public static Command parse(String fullCommand, LocationList locations) throws N } //the following part is almost the same as AddCommand, but returns EditCommand - timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); + endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + onlineLocationDividerPosition = fullCommand.indexOf(ONLINE_LOCATION_MARKER); + pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); - switch (words[2]) { - case ASSIGNMENT: - case CLASS: - case PERSONAL_EVENT: - if (timeDividerPosition == -1) { + if (words[2].equals(ASSIGNMENT) || words[2].equals(CLASS) || words[2].equals(PERSONAL_EVENT)) { + if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } - if (locationDividerPosition == -1) { + if (locationDividerPosition == -1 && onlineLocationDividerPosition == -1) { throw new NoEventLocationException(); } + int prefixLength = words[0].length() + words[1].length() + words[2].length(); - if (fullCommand.substring(prefixLength, timeDividerPosition).isBlank()) { + if (fullCommand.substring(prefixLength, startTimeDividerPosition).isBlank()) { throw new EmptyEventException(); } - if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } @@ -231,33 +243,32 @@ public static Command parse(String fullCommand, LocationList locations) throws N } try { - timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[2]) { case ASSIGNMENT: return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case CLASS: return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case PERSONAL_EVENT: return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); default: break; } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - break; - default: - throw new WrongCommandException(); - } + } else throw new WrongCommandException(); + } //this block deals with add command @@ -268,13 +279,13 @@ public static Command parse(String fullCommand, LocationList locations) throws N case ASSIGNMENT: case CLASS: case PERSONAL_EVENT: - timeDividerPosition = fullCommand.indexOf(TIME_MARKER); + startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); if (fullCommand.substring(words[0].length()).isBlank()) { throw new EmptyEventException(); } - if (timeDividerPosition == -1) { + if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } @@ -282,11 +293,11 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new NoEventLocationMarkerException(); } - if (fullCommand.substring(words[0].length(), timeDividerPosition).isBlank()) { + if (fullCommand.substring(words[0].length(), startTimeDividerPosition).isBlank()) { throw new EmptyEventException(); } - if (fullCommand.substring(timeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } @@ -295,22 +306,23 @@ public static Command parse(String fullCommand, LocationList locations) throws N } try { - timeDivider = fullCommand.substring(timeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(timeDividerPosition + 3, timeDividerPosition + 3 + timeDivider) + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + dateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + "T" - + fullCommand.substring(timeDividerPosition + 3 + timeDivider + 1, + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, locationDividerPosition - 1); location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[0]) { case ASSIGNMENT: return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); case CLASS: return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); case PERSONAL_EVENT: return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - timeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); + startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); default: break; } From fdfd9fb0d4b95f4217aa0c5627140867b5456a1c Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 01:45:30 +0800 Subject: [PATCH 097/299] Updates Parser for the changes --- .../exception/NoEndTimeClassException.java | 15 + src/main/java/parser/Parser.java | 437 ++++++++++++++---- 2 files changed, 373 insertions(+), 79 deletions(-) create mode 100644 src/main/java/exception/NoEndTimeClassException.java diff --git a/src/main/java/exception/NoEndTimeClassException.java b/src/main/java/exception/NoEndTimeClassException.java new file mode 100644 index 0000000000..f291e98084 --- /dev/null +++ b/src/main/java/exception/NoEndTimeClassException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represent the user want to input a class without give it an ending time. + */ +public class NoEndTimeClassException extends ClassException { + /** + * The message to be printed. + * @return the message. + */ + @Override + public String getMessage() { + return "Every class should end at some time. Give it an ending, please. Mark it by \"/e\"."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index a572137a6c..8a72f4f7b4 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -28,6 +28,7 @@ import exception.EmptyFindDateException; import exception.EmptyFindException; import exception.InvalidSortCriteriaException; +import exception.NoEndTimeClassException; import exception.NoEventLocationException; import exception.NoEventLocationMarkerException; import exception.NoSortCriteriaException; @@ -37,9 +38,9 @@ import location.Hostel; import location.LectureTheatre; import location.Location; +import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; -import ui.UI; import event.Class; import exception.NoEventTimeMarkerException; import exception.TimeFormatException; @@ -73,11 +74,10 @@ public abstract class Parser { public static final String SINGLE_SPACE = " "; public static final String LOCATION_MARKER = "/l"; public static final String EVENT_FIND_DATE = "date"; - public static final String EDIT_INSTRUCTION = "Enter new event:"; public static final String HELP = "help"; public static final String CLEAR = "clear"; public static final String SORT = "sort"; - public static final String END_TIME_MARKER = "/et"; + public static final String END_TIME_MARKER = "/e"; public static final String ONLINE_LOCATION_MARKER = "/o"; public static final String PASSWORD_MARKER = "/p"; @@ -192,8 +192,15 @@ public static Command parse(String fullCommand, LocationList locations) throws N int onlineLocationDividerPosition; //the position of /p int pwdDividerPosition; - String dateTime; + String startDateTime; Location location; + String endDateTime; + + startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); + endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); + locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + onlineLocationDividerPosition = fullCommand.indexOf(ONLINE_LOCATION_MARKER); + pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); //this block deals with edit command //this block will change fullCommand, but this does not affect the later block since @@ -213,11 +220,6 @@ public static Command parse(String fullCommand, LocationList locations) throws N } //the following part is almost the same as AddCommand, but returns EditCommand - startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); - endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); - onlineLocationDividerPosition = fullCommand.indexOf(ONLINE_LOCATION_MARKER); - pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); if (words[2].equals(ASSIGNMENT) || words[2].equals(CLASS) || words[2].equals(PERSONAL_EVENT)) { if (startTimeDividerPosition == -1) { @@ -234,38 +236,185 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new EmptyEventException(); } - if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { - throw new NoEventTimeException(); + if (locationDividerPosition != -1) { + if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + throw new NoEventTimeException(); + } + if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } + } else { + if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1). + isBlank()) { + throw new NoEventTimeException(); + } + if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } } - - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); + //this deals with the event holding offline + if (locationDividerPosition != -1) { + try { + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); + + switch (words[2]) { + case ASSIGNMENT: + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), + eventIndex); + case CLASS: + if (endTimeDividerPosition == -1) { + throw new NoEndTimeClassException(); + } + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime)), + eventIndex); + case PERSONAL_EVENT: + if (endTimeDividerPosition == -1) { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), + eventIndex); + } else { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime)), + eventIndex); + } + default: + break; + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } } - - try { - timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); - - location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); - switch (words[2]) { - case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); - case CLASS: - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); - case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); - default: - break; + //this deals with the event holding offline + else { + try { + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + OnlineLocation virtualLocation; + if (pwdDividerPosition == -1) { + virtualLocation = + new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); + } else { + virtualLocation = + new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3, + pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); + } + + switch (words[2]) { + case ASSIGNMENT: + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), + eventIndex); + case CLASS: + if (endTimeDividerPosition == -1) { + throw new NoEndTimeClassException(); + } + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime)), + eventIndex); + case PERSONAL_EVENT: + if (endTimeDividerPosition == -1) { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime)), + eventIndex); + } else { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = + fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime)), + eventIndex); + } + default: + break; + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); } - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); + } } else throw new WrongCommandException(); @@ -275,64 +424,194 @@ public static Command parse(String fullCommand, LocationList locations) throws N //we shall check that the user input is not meant for any other command beforehand //because the default block will throw an exception. // i.e. when this block is entered, the parser will not go to any other blocks - switch (words[0]) { - case ASSIGNMENT: - case CLASS: - case PERSONAL_EVENT: - startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); - if (fullCommand.substring(words[0].length()).isBlank()) { - throw new EmptyEventException(); - } + + if (words[0].equals(ASSIGNMENT) || words[0].equals(CLASS) || words[0].equals(PERSONAL_EVENT)) { if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } - if (locationDividerPosition == -1) { - throw new NoEventLocationMarkerException(); + if (locationDividerPosition == -1 && onlineLocationDividerPosition == -1) { + throw new NoEventLocationException(); } if (fullCommand.substring(words[0].length(), startTimeDividerPosition).isBlank()) { throw new EmptyEventException(); } - if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { - throw new NoEventTimeException(); + if (locationDividerPosition != -1) { + if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + throw new NoEventTimeException(); + } + if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } + } else { + if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1). + isBlank()) { + throw new NoEventTimeException(); + } + if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { + throw new NoEventLocationException(); + } } - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); + //this deals with the event holding offline + if (locationDividerPosition != -1) { + try { + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); + + switch (words[0]) { + case ASSIGNMENT: + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + case CLASS: + if (endTimeDividerPosition == -1) { + throw new NoEndTimeClassException(); + } + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + case PERSONAL_EVENT: + if (endTimeDividerPosition == -1) { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + } else { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + locationDividerPosition - 1); + + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } + default: + break; + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); + } } + //this deals with the event holding offline + else { + try { + timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + OnlineLocation virtualLocation; + if (pwdDividerPosition == -1) { + virtualLocation = + new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); + } else { + virtualLocation = + new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3, + pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); + } - try { - timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); - dateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); - location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); - switch (words[0]) { - case ASSIGNMENT: - return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); - case CLASS: - return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); - case PERSONAL_EVENT: - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(dateTime))); - default: - break; + switch (words[2]) { + case ASSIGNMENT: + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime))); + case CLASS: + if (endTimeDividerPosition == -1) { + throw new NoEndTimeClassException(); + } + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + case PERSONAL_EVENT: + if (endTimeDividerPosition == -1) { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime))); + } else { + startDateTime = fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + + timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + + endDateTime = fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, + onlineLocationDividerPosition - 1); + + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } + default: + break; + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new TimeFormatException(); } - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); + } - break; - default: - throw new WrongCommandException(); - } + } else throw new WrongCommandException(); assert false;//nothing should reach here throw new UnknownErrorException(); From f7e35566d704cb6f3a89d16cf194b7c1b347390c Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 02:33:32 +0800 Subject: [PATCH 098/299] Updates Storage --- src/main/java/location/OnlineLocation.java | 4 +- src/main/java/parser/Parser.java | 18 +++--- src/main/java/storage/Storage.java | 68 +++++++++++++++++++--- 3 files changed, 68 insertions(+), 22 deletions(-) diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 1054d951ea..686d9dc63a 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -8,7 +8,7 @@ * does not require a password. */ public class OnlineLocation { - private String link; + private final String link; private String password; /** @@ -49,6 +49,6 @@ public String toString() { * @return the link of the meeting. If there is password, return the password also. */ public String fileString() { - return link + (password != null ? "//" + password : null); + return "online//"+link + (password != null ? "//" + password : null); } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 8a72f4f7b4..9609b2cc87 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -16,23 +16,27 @@ import command.PrintLocationCommand; import command.SortCommand; import event.Assignment; +import event.Class; import event.PersonalEvent; - - import exception.DateFormatException; import exception.DeleteNumberFormatException; import exception.DoneNumberFormatException; import exception.EmptyDeleteException; import exception.EmptyDoneException; +import exception.EmptyEventException; import exception.EmptyEventIndexException; import exception.EmptyFindDateException; import exception.EmptyFindException; import exception.InvalidSortCriteriaException; import exception.NoEndTimeClassException; import exception.NoEventLocationException; -import exception.NoEventLocationMarkerException; +import exception.NoEventTimeException; +import exception.NoEventTimeMarkerException; import exception.NoSortCriteriaException; +import exception.NuScheduleException; +import exception.TimeFormatException; import exception.UnknownErrorException; +import exception.WrongCommandException; import exception.WrongEditFormatException; import location.Building; import location.Hostel; @@ -41,14 +45,6 @@ import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; -import event.Class; -import exception.NoEventTimeMarkerException; -import exception.TimeFormatException; -import exception.EmptyEventException; -import exception.NuScheduleException; -import exception.NoEventTimeException; -import exception.WrongCommandException; - import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 068f2daeba..e5a62977e1 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -14,6 +14,7 @@ import location.Location; import location.LocationType; +import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; import parser.Parser; @@ -33,6 +34,7 @@ */ public class Storage { public static final String REGEX_IN_FILE = "//"; + public static final String ONLINE = "online"; private final String filePath; /** @@ -91,7 +93,7 @@ public void writeFile(ArrayList events) throws WritingFileException { * @throws LoadingException represents the Events is not correctly created */ public ArrayList loadEvents(LocationList locations) throws LoadingException { - ArrayList events = new ArrayList(); + ArrayList events = new ArrayList<>(); File dataFile = new File(filePath); try { Scanner s = new Scanner(dataFile); @@ -99,16 +101,35 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti String[] words = s.nextLine().split(REGEX_IN_FILE); switch (words[0]) { case "C": - events.add(new Class(words[2], Parser.parseLocation(words[4], locations), - LocalDateTime.parse(words[3]))); + try { + if (!words[5].equals(ONLINE)) { + events.add(new Class(words[2], Parser.parseLocation(words[5], locations), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else { + if (words.length >= 8) { + events.add(new Class(words[2], new OnlineLocation(words[6], words[7]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else { + events.add(new Class(words[2], new OnlineLocation(words[6]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } if (Integer.parseInt(words[1]) == 1) { events.get(events.size() - 1).markAsDone(); } break; case "A": try { - events.add(new Assignment(words[2], Parser.parseLocation(words[4], locations), - LocalDateTime.parse(words[3]))); + if (!words[4].equals(ONLINE)) { + events.add(new Assignment(words[2], Parser.parseLocation(words[4], locations), + LocalDateTime.parse(words[3]))); + } else { + events.add(new Assignment(words[2], new OnlineLocation(words[5]), + LocalDateTime.parse(words[3]))); + } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } @@ -118,8 +139,37 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti break; case "P": try { - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4], locations), - LocalDateTime.parse(words[3]))); + switch (words.length) { + case 5: + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4], locations), + LocalDateTime.parse(words[3]))); + break; + case 6: + if (!words[4].equals(ONLINE)) { + events.add(new PersonalEvent(words[2], Parser.parseLocation(words[5], locations), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else { + events.add(new PersonalEvent(words[2], new OnlineLocation(words[5]), + LocalDateTime.parse(words[3]))); + } + break; + case 7: + if (words[4].equals(ONLINE)) { + events.add(new PersonalEvent(words[2], new OnlineLocation(words[5], words[6]), + LocalDateTime.parse(words[3]))); + } else if (words[5].equals(ONLINE)) { + events.add(new PersonalEvent(words[2], new OnlineLocation(words[6]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else throw new LoadingException(); + break; + case 8: + events.add(new PersonalEvent(words[2], new OnlineLocation(words[6], words[7]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + break; + default: + throw new LoadingException(); + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } @@ -154,7 +204,7 @@ public void loadBusStopData(ArrayList busStopList) { System.out.println(f.getName() + " not found: " + e.getMessage()); return; } - assert s != null; + while (s.hasNext()) { String input = s.nextLine(); String[] split = input.split(":", 2); @@ -172,7 +222,7 @@ public void loadBusStopData(ArrayList busStopList) { */ public void loadLocationData(ArrayList locationList) { File f = new File("./data/locations.txt"); - Scanner s = null; + Scanner s; try { s = new Scanner(f); } catch (FileNotFoundException e) { From bae3a421514b8e597c835bd204ad20ccf84940c9 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 14:15:09 +0800 Subject: [PATCH 099/299] Updates UI Parser and deals with the overlaping events --- src/main/java/command/AddCommand.java | 1 + src/main/java/event/Class.java | 28 ++++++++++++++++++++ src/main/java/event/Event.java | 9 +++++++ src/main/java/event/PersonalEvent.java | 18 +++++++++++++ src/main/java/eventlist/EventList.java | 36 ++++++++++++++++++++++++++ src/main/java/ui/UI.java | 23 +++++++++++++++- 6 files changed, 114 insertions(+), 1 deletion(-) diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 1e2c33d7fd..61084e95dd 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -38,6 +38,7 @@ public AddCommand(Event event) { @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws WritingFileException { + ui.printConflictEvents(events.checkConflictTiming(event)); events.addEvent(event); ui.printAddEventMessage(event); ui.printNumEvent(events.getSize()); diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 84bde1e9af..b5a9f069e5 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -4,6 +4,7 @@ import location.Location; import location.OnlineLocation; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -36,6 +37,33 @@ public String fileString() { location.fileString() : link.fileString()); } + /** + * Provides the date of the class. + * + * @return the LocalDate get from LocalDateTime. + */ + public LocalDate getDate() { + return LocalDate.from(at); + } + + /** + * Provides the date time of the class. + * + * @return the LocalDateTime get from LocalDateTime. + */ + public LocalDateTime getStartDateTime() { + return LocalDateTime.from(at); + } + + /** + * Provides the end date time of the class. + * + * @return the LocalDateTime get from LocalDateTime. + */ + public LocalDateTime getEndDateTime() { + return LocalDateTime.from(end); + } + /** * Prepare the string to be printed in the list. * diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 10d1360b19..f5b0ff1aaa 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -3,6 +3,7 @@ import location.Location; import location.OnlineLocation; +import java.time.LocalDateTime; import java.util.Comparator; import java.time.LocalDate; @@ -70,6 +71,14 @@ public LocalDate getDate() { return null; } + public LocalDateTime getStartDateTime() { + return null; + } + + public LocalDateTime getEndDateTime() { + return null; + } + /** * Provides the String variable of the description of this Event. * diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 40ab182e44..1a88b2cf05 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -60,6 +60,24 @@ public PersonalEvent(String description, OnlineLocation location, LocalDateTime this.end = end; } + /** + * Provides the date time of the personal event. + * + * @return the LocalDateTime get from LocalDateTime. + */ + public LocalDateTime getStartDateTime() { + return LocalDateTime.from(at); + } + + /** + * Provides the end date time of the personal event. + * + * @return the LocalDateTime get from LocalDateTime. + */ + public LocalDateTime getEndDateTime() { + return LocalDateTime.from(end); + } + /** * Prepare the string to be printed in the list. * diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 59955f4352..74153839d4 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -1,11 +1,13 @@ package eventlist; +import event.Assignment; import event.Event; import exception.EmptyEventListException; import exception.UndefinedEventException; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; @@ -166,4 +168,38 @@ public void clearEvents() throws EmptyEventListException { events.clear(); } } + + /** + * Checks whether there is any conflicting events in terms of timing. + * + * @param event the new added event. + * @return the filtered event arraylist. If there is no conflict, return null. + */ + public ArrayList checkConflictTiming(Event event) { + LocalDateTime eventStartDateTime = event.getStartDateTime(); + LocalDateTime eventEndDateTime = event.getEndDateTime(); + ArrayList filteredEventList; + + filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getEndDateTime() != null) + .filter(s -> ((!(s instanceof Assignment)) + && (s.getStartDateTime().isBefore(eventStartDateTime) + || s.getStartDateTime().isEqual(eventStartDateTime)) + && (s.getEndDateTime().isAfter(eventStartDateTime) + || s.getEndDateTime().isEqual(eventStartDateTime)))) + .collect(toList()); + if (eventEndDateTime != null) { + //this considers when the events already in the list lie in the duration of the new event + ArrayList filteredEventList2 = (ArrayList) events.stream() + .filter(s -> ((!(s instanceof Assignment)) + && (s.getStartDateTime().isAfter(eventStartDateTime) + || s.getStartDateTime().isEqual(eventStartDateTime)) + && (s.getStartDateTime().isBefore(eventEndDateTime) + || s.getStartDateTime().isEqual(eventEndDateTime)))) + .collect(toList()); + filteredEventList.addAll(filteredEventList2); + } + + return filteredEventList; + } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 348af909ec..a5f3a0417d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -245,7 +245,8 @@ public void printHelp() { System.out.println("list - view all events added"); System.out.println("clear - clear all events"); System.out.println("There will be more upcoming features in later versions."); - System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4.github.io/tp/"); + System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4" + + ".github.io/tp/"); } /** @@ -254,5 +255,25 @@ public void printHelp() { public void printClearEventsSuccessful() { System.out.println("Clear successful. The list is now empty."); } + + /** + * Prints all the Events of the filtered list with labels, based on the input list. + * Called for printing the events that having conflict timing with the new event added. + * + * @param conflictEvents an ArrayList of Events to be printed one by one. + */ + public void printConflictEvents(ArrayList conflictEvents) { + if (conflictEvents == null) { + return; + } + int numPrintedEvents = 0; + System.out.println("You have some events that happen concurrently. Please prepared for multi-thread. " + + "\n" + + "Here are the Events in your list that have overlaps with your newly added event:"); + for (Event event : conflictEvents) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + event.toString()); + } + } } From 3d309865d3719bac8537a5b730e395f975587f7f Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 14:30:48 +0800 Subject: [PATCH 100/299] Fix content page and table --- docs/diagrams/ArchitechtureSequence.puml | 34 +++++++++++++++++++++++ docs/diagrams/ArchitectureSequence.png | Bin 0 -> 16474 bytes docs/diagrams/architecture.png | Bin 0 -> 25552 bytes 3 files changed, 34 insertions(+) create mode 100644 docs/diagrams/ArchitechtureSequence.puml create mode 100644 docs/diagrams/ArchitectureSequence.png create mode 100644 docs/diagrams/architecture.png diff --git a/docs/diagrams/ArchitechtureSequence.puml b/docs/diagrams/ArchitechtureSequence.puml new file mode 100644 index 0000000000..83f327cfa0 --- /dev/null +++ b/docs/diagrams/ArchitechtureSequence.puml @@ -0,0 +1,34 @@ +@startuml + +@startuml +Actor User + +User -> ui : "edit 1" +activate ui +ui -> logic : readCommand("edit 1") +activate logic + +logic -> model :execute(1) +activate model + +model -> logic +deactivate model + +logic -> storage : +activate storage + +storage -> storage : Save to file +activate storage +storage --> storage +deactivate storage + +storage --> logic +deactivate storage + +logic --> ui +deactivate logic + +ui--> user +deactivate ui +@enduml +@enduml \ No newline at end of file diff --git a/docs/diagrams/ArchitectureSequence.png b/docs/diagrams/ArchitectureSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..b95a34f83186ba339e89b6355dcfd6cdc1324ce7 GIT binary patch literal 16474 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 literal 0 HcmV?d00001 From cdeeeb5d6a221d44ee3ffa6e0ff55c2210cf22ec Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 14:31:06 +0800 Subject: [PATCH 101/299] Fix content page and table --- diagrams/ArchitechtureSequence.puml | 34 ---------------------------- diagrams/ArchitectureSequence.png | Bin 16474 -> 0 bytes diagrams/architecture.png | Bin 25552 -> 0 bytes docs/DeveloperGuide.md | 15 +++++++----- 4 files changed, 9 insertions(+), 40 deletions(-) delete mode 100644 diagrams/ArchitechtureSequence.puml delete mode 100644 diagrams/ArchitectureSequence.png delete mode 100644 diagrams/architecture.png diff --git a/diagrams/ArchitechtureSequence.puml b/diagrams/ArchitechtureSequence.puml deleted file mode 100644 index 83f327cfa0..0000000000 --- a/diagrams/ArchitechtureSequence.puml +++ /dev/null @@ -1,34 +0,0 @@ -@startuml - -@startuml -Actor User - -User -> ui : "edit 1" -activate ui -ui -> logic : readCommand("edit 1") -activate logic - -logic -> model :execute(1) -activate model - -model -> logic -deactivate model - -logic -> storage : -activate storage - -storage -> storage : Save to file -activate storage -storage --> storage -deactivate storage - -storage --> logic -deactivate storage - -logic --> ui -deactivate logic - -ui--> user -deactivate ui -@enduml -@enduml \ No newline at end of file diff --git a/diagrams/ArchitectureSequence.png b/diagrams/ArchitectureSequence.png deleted file mode 100644 index b95a34f83186ba339e89b6355dcfd6cdc1324ce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16474 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 diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index acfb8eb853..e05b1b5f79 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,9 +1,10 @@ # Developer Guide -google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFXK3VgL6807x5ivZ5yJk/edit) ## Table of Contents 1. [Introduction](#1-introduction) -2. [Setting Up](#2-setting-up) +2. [Getting Started](#2-getting-started)
+2.1 [Prerequisites](#21-prerequisites)
+2.2 [Setting Up](#22-setting-up)
3. [Design](#3-design)
3.1 [Architecture](#31-architecture)
3.2 [UI](#32-ui)
@@ -21,7 +22,8 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFX 4.7 [View events](#47-view-events)
5. [Documentation](#5-documentation)
5.1 [Product scope](#51-product-scope)
-5.2 [User stories](#52-user-stories)
+5.2 [Value Proposition](#52-value-proposition)
+5.3 [User Stories](#53-user-stories)
## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive @@ -30,7 +32,7 @@ NUSchedule will prove itself to be the most efficient way to manage your commitm This developer guide provides information on the architecture and design of the application, NUSchedule. This guide provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful -to refer to even if you are already a contributor +to refer to even if you are already a contributor. ## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. @@ -58,7 +60,7 @@ This section describes the different components of the application and how each each other to run the program. ### 3.1 Architecture -![architecture](../diagrams/architecture.png) +![architecture](diagrams/architecture.png) The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into 5 different components: @@ -70,7 +72,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch __How the architecture components interact with each other__ The sequence diagram below shows how each individual component interacts with each other when the user inputs a command. -![sequence](../diagrams/ArchitectureSequence.png) +![sequence](diagrams/ArchitectureSequence.png) ### 3.2 UI ![UI Class Diagram](diagrams/Ui.png) @@ -222,6 +224,7 @@ __Target user profile:__ ### 5.3 User Stories + |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| |1.0|busy individual|keep track of both personal and school activities|avoid clashing events From 8161864a29384865a71862a4bea5e5c992bea744 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 15:17:50 +0800 Subject: [PATCH 102/299] Add testing for SortCommand and fix EditCommand --- .../NoEditEventDescriptionException.java | 8 ++++++ src/main/java/parser/Parser.java | 11 +++++--- src/test/java/command/EditCommandTest.java | 14 +++++++--- src/test/java/command/SortCommandTest.java | 27 +++++++++++++++++++ 4 files changed, 53 insertions(+), 7 deletions(-) create mode 100644 src/main/java/exception/NoEditEventDescriptionException.java create mode 100644 src/test/java/command/SortCommandTest.java diff --git a/src/main/java/exception/NoEditEventDescriptionException.java b/src/main/java/exception/NoEditEventDescriptionException.java new file mode 100644 index 0000000000..e21798cb13 --- /dev/null +++ b/src/main/java/exception/NoEditEventDescriptionException.java @@ -0,0 +1,8 @@ +package exception; + +public class NoEditEventDescriptionException extends ClassException{ + @Override + public String getMessage() { + return "Please provide the details for the new event to be added."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 112864de88..db221af554 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -31,6 +31,7 @@ import exception.EmptyFindDateException; import exception.EmptyFindException; import exception.InvalidSortCriteriaException; +import exception.NoEditEventDescriptionException; import exception.NoEventLocationException; import exception.NoEventLocationMarkerException; import exception.NoSortCriteriaException; @@ -213,6 +214,10 @@ public static Command parse(String fullCommand, LocationList locations) throws N timeDividerPosition = fullCommand.indexOf(TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); + if (words.length == 2) { + throw new NoEditEventDescriptionException(); + } + switch (words[2]) { case ASSIGNMENT: case CLASS: @@ -248,13 +253,13 @@ public static Command parse(String fullCommand, LocationList locations) throws N location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[2]) { case ASSIGNMENT: - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 3, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case CLASS: - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Class(fullCommand.substring(prefixLength + 3, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); case PERSONAL_EVENT: - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 3, timeDividerPosition - 1), location, LocalDateTime.parse(dateTime)), eventIndex); default: break; diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 4624b5d6e5..61603eb01c 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -4,6 +4,7 @@ import exception.CreatingFileException; import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; +import exception.NoEditEventDescriptionException; import exception.UndefinedEventException; import exception.WrongEditFormatException; import locationlist.BusStopList; @@ -20,7 +21,7 @@ class EditCommandTest { @Test - void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleException { + void execute_NoIndexSpecified_emptyEventIndexException() throws NuScheduleException { Assertions.assertThrows(EmptyEventIndexException.class, () -> { Command d = Parser.parse("edit", null); @@ -29,14 +30,14 @@ void execute_noIndexSpecified_emptyEventIndexException() throws NuScheduleExcept } @Test - void execute_inputIsNotInteger_WrongEditFormatException() { + void execute_InputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { Command c = Parser.parse("edit c", null); }); } @Test - void execute_indexOutOfBounds_UndefinedEventException() throws CreatingFileException { + void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileException { Storage storage = new Storage("data/events.txt"); LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); @@ -46,5 +47,10 @@ void execute_indexOutOfBounds_UndefinedEventException() throws CreatingFileExcep }); } - + @Test + void execute_NoEditDescriptionProvided_NoEditEventDescriptionException() { + Assertions.assertThrows(NoEditEventDescriptionException.class, () -> { + Command c = Parser.parse("edit 1", null); + }); + } } \ No newline at end of file diff --git a/src/test/java/command/SortCommandTest.java b/src/test/java/command/SortCommandTest.java new file mode 100644 index 0000000000..3196d9be6c --- /dev/null +++ b/src/test/java/command/SortCommandTest.java @@ -0,0 +1,27 @@ +package command; + +import exception.InvalidSortCriteriaException; +import exception.NoEventTimeMarkerException; +import exception.NoSortCriteriaException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +import static org.junit.jupiter.api.Assertions.*; + +class SortCommandTest { + + @Test + void execute_NoSortCriteria_NoSortCriteriaException() { + Assertions.assertThrows(NoSortCriteriaException.class, () -> { + Command d = Parser.parse("sort", null); + }); + } + + @Test + void execute_InvalidSortCriteria_InvalidSortCriteriaException() { + Assertions.assertThrows(InvalidSortCriteriaException.class, () -> { + Command d = Parser.parse("sort something", null); + }); + } +} \ No newline at end of file From e967c7c8160f5959a8183c34538a1ff2327c188f Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 15:19:49 +0800 Subject: [PATCH 103/299] Fix checksytle issues --- src/main/java/exception/NoEditEventDescriptionException.java | 2 +- src/test/java/command/SortCommandTest.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/exception/NoEditEventDescriptionException.java b/src/main/java/exception/NoEditEventDescriptionException.java index e21798cb13..4cc2eb1e66 100644 --- a/src/main/java/exception/NoEditEventDescriptionException.java +++ b/src/main/java/exception/NoEditEventDescriptionException.java @@ -1,6 +1,6 @@ package exception; -public class NoEditEventDescriptionException extends ClassException{ +public class NoEditEventDescriptionException extends ClassException { @Override public String getMessage() { return "Please provide the details for the new event to be added."; diff --git a/src/test/java/command/SortCommandTest.java b/src/test/java/command/SortCommandTest.java index 3196d9be6c..6b005cb9fd 100644 --- a/src/test/java/command/SortCommandTest.java +++ b/src/test/java/command/SortCommandTest.java @@ -1,13 +1,11 @@ package command; import exception.InvalidSortCriteriaException; -import exception.NoEventTimeMarkerException; import exception.NoSortCriteriaException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import parser.Parser; -import static org.junit.jupiter.api.Assertions.*; class SortCommandTest { From 5c8303db5eebc9b465467c78515a44d6f13317ff Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 16:39:14 +0800 Subject: [PATCH 104/299] Edit dev guide --- docs/DeveloperGuide.md | 30 ++++++++------- .../diagrams}/ArchitechtureSequence.puml | 0 .../diagrams}/ArchitectureSequence.png | Bin docs/diagrams/EditCommand.png | Bin 0 -> 19865 bytes docs/diagrams/EditCommand.puml | 36 ++++++++++++++++++ docs/diagrams/SortCommand.png | Bin 0 -> 20429 bytes docs/diagrams/SortCommand.puml | 36 ++++++++++++++++++ {diagrams => docs/diagrams}/architecture.png | Bin 8 files changed, 88 insertions(+), 14 deletions(-) rename {diagrams => docs/diagrams}/ArchitechtureSequence.puml (100%) rename {diagrams => docs/diagrams}/ArchitectureSequence.png (100%) create mode 100644 docs/diagrams/EditCommand.png create mode 100644 docs/diagrams/EditCommand.puml create mode 100644 docs/diagrams/SortCommand.png create mode 100644 docs/diagrams/SortCommand.puml rename {diagrams => docs/diagrams}/architecture.png (100%) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index acfb8eb853..c44c7da79d 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,5 +1,4 @@ # Developer Guide -google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFXK3VgL6807x5ivZ5yJk/edit) ## Table of Contents 1. [Introduction](#1-introduction) @@ -58,7 +57,7 @@ This section describes the different components of the application and how each each other to run the program. ### 3.1 Architecture -![architecture](../diagrams/architecture.png) +![architecture](diagrams/architecture.png) The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into 5 different components: @@ -68,12 +67,6 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. -__How the architecture components interact with each other__ -The sequence diagram below shows how each individual component interacts with each other when the user inputs a command. -![sequence](../diagrams/ArchitectureSequence.png) - -### 3.2 UI -![UI Class Diagram](diagrams/Ui.png) *Figure 3.2.1 Class diagram for UI component* @@ -160,13 +153,12 @@ Given below is an example usage scenario: Step 1. The user launches the application and inputs a command to add one event. -Step 2. The user realises that there was a mistake in the event added and decides to edit the task information using the -edit 1 command to edit the event that was added (index = 1 as it is the one and only event currently). - -Step 3. The Parser class parses the 'edit 1' command. The user enters a new event. - -Step 4. 'editCommand()' function replaces the original event with the edited one. +Step 2. The user realises that there was a mistake in the event added and decides to edit the task information by +entering `edit 1 class ` to edit the one existing event. +Step 3. `editCommand()` function replaces the original event with the edited one. +![EditCommand Sequence Diagram](diagrams/EditCommand.png) +*Figure 4.3 Sequence Diagram for EditCommand()* ### 4.4 Locate This feature allows users to add locations as part of the event information. If the place is located within the school, @@ -202,6 +194,16 @@ The sequence diagram below shows exactly which methods, from which classes, are ### 4.5 Reminders ### 4.6 Sort events +This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available +are sorting by time, description and location. + +Given below is an example usage scenario: + +Step 1. The user wants to see view the events in a chronological order. + +Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. +![](diagrams/SortCommand.png) +*Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events diff --git a/diagrams/ArchitechtureSequence.puml b/docs/diagrams/ArchitechtureSequence.puml similarity index 100% rename from diagrams/ArchitechtureSequence.puml rename to docs/diagrams/ArchitechtureSequence.puml diff --git a/diagrams/ArchitectureSequence.png b/docs/diagrams/ArchitectureSequence.png similarity index 100% rename from diagrams/ArchitectureSequence.png rename to docs/diagrams/ArchitectureSequence.png diff --git a/docs/diagrams/EditCommand.png b/docs/diagrams/EditCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..f0bd72edaf17b7ee4bb16dd2865f9af14e1e1a3c GIT binary patch literal 19865 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/EditCommand.puml b/docs/diagrams/EditCommand.puml new file mode 100644 index 0000000000..68503536f0 --- /dev/null +++ b/docs/diagrams/EditCommand.puml @@ -0,0 +1,36 @@ +@startuml +actor User + +box Logic +participant ":NuSchedule" as NuSchedule +participant ":Parser" as Parser +participant ":EditCommand" as EditCommand +end box + +box Model +participant ":EventList" as EventList +end box + +User -> NuSchedule : edit +activate NuSchedule + +NuSchedule -> Parser : parse(edit) +activate Parser + +Parser --> NuSchedule : command to execute +deactivate Parser + +NuSchedule -> EditCommand : execute(edit) +activate EditCommand + +EditCommand -> EventList : editCommand(event) +activate EventList + +EventList --> EditCommand : event +deactivate EventList + +EditCommand --> NuSchedule +deactivate EditCommand + +deactivate NuSchedule +@enduml \ No newline at end of file diff --git a/docs/diagrams/SortCommand.png b/docs/diagrams/SortCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..a3505e1675b701c709b1c6eb0eb81474257e67a8 GIT binary patch literal 20429 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 qfu^NENem NuSchedule : sort +activate NuSchedule + +NuSchedule -> Parser : parse(sort) +activate Parser + +Parser --> NuSchedule : command to execute +deactivate Parser + +NuSchedule -> SortCommand : execute(sort) +activate SortCommand + +SortCommand -> EventList : SortCommand(sort type) +activate EventList + +EventList --> SortCommand : event +deactivate EventList + +SortCommand --> NuSchedule +deactivate SortCommand + +deactivate NuSchedule +@enduml \ No newline at end of file diff --git a/diagrams/architecture.png b/docs/diagrams/architecture.png similarity index 100% rename from diagrams/architecture.png rename to docs/diagrams/architecture.png From 59903778b004cd824640d7e67ea160a1c1d70852 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 16:43:22 +0800 Subject: [PATCH 105/299] Fix Dev guide --- docs/DeveloperGuide.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 84ceafb7ae..bb443edca7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -70,15 +70,8 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. -<<<<<<< HEAD -======= -__How the architecture components interact with each other__ -The sequence diagram below shows how each individual component interacts with each other when the user inputs a command. -![sequence](diagrams/ArchitectureSequence.png) - ### 3.2 UI ![UI Class Diagram](diagrams/Ui.png) ->>>>>>> 477de15f21f2965297834b7a4b41ddc5e1ac458d *Figure 3.2.1 Class diagram for UI component* From c1d838e1e1886aff0cdfb635f36674ae3d809bfb Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 29 Oct 2020 17:00:06 +0800 Subject: [PATCH 106/299] changed location sequence diagram --- docs/DeveloperGuide.md | 38 +++++++++++++++++++----------- docs/diagrams/Locate.jpg | Bin 56693 -> 0 bytes docs/diagrams/LocateSequence.png | Bin 0 -> 96628 bytes docs/diagrams/LocateSequence.puml | 35 +++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 14 deletions(-) delete mode 100644 docs/diagrams/Locate.jpg create mode 100644 docs/diagrams/LocateSequence.png create mode 100644 docs/diagrams/LocateSequence.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 6e10184c69..b508835e2e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -3,14 +3,17 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFX ## Table of Contents 1. [Introduction](#1-introduction) -2. [Setting Up](#2-setting-up) +2. [Getting Started](#2-getting-started)
+2.1 [Prerequisites](#21-prerequisites)
+2.2 [Setting Up](#22-setting-up) 3. [Design](#3-design)
3.1 [Architecture](#31-architecture)
3.2 [UI](#32-ui)
3.3 [Storage](#33-storage)
3.4 [Logic](#34-logic)
3.5 [Model](#35-model)
-3.6 [Location](#36-location)
+    3.5.1 [Event](#351-event)
+    3.5.2 [Location](#352-location)
4. [Implementation](#4-implementation)
4.1 [Add events](#41-add-events)
4.2 [Clear events](#42-clear-events)
@@ -21,7 +24,8 @@ google docs [link](https://docs.google.com/document/d/1dGM1DYHVXxqUM8RPfAPs6MuFX 4.7 [View events](#47-view-events)
5. [Documentation](#5-documentation)
5.1 [Product scope](#51-product-scope)
-5.2 [User stories](#52-user-stories)
+5.2 [Value proposition](#52-value-proposition)
+5.3 [User stories](#53-user-stories)
## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive @@ -30,7 +34,7 @@ NUSchedule will prove itself to be the most efficient way to manage your commitm This developer guide provides information on the architecture and design of the application, NUSchedule. This guide provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful -to refer to even if you are already a contributor +to refer to even if you are already a contributor. ## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. @@ -89,14 +93,16 @@ The `logic` component parses the user input and executes commands based on the g 3. The result passes back to the UI, which then displays relevant feedback to the user. ### 3.5 Model +The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. + +#### 3.5.1 Event __API__:`EventList.java` -The `Model` component stores an ArrayList, events, that represents the current list of events. -### 3.6 Location -![Location class diagram](diagrams/Location.jpeg) +### 3.5.2 Location +![location class diagram](diagrams/Location.jpeg)
*Figure 3.6.1 Class diagram for location component* -__API:__ `LocationList.java`
+__API:__ `LocationList.java` The `LocationList` is made up of an ArrayList of Locations, which is a type of variable that stores different information for different types of location (eg. `Building`, `Hostel`, etc.). However, do note that any place that is @@ -105,7 +111,7 @@ file. The location will still be part of the location list before the app closes saved as part of the Event information.
There is a separate api for bus stops (`BusStopList.java`), which stores all available bus stops -and their information. Although the variable is declared in the main NUScheule class, it is only referenced +and their information. Although the variable is declared in the main NUSchedule class, it is only referenced and not edited in any part of the program.
The `Location` component @@ -183,16 +189,19 @@ Step 4. If conversion is not possible, then it will check if the given string is * Prints an error message if invalid The sequence diagram below shows exactly which methods, from which classes, are called to obtain the required location. -![](diagrams/Locate.jpg) +![locate sequence diagram](diagrams/LocateSequence.png)
*Figure 4.4.1 Sequence diagram for locate function* ### 4.5 Reminders +[Proposed] This feature will be able to remind users of the events that will occur today when they open the application. + ### 4.6 Sort events ### 4.7 View events ## 5. Documentation +This section provides information ### 5.1 Product scope __Target user profile:__ @@ -204,10 +213,11 @@ __Target user profile:__ * prefers typing instead of mouse interactions ### 5.2 Value proposition +NUSchedule aims to assist the target audience with: +* managing all their events in one application (personal or work) +* -{Describe the value proposition: what problem does it solve?} - -### 5.3 User Stories +### 5.3 User stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| @@ -215,7 +225,7 @@ __Target user profile:__ |1.0|freshman|know module details and lesson venues|be on time for my activities |1.0|forgetful person|be reminded of the deadlines for my assignments|submit on time |1.0|tutor|know the estimated time for my students to travel to their next class|pace my lesson suitably -|1.0|hardworking student|track how much time I have spent studying\allocate my time efficiently +|1.0|hardworking student|track how much time I have spent studying|allocate my time efficiently |2.0|exchange student|know the optimal path to reach my next destination|avoid getting lost |2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately diff --git a/docs/diagrams/Locate.jpg b/docs/diagrams/Locate.jpg deleted file mode 100644 index 9ff28257c95621b02c4650923d710b1b740697cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56693 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 JSuzJRzXPf}H$?yd diff --git a/docs/diagrams/LocateSequence.png b/docs/diagrams/LocateSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..b6950bb3fb03fc42bbf08a94a812c24801aa3a62 GIT binary patch literal 96628 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≤cnI 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®{z#9&i>t|3|0Ln6Qes7kRq_sfWN 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 A)Bpeg literal 0 HcmV?d00001 diff --git a/docs/diagrams/LocateSequence.puml b/docs/diagrams/LocateSequence.puml new file mode 100644 index 0000000000..fbf0591b55 --- /dev/null +++ b/docs/diagrams/LocateSequence.puml @@ -0,0 +1,35 @@ +@startuml +Actor User + +User -> Parser: locate [input] +activate Parser + +Parser -> LocateCommand: LocateCommand(input) +activate LocateCommand + +LocateCommand -> LocateCommand: execute() +activate LocateCommand + +alt input is an integer + LocateCommand -> EventList: getLocation(input) + activate EventList + return location +else input is a String + alt valid location + LocateCommand -> LocationList: findLocation(input) + activate LocationList + return location + else invalid location + LocateCommand -> LocationList: checkValidLocation(input) + activate LocationList + return false +note left: prints error message + end +end + +deactivate LocateCommand +destroy LocateCommand + +deactivate Parser +return +@enduml \ No newline at end of file From 962220f99348f5c6f8511c52c7574dbc892d5d84 Mon Sep 17 00:00:00 2001 From: jiaaaqi <60423691+jiaaaqi@users.noreply.github.com> Date: Thu, 29 Oct 2020 18:26:32 +0800 Subject: [PATCH 107/299] Update _config.yml --- docs/_config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index c4192631f2..871325303b 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1 +1,2 @@ -theme: jekyll-theme-cayman \ No newline at end of file +theme: jekyll-theme-cayman +markdown: kramdown From 3904c8b3252a89d7c76c96cc145ee269b193c5f0 Mon Sep 17 00:00:00 2001 From: jiaaaqi <60423691+jiaaaqi@users.noreply.github.com> Date: Thu, 29 Oct 2020 18:36:15 +0800 Subject: [PATCH 108/299] Update _config.yml --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index 871325303b..f4b41887d6 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,2 +1,2 @@ theme: jekyll-theme-cayman -markdown: kramdown +markdown: GFM From 1c9829cc2c211188eb254ab28e771a35a40759fa Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 19:30:41 +0800 Subject: [PATCH 109/299] update printHelp() function to v2.0 --- src/main/java/ui/UI.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 348af909ec..7a3008d295 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -236,10 +236,12 @@ public void printBusStopList(ArrayList busStopList) { * Relevant command information with reference to the current user guide draft. */ public void printHelp() { - System.out.println("Current version: v1.0"); - System.out.println("Below are all the commands and their functions in the form of command - function: "); + System.out.println("Current version: v2.0"); + System.out.println("Below are all the commands and brief descriptions of their functions in the form of command - function: "); System.out.println("help - view all the commands"); - System.out.println("add - add any type of event"); + System.out.println("assignment - add an assignment event with content, deadline and location"); + System.out.println("class - add a class event with content, deadline and location"); + System.out.println("personalEvent - add a personal event with content, deadline and location"); System.out.println("edit - edit event information"); System.out.println("locate - find location information"); System.out.println("list - view all events added"); From 2bd78864aee2fb5a1f750fb4385dd221ca273cf2 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 20:13:25 +0800 Subject: [PATCH 110/299] Fix Checkstyle --- src/main/java/ui/UI.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 7a3008d295..b1c6e3d145 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -237,7 +237,8 @@ public void printBusStopList(ArrayList busStopList) { */ public void printHelp() { System.out.println("Current version: v2.0"); - System.out.println("Below are all the commands and brief descriptions of their functions in the form of command - function: "); + System.out.println("Below are all the commands and brief descriptions of their functions in the form of " + + "command - function: "); System.out.println("help - view all the commands"); System.out.println("assignment - add an assignment event with content, deadline and location"); System.out.println("class - add a class event with content, deadline and location"); @@ -247,7 +248,8 @@ public void printHelp() { System.out.println("list - view all events added"); System.out.println("clear - clear all events"); System.out.println("There will be more upcoming features in later versions."); - System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4.github.io/tp/"); + System.out.println("For more information, please refer to detailed user guide: " + + "https://ay2021s1-cs2113t-f14-4.github.io/tp/"); } /** From 8875aec886368044db7730d58060cbc03a7980dd Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 29 Oct 2020 20:57:10 +0800 Subject: [PATCH 111/299] Update user guide --- docs/UserGuide.md | 113 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 16 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index abd9fbe891..38a8e468ab 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -2,41 +2,122 @@ ## Introduction -{Give a product intro} +NuSchedule is a straightforward but sophisticated application that helps you manage your events. It allows you +and students to not only keep track of your school events or activities (eg. lectures, tutorials, assignments), but +also monitor your personal businesses. Its command line interface (CLI) would also mean simplicity and speed, +which sets itself apart from other apps such as NUSMods and Luminus. + +* [Quick Start](#quick-start) +* [Features](#features) + * [View available commands](#view-available-commands) + * [Add an event](#add-an-event) + * [Edit an event](#edit-an-event) + * [Sort Events](#sort-events) + * [Find location](#find-a-location) + * [List all events](#list-all-events) + * [Clear events](#clear-events) + * [Mark event as done](#mark-event-as-done) + * [Reminder of deadlines](#reminder-of-deadlines) +* [FAQs](#FAQ) +* [Command Summary](#command-summary) + ## Quick Start +1. Ensure that you have Java 11 or above installed in your Computer. +2. Download the latest `nuschedule.jar` from here. +3. Copy the file into a new folder, which will serve as the home folder for NuSchedule +4. Open the command prompt and navigate to the home folder. +5. Run `nuschedule.jar` using the following command: `java -jar nuschedule.jar` -{Give steps to get started quickly} -1. Ensure that you have Java 11 or above installed. -1. Down the latest version of `Duke` from [here](http://link.to/duke). ## Features -{Give detailed description of each feature} +### View available commands +Shows list of commands and provides a link to the user guide for more details. + +Format: `help` + -### Adding a todo: `todo` -Adds a new item to the list of todo items. +### Add an event +Adds events/tasks to your schedule. Can support various types of tasks: -Format: `todo n/TODO_NAME d/DEADLINE` +* Personal events + Format: `personalEvent EVENTNAME /t DATE TIME /l LOCATION` + +* Assignments + Format: `assignment EVENTNAME /t DATE TIME /l LOCATION` + +* Classes + Format: `class EVENTNAME /t DATE TIME /l LOCATION` -* The `DEADLINE` can be in a natural language format. -* The `TODO_NAME` cannot contain punctuation. Example of usage: -`todo n/Write the rest of the User Guide d/next week` +`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` +`class CS2113 Lecture /t 2020-09-23 10:00 /l LT27` + +### Edit an event +Edits existing events/tasks. + +Format: `edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION` + +Example: `edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home` + +### Sort events +Sorts events based on a sorting criteria. Supported criteria includes time, description and +location. + +Format: `sort SORT_CRITERIA` + +Example: `sort description` + +### Find a location +Shows you the location of the specified event/task. -`todo n/Refactor the User Guide to remove passive voice d/13/04/2020` +Format: `locate n/EVENTNAME` + +Example: `locate n/CS2113t Tutorial` + +### List all events +Shows you a list of all events. + +Format: `list` + +### Clear events +Deletes events based on their number on the list. + +Format: `clear NUMBER` OR `clear ALL` + +Example: `clear 3` + + +### Mark event as done +Mark a event that is completed with `DONE`. + +Format: `done INDEX` + +Example: `done 1` + +### Reminder of deadlines +No command required. Automatically sends notifications 24 hours before the event occurs. ## FAQ **Q**: How do I transfer my data to another computer? -**A**: {your answer here} +**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains +the data of your previous AddressBook home folder. ## Command Summary -{Give a 'cheat sheet' of commands here} - -* Add todo `todo n/TODO_NAME d/DEADLINE` +|Action|Command|Example| +|------|-------|-------| +|add|`EVENTTYPE EVENTNAME /t DATE TIME /l LOCATION`|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| +|clear|`clear NUMBER` OR `clear ALL` |`clear 3`| +|done|`done INDEX` |`done 1` | +|edit|`edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION`|`edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home`| +|help|`help`|| +|list|`list`|| +|locate|`locate n/EVENTNAME` |`locate n/CS2113t Tutorial`| +|sort|`sort SORT_CRITERIA` |`sort description`| From ffbf5e95afc3e42384d75e6858d2ff911075e8e1 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 21:16:56 +0800 Subject: [PATCH 112/299] adding Logo.png and adding coverpage for user guide and developer guide --- docs/DeveloperGuide.md | 13 +++++++++++++ docs/UserGuide.md | 13 +++++++++++++ docs/diagrams/Logo.png | Bin 0 -> 17954 bytes 3 files changed, 26 insertions(+) create mode 100644 docs/diagrams/Logo.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 8f47f20021..c5bf705259 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,5 +1,18 @@ # Developer Guide +![](diagrams/Logo.png) + +Yang Jiaqi + +Zhuang Mengjin + +Xu Che + +Wu Nan + +Wan Shi Jie Brendan + + ## Table of Contents 1. [Introduction](#1-introduction) 2. [Getting Started](#2-getting-started)
diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 38a8e468ab..066d33801d 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -1,5 +1,18 @@ # User Guide +![](diagrams/Logo.png) + +Yang Jiaqi + +Zhuang Mengjin + +Xu Che + +Wu Nan + +Wan Shi Jie Brendan + + ## Introduction NuSchedule is a straightforward but sophisticated application that helps you manage your events. It allows you diff --git a/docs/diagrams/Logo.png b/docs/diagrams/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1305caa673214ee9192d7591518539038ddcf06c GIT binary patch literal 17954 zcmbWe2{_d47e73fqOzuvkS#pgR6>YRls%%dR7Tm#TK08@lt|f^?1@OWkbSMJ*|P6O z))wXP^J?mn~|27@uGC@X5i zU^Lz^7!^1DPVhf@A$NztuU!w6_3dG>1A@>$Di!S`i!j)3jr$4;T3YvP9c=CI**@S^ zQBdH0U}tM~-^vsQa~X)&an=jNACN=iO_^_8>|4x@vhs%U3uMwau;{;L35DHx%(7R$ z_KDx_8~gUN#wlN~dDOjIIo@yV)nCQt7oPbU1YEy$Zh>bgt-#X_J3mkCC6-UeO>efk zwlRCL?iC7|dTjxd(tdJYx{oJFQ@N(G!i##p@+d7Y%T&`R^BuJ?*dmRq3)0~|e3L52 z7Df$w(0%gA-uiD8pHeL$T^Mf&Y?OcR^d72UZCJy}YYqEg4F_TGb@EMi!@^-OD_4(; z{IGY7u(?$gxgD^+^spgzSl?@|bb8neDp>SiN=K;W%V0*=y|s^1SAT-N%9Q6nNn4#w z<)vSEMv2<1Vh7AAP%oHS-U#LueerlRjQ1QhOyMwF3k|P2&8t%#Rio*M2TzKXsbJMj z5iL<_9b)^6BfcJTUS1p>;~V>Am3#3Hy9kTft_l9Qs8|6ucgAUyg4HO)h^y^RouWp0@*K?clhZB;t8qRZb?cTFzUhr;G#i{WCIf~df+tC0d4*Zoo=(Y%Z z7$YB@Rh{fZdU(giDO)>mx{3DUX&d~s0J;7NiWDf)K6W z6!{t>#`eyj&Mfgnl6HkTGr}@`HLI@_(iJpWRU;Rur~{bvI-Fqg$dwb%5A6wov6!Dd zC^2exPEm0}sFj)EbgSXy>v#Zz9!(fW9ypO)WK*#WLUuHE^+(+*6YIf>7 zI~C;_j#Qs#xwvz}i)(k%!N?07*Q%xaXbaxc9D2nX^Nr=h$J6H+r$_hR^2R)1-)VF( z;nTr#-(9p98tB>X@Jaiz-VN;IZ>49C4y5J3qkJ~hD}{H)Z{Jn^+6KE6>hy~iA-9zU zmQUF2lX`JWej|9Wf%nX_&1dCGr^CJTuF`Z-JIa^5 zEbCSHI;~ypyQ2fl^I4#=SNmxuv*-PHZasf`$;e;tkWl>r<4Ha78$sg6+B!%hrOlry1RTHpZ+AwANE%BgP_}9LXFE^ z>D*ww%b7w8e24iG1Pz6m*brgLN0=HzC$8+~6AV71vPZ>Ic~JR8icX4L2h069bsqkceV$h)Z&XN8FmteGD6#SLMA1I!TE8*%U9XR5r-biS6*q-X(!NPNb20kWyQ?kf z30?H>{G<~NRIFb)X^HAQO=mmn7$evcdqANnd}_wn~cXBoX*Wul+@Ah2FxXzqmc*8UG^7VYJ@$_9?2Qs?Txv!U{ zOJuidJ8K7NwOvIdS0YG{HjEkbe4ku?<*S^0&A6zJ;|1S=x-+IrdKY`_ZqQ(kTfWq| zdozzPr|z_a$mt~NuCAkC|IRGaEW|8+>R}5NQ(f-pqEvsJYAatWW2^fKniKF7xjhzH zW?9HA$pN>4%7MG{cJl}3F#}k~2l4Xp$K%(et)=mfyGkWWua-V39dvA)mFqOdxX$ca z`?AI~Gu*DUX1$uc#y*Sf!M5{Ao;ph}5zJwA`ke7%bFlGu%a`|y+ZP{yd&}B%uQa6Q zUUIuivT(7`!c+5caTj(uvrJpAyP0Q4OouGb-?@AL%wS4QO6^3YNK3e7j9F>>hfas) z=7!@#nSGg!bAeLbah3^pD*MX^H(xw?b1AM?H9#VuK5`(^qiIK^MkGG-sbtGQ>*9HWj|jip{EVinT`X8`~Eo(jl^@V>57iZgXz;T+H0g zc`4i-oFL8`*T&tzP5+I2p^?c>A*~_QL8S zUT^GS^LTt(Y}%)l;Av4qCqsQhV#Q(2{5YY6o>SHhgEcotE1KMmq~&ByH(FU$Kk+(kOq`rLqG80Xpo? zCr{tjE;Vtvzu4i~bgwBdlB6}Jr+t0d!gXjlP}`^D%^QVdk95yQq=z>)*<`O8lo;>7 z6Jc^4YZ29b^9JfDdjul$LFU`+_4k*Hr^a-zAi6!)T&)KNMpTQw%wv=>DHxkfyna=V zYK6sx?ytU!j9HvZFD5w=)~X{8Np2Qvfh`|ezO>MY-w~g`*<6@8xSS-BjB|@e-EO); z%E~CJ>=zp7sTy{6Ut#j$-Y+wP4WBD7IOd{jS#im8&8B1F(QweAyPTy}Q^?_BC1=gr zgdq1f?sT|ISd4{(t<_LYRaM?DYi)@ahn1xtOvZZI4#dvKI2SxHILh?t!sJI`bgGB@ zxYqZi*3UzqThP&{qBVMqvg@%9=_<#}6Uo-EWRohe-=8PPa~pCiRTfc@*wf?2j`iX} zx(To1|B_uIOgsu3PcunNh`$1t?TQ|9#j9^dTi(8UyTV+dEdkE%u%KRqz&EapOb6Xw zEPt@dkH0%8SfrLEn=Pw^d_el9oO9C_V~TH@*FB%@u&RNPX~%Y=HY}>U?R(dIPu@;+ zt-#jJaTeJK4RaL>maeTk;pW+$cQ2?9-F6Fd$=R$NAkETkFwdeskaJC|tw-05s*Tz{ z>oa4Sc0ElXhf_MAe(O+bR_YeGEbt;Io`;8%@leIGNo&}*w7fL7wlByV6jzLW#x$BV zMpSFl+w5E1LkMWA%63g(vBPGh=SbHJ)bo_Ly2>u4Zf3O(dSZ*QrRe$!p6I_e<;hwr z?Hk7RX8~Wx!Rg(Qm+aDEqw}10e zQ*D1>1sDeU@sr>B1(T^^Q%YDRDNER8a}fS+3isJ*GZ36R;q{o6n{~I(FQ@oXHz(l z%F9jIu%@Y#fAN8iP9w8wxqwk6^!L%omDrsGO*tCa+Ldy@DDz9B>)+q*o^2VVIdks4 zcu3{p0*Z;+o(rdkC^b9Hkf<`o9Ni23aj4j+ga45CbE&~j|D|6Ee}7j zeU~UT+;drr0S6s%$PU?w3!_Yk!L+b70WO58uFIob`4SV?Lz!))s_qB>`m5`P zGqsw^WAv>`b@^MPs4+FU;%}R&7yjPvKI=z^?#_rgYW;d&R?m~ z?xd!=&-f%od|#+MuMzR1!=ST_4IZp+7@O;iHFRC+5&?fUp^!;60UmV}SeFdYR`q?> zJ}w4T2M>?W@9Ue`MF;G7hjGJ!gCtFl#-~}|OCQ|%Y}rzGx5I9Xc8Nc62@W(2wDv%i zc52VpLr#A={r%;ZdvJTR&fb_8wSMe`=M<{9&a?3@-fa92(3PG?c>`3`Ha_3sSioGh z%u3SIf7))1o-ZDT?9uluO-=2K6Sjix4A(-GiIqWC2`M9K0#2gac8Oae)SR=J>+**g z%=Wokn5k!RTUZ^(oGP6!<1X4Vz)ep^la__gA-nuV^+IC;zTD+c>ajF*ec}?*w$9__ zmNw$g&Py$FQIVH0`o!h-?5ws^SF$1B6O^qxKO?4L0Wey6B7Pd=fiCU5Ok{^AF zh&!KQnbZ6i!UDy`>VkGpreY;QH7oucGVWiCYV_|}l6G2sn@7;V`W-o;cDVks{o`+K zhREpu`PG<&ms%1Oq_8n%q5GJ{ytXboQ0okQ+ZZrbWmbObk6=M9-L$zD;VDzM*3hm` z0?~mC8EaEU!C=Kz9@uO=xCLJHDfFz~K%n^f?^?L*k?&DJpsBir^a7wwVBb^<@YY`f z(dN`(8pmGeIirpz5YQ-()E*=OH~8p<@j^f;JbpwbgvXo)i7Dy#`rFbh-bcVL;7VP;zL%Q^eTwrvwrwPq zQJDM>UskGE!d+rJ0n+7Ir39iWGB9h|2{@^3>w0jZg+GFMtqn}m$+sw^qPS%)PMKhk0lYTch zR4&WwLvxdD29w@L4m)w;ZwZG)so5gmi0_&!#1`;7#6qzvSd4Q~vtqd~@5q3&LRM{R zs;Zo=qhmo{{_pYVh6%+&`b65`K*KMUmT1!6xPHBHWpc6{;pmo|cely==Y?N$mNP-^ zeHk=f9~j{{GN(zck(`?9`|J2oGM7e6T3Z>t!BhO$IJoWKPYUv6Bg!I++MN+4+BjEc zNpTJlT9iHE%-{OKKdYV#vSAjNups)~DDo8bIEyu-upvDz1VSRw+b)IgNel# zbj+%je;r|5TdUj?XG19)mLnJik}BNsUt-g)sDQr^@z^4gRp~qpfdO1J7EyFS^^}p; z>+x~m3)2q>W3|t?H#SS`m(k{Jc7_zfa$X!}Zq=jOfry^Rk$h*CW}z_H*18o2AD@`+ zwB~6r2ma;l!bhF)Zh7au7pfw-#NE|aeBal+W^h%5^F+q5@owZ)b1GbhGa$lKVi@P` zu@g4S4P58_J5}8LU>bGa%MU4VuE=j7IrSXceSPBCE6W_bk%_wR=R5wFcXkitjCl6u zf9#k?6%FD!Q|mD^9ian*?pSYzr$j-H*c+CUNJpI_PhKb|(v3Z#&wLl^yRqR&CGqm= zTzd5B0;jjRSBc)}^Ny+&BT=%?wR8Ie~h@w!tk7|M|};1V6$mjcxJuGby6nyzSmLPcNf3=$h?03Yg7WYwNH zYf3lnn4Y0FkEwLKd86}wbn%L0frRYot3CY=gLGS|o!8J${_~@=Tud3gn0KMTA1y5Yy7(+Ebtl&(CVyGF==ixN=+`xhA0nV z1E!iitoQB(=TRuaP5%Gs%9wFvLs$9L(9PWF2ejiaN!_&L!|`^c07hZ`MC z^s*%Bd;}9!elyb9bIMgN^WtlzK|!r$JDdS=VxTYfXNsRjMf_%HMJlHI+$orBjXRhDVI62JK98cQp)>V@Wf;7cO zx9zE4cU<_Az)`$8;T|1VaHL>#INIA!{*;tqe?C#pFm~7(UmDr(B|S$&Q0D?E0DRQT#NRm zxGvY&i_x%p8(EZ(oU>ER!jJfGo-4!N95lnv6f#eUk?6J^-9bM%&wS_Q^XJ7_Sm{&i zj!DZ^-f=>p6X#=x(;#1g5+robzM5Y663@{moH6sEnPKg1fywzRTdt~sv$VAA9=O{P zDiUk{$I^F#ms=Usuc+L$>(JRc%iZ!33tL@F6v2*nr7qw_J`wWgXfns#LO&7Du|6!HXdbFuL>ab0V>SByT_&3s zh&nmv3y=HbhP5nn)6?@>U;VCy_pk&}(dkWnr!cwuO$i+L#t3urTTk1b2`=zY_hxSoT0b)GYgV_z&QJ z^cV6So!UaauP)9d!kw>>iF5j`C{$(n@o8z9m4V|5fAHmgR>4Aqd-66TPc@t8_mPB*A5k<4v64f2LA7IVHg^0(K_ypc7Y2(o zcbJ^MuYx*v{IjR5MV9!!qnJ}q`fSg;Xpx8?8(uOz{k-=D!@B}R1#!VQCwPB8+C+V^ zsu83iPE2lij+fh;e{2tO9){V(hod$jhC|2l=^@T0X>~pv6!uBPrUW{W-KCMWuSj&qFI=Y}{}tj>tPYeVZe8My*<8Ky zYgO{UAfFKj?&;?{1vsMU83bd12T7?wLi$XoaZw)$ii&dIGwSaysgkIFLU|T%)4n#c zY|=-faj4$=BjUvP&0y8^wV0Tg@+#eH4ajG~{AnVXjCwny=+~CDJ%59^$op`j=*~dJ z=`-+^oVMEPsy8}DK`KA z=O;uB-8Hh{F>xV!9id&D;mwzYyWB{aoT&2OMA!OF^jD0yu%+S+TMCnABfw^!y~wm4 zxy@0ZJe&@=*MwI&hXZQof0tpv2yF`mmC-kD#}An84E+ttH%Ido{tUBPea+Pux7N_m zha?-s{PNf*^dB0LCih5TUTx%Pf`id|2K;S7!&fbRq6kQU9$$5VyG{M=ZhX|%d5K~Q zRu4RV`%nqz`;lfwR9oLn&4dp34+Rh0gS-3cr8Go)v$D5vDFB?0$<-S&_+8!?ID2!y zHAq%51zC#|96?b9kZKy~Jb^3OWC2%_zr*!5BP^erd(bZL%_ZDif3he1bkc}_l>7K4 z_);-_vy8%VDMA0n#!u!uZF0fGBAwxD-Nw1a1&~hrloc@_w$te8ik(*x9Bcw%mj*Uj#wd5RsvMHy;$7r zti}ESK}@c?;BgiGn=5~LD5*HUAz_YQCh|+en4`WQ$H3L~M|Vcuw~#8@tw+rs{!K^l2sNd_b)TieKrc+w285t}RhUnBs{$ zUO%!jX)4v*f4_;WI(C_&+fj*LRFI7^1K|Dr)9gL$5;b=v4unOr2|t$-AU$@YbFK+M zYE!Yk6qUE^TMG1IBElVA3diUB5Gq68DXIf_PUKsqP5^fpCOaW$pZoGf?QWn?OWhb0(+uqzVf?CnSrn0xxL}WGB(G77Kp<_C9Y3BnO^~pLk!y5`IZpM~G*& zJNZ6G;URcw?{Cwc*$NN*J}!QtO(YB-Ka z%qZxzwlYgK%dUK2UDBCLQx&G~S zj%}|~>=t&9?1lIseM5*3GH%lZX7P`b0{+NL9U$a>xqdkeYiidM+I8`c z7|ou3&CV1Nd$#T$`)xg4Z<$}dU?^!5$^P@IT%e6qG`V;CJ_^_NeB&^Amf7OOnX}ja zIBTK#bZdNe%;c8;Z~K8@m{_v$1JBF#zp~l=n6sufuQ#^u&u3iu!wJ7-du)6|P=0x( zxYPEI_FHy~yo7rms2n0jBf!+U3W)2qdkG-K-LV8D0H>Mj8mWIyAIJ|p_xYA>4wQ&V zZ$L$JbkgC1$mjJ<1CV54%v)R8OvvAkkDLGA7YWFnJoC20^F)m%^Uh77ofr$|L!el6%)p{+eShT~TX zIM|98+m-4j^8LxDPa8hjAZ6j4*6g>65TpFs`r)ZpzYFvC=a+9N znHR=Qn&wgRb9&Q}V{f1}%a+(a+GY2KPcv@p;{STUK!MK`U)Qqe%fT&r*Ci!DMLK2aw&<|#@qr9c(;6frC47t z$#AyZW9jvY*00u8EUiB>{PbF)sAyA3>y?|h*f}0}O|P0((A1!F=vH#K*-q{r(QTtv z0;I1LYy1(p*+>K;A``8;;&5N(w$g8X zk7!)C)`m|JF=%i+gXq?XS_nGN)1i6Pv*MC}H6Zua=u$sE=htX?o?ZYDoT=0$u#*dD z>a4jTaOZ;o{eM8{sog$&Ah(R_$e(+mT1@6Q|3&ldM@)*H+hLXmR?Qj}l)|-7>D$yjc{r~_RsuQs}T?78( z^{n323Y`4Gn~Jpj)U4k7y3MMD&$^)0_wI>IF{=vW(N15>(e8#&0ROa*QfDuea&per z2OhpYO-^-I42={FGESEIv}i6`^_-se@BoYVgfKq~I9bZu!i@lLf%cN-X!2T#fy{8v zjUME)xL7VpDF_9SRL{tsPHH9LWuje%e-MGorgAjkS!E=2l2uK`(ZX`di2JPL9|a~T z{U(MciW_GjM56l)A_UD7qGqJjwD$y=NT12TogCslyUTY~ z)U;Q0&T!sFMOBd3deufWL+r!Gh0-8ZBSc!A9Nw-NRf({!ti z^s^7-Cod0l+^7liP%zn_erR{6*-n0HZ#NUOQ8Saaom`yp%`%*e(>ayT=xL$vY?)*x z(XTqIA>m(zE6{*nRHfV5mP(sE(BUbU;9OjAOg5+K;9>DT{~-ii?Gi&MuQa^6?Art1 zwLX^^tx4xwwc%qBz`z&*N=jhO@-1}em}@_MMYnZl3Y?eP^_~Ew1a4OWpw6q13oX%n z62)=~b8yWBE4bKuuipgB36Korx;l-iU?V(~7%i%6``6>S7g`ed4v5&98P(K98~e%g z8g9&HXyY7Nezu&Z{^v9Cd_BK$iH6%Qv(y2(T~X}7fPrISZHl1Ij^>@`wRDBeWuyxy zP1FMB`ty~D$j;@Kvy|{LO-Xo-3m<%VQwviMROqHlyO9e}l=TrTL+(WQ5h39{i5$hX z$Y)%v%G(NBF}un`Dwy@%&E}n(DP=O#mal~#d`k{`-YCgN(s>3SK1y8?nrO4% zJ7TfQpWsiwno7TF32^FwI*uXtrb1_Q&P~!!FmNf5{s<5jWF4naSUJ$|7#n7&iBOrW-n_DGc&`1sg!8< zif$q2vW95J^#|HxE7AR4dzPZh^Qr2Ul)5*5HQ*DT&BOaU##}0+=MuFyXCzp^1Ei5m zpP53@Xwp=Cg;#u)NL0D>3k5XsL2M@UZys zx>lCQ;gdDWMmTz{tGM#a{r1~c-o+C?QiSSzUuXs0w+2lg^nxb!3dEOcpl2js#Kat` zUuiLc?Ap1}=0vQBOf1EhNl`SKHH*+ZB%FsbTm((I6i{s+AJ56OeAo2Sh!koh@(9RZ zTuc&YCp=FL&3V)=;C(0>fjOK>hv&0$R0oOzFumE66{j5#C82m{qoce{QaT^?8LI93cS|91i6lT?j$?Xqe6@qzTGIwA zZzs|l&d!E{4j3S}qXq^BtgAL6JT+n;mS$;KSXg|(N}fQguV|K#&t_4qiqMvXboZ*k z~hf;tRUkbmZ$xe-Ao1E_Tv=nxj*Y!MQh5Y@X*dvWU84nrMl! z?LX;&FC&_Abl;iRb#BV;6-_W-6egvFl4_h-i*3NPi2^{OTl0h8Hc)u=@%dfNpFn~8a*-!@x$A7WH2UvOAlLpXIaiG2J9Gr5acAXA2Evi-4RTopoq+In5EwP59cV+E!fHK_JL ziJf$G6e0dW7JM1dloOy{N~?4`VtBr7RC7Z`khqKg{Ubnu&p!V*UhsC=%Bz&{+htCZ z9v$Zn-wX~HKNezJsck77$Rp|sCp@RGN!*wXap5z7G~WS&*7vViKE@HAu$o7L>HXM= zr`Ie<$wM(Qp?IAM`Ry2s`jVTh6fyiaYhXXV-rpn&XkU-Zv}2l{Ys%#;Cm>�Tq_R zqUc_TgzjDZK|(_r|Hnf4(FrfLoc_Tan9d6)vU;!UAb>Y0?g7qvtrW!jW6cnQ&`Ow@ zc7}R<>kTIgBodXOa7wqGqpRw?OG}T(uAGrISF!jOqORoI?Ph;UZyCAF!RiNJ1NOf7 z0cgvg4I(t|AeRO#XXAcvC^|+UC>t0-Y+Az)mE}AH{6T-2TQUM_&T^Ke^#G3osrH`| zjwyn)AuSJDi{>O}7gg}pnKGPA0qz?e&u@oAT)!@;d4N5lf@mDwTSf_L>lzS6Bg-&dll4cMmJnx_|*z9$`{81V zObnHtgz_aQytp)FIfa0b3miQ=HX=}t5Usu!*0p>1?|Su|MAjPzTRq7y%Uz9qSz&8Wtf| zrqW7dO} z%I7ka(&na{nKu5}90fa&XW%v~=3v5RqyG=8{@7InvI$j$5QWmp5EM&)0t4d~JG4qp zI7t;)I5QX{Vp27@wG#}&e^)?D%S4o?K8X96C7dvqLmrnvnN`_icg|&tR!zdU6goCX zD!s?*lAUj_@Csn32AS!$L1@tKSR>S0W%iA|t;t6mUOP`?(l`YX4$(u!dnU& ztfpYqL}=B+HWqd*KCyut%Qwj@=Y8Na!mT4Yh@)$CU_NdV^jr&r${h!Dj+8lLZ}e(6 ztO39?PsVF|Xb@)EmpXL7L2a3KPHO8$ou%_xzTsZh)zdRjn&^Skr96yC|@xKRT#rO4f-wRKpL=8VcoJwpp!G3z8 zsx4vi7J8fLpIPts%PHeEtZjGv_Q}^WdONKf&#@2ks4oalh>=&dk)f1ZkbT!d{SOT= zmJ7TZtlYJE);piAe_hyF;~&)*}gP^U@~gWJ|S)d(tN`wEa8AJI<;-If3t zrZg3e3L*R@v%JRBJ@CDOUXqX3P$Ji|H#^RGcfIkR&^$B299d6cRz-9%{ebC94#Ps=f)hexhP+5HQLvnJlp)| zgwKmy=u8FwK9e;OLC+27{%pbzx_{`gmrH;3YRzNm6)@=2io(zCFK|lFXgWu%#nG`5 zcM+b$E5Z{e;JpFha{0;IbQCU<-LdJIjn$PhsHXOqh%|`RJOZibXxP@kkN6)0KXv_( zSbhIPtS5+aTuf=UQkd9YHG|NY#L)il8)>`Oa;mPdQH@>S2};H;*PMUOab6zyuf<-N zoX^gl|AX$A-&zP{=WbVQkm>9^87`+|S>-{rHlByB0Op@pfS0;NWzhG&n5Lg7Go#@% zXlf<5y|Fx>h$PQu)D7Ulh|qHXAlamjoe%_o6{x&%hqW&?AY*+PT`>QwrcAt#93+c;+zfADL&@VIDUkeoF^a#pD|PhdeDK2*Lp zXRFkogGzlTbWvf;&Mxb!F0zsKR`6)V%ZzP95irs_d9Ghflb@;eJYVJcvo3;$?Mq9H z`NR#f71~OE7}qqzoVv=k%z=vWs1h*rJFw-5+SdZZWL8ps%gjU08h;Z1=y_qoSZq#K z)^+n+U>MbOWox;4<|lIyK)6Ead_mAxm9wX;IaQ2<(9sBC9RB6j^D5AcQQm7YO?7{) z@bIt{BE#p!t@ZB$W7lC2&2KO89*`GcjM88}YLI7lKZKLxm(w^`^20r*$e4MzdSH$) z0G7X+nzWrS5kDJGaO+2)Znj4Y3)SEs=&+Qm3aa!p zJm5{A^CGFIjl>J#sMlXO0{$hDy z9~`$`=zH#2;vkySSiHB@MfKT0kjkMW(WbdgdpVkzJtP|;NN4DlWFbdn$ET5K*o>>REc;`(W9UX=8 zXA|qW#-;=TVwgNPZhnsWCcx*Uhp5y2i8f8!$1eJLYy-uAkH|_!`!F)PvXzAPVjVmH z+~K3$GYWOrbNFW}?P?Ds-l}ra$nY%N_RNm-D-Rx0wF{X!?IXsqV5h zA_b-dva*NMG0xJJ-QC?%a(&N1Q&L+;XS|G5V~HUF?)%p7rMkgQQqo{$Jc$pD zT<%BU*~3UPzMID-6H6#=Wg}3coPa9U?YA<#>YvuqY|m5uOxpj~`KoGK)`Rr4P@}y^ zOPSi+Yn~3!9`mE9MeWMy=06g(duyE!-5c;#-wn6r7akI=iH2V^he_TJy<5OUrW2ivopHEb{Qld3x$)`yQV&196ifIyc*XI9(qC?wCRja!!f`2) z29N$ST@|$whWxbRJI{X#;nnkgoSO=~d$7G&Com@d@Y#pobBsCt4-!c{aWBfM4@!+q;W}q&7@4#=Pwn84_9{@$+_-AIHh}B%_ zr$xDmz#Z{)3sn(qDA8#!4=~L*c*#h?ljH{5DfUcOTr9PRNn9fG_Z<-K`em(81=#i? zzz`IBM6Ke*tlskFXXDczfX;VJ5OqJ?0GjH1!W5*i{0n`#J{~J~F%o7T` z<^~FmO~=$mn`SDf~ zlslorkN;` z;|3@HS5}l8-?q!NPFCqIhaoQl;G_L`9WdmA%O(%6-bRyhU8Yc!rDy}<Gh2zEynG+$(8=D>}}oQ8LDg?9K;bA(W;s`BA7?^{D&v-Rdq2ue8n*2pKtt+>u3X zTCb~I2NP}Dwl$MaXls_=@aIXC{OLzWoo}>(cD)On3mL7AaG zIe?+@7@rGLU44In#!UnucG@*vM&xPjbm}Scaueg=Rgo^oHE0kxWBR7CIgQQbR)#kp z*Em$6Y2kGa)m2F>u``RH?+4__|tV&#lUPQUw2~876HSZjHKE$Ew2@PE~YXupo)s0s+0r!z2JKRLxcn8*Z%uaMk zLXlUUo3$eaMUI_hcCWgD0g{U^gRbP*(2DN?)^!zUd?8kOGaL-TJ*Ic?r>NyJFMP@& zEJlgaosnc>hc+n}3lG%^eHpiET}fCX-+c!kewi5Y9lC%s!iF=6x#=Qn*hLq9ETUNNIMP^ebZmk2sX^>_)Nr2#fIOY1;i4}V1h3vV4^I~AK(nzr- z84rT72r%wXLIiFp3B7!0ZhHv84GaNfzho?i(1tVx3__P>k z1Bg*YEA}sPY)va~yi`?h==gN;NU`GJA=VjW^FG1ZZ{-)D)pr0a1|qLxF}zadcY0O zuTPe9PhNmC6;7-j275whL;4OwWfL6Aw4|!LX6@2L~67Yu- zn@J%QS&zQ;X@w1cu{O>hO#AHs%DFxKi<7jBSeAlZSPV!=ch~A8!XU--nP! zcg2{Ig2D*rctFH{^kggo2tn-BAn2zD^Z}rZ*(%#wFhE=WnX4$jje*OY^uw9a%SnH}!-I)7%mq`yah4LN4Tliro>dRr zkvB?z$a0agxkkiJ@Am?o@`Dt}J`1kng0%Y~%;DwUUt*sI&Es%cScOvviIk7R|C$l} pe+^51%_96K+wdo{Srnz9V0lz<=8nk0H_(ApE?rT~zG(F5{{TqB8TkMJ literal 0 HcmV?d00001 From 75bc8e676166c9338d03606c47d7c10b01e5616b Mon Sep 17 00:00:00 2001 From: Brendan Date: Thu, 29 Oct 2020 21:28:03 +0800 Subject: [PATCH 113/299] Updated UG --- docs/UserGuide.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 38a8e468ab..a5770637b8 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -2,10 +2,10 @@ ## Introduction -NuSchedule is a straightforward but sophisticated application that helps you manage your events. It allows you -and students to not only keep track of your school events or activities (eg. lectures, tutorials, assignments), but -also monitor your personal businesses. Its command line interface (CLI) would also mean simplicity and speed, -which sets itself apart from other apps such as NUSMods and Luminus. +NuSchedule is a straightforward yet sophisticated application that helps you manage your events. It allows you + to keep track of not only your school events or activities (eg. lectures, tutorials, assignments), but +also your personal activities. It utilises a command line interface (CLI), which accepts user input in the form of text. +This gives the application both simplicity and speed, setting it apart from other apps such as NUSMods and Luminus. * [Quick Start](#quick-start) * [Features](#features) @@ -40,7 +40,7 @@ Format: `help` ### Add an event -Adds events/tasks to your schedule. Can support various types of tasks: +Adds events/tasks to the schedule. Can support various types of tasks: * Personal events Format: `personalEvent EVENTNAME /t DATE TIME /l LOCATION` @@ -85,7 +85,7 @@ Shows you a list of all events. Format: `list` ### Clear events -Deletes events based on their number on the list. +Deletes events based on their index in the list. Format: `clear NUMBER` OR `clear ALL` @@ -93,14 +93,17 @@ Example: `clear 3` ### Mark event as done -Mark a event that is completed with `DONE`. +Mark an event that has been completed with `DONE`. Format: `done INDEX` Example: `done 1` ### Reminder of deadlines -No command required. Automatically sends notifications 24 hours before the event occurs. +Shows a list of all events for today's date. + +Format: `reminder` + ## FAQ From 19df961372b169e5b36f7f28bb48bb1e0e1115d8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 21:53:15 +0800 Subject: [PATCH 114/299] Makes the overlap checker work properly --- src/main/java/event/PersonalEvent.java | 10 +++++++--- src/main/java/eventlist/EventList.java | 13 ++++++++++--- src/main/java/location/OnlineLocation.java | 4 ++-- src/main/java/parser/Parser.java | 6 ++---- src/main/java/ui/UI.java | 5 +++-- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 1a88b2cf05..1dde2181b2 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -75,18 +75,22 @@ public LocalDateTime getStartDateTime() { * @return the LocalDateTime get from LocalDateTime. */ public LocalDateTime getEndDateTime() { - return LocalDateTime.from(end); + try { + return LocalDateTime.from(end); + } catch (NullPointerException e) { + return null; + } } /** * Prepare the string to be printed in the list. * - * @return the string required in a certain format。 + * @return the string required in a certain format. */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + (end != null ? "\n(end at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : - null) + "") + "\n" + (location != null ? location : link); } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 74153839d4..45a8f29654 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -177,7 +177,12 @@ public void clearEvents() throws EmptyEventListException { */ public ArrayList checkConflictTiming(Event event) { LocalDateTime eventStartDateTime = event.getStartDateTime(); - LocalDateTime eventEndDateTime = event.getEndDateTime(); + LocalDateTime eventEndDateTime; + try { + eventEndDateTime = event.getEndDateTime(); + } catch (NullPointerException e) { + eventEndDateTime = null; + } ArrayList filteredEventList; filteredEventList = (ArrayList) events.stream() @@ -190,13 +195,15 @@ public ArrayList checkConflictTiming(Event event) { .collect(toList()); if (eventEndDateTime != null) { //this considers when the events already in the list lie in the duration of the new event + LocalDateTime finalEventEndDateTime = eventEndDateTime; ArrayList filteredEventList2 = (ArrayList) events.stream() .filter(s -> ((!(s instanceof Assignment)) && (s.getStartDateTime().isAfter(eventStartDateTime) || s.getStartDateTime().isEqual(eventStartDateTime)) - && (s.getStartDateTime().isBefore(eventEndDateTime) - || s.getStartDateTime().isEqual(eventEndDateTime)))) + && (s.getStartDateTime().isBefore(finalEventEndDateTime) + || s.getStartDateTime().isEqual(finalEventEndDateTime)))) .collect(toList()); + filteredEventList2.removeAll(filteredEventList); filteredEventList.addAll(filteredEventList2); } diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 686d9dc63a..7d1bb3a3ed 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -40,7 +40,7 @@ public OnlineLocation(String link, String pwd) { * @return the link of the location. If there is password, return the password also. */ public String toString() { - return "\nmeeting link:" + link + (password != null ? " password: " + password : null); + return "link:" + link + (password != null ? " password: " + password : ""); } /** @@ -49,6 +49,6 @@ public String toString() { * @return the link of the meeting. If there is password, return the password also. */ public String fileString() { - return "online//"+link + (password != null ? "//" + password : null); + return "online//"+link + (password != null ? "//" + password : ""); } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 9609b2cc87..b20bf17bc6 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -420,8 +420,6 @@ public static Command parse(String fullCommand, LocationList locations) throws N //we shall check that the user input is not meant for any other command beforehand //because the default block will throw an exception. // i.e. when this block is entered, the parser will not go to any other blocks - - if (words[0].equals(ASSIGNMENT) || words[0].equals(CLASS) || words[0].equals(PERSONAL_EVENT)) { if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); @@ -524,7 +522,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new TimeFormatException(); } } - //this deals with the event holding offline + //this deals with the event holding online else { try { timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); @@ -538,7 +536,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); } - switch (words[2]) { + switch (words[0]) { case ASSIGNMENT: startDateTime = fullCommand.substring(startTimeDividerPosition + 3, startTimeDividerPosition + 3 + timeDivider) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index a5f3a0417d..20c8d9e086 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -166,7 +166,7 @@ public void printDeleteMessage(Event event) { * @param eventAdded the Event being added */ public void printAddEventMessage(Event eventAdded) { - System.out.println("Got it. I've added this Event: "); + System.out.println("I've added this Event: "); System.out.println(eventAdded.toString()); } @@ -263,7 +263,7 @@ public void printClearEventsSuccessful() { * @param conflictEvents an ArrayList of Events to be printed one by one. */ public void printConflictEvents(ArrayList conflictEvents) { - if (conflictEvents == null) { + if (conflictEvents.size() == 0) { return; } int numPrintedEvents = 0; @@ -274,6 +274,7 @@ public void printConflictEvents(ArrayList conflictEvents) { numPrintedEvents++; System.out.println(numPrintedEvents + ". " + event.toString()); } + System.out.println("\nBut nonetheless..."); } } From 911ef55d3d695454cfd2ad13cc2d3b8bb626bd27 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 29 Oct 2020 22:14:28 +0800 Subject: [PATCH 115/299] spacing edits in DG --- docs/DeveloperGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 8f47f20021..f6f692d96d 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -141,7 +141,7 @@ and location ‘LT27’. Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. The sequence diagram below shows the process of adding a new event. -![AddCommand Sequence Diagram](diagrams/AddCommand.png) +![AddCommand Sequence Diagram](diagrams/AddCommand.png) *Figure 4.1.1 Sequence Diagram for add function* ### 4.2 Clear events @@ -212,7 +212,7 @@ Given below is an example usage scenario: Step 1. The user wants to see view the events in a chronological order. Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. -![](diagrams/SortCommand.png) +![](diagrams/SortCommand.png) *Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events From 6f03493be698ca0124e60b83103ef77dedeb4995 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 22:16:17 +0800 Subject: [PATCH 116/299] added clearcommand diagram & description for help command --- docs/DeveloperGuide.md | 7 +++++++ docs/diagrams/ClearCommand.png | Bin 0 -> 22505 bytes 2 files changed, 7 insertions(+) create mode 100644 docs/diagrams/ClearCommand.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c5bf705259..04f2451efc 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -166,6 +166,9 @@ Step 1. The user launches the application and wants to delete everything previou Step 2. If there is no information stored before the user input the `clear` command, the user will be reminded about that the list is already empty. + +The sequence diagram below shows the process of clearing all events. +![ClearCommand Sequence Diagram](diagrams/ClearCommand.png) ### 4.3 Edit events This feature allows users to edit the information of events that was previously added. @@ -230,6 +233,10 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio ### 4.7 View events +### 4.8 Help +This feature allows users to view a summary of all the features available for the current version of NUSchedule. +When the user inputs `help`, all available commands and a simple description for each of them will be printed. + ## 5. Documentation This section provides information diff --git a/docs/diagrams/ClearCommand.png b/docs/diagrams/ClearCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9bd39d62017a0e599b9c6a40edb5c491fc02e3 GIT binary patch literal 22505 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 JGSu;u{{ZlUsXPDx literal 0 HcmV?d00001 From 448c9323d3bffe5527ed80011d828149d2f3fd39 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 22:28:14 +0800 Subject: [PATCH 117/299] added sequence diagram for help functiono and edited the numbering of diagrams --- docs/DeveloperGuide.md | 9 +++++++-- docs/diagrams/HelpCommand.png | Bin 0 -> 17849 bytes 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 docs/diagrams/HelpCommand.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 04f2451efc..157a140691 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -155,7 +155,7 @@ Step 3. `addCommand()` is then called with the above parameters, and adds it to The sequence diagram below shows the process of adding a new event. ![AddCommand Sequence Diagram](diagrams/AddCommand.png) -*Figure 4.1.1 Sequence Diagram for add function* +*Figure 4.1 Sequence Diagram for add function* ### 4.2 Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. @@ -169,6 +169,7 @@ that the list is already empty. The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png) +*Figure 4.2 Sequence Diagram for clear function* ### 4.3 Edit events This feature allows users to edit the information of events that was previously added. @@ -213,7 +214,7 @@ Step 4. If conversion is not possible, then it will check if the given string is The sequence diagram below shows exactly which methods, from which classes, are called to obtain the required location. ![locate sequence diagram](diagrams/LocateSequence.png)
-*Figure 4.4.1 Sequence diagram for locate function* +*Figure 4.4 Sequence diagram for locate function* ### 4.5 Reminders [Proposed] This feature will be able to remind users of the events that will occur today when they open the application. @@ -237,6 +238,10 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio This feature allows users to view a summary of all the features available for the current version of NUSchedule. When the user inputs `help`, all available commands and a simple description for each of them will be printed. +The sequence diagram below shows what happens when user enters `help`: +![HelpCommand Sequence Diagram](diagrams/HelpCommand.png) +*Figure 4.8 Sequence Diagram for help function* + ## 5. Documentation This section provides information diff --git a/docs/diagrams/HelpCommand.png b/docs/diagrams/HelpCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..5aab838ef09f81f022e3f7cff275c3166c56014e GIT binary patch literal 17849 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 literal 0 HcmV?d00001 From cfdcf8f3f9b49a0a6046029e7a5311abf4b2f3cd Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Thu, 29 Oct 2020 22:49:33 +0800 Subject: [PATCH 118/299] update user guide and created jar file for 2.0 --- META-INF/MANIFEST.MF | 6 +++--- docs/DeveloperGuide.md | 3 +-- docs/UserGuide.md | 7 ++++--- docs/diagrams/LocateSequence.png | Bin 96628 -> 108400 bytes src/main/java/ui/UI.java | 2 ++ 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index ebc874c807..7ab5d3776f 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ -Manifest-Version: 1.0 -Main-Class: NuSchedule - +Manifest-Version: 1.0 +Main-Class: NuSchedule + diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b602e952ba..5fa0b15d44 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -245,11 +245,10 @@ __Target user profile:__ ### 5.2 Value proposition NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) -* +* easily finding out about the location of their events ### 5.3 User stories - |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| |1.0|busy individual|keep track of both personal and school activities|avoid clashing events diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 033e9edf2d..c2532d333e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -38,9 +38,10 @@ This gives the application both simplicity and speed, setting it apart from othe ## Quick Start 1. Ensure that you have Java 11 or above installed in your Computer. 2. Download the latest `nuschedule.jar` from here. -3. Copy the file into a new folder, which will serve as the home folder for NuSchedule -4. Open the command prompt and navigate to the home folder. -5. Run `nuschedule.jar` using the following command: `java -jar nuschedule.jar` +3. Copy the file into a new folder, which will serve as the home folder for NuSchedule. +4. Copy the latest `location.txt` and `bus_stops.txt` files into a directory named `data` in the home folder. +5. Open the command prompt and navigate to the home folder. +6. Run `nuschedule.jar` using the following command: `java -jar nuschedule.jar` diff --git a/docs/diagrams/LocateSequence.png b/docs/diagrams/LocateSequence.png index b6950bb3fb03fc42bbf08a94a812c24801aa3a62..f8c3d6aea134cf52d46153dfafad465fca239f37 100644 GIT binary patch literal 108400 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≤cnI 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®{z#9&i>t|3|0Ln6Qes7kRq_sfWN z83dzyaH61CAcIc$+T2qW$(bJ>2AHqKa%EhGDY}ag5lN2S{do! zQ6bqRzo0UZXq-}cj@3R5mkB%Ix_{K5%8)EiSB^XX3shrNWYMkfH; zvKbOFd<%m;$Y|^lK2fM^p^qoecX(m!Wm}kN{jp_Y%g(&c4)vKvQ)$Xx>IB_pq$$33 z11c<}Ig?=6l;jRz*y2LeOI!zhLXM2%QEyGEI*49R$mp82bFQy8*H=6Gbu+u2cSTtW zZS7Q$zB@5a=eYb=`36u=vK3;tDOCsHmq`NeOHR)2zNP6mEZJB8d<>dB^M56R#Fz6^ z29q5umTc+Hr!RP&ws_&s*2Eu};Tj7{axOh<%WdO-`->NhCe^+-Zdji7{u{zIsZxl_ zocfGyfBTH{HXYi>%)1%Q^Lj>yf>LG1Oxm_bs3wMtR9c_3;-Ih{wD2h(^CtCdn;9D(1ZmLl1sP14hrYcW7;v`d# zYe7Pk(@E~C`U;^7(kQ{{&AflrF31PkOQ{Y{N-WlOR!$)uU<(vmwhw=%y+8oQ-z_8t z7EFqA4DJOSZ-BC5)a-Wjx!3=Wz@Cg)OIMS%O_Z+x_s{+-8hi8-t#!x6n~Rz@ey;i| zF>*UV^Enbz!UZEN43pR~bu|2t)PH^11}Q0X{ost7j;qEdpY1=$Z~umd6N;k++-)&u zESba9lkh0e8|41S?|ao4&^dfreHK&_AO8hl$4Blz&tOVWCb$33A9zaC{Xv-LXGlG~ z{^bl1O^iv+#?*=Y&K&s%bs2QPpOTWPUjWpd{tx{JX;Nqr|1TUB(vmCCjr?tA6D@#A zEylmC4QbE(|5%bKxyIj48lm@D%nyl-&cE&XNkzxMglv*z=6@{Q^dF1OtqTjFL+*dt zuS}QI{5U#%zFvL>3V-2H{dx_P?E~dJ${1S#4tSi__W9Pj(#{hZylRgpW?y%oWPRKZ zGzvd7<3)iPSnaER`-x7c%9|6I5t;&zG2JsVACs^u(|Yw}svU&)h%VL;yoV-LJU`z? zbhuuP-FQmwGr94&6E9CCjCB@hP#sel*D{-vCyiw0+wAt8N3#7c9Qw7JcskU)_)6&K z`DHrHa(=%nLsl=r@Zz4vnCZ_r$^3)_XZp@K_0o+*kMCTRa(b9r!GFqFb;=v1P^dJ5 zR8RL^D>VHS#GR0{zm~vfv(xgzp3H{-)fYIwqYU&oW@$_{ym!|rh0U~Q`>vXrz9q68 zIA<{J=w#Y!Y;K$KAf4LO4>>#TRXxCjaO?xT1$8(oSICz;Vx#1zn)uh#0~KbGB);pc zejbWkf2DojI|;;Zbao@tJH4$T(|bLFTTOL}z`AvfFd_+bO8w7InLJwbp0r2D5)7r{ zlB>RTrpSYDo44r8^^M&fljct=My`u6l1TqJ+{Ax{#)w0Mu}~LP3;fbINVRVKZ~iM& zwWI)x>hTIXYJk=YrQeo~WY6-K7wF91$;9BA8YS+{7MUD1*-X=ITh(!xM0)b)S?4{v z^aRY+XKv`u=UEj$?T<^9a`W;C1Rs;3s#zD1?1dS_x*&%LPEF#{9{1&yOHKo({8hbpF!h81^ z&g!7VA?(p2_`xc+0fD1KY~9%_)r-ntoV}b$t4pMJ>XC+0XAzA^VwD~8D6`maPkWII z?!y1$5ZgIWkHAM)g%!?j+2EmQbWvtXiaEua`F;nx$7&p|s)!_X2T4DlJwMrviOSA< zw840;cqh|UzG-iF+aB2d$=RF-Q?A3FkU%bWZHUs~V*MUTsD?Vfg3bnCHS^*Sv$U#- z-AA8fHa2X;XK_#eEQWdW=DE4MN3dfOoHUCGnhvLE!RPf5K3g$2d-6_luE{w5kSWdA zm!zQoo)Vj08KE59kvOy{<=DlGGS*+qYWiEgirHF+P`R0SmmIIg7E{WccC@bV($r)f zjDxl#^0eWa&Rw@A$>p+LBJ5MAIBwLO9!f-y{ODDY&A#S_&8Znib+0Fak3QLR{!{d5 ztb}=>9c{*#)jO7cx7fke)8fuqgTeqQ!X1FR7DFq_Xlw}hnEw-ajKHm%F|&%Ws3#;- z5r=NXaGjaS!l^Hyw<6x~$dPiC<|tUDqe^6edDdWF50Mx96#x{{kM-GZa12s>5CcyE zX2xvA4i3^zB0BUI$1L-hO1tZOj@*)*6eMn^kLUATuJ&v=KIZ+_j5k{8BTWLT(|1xi zNM-9ryfJ!%*>Nre8%zXg<)$4mfBj|vB^tD?T5PpmLU5nO1kr@3&iebJ<}t}0AUE|& zz_}-c{tanjQbZ)5s&IHRG~XXF=P?7vKhz?d(w8a+k5tFG%M8zcj5m9J$>YKH$2%-8 zbk?NaSlPlRGSK#Vk(SADb8Ct9!cfZKqk|o6Hl|i#3b!|>J=y2Jep`12H8L-cI{R4V z`U9!GZ)RH$j(#)9=SlC|$7OkiZsB~phMS$Slt{EIJyvdugk>X(Pl|agC8?$PEgRjU z)fQ!;UeJW}Q{&9nUr;XXVUx{GOdPF<(9u6~?1=7JFH4WmhzNbl!^e)@Z?^GJ^O3dW z*jKyKCqR8>!;El8`_e~O3)kNbx_WJF$xTN`$&jzqCt56T@B4nltm+!ynu5`CZnm zF_^)VYO3#ZPw=oc+SgNv9eJ&+BBPW83yZ?CaXkIZ?le{v7Ml6;LqMF zP!|+i9sQBqBrTXk&tw`A?wxi@+I-_fv6L&x&tLU$KBHER#tg+j-X;HeKur2n<`tS} z2dG`+Uo_Q;t(fB2ZCcHi|U5xQ+W5EH6zBe4 zfM-#Ho{3@N>9;a>XKFWt{S~9NqR!STJ0_><(E%F_ld#qr@%hYl;DP44J16I5#J)ck z|M)l#N=Lt!8((U)LJj3b>eWe1ITQJ({im*4@MsptRPxiib6H>=XJ>PaB; zpw0?-jBUGLyLf)+1%-PB8GW7tdVW+U+oxVbe9t(H`ItgG%fAMU>n-5R7#ow=+iTWo z#yoz7_DKLDWO^s!&TlhpoMELj=eqVioI~iJo2pg}0Oj`FQ9~^}aqMtrA(Gbo3 z@C&dJbGXQlHpL`3Y}z7VOsr#w8$Y(-Z($&E8>o_S*w@ny6!db~Te z;y#DfSnnGg>(exDug=#^m`Ox^8~t?SQ%(}6j(V)rm1AWQjY8H#yGI8zJpCqgTl3B1 zFP@c@eP-F;Nke0W*=vqExs-%;Rk3x?$Bge4-0T}xt##X8nbh-q$&&F8T019(_4+=4 zEO;_bu!+-O-g zE;j4s?|vrY!%RGb2@~vBHhZ^c z*p{<2x&~WM?OaAi_pECiZsU7=#$M7H1-+^=JeN7nWdD)P?v|d)%*RnV4IpyT!>b zrpj_|4J*!L1CgHT*8hjG?+(OzZ~wpTq*5{pSs_~?B3m{ovTklFd+#kol5CP>hmt+B zMv}ZH-iGn@gmIlUa-%=* zws(5hn}$5Wx<>yr+ z!%~cVtiJGi>FS__g7!w7zjhjxiu;bLYd2dM?C*Y_2)3JzcM3`HAWzcgIX~%YG1MQU zdvoG>WY-ORo#7wrUqUu}gc;`KvTyXnG9`FUvs(;yDe(@@Rm>6w@#HNt)D zo+ZfTBGKP{zQ3oe`!0Z4A#+>_t$KigZXn-b?k$7X5-TVLmg+!;omP|eg~ENXX$%r-anqf^J*;s_4w$j9$H#VbSx=GbxEvRqc4gvtkDMc!Oa+i*Fx1Xj%sr zi}_xyI*nR2bZ9kH)SvbqMMQLv{V2aP zpZ@af^jc0us^WZq-uibMRGD^nSpb=n9@b#2YF@AE&&pWK*j|#@3-DTIT+uCt+&c_* z5XPvgMqVqckA6t2%Nn9Ea+=oxcNOUb5za!sDY((l9)GzR&0D@lY&LAyOGcKZS@0Sd z%QG=n+9e3_sj>tuhpw?emlucI_plex{ki%Diw1|(Pm}~#u209Gv@$)FlbT|doiK^% z>*-R)2gg|vw;nqg4?`xrFRo8_RP>(PTjbl-f>S2L)d%r)u2)|2l)j`7(vXxNNRhoz zQpI~-u!N*f!?0}{xU_|AP~)b(@JTic+Q6+$$OPvogLN-K(MRJ}1?@y}iZ7#i4PxKd5{mss&_( zfq}vMi()DlmPC~rRdfZd`L`4Lg-ZZ|=nwGJas8SKAkhd`^`8`m!D#V-)bIkv9giXr z2IIDzX{zt;t5dQb{0P(c6Q|Q^MZXTRcDzzA`Z0acWdyTk&e^ZmpzUYn)=UQRyQuU? z7LobTULm*fX#v2|?AzS9G2hF_?4G&w;!4O?kIvNF4>~;;-%U4{+XWe{YgeuN5Ps$? zSBfuO>7@)e&3t~~O&N`rfGC!%4AYyR)1y6o*(1Uq=M!WFk)u{tn>RY5=*$KS)d*IK zIQTMnM^J@3PT>xi1lsXJ3-*r+-G5Y}SzrXXP1b6Xi7RviXGj^C2t`3mppL7cKG4eYUCt16BcMtutpbpSvN7 zc8$3hd*mZ~Rj*!(Wlr$idfpIH-JpZh{YELE>kVhsJ(*n!!=;`Z3-~RVXU$LzRZ#_j zCd2Jf4dHdupTnT?9}GkEv<_N-2ZB>c#ztW!^@Jo|(@uQ%xFx3;nz zZI=~cBSX&vp|4@mmMd`GO}BIggSyI6tiCSD%*rfvE&-VZ5fKrzZP$2w)K*ht47Ri} zy!)xI>0$)mBgMFffxYONH?+*J_2zK2P@Sq=SF}|PiGWiA;&WE z#2W`$zhmhWlWp^lmX`yp^23zXR*RIUjTj1{DSAVHk)(=z=JXE@Q}ZKH^)d99qfc zflS1(LwDDx(vR%K0=4`vzsQbj*`+t z@|o9^god78GHMYM6C2v`Q&v%FHC%&16^7bbS}L>~_qEPv?EvFyPnMROI`7v`Kz)T_ z!%){Nk-%}`7UCGjUsewO<*UA3EU=7SrxqiMkI`N(DMv$R?ODIXiM+hK8#s(Y_&{+q7n10N35 z%WX}e=c78~8=W6s^q!=?CJc zcK*53xtBx;%7C{|sh=2u;F-k#Iv91NU$L?XDo8(=3~O0gI8R4LRj+*XAs};%7A*a6 z!KquAbS^#P8@|pGU25i(S!z?8obj;de)Ld^?Bet_BFPl}=WH&#;F+p9%(UF89t`0B zxxHQ)^*FV1abRt?$+h%S;;?V^A8Rt zZAk%0=S#p_36KKOA&FJe>^#mF`DOEM5J!eUcNBPoJ4x zESPmPYeSAEONh@uW#uR@!I)=!t>6;-EO)TO{N)`^yuu|-oFnT`uT{Fbwf&RxvohTI z2uF6-nEuRxExcQcF5B}=PW6=(M;L@!TuC+}lS6nAQ zj_mIbJAS9C^S@`RG_v`#PblQVSr4(iyoSfs>x1>uZ&wr>H*B+A{Cb5vX*UKf6{f}K zFcDtj+OgRW5x>1|TCeZ>6Q-r5-%%beiv__l>;Y!O_aFC`c@vbLhW$w-?MpGE@jdeP z+Iq?)W&J)~{i>pY;l-8caPP9vLigJ|k$ooj(j{mafI9p-f6Ga7Z2EEL6sUpIgQj%ehj4_)^+$4o=g8M) z&hkzX%c?DwnU5G4ZT{sY&4H;7sT@UhnsUy`N*FUq0uBRz2Yi_3Gv6C{$mL=M|y7 z)^DcwxQk=nm<@lL>wim7{4RS~mKhf4MTqv62fG~VSkKPshlPgTMLXwqIy&)V4;Dmm ze>;Sya0qt=q8m(y+l{0jS1(&?d@$O~S2G`X;5?3UjG^P+Z+*%nU8)rMeSVipWP9PA zbZJOb!L#!D@xFBjs``bR+_tn^{tS-fk`FH8DLxGeQ3CK!ge0I+Va}YU=J{etnvkO- zG)9dTiO$#F6}F^GbMV}@4-#!}(sCYdIB04TavG2Q6j*KYEP1G}X-idZFnK7dS+lJ7 zzLww3RBqo!{ic?dln6;kbQfmZ9%V&D=P`3|kYu=PHfy3;&D-(S*>2Na6AmP!bl>`T zYaCF|l4DsL;D0h$MB=oyY^^sJmhp6it>Q+XIva@hd)Yh;Aw+se^KGa2#@3`gAG~qu zoln~=k1E76A?+cNeTw4 z_RK@{Hqn>0r(DmoCL9yaw z@s1y8oiIW%L543V=K{y*Hb9c0eMGNcTG24Y(bpyq+Gcmyoq*uGzU|1em!txXqgRF1RJp4=2N>KBRj^A#|Tbw&F!;yTBC%bq0 zwC;>AtP9~sJC0OVR%Scd!(}7?EGjCZ4z`RwQVWGr6z{vAckIul9C}n=ia1W-u3>YR z^%@-GSQ7`{48*eaUou!9gp4|P%=g*xL=4qcXD;^gx6Lyi)aKuIgwOAlJJO!=dHQlGODyl63VKB^m0?(W(NyRb$#mujZWHYoL^$ zs&o$r(X`By6%!d586O}2@+Gj^=^#xZwR1yC>ha^pmYDzdX$F>-FzoQQiwpnXUbO}< zKw^w-OrGP&0))((4ztZu$X(DoZz=R4Dava;sW3 zwZ-_`Ar&VkdXe^a1N96m@UM|~y}S;--x-iVVl!eJVkhDU#6HCS#396y#JL6r25{SU zjeivyx@RB=p@tejffr}#Z?=7fCrf@Bt~caA;Hr1CUBCXtoEM-lDHwnXmIW*HXTm;&F)o9j4X?y*3qn%&&rZPBy#Py(+Coyrm z@^$Em{;GrU8o8BuyYBYTAL7oHqy=kKQTgz{Y-(YAc4lUZuLEpuGzro)3hJ|1himlL z@;+MNtNgOEmyfdR?~hAo+&K(>lX+o4&n9>ku{iFHIKN%xHzvR_bUXB@2ouVOXvh4& zuK|V&K`C)`3B^Vbq6GhNBy3solP!hyZgH-J%VxW_&FjEBLMiCH3>*Y2P`(ZU7B|Qo z*1kp{B;LPrv!5NQJ?PZ953?$j%2Z-WiwH)zz%)5B(NIsYz z`COqz`~tCnURBKbogQu<0J84Gw9|G*P!6--zgI(rQW1f;c(&6sP{FW0 zp6|H>ITwugm;yONRAHUX_;H?+l9HU9{KAC`WMom{;o+dAfK6IixmE;qxKedf6r&Sx zg;g4NyaF^QG$UT-irKE>j5rSm0zXBUlPHLZi6N_T{=Dq{tF*N5^|_*3XDTWxIy;s3 zzY@W#UoVlG=a}btRBebVu^xvRAG`=epu)0zvH_RRdIfEJ+2Q+CP%+v=wnstkDkCGK zu&^*ce{`McpMKAQJ$@E}*9GllhbSj10lklb04m<>QWA-SJP`1AsKI#GGl;wTKdQ3J zGrK}Vvf%9C;-B&M@sSW0mw653!dE#sf}f=y`abk|$XmA%@H_!{p1QqDkXlB`_frTf z%nkJXLd0hV9v&W;c+`RQh-WY{g7$eUr&!3-9 zc(8sxNCZeL*Cpy|YHE%lyu$FQujw#y8@Ew3Unfj0xV8#C)QC}90fCp;rr^Dp+#xEX zhs*{ybIzxvh+Ci3ehl z_CDfpeE8D-vX+b1IUqoc_m4(o#H71z5rL8r71_m zd5s16o+h6P3@=iFQ7Cu(aTr)v+&8U3ET6$GCL$vvgDVXedvlYFU^5b&-6y z`+)$C;si2QX!VJK1-|ZMif&2V<8Og2xF#iYaOJPl)qDSl;{kX;U6}FDR|;ReVR#@V zB?Z=7R@Q&n-VFl+5W5!&uR+iNr6diM7wZrpCMJOS z&b^!+32!_xSi}LBAvo{t_np6ek>#yhw`63Fv5%RYR|;@JcEg#YF*jRb|5?44YDCG8sWj?1v+1&mW`e+fJvskJdD;C$$E zeTL$8kG2i{IVkt)jJ5Satb(d?eYSqj^ig-u?%$Yk+fk_Uu`c zKlcPS1hmPkSK_cI2uLFH1G#E2CBOKY@c4MD?f$!2X1%?fo!&nI#X!wxIV4T};0H8; zLx-5*bwtf4_bxS~tbhs(kbWjc4h{}*fcg0c^tn3z6sddn?m@GHfkEmYA_d0emN{U2 z^$iRp3n|iVTDPZtI6Yw4Cx~t|k4Yz#Jtn??r>3NgMQ{9S^=5mvL)f7ynud1x&?ZHB zd4Q#*{JHDEUXY)kpPtTwmL$jv%_gS747Zjx^gz>~C7O*wRhQ2qNPG~t|5yJLV!p+q8+d+A+v1>)j%T(m-x8T;r&(v zn*mt?Xdr#7jjZY7iYHzBGahRzA@l0R5yq2**;&lK(zkDS1Ydf5{hgtZ)4j^_srNdN z?u&={4S;X}lFkZ1{tcHq&4Q+?dCwp=t}f_cZ4#QOy`OV8*kpKAeB(y9=k^zjuC$zk zJs~C&U{<+AZx7@p=SfMSvz)CT53Ou2%Z$Roy!?Za^7$N=XF*M~n|R+y)ZRR>7%9nVfO*63tjERW$di(i@bU4X-}S8L z;lgTegLhHKE=J&t{MdCr{`n86_|n_6lLlBvd!Us{SMJpe(ya2`q$opx;Q>>rmzNjX zW)wjC$Q{TmkKNmKTeZKj_r|RLO^?jdKIuEZ41;Jf5v{IQmka{I06%$hOpYAV-LR!o zi@?1O2~fDrXyck9I)_ept-(>$7}44^XU}s@HV?;owLgd(y+}ZPExury@CS1J?)T{| z*R0aY`E3e;tm-`O>fVFT+51ioTAdZ;J@GrMBeP^h-&PDV;#p(t_4;i2cgj`@n(?a8 z!$u)X4n;@MPtfG(DeUmAJJk&jk&AKUx4L6P-fhbBRKRHjG2|z_I4@pws=xID%6x7! zFbmq^C*_0B70-b55*iNYVOTB&K!>2Kn*V;?6KEvg=`zwiIZZHJcHueU1&LDcM;xgE zX=zMN=ivT4<9Qko;QIv&@ucP`)(HXk#+@8=jXUMEZQtmqC(NTL*s0`S3l9Fl|6N&T zzG{8YOkt@Cx|HbcMZT^-6`jj=)!PMTR!l4`v>PVw1nf1yhh|u?1^h?gHq}8fUDhfj1?x8xdV5bR0!4Hz?wvzc$8Ek+nF?|iGQMa9Y2SlCZvmqJhTPKAqhC8=gTNd+x6DBO-VUM|4zME#8sBF_l_@77 z!wRAQTX16%(EbdKPsNZgWNi@$!Sm?*igs_N!othpyCBQp2PK9>$@41G=*Z=3o zMA)`bR!1Ki!7VuYU2*d!)G^3QA!_tM0*+*h-|r&_sqwJHBq;#}+Je+@|0#B~-hQ{o z%MO<{{>QQsv17!^AXNi?zrLXQZ$Vlt9!P2phj@}!@rPngr4M#5Fsy}+!o<}x@SEWW z{A}WgTgTAyOqJJeAS7?=Ck2 z!y56ovp%2Xc60mi!33elMG@VYx~pd((WwO6jTpPgY2VfuA4B7W(M}PKz!oL>eNm^% z;lY)5XCc{DMn~<1V8W}Ky7^c z@P`u<6VuYtz{`dyt1#J&l#C3Ly9j4``s)|Ji7b+@d~LEoUyiZZKC|J!RTM8j;<)vs zy7~Z`)n;TRin6{^jLZ-FC1NpEu=QP zIy(XMbhZqVl7|_648(}H-Yg@+OGOlc&b0lyufEJ4D{sfprJr_jQ&Se^{?PF*%x^++ z3HazlerO%^s-sy3WT%1R(Hnml{69z&Kq4C9OpyK=@*%U{2<*?8a0|}q%s=Iv>P22S zh8nv@uN^`yQf1UKJO8aPwJjMQ<*zjX9y7g-yu7^ZG-TF8+tJX1M;9>>6*#`=Wl_-} z(7C#;V^Te3%4D`5Oh@OIv0+ug6?m8k_p|!Ah@oSchsno~yMkF}JLn}_^D0vvLo6GF zo<~?;JSK`xdJ22rE6i^3)jozw#FO!c7Kl$L5G7}@X%3akdjwJ)_D?cNYvWbBL5P~( zN6#AarrX&SyJO1(=-8EA^GR8E{S=XRBD6^fZ{ZeGt78cW#~+XbeQL*RMTrF6(VAvqtgd-!{7Wyua|twvr#H)}}c1;Caw!SN{HR zEMwHVF4VlC>QT=URlu(9I5oAD>VuI;PA>-C7QesnSSiSm)}*e5-lxM#!DsO%EDS`| z2`(&zB{s%kvQK(hJBu}><)|caC^^eEf$0wX<~lPcbG~34Ds%M5?xY{g{w!S_{hnCG zjd|NAoJSP|^haJf;}*y$+L9Im$cZ2Q2>UvjqE0zR^L;C`Jk$i}kH@Y%m-ZS!^}yuf zEGWIB-}K@fJBy4;e*H>W<5wV$sF`18|0B1Ds3C)u{w2_eF`}`D|9MPcHMewM=(>Tx z|I@#tlYn1pUO#Al^L$VX33xMvO`QafYB#&9Mlv5l_Sn5j8=72pQ^T-FAA|=Hv*kgI4O7Mq7Q(+eW^g@=m zJ84%%{>uv;x(P?yhZsADwth!H6(?c!zkWt=;r)L7SYg2q9Q}9|WBj$XUtm$cJ|DAy zW&isB%e-iZ?dZpu;wS}R(2A6XwCi2b+TFnqKe)&3v2rBb+wWaYxO&eSk#a2O^0-)! zm$UUbg-Co<(#zg$iXX$j*S#IIKTrf`1G-S-?~N6%W&5JjVRz^_(&thWN8B ze-&6rj?Ht_47S8wSJ%LBCrm*J1;+G1zNewSo`IeoN~S9J<&>28Vp`FqluY0h)<7bW znwrdl^fk9=yzgGt7d#(I7ii{sjdvGg=Ec|XAj<|ZG~V-u2rJ}9NP1CsJ5yx4$AE?n zZp|o`i8|q=;Z-_1I!Kigskpnl-@kv~)YKG-BsWNfHvmFwSpL(e$H)Ks+W*+gp-fAd zLi9%_7m^Q_fTVdAi3Vu@mdW+?!#;QXpHB`%QQfOB!_TIm4C3*_j7}(omd9nAA)Bsfmc9j9d6F9bk)(iMTNLv|O$G{kInA<;u zTx)-SKLenEbSkbv>%_MKU9g@mY9$2o5W(&5@0;~zmKM@lUp-m|v6!~naeRFLz`!9G zN-Zw#-KftM(@J~>9pp)1p1`3yhAZ(g0)x4>tZaCu!_9b6X>vx$lO|NrFx==%Qst57b}_1OMlvhUfZ>G@C__^nI@ z0c4mR%D55lwv<%cK;;(L_m1@De15=3;6XFeQ-i`h5|hjagv!N04wF~x9|b0uqRIKYy#z*mDb|gvQt=L7vF_qvd zpP&|w9mPTR>HXUSK!;ci^1Nm#hQYm=tQ?!$b6T|XHB z&OV8R2EwueY+xInJc*w*U;4YM&B@!}D<5$HN=QN5gc7-t&=q~rr2beQ{P3l ze97V~7T+D@Mc~*pv-81KvhB|uk$0+`HPIblN71K!LEKcY@H-s6}IDebVeUcd_ND7TOwJOLOq?@fl#b z2if`BG6Db>#*xFAJT(p4`!IeC4T5RZm#A~^P3h{6{1}K=f_?G6w4+nM^jO8dv|M+oVQ}N^9J1`qJR?4mQviT z3_PUrBVxW``^uwb2KsB(B0ctgD*XSKS$c^UP7SGHAAVfoipzq_Wsl;Oc{1uq&g>DK?oFDPG$qEmTEHEc8VWj zV=X3vtMm>nY~hX2;fRa|uv6(J?HC!^`w#Q+VuFA;s=b=eYJazZ`h(}5158fWkoiOg z<7hm_9?p2QmvLM%MhUft(@{P6;o%rg(*NR$PhF*8yE)_WY5aEoZ?!Y={a~=Q0z~@b zu7q5TS^Hi$IiJg%pmk{}t92mP%+)#hi_NWhq7b3=bJwXLT&*p$n=O%MfMzL`TLvm6 zXomXk5K|iQ;Ol>NhF`J zaJ-OwDX<-)$ym`-w42~hH-On*8yb2&iagoe3tzvU>GYU|&c`Y=DPrbr`R(sOY^l++olCUQL*;Rh+H6`1aeX51vo`$-5l9a8Ao_iQg*- z-!57G^4BZze6A*FiL}eG;YB-ClO??jkZdSzkn=B{&n^$95@K1fThay|tVfDjg;t|g zg@t$8Hz6TU@8zq=dD*b#oQIw&-@9`s0&1#CKFxFQlX{K0cYy8ZRV3 zbNAc&BF4eKo2Xz(eJ^#}`gh%G=arP645MSnc%hgotI@$o);DdjTO2`@WW~G1qZ9R5 zTp5{yxpuSa`}+~qySDeu7r3@_N`fR?dky}$U&;=)t)GrDTuR`c-K(k5l$D)N&+t55 zd`9c$=XYacrBgNf-FvXv%w=&W~QCYOleOSw;th3Xujy*y;xkUG5@8QfWo3P zrLVrINpY*?N%Bse|Fv(D`1EY%567Ggst>5D4O>s7Z_mUG9Bg>vyM}yJXw19II3kcb z+TOlZ=pRHe3;nWML%vodB%@Zta;(0MFlj_V=l$^{ho7Q-#J4qGhzf^Bk+Ejqm+ENP zeH2`hs4W|s?!e99FTPcL)+)|wl>ouub|38+q4pkHHJ!aUs_oJgDpJ+*%#&cnc(tlY zVQc7V!)%OLWyhj%XIULoS^*E7qYX1U%ni>2VRMY|16Qa#<`$8>d<~Ro=vj7Xg#RY^ zs8%qI3+BviaZ(b6#>NVQQ361JT#zSFg*q(`IspF`P|DBn?Euzep!~^wJ-w~znnh#T zaxTD{O@aS$0XpVUy9?2P2YLRvXkulHPx6+l>$kVk{hkzjRnep7-$$-0#*8@Hlo0H0 zjMA>Wc=pxUZr6}!FdM~M$4+928acGU#{M+rm(&f38KL2wY`#{E7N)oOO?-@HpwG1I zn(+|he5IOUs7*1QC)<2Mj3W5wywQplOJGs;z8ui2x!wVP7&UlOEK6MFI`{6}>-qt= z?Hg6ykX`-}QZp@rp$Tltq9A%yAep?>jJF|bA3vniCniuC8GcvcRVif}QPo0&Gm zEXX1bX&s#rpcl0Vf@m1aN-*!$mdvpDv}kE*m{pS`E4oDdIgK$%f7PDP2fvN;*Bz~A zKhIh*SAR>#-P$V0_OZq{_}a<*On;!-s`BSY$bDH`oT477%|FN9j7#Y8@Oikz;~&Pu z+f*W2NT>Z>8}rjmlan7$x~#PdgNug+F5c$;4h`Nr%f8<>Ki|vi?SfwwF&j)Tayi&j z$35v9|9Qjw5zK6n9r9hs$a$Tob0dPWxMCftbi9&EDE?LOu5Z9a#pUah-Ya7IW<#g+|Q>kZD37e-sYXO|6aQ0u;;#D!}#Emou>SGGqF zvXiG|i7NFPcz@_BS1RC>?00~Ch?erA{@*6Z=&R+iU^})uF9Uh7Bx(2J58-rG{*g(GQmK+dS8%>FG&k6gT0 z{r;Rxt!nP6V<%$kd1*JlMulg6x%!tWi*(_P`{}vQFL&!_o5<^rL00P-m3C9O@8g_@ z2)|!&yW+24-jtB8S`P%_A2i3i-;(tWHMQnNk4tY{N~mbfp}SI}TKThAezzxnfbxBl zbcly!H8fqcS8!Rh`>R{= zh}3T1RUEI~-&~#sqU7?M=an1!@~p;Rn9(wltjZf`1Jq7yN_p zx%6&kbwEU!%@Zs7$C^7y5^l%SOCE_&Xby!9)I4n4($xLLT(uZvRej(gjN`fdKEpfx zqV&6bmWPR|`3~iWd6XOS*o_I=YimwNFddpa>e zZ^K#6cs7RXjcHLHuj9g9wQFwc#$s;eGyN?Z&K*ML8dhRag@uZl;6JQ;H>1uOg3Vcl z_6MMiHwv=9<4migdTQESQ-dSZPAUgTSQ>^Y5|h^Bx6@^D5OW~d){pKja#zgbBc*)c zl7N8*JzBuLMP9P#s$MH5^{*^CH}orKfb7ina{b9c&6VQUa#4yO0D=;lnqiqy*ZAca zh^uU(6q%|+nMg(r>evL`G0dc{zq|Lr$bIKqh6y?rquu3@`%N`&MVQ^F6YpI}4jCcp z3zw8m@T@0`+bOLD}JZn zS(qKZ4RzEpda{*dMO^pa$xlc*PU=|h7*{RrI#@V90hKz`1MrSN$*wPIvF3t-CKx27 z+VxKO>1b1>rkOW!QDnaU%F<`+A~92&PpxeE{yrc@ws;8bZ zYRRjc%T{?TIk73Q&c2!ac2(8a&Md57E8snN2I!njBE#Z4vyGbN@duw?-@G98Ras|R zS-=_0!ZYK3Uz}4mw$J34FhPtTtSg+7@;gQNl=@<+{a51bhs1>kyBx=hIjsKBRlAK> zY3{O^NgbT-3%_vfbRGF}4y!RPC>2@$fvh76Or(=O`ofNWa*`Y!z#p*f1+Wvzy zMc1YbNe6D+yS=uk|1Mh}<8EH@k%?`i{#^{jO?f`2xT}s2A@v*hvj4n0s1>^x7K4ou zn?sKu@%ml`pjCC$849bMqw5frfa*1bEt_w z(t#kRsmunyUf1|!K1`RFJ2|8H&0@U0%oY8X3kw7Gj%W1%?4XHHmOgb!oBOwuo%zye zHN5oK!6t}Ydwy=%p($5}Qn#VXx7#>Yb}PNMw5XqAG!b%3g16`6_hv^$x;&Ztw=9@5K2| zAGfD82R#JyeQo!BmCdf_y&W!7Tx)uUZT^bEdrB#L=%SG^J6(2>26cQRc_8^!FV?Ae zU}0=uo8WM_qv18U*<-2~)T^*SI1W66BqEn&e>?1JFR}hO>u`n$O)}4e#$V#jDY%l)2g`L-sncQKX3o`mXDr)2kOm< zfVvfj1udDNkI~O^SYovTDp#V&)F}LSZkg zjx<0|Ital`OmRjsQug~*IGr< z;vhaBzqR(A`i(ou?a_C2Bosv{>)rC#PA}gn(YqAP%B%tnG9tXQQ|6OV&GgdK_>y;X zDtjXw1YKU7Beb&sqzLQMHmgOt#4EPa!p3#>(ci*UNuI(z?%g zy*W$ahibeh#U9i+d>QY4#Li0pkFQagN$jWU$%}2lHdu<+n%ZD7+nF1(<#%MM z#R)j^;061(^s*BXlqXB;X+%9||4zzj8bUeXIvLcrEjBMev8Vi~X0XW3t8B=1K1kuj zEe(8~&99=N0%Lz@fvIAS%ParO_0YX5wF0rKN0yttiN=qg!zGQXmfZo{$NjLV@SVEr zY#0pE3zwcT&qgGV5k4H^+NdYv6z2Dd4u5oiO>nQ4KxtbuL9)>^hkV2BT>5mBd^Fnq zuvDvLhJ@i!xU$4h$g1W}pC)&6|7CB!$2*;t8X@mFh?Iy#@*~gkpQ@YjKWmejE*5*0l&AK)p70yLn+3x-{r*hUW13X3^wlPiKt7A*`?^L zmTsiPyZ{+W1$*>4`%dW3`^rgf8<*-Vx^ds?Su!RtJ@dT&Hj7mk@#!c9;qdd9kQ{mx zv{%W|G6GK6B*h?Hk?Td4t<|cp-*cCkOlvJXc(7i5jm~1K?gO_`*QLD}IVb=dW0Ol? z<5|93GRbfxF?xDYc^~_9zC8Jy5BV#8y8HLq;*|>6#*Bnm69kH)MkQI2mKTBC3+P4k zte1yIJu)7|h}+l@ZP;VKPu^lu+?en4RV^~H6JaoT{^B^nS;wVa)7nQ#y6#t?*}AcJ zk(@7M$g%qQOt+5;f|(m_UY4?i(XCaq^J8F z?CMRt%V6nc>;2xDKMho#Vp^kxCOVc&!N98h+;Q`Z6(5_%n@{}8909{Cl{gC zV}UHrUk(vkd~9deWZp0=R507ddA&?ta7X{n&7y9p_JEH`9gipw@sFMtX55$$2fAsa z-guwqn$LtwL>P1)I7sYY-%BAnKFYMELm4c+vrY)?MNbp27@TdoR{NUlw4mE9*!h>g z(qQyhP6VuRGg`$}(i#@iP-vmK%0!hAcr(F%oy4&O(WhWx9&Ry^|Kz|Hr&^x+M>ifq-l%3!$6aNzliIK}Qv17)Z` z45xnJL5lY3H-lzj81~nys(zKGFV&gWDnSUe(N~X^G53Hc8k<9QAq8)`Zv_^byKJ;4 z32n`q6y-It@j9OOr(2iEf30Yh9D0W5);TkGc~CL$oVyhJ3OFdUkXMuIi=EH5bbk(1 zus>Lp=gB};?}t-wATv#4Rq^8qKwJ+GA)@2qYnJ!r%KQPrIzw+&v>cfq-{Hub>IeFm zQBPmjpG$jzB>@#sQ%zKPdb*rc6O^@Dx$_FW4f`lD?psp62svW8stfX7%3A8>h|s~K z=x&NoO3*;&g07)ywePO6a#gy!W$H&hbhNTzjC!vWw8kZ`t^n*I|-(HoszF=K^s zL$8K0(LvvVqu}ic&FtV?6*tiN+aCzg5wekF{l*0DWkQ~RD0rSkZp?LFwq$8kcCAuH zEqzk>o5G9mQqB=C&`2Spt)6Q~ed-iN4 zp{!zld_Nc;W!N3%>EP6SHIC5pKmrEFs#HKR56F}tmkdS2TNO(8%zeF@Kc?c4)BvLX=_DMgUzq_y6X>*7V|IgN``e2Q*r3&!SHcEyAu;!)!HpUb8t zcjnbd_exXWcMSw`c|0{sBB!BYl}44Q$a6s-JkN9ludG3_=MlP*yVkbFuz{~%OO+_qF#KNN z`G;Eiq;gjIK|THuy&>ld&iMO&K~j@aBdh(Po12?(6wn-YYzmrSNjMhEaQ^Ka-Z->9 zKWIL{up0<-ULn42&O^>;t5JFBl|=32!~|eKjkuz(mC8$}R#Z?{>pK$s+uq%r-*=fi z#^;l_u}<2SBb9umbmc?UCJR)<8&Qr9!1ARB{WWm3n+ye7qW@C)b3hi~m1g1d*>MXx z{p(qLim?|+Nk2|m+S+nmhytQYth+A=?m0LZH?RXfXS`Kv&w2DzA;h z68N{0;(Vdy`s}DRxAFd*%F3=O4|xQIXO~yrE>;2bkw!Gy17a3th6?aPHM_*1um0bT zRUm7=X};|Jhd1qc_^=2laX)=}zgqvMlF}PJ6@VtFsXf+mM4k8-6h(GdS$2gkpL4Cz zsK&TQV}(&06|_-7$3{YeE)x0le|&=bskPVq`xKeWoQr_OfRPn5Gc%pz@7c>aaR22h z_L-p6t8|^Z`Y7~IDM2d&^hQ`8c*Xzw%gZl#+FgNZQq8}czuj{n*nHK*U zMZj6yI6@BT3tpMf^gjPNcCLTo{k_YoGdCc~m)%=tB-ivR=le&+>1@9p^(aqHwcO)D z+nvYALKHs)k3XbHau7Ow2o*YX`s(m5;I3&(d^~$Gp5euKi+?aX6(z2U!Ob7wyPIao zQ=-T}CbT|_x8i4XdQ0}Ra;pDC45=l~#ymOZ@pH#1j#C|{70@BRXZ~Y- z*(8RIk$`hv318;SV+nP@6CqURz6E91okT`mJ{kYMFRh$vDQCT*rF%b|wM<{B@_n$P zhQ_(BGPXb{@J9CzSGsKgZJE>N@;ze|AuTi@L;K^YlNV?N6xd#A%;1=g8;009uiyOo z7XV`cYtrW!rZ53lJW(j!3BPQ(`H1xP9txEIk+8iF!__Yv<5wmYf5AOk>YPN6OU2I@{y245Kw80S~{ z%MjNqtLwfbYJG#no0#*fj)3@erzHhBIlw20 zI4)@Xx=DUs&9VUJym>P?BqRiIJWrk^UaU9JNhEz9VtmSk(L~rp&BW5=@t;lfj|vC_ z3F(e)vVC%v17HAUnE)V}(!|xR>=^)&Gn=XIgd<`&!?s=}j2}WcxHsqZAWru%b@3#o zXHdmzIcE;~;PV5@6y|aLVMs8rN-#6OO;0CUI%&;+*n!V{<;oQRCjl1}vHZe!Vv2{Z z#v{h-zpus4))utc2?#E1Pm9$UiG5VTRDLwx-UIkCQIay(WLBFuy$0?FUz^zb>`7TP z7@8kJ*}XzwPNnD2X&Ox+{rpoL<%pU3ms*zH9al0QkD)n>{io zHmH8HKr6R~o|H*VO-({Xy6z(SDI&*?g>TBgkGEB)g4r4iAE^wKxySNq-)b+N za&zQ#08$CyRb2<_$9!R)KvZ`<;R_)@=oow&4VWY_)&S%yEaVYTp2G4M72>htapUph ziQq}#$>1sG`2dLNskIWZVb=emH};TGGXbbUA@|K?7?cEkyAzo?2gfNc2X~c0J9nGM z^OmLOr^*mc2Rv>>BnL_Nw4iti2oz{d0w6wg>_E?7Eyp*&K#$?IP+>~S-@8Y9fegUi z;=sObSP*?mjrLfox^2`Os=iU#If4@SS!gL7@qfQn7{lGFZGJu271lNSuE_0(bMu8Dl;dirglVWCH zuU}O=uXp+m$JM)pC!zg&5Ecu&@}k{9>BOYR|7-19!=YT)uvOb?RZA$POeKdLmn=Dq z3~3{ZLMexwlGcPWlfxKtTosmt6$&}!ET?jA1~aHkIh(bN%)x{Z!^b$yFs1!|)9Tvm z$KKbqf9(1B&V28CKkq!x^F8y;eLt@Y=85O{ifw7XWL~=57L{5P3S7m!Ie(APXWH5KUffp8H%tk*=E?DlOc**1l`Bd7ak zW@Z50(i%F53cA7m7?MR}t**z;KK%%i7UyJ`XZS-*U|^v9yr?ZRp!!%|yt^jcv;;2Q z*&xFMSU}~K+zH)7eKslXct0&`cjT;N~Sm3lIAq`w?@X(Q>s?A+zM3zx-~^s&9|e!GLBrc=H>m#dv^?14quSawIfh%~z5#ll z6;Kaztaq07)`VwUxHh{tE~!)*PJiz6rMIbCy}t8Khi)@kwOM3?+#-mtoH-(*f5f!$ z#ZMc+UCefgtzS{pI{t(H)SuDbw%RAVZ)>6ViEF29N%&Z-TE4XHx<2$zHLj>J==7ip30!f8colQjxeaz469IRDrIu=173id8lqr( zr`Ns{IdNO624`1|sK12eu)P^AiRC<6nN-x?Yka*QK40I#v9r|0b1v%^mx zd-62DWO=i0X6<9^!~j0#Yc$)@(bVy@qmAQ5M`uS5$7>Ft8=Z}fySuwVcJGEZSTtR! z4)CjmvzNoGB%5=9Y+EF%aDWJt%>l^&{I;q&XLWToCTbRfb{qy7Y+rIsOH0d~xle>3 z=?o`kyqizb$}+&I=?Oa8W!f#bK?}VD4})_x*oH4>$s^9BO=4U zlEKD>bY&fO%0qm<%U$sO_eA!b9d2hGG#rCm*%8x3NQ|9hnA6$I^blV82DDV97paf^ z;@rZIYg<0Szb_8)-_Ac?^u}WQjvoM)ANJl>55+y~qhtmNJ{3)?hkF=?#f(UgQC8*y=-wcg>IY1o0d9lEVu8;bM}Y;4u3FY%7&+^UC{oVp;T61QFfY(bDG(5_ z8FczcSyefo|G9u5$a~hp(|fPt(^tSiEf-;Xt)<8U~@vj=79x>7evnc50^hM!{j zsrNLGjMU>8q;P?Zj7ir5P-o2c)u~-U0kFY9aRKxZG-vHk6rFM{?We^DMFE6f3%Y%^Hd100|r%!eC z8w$@jAx81|5R(@QSmpgh91bV<%gcX)bhLMCZm7G9!|LcjLP*zqGp|)0VfXYxI->Xe zX*8VEF8oQGJBIfjuZYgj(a1bDKQ=iNcNZhEBi|ww5p&?co*iXhR;Z5|=6Ja>{;S(` z4OD@0hR}3xH8;*G-gV^Y6j9nT+sRcc6|2qy&jva=Iy@GtW>`_@*zjpoqcV05QgF1KHd zyafLDA#2O;x2Sz=ojbDF>dCcg=DvScqtpo})t%?=(~PPY*Mg%lxn!O233~hktbAaB zTT9rQfBN3z;{i6Z#$0+@qzt*gfnxt5`v{CV*_Z0vI5E+wt8LCcQ188(58Rz=iX^?X zReK1O9i1#wugjMY@qR4vnW05a3JM4)Pt0Ivq(zg2E)vNI1R3&)*%=I{VeY9W*)!1Q z$=7)85`(Ac*Uxy&Go&=mISHz<*Qy*r&<*xIOxoRznFF>eQWYC8Z|D+@8M8kQAgD;} zlf>GW{rn`^DI@34>X{~EiEg|CcG>WAT`Y7f8MH|~^gyW`C!iaE`dlh9>jeOv$AcHi zL%hvws<$CaMBco`Dk0;8hjN(Ao=_7Icg0Poy;;i-NpnkSi80U?(yc2KOQy(runf2; zl#Y!2+{oYLmc7*f;7+|00kz=`b|k%c8=H7%^X9?$+~4qM@MR2jEU}`p-^Zt69SaGK z@h|r^d=3r?+m{JNE}wFBHN-0i1JRxc=y%!(4NR1eMLX4B9)3T#To?n{l71%zQTP|e zi`T>{(zPqs$Vp_znvpB8K59C@^=pi2e2uYVNVDw-;)9BEGn=Ei2GoTa=?E!zY9b}K z(?w;TlMMrdwha@dkq&7+S!qu@!7X4lt4XSZvXvEgqX_k&KjBpXaw)0lDN?*b@L_WS zA(X*v>1&plLoY{Efm?8E>c!`@mPK;Iy(Xwj@fUqapSm|(*ZQONO?6gW*9Xieql*^E z8|vhxk#2fBH?NZ=SBYIecobM>=hSuy@5TRavPQgDT+2x>VB~erU{{U4>dh8R9dw}r-t@(i1 zytuvU_}WK#!cwHLv@&$^)@#-7W&$Iu<#~gA1&|g-jj6bCV%ozvw^De^{*RbU-?x(X zrNYnWovK7EE`}wJ-Nh)XI(ILs!JxnTrm<=k>r#509KLHC#}t@OfKL47gnCe A)Bpeg diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index b1c6e3d145..0e6563b6cb 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -245,8 +245,10 @@ public void printHelp() { System.out.println("personalEvent - add a personal event with content, deadline and location"); System.out.println("edit - edit event information"); System.out.println("locate - find location information"); + System.out.println("locations - view all the locations available"); System.out.println("list - view all events added"); System.out.println("clear - clear all events"); + System.out.println("reminder - show events of the day"); System.out.println("There will be more upcoming features in later versions."); System.out.println("For more information, please refer to detailed user guide: " + "https://ay2021s1-cs2113t-f14-4.github.io/tp/"); From 17eb20f5ab60e208e968b76b90a6d5b091ea4e49 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 22:54:33 +0800 Subject: [PATCH 119/299] fixed the line align with picture added a line breaker after each diagram --- docs/DeveloperGuide.md | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 157a140691..7ca6522b57 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,17 +1,14 @@ # Developer Guide -![](diagrams/Logo.png) - -Yang Jiaqi - -Zhuang Mengjin - -Xu Che - -Wu Nan - -Wan Shi Jie Brendan +

+![](diagrams/Logo.png)
+Yang Jiaqi
+Zhuang Mengjin
+Xu Che
+Wu Nan
+Wan Shi Jie Brendan
+

## Table of Contents 1. [Introduction](#1-introduction) @@ -74,7 +71,7 @@ This section describes the different components of the application and how each each other to run the program. ### 3.1 Architecture -![architecture](diagrams/architecture.png) +![architecture](diagrams/architecture.png)
The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into 5 different components: @@ -85,7 +82,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 5. Model: Stores the data the app uses in memory. ### 3.2 UI -![UI Class Diagram](diagrams/Ui.png) +![UI Class Diagram](diagrams/Ui.png)
*Figure 3.2.1 Class diagram for UI component* @@ -100,7 +97,7 @@ The `Storage` component can save the list of event data in .txt format and read ### 3.4 Logic __API__:`Parser.java` -![Logic Class Diagram](diagrams/LogicClass.png) +![Logic Class Diagram](diagrams/LogicClass.png)
*Figure 3.4.1 Class diagram for Logic component* @@ -154,7 +151,7 @@ and location ‘LT27’. Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. The sequence diagram below shows the process of adding a new event. -![AddCommand Sequence Diagram](diagrams/AddCommand.png) +![AddCommand Sequence Diagram](diagrams/AddCommand.png)
*Figure 4.1 Sequence Diagram for add function* ### 4.2 Clear events @@ -168,7 +165,7 @@ Step 2. If there is no information stored before the user input the `clear` comm that the list is already empty. The sequence diagram below shows the process of clearing all events. -![ClearCommand Sequence Diagram](diagrams/ClearCommand.png) +![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
*Figure 4.2 Sequence Diagram for clear function* ### 4.3 Edit events @@ -182,7 +179,7 @@ Step 2. The user realises that there was a mistake in the event added and decide entering `edit 1 class ` to edit the one existing event. Step 3. `editCommand()` function replaces the original event with the edited one. -![EditCommand Sequence Diagram](diagrams/EditCommand.png) +![EditCommand Sequence Diagram](diagrams/EditCommand.png)
*Figure 4.3 Sequence Diagram for EditCommand()* ### 4.4 Locate @@ -229,7 +226,7 @@ Given below is an example usage scenario: Step 1. The user wants to see view the events in a chronological order. Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. -![](diagrams/SortCommand.png) +![](diagrams/SortCommand.png)
*Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events @@ -239,7 +236,7 @@ This feature allows users to view a summary of all the features available for th When the user inputs `help`, all available commands and a simple description for each of them will be printed. The sequence diagram below shows what happens when user enters `help`: -![HelpCommand Sequence Diagram](diagrams/HelpCommand.png) +![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
*Figure 4.8 Sequence Diagram for help function* ## 5. Documentation From c9b435e84a1596ddbe751d7423f995a7c11fa52f Mon Sep 17 00:00:00 2001 From: max Date: Thu, 29 Oct 2020 22:59:01 +0800 Subject: [PATCH 120/299] added line breaker for diagrams --- docs/DeveloperGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c66cc51d15..c5a5c0abb9 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -151,7 +151,7 @@ and location ‘LT27’. Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. The sequence diagram below shows the process of adding a new event. -![AddCommand Sequence Diagram](diagrams/AddCommand.png) +![AddCommand Sequence Diagram](diagrams/AddCommand.png)
*Figure 4.1 Sequence Diagram for add function* @@ -211,7 +211,7 @@ Step 4. If conversion is not possible, then it will check if the given string is * Prints an error message if invalid The sequence diagram below shows exactly which methods, from which classes, are called to obtain the required location. -![locate sequence diagram](diagrams/LocateSequence.png)
+![locate sequence diagram](diagrams/LocateSequence.png)
*Figure 4.4 Sequence diagram for locate function* ### 4.5 Reminders @@ -227,7 +227,7 @@ Given below is an example usage scenario: Step 1. The user wants to see view the events in a chronological order. Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. -![](diagrams/SortCommand.png) +![](diagrams/SortCommand.png)
*Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events From 622b6ecd066a128c3076c5026a4adf45fac74649 Mon Sep 17 00:00:00 2001 From: Brendan Date: Thu, 29 Oct 2020 23:24:45 +0800 Subject: [PATCH 121/299] Updated DG for reminder and list features --- docs/DeveloperGuide.md | 33 ++++++++++++++++++++++++----- docs/diagrams/AddCommand.png | Bin 43725 -> 40679 bytes docs/diagrams/AddCommand.puml | 5 ++--- docs/diagrams/ListCommand.png | Bin 0 -> 37990 bytes docs/diagrams/ListCommand.puml | 14 ++++++++++++ docs/diagrams/ReminderCommand.png | Bin 0 -> 39568 bytes docs/diagrams/ReminderCommand.puml | 14 ++++++++++++ 7 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 docs/diagrams/ListCommand.png create mode 100644 docs/diagrams/ListCommand.puml create mode 100644 docs/diagrams/ReminderCommand.png create mode 100644 docs/diagrams/ReminderCommand.puml diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 157a140691..da8a1e16d7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -216,9 +216,20 @@ The sequence diagram below shows exactly which methods, from which classes, are ![locate sequence diagram](diagrams/LocateSequence.png)
*Figure 4.4 Sequence diagram for locate function* -### 4.5 Reminders -[Proposed] This feature will be able to remind users of the events that will occur today when they open the application. +### 4.5 Reminder +This feature allows users to get a reminder of the events that will occur today. +Given below is an example usage scenario: + +Step 1. The user wants to see all the events that are happening today. He inputs the command `reminder`. + +Step 2. The command filters the list of all events based on the current date. + +Step 3. It then calls `UI` to print the filtered list. + +The sequence diagram belows shows the process of executing the reminder command. +![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) +*Figure 4.5 Sequence Diagram for reminder function* ### 4.6 Sort events This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available @@ -226,13 +237,25 @@ are sorting by time, description and location. Given below is an example usage scenario: -Step 1. The user wants to see view the events in a chronological order. +Step 1. The user wants to view the events in a chronological order. Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. ![](diagrams/SortCommand.png) *Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events +This feature allows users to view a numbered list of all the events/tasks they have added so far, +in the order which they were added. + +Given below is an example usage scenario: + +Step 1. The user wants to see a list of all the events he has added so far, and executes the command `list`. + +Step 2. The command calls the `printEventList` function from `UI`, which then prints the list of events. + +The sequence diagram below shows what happens when the list command is executed +![ListCommand Sequence Diagram](diagrams/ListCommand.png) +*Figure 4.7 Sequence Diagram for help function* ### 4.8 Help This feature allows users to view a summary of all the features available for the current version of NUSchedule. @@ -240,10 +263,10 @@ When the user inputs `help`, all available commands and a simple description for The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png) -*Figure 4.8 Sequence Diagram for help function* +*Figure 4.8 Sequence Diagram for list function* ## 5. Documentation -This section provides information +This section provides other relevant information about the application. ### 5.1 Product scope __Target user profile:__ diff --git a/docs/diagrams/AddCommand.png b/docs/diagrams/AddCommand.png index 25b7e2fffd3d8fb40b3d328eed90eefb19458e83..c4dd5f6695c38d81b9f99cc9c56b3c473568c43d 100644 GIT binary patch literal 40679 zcmc$`cT`i`+C7Y-q99;Flp;lgfHXmhNRuWVq=@t)Aibk>BBCHoAan$x^p5lnB2pr~ zHz5L{_f8-r-wLPPbIyC;``+>U=NseR;Td6P@3q%@*7M9~&bbo!L|KNEn3|Y?fPhp^ zR!WV4;B*G~zufuL;FEol=Wy^3tBbUji;2C1yN%fk7XleGJ2NL^7c*0a=k5#^E-nra zxwsr`jO|=r+S+iM*xO#dCrC>`aO$0L^_VR(&oiH; zE~K4z%Cb21xi3vx>9hG&`|R}Z;#j%%@nN|~PZl~SrA(|N2 zg5Lz`{v1%N9i}H4)c4p|sn3buHt+nKuiJI1TpJUs4=&b;%i5%-B?RA0 zBT6rN|I3d=(}(S2T*pRag5LOiF-%+KjNC)I9XZA3t`W1*RT3T!TNd~CD_W@Q=@i|R z1arZI1O%@M`JGpjdU#$w`ql*zhWGN9FD)|MlE1nrEqzh? z)YwuRCw6nfXSg2B_>-5^%)%U_Pb-h ze4rEsCHF{wF#Dvw=q~s>LE^jHOk$gd`6FBz@62*(R#ZEMpNK}Q-JCJT|1~_U34)VA zb!`ZTR(=h5kzH17I>Undup{r7tnxA|W77zKk!%Y$4C=KObP2wsIBNva_oiA;x9FwCO~BB3-x=Bb;8dlG)7MfKVco;3^+Krc_FOUai%3n z$o0zAtD)v+z_qVa<#JKX1`W-V-OL;f#opOf9W=2&0f^|dON9CE>0;jqW8Ve}17v&7{`_^UMfAZYR{YXN5a&>gh*>fT(R z9pjT@8T)nf>@r75RI-R?V43ptAbF>T-v|AlY35Q=-!qgx?yV!ChdY)w zJNUJbOOxBGD8nU~dOpq0m`kza>rr)Ck!Tm<2wLA%0kqAN+LsFw&_3ju>wIpTz>?tXBd?;<58 zCMG9GmRj~l+?KKXS!rB*5*>Yt2@tVW_$-&zPd^A0i$Q<>{F#Q|W~2d%i)MQk5{n<- zqXfA~ROWHu@vqM&gi2?KhzbqrJm$NS93357+QHum7&^flyhOII8{yye$iT;8PN$KC zvg@Nj7z8fzy~6uwuRl|Th6_JEuX!WyAcp()mOU9ekKVq08;U53lAP`1yEh2ksq#r8GygV!XCiP)Ud8dpXH09@O2p(oCSfPpRFs9~yvoYS z-M(_eRA?`RU2GrxRh0Gd6-L2%NI#~8vrcq!v?RO?J}x&{+ffo>qzR}P3GS}<`qXo>iqvu1{k-kAF!JjxN&EwYmhRi`G*&K|A($SUXga@%o!`$@$@3S^Bd*Xj!69{vsb!&%U(SP|K+#pr37 z&U-`W@E&x~=y^S+#>wfx{3fJ=nX;jc-;CjQU(~nOe^xmkAMUota>0dM*HDPa$07pa zx@e>R*c}!+GykH!{vN@_4i}$lV!9Rl9s0;1_#k?6S{8qcPiOvZat8O6{u;XjE_l5| z_+MQA8ikK#c>)Cf2~h+v{93S_`tQHUps>YdJ63|KqK2RuMF(ew?Cukbo_yVbQw@R} zYB2w{&3miPoRPf-y3$v6GUi`Y({2crN;g}xz!=39lj;!S%{|YwL&0TS-CZ3R%5Z$U z8|R}F@@wQ$!#?z}WX<)pFV5|Qv*I6TkO0~DE_aJ%v zBu?b{i|5a$eX|=Ilk21OV9T9Z((PExcDL<#`RYVXY)}Z%I0;{LL+a~aSsM*~^KzmnLiFb4gP4E8DR)G(pJd+e~oNWI3S=VhAzT zhl__G5|xvMtEQW{=yS2{>r(!OX`!OCLh`%ueA%N2gy*F`IxO1pjnTTJ<4!5<&((}Rt*v)KQvK#wtiT50`9rC~);ljEBC znOKrnZk>ovkqds_SeUKkW{pz_ivD9=A_D#63ddDW1Ct}qjQs#|`V1kh2A|`l!Q9yT ziO8qAIvInF6GvH5OL54^{I>E8E8pGZ^a=k$kf-}Ilm-IY0tbBYrG&SRZN_J!g{-v- zep!!mWQvd3PdSBr53Nv6+Pwbb6bx!N8v{UqOC5j z_j&A4WfU-+c=2JN=*T?RC_hC*ZmB$WFpluE_EJytLiDuWdKjI^kKJSg*OigWSFcJ6 zY!1(HTrQ)_#V&bFsL+bE@E=;LdXEliaD168`E>mHED0s3Nl%DU%x191M>EsYAsMb_ z|NCmC%Wa`m)_OSMdxsu%nZb^A%&VD+CaoWOm&I@xX9pw}iCp-u0kxg!R-qMB&Vk3& z)!SI-P-?ATSi0x1_Ooih*J8BNZsMU%L6WHVn1#o){}64*utFRn$)qIKTBRPA2^E7g zteUGV>GL;EZirQSBDc0|M~arkZb%4Px(67R^F1ZW+dl(+;4)e3KHy8qsdob;>zB(z zGp%7X|1mO()wf8+sw4&dIYj$C%bVxJ78mK4g)Wr{)eg*DlQfOJZ0Y{`lUNRJ1rh=G zyhD-Jk^IBr{A`^|>mr;6ICU_Ah!LPb{Z2Z3#R#AICJC9@UpKzz9D1+iV6_2^R1Pg1(1{(je^5y9-6&rji({r&!b+~T${__WH} zNX~x3DA6hCISyS|6RtPD&dXKNz-a0#MTD)=;2XF9xS>ZG(EjkBy?G)j_S)s7ISq@$ zzrxwe{FIRU<9tE`OH&@Ey6R;Nlb(9i`^)^V9&{at{Bmj}D-?|1`6-9R3JnO~=a^cX zSd|GYxYs@ZN0tbb#~xb?#Li`1$Do*9dGB{BZ(jDE(N1o0@L#Ybk>DBfatX9~i5o3b z(c8_}DX|@YY~P?iGu1S4*wKJZcvfn0YWoMPe_EQpuWxDsU#@O;UoIB=^k~l(*DW?R zH`vjnB1W2$`*D8!`uBA~j^S(gRT{LD%oqx&ewn+oGFZZR%Q8V;wQz*?x zg;>t9Vl(gUTicK3QtGXe;W~>AIIO76h|KO%o%l?y(#MLS{G(L3w5>*c+I z_4LqR^m|8im#1(&>(OzVDMCV6ZaC-Z^2=?jTj|0*_drQaa~B1fq&G*jQ#`*Wry(cEe%Gk|nS4+hbSvk<6{FIK=&`9XjDkUUr+)NzVNl zhP(5hH#Vl$;^NL;z8tBXsAa~I;;?SevA4SYEI&bBfXkQxtazB{WBOBe7+(nZ%oJmO_x*d4MnKR|A>3!KLnpagX7n8i^ov3q{l`QP&rZLa z0I_Ha1)Aj_Z+9bE(&7sDk0$FHd5Negqx3RWlJ%6f@9DqK`$4`wlz-OH>WNZ&g>kr- zPNll{kE#7fH*E?mS0ysdr01CB%7+a#ZR3=g;3oSr2duCd^V7VitYHTcXUgqyAAFWS z#i}^_4#f7&rCJU0_&Xa^Q%HCHx*0WhIVX~_$vK|K%x&r&?Ra_Tym^6E5e3JC1snIR z+DD#J^z`-#n`n27bDt4W{3LcdxFlN{=(>7+<8HRN6=;P3INf znr&BNMkETFe4y2qlxSHd=RNa#q_cJn7($N`LhA#jj(yk0V6X>f9dW*S^1BF`qrG=u z)QX{SQQPq{&yP0Bb<<;IN)RzVD~&W$-_!0{PE}4!yY@G*&UVBn*@eAY^61y*OwS0V>L14hK~i!zKd9}S2E0T1+~#}$>>mRkHOet)yFfz7bOHFBVSKxwXgD#<6)52DkP>X#)Bt*b8od_ zC!Y7!)?8(W4+efmPjJL1{p$z$)k>Ehy!IU7yn$B|0*E|J3h zEK zn%;Qx&clSEGjI0uxaypk5;U)sD!xGE>k@txDBNFfXjl##B>LAvm$usWrqBgPMg(8; zM1S?Y7xS~s`m&s;JDdrDMRAQKJV~^@DigXS-A{R>6^n`-dgFamZXV5X)P~VuJtstK zK6swJr#_%8VXwaQoc@eDN?SQK2}><_a@)w8oD~eWTQnGk)uOyRCP0ZR~^a#S>)I z@5MuEa8|8*NEAYHC%!+!dumztL$l?obO~*6WT9pD{)DTy7OYEgC^f;0OVn*6AgXCn zlv{6j%XUG*vO44CBo14VI1S3~Cu0S+`>|uK}nt216B`-QVTy1z|HYyetJN#|q zu^pwi(v0V}GPRE%;GO%OespNR9RWxSX zVQ#f_p)~FY6cueAPCG)mvij4j!WN{h)229&UAk87Pir!|Dr3f9P=mQNix=7LMrGzQ z<+(wtk^5MdUyi{xc=V0mw{S-Kp=|Z|*uLjc9*dtP+ugcCsG6!4*<)cN>Uy|I&mdn# zB84u1w29+g#e0Lr9|2j#>e2q&D#Z>Q_nMB^{X%qbl z?ZmswnIM54wct}!IOFpoj5(NtvW+jQ>D7~03ZkKW)xNqF<;AGx;0PBQ_T;}Wfniu% zz*@{yPN7)72^0K#9DCcV!R!kVlEXgJep#{$RLJU=O+TyPnO=&P`t%~E)b~{?72Bd~rdTD;4=IW+I+&lDk>-ou&`cnOx3QM{H z!`a2=1SVA3EBnHtP_8c*`r3~uA^KYrG*7pJSU^bH!ZoWFa3L#X z<+9MLGmFSX^HfEgMmQEEIwi2?e9R_gksW1w2XvNqSG_9J&Ju-n$KMz7y!!6d6YXNt zzI}{lK6QBW$n%6GZ74?oNK?lOJmy^^pM1GGv;3cW2KD9s2E5d33$V%YjveHt;+TS! zSd6oZ$9oA|hQ=5VcGpN%6_PGYCEz)(zoBY8KSl;-ehp4JbCKmd}4>2v>xcj4q1 zOt+}DWRgt7&Cid78kPpxg!dE4pJsSp+$F952^bqAK$0C7;nz0}UT}o`27*Z8Ku? zLzT>msw_oo!9mxaUu0pUHn-hvo~ws`YLGD9!7wsO@h=QuHq}J_v3^g7`vuk5*-ZgU zO7t{1gLtDag@zc|&Wy5(qf8u1N4H#gS&oo+Z3bB>+7 zboevziVV&3=ag<~#oF9rCD>{t6dCs7>UOGDoUprWXM&1|MDg=x)00%Ju7EW%k3J znzEIt2YZ(cZC0*Wy~ienfi3BTuhg*U<20Ij>LV?_TrRv1o1(FczO7mGhHSS6Car zF5!3_%euElI+q^9gtYn-h{^?7S<&S@E9|L17D{@^H`L%R7Yxx+&p61oaFREFl?MW_ zUZ8!_$OK`|gyy~Ev4{B@j^1qTM04ecm>^W1X_aN5L(q$v9EQ-kQUeBsD3&(9qm|K@ zObV3K>E>N|Ove0P2h>!8B@R;=8sb;B{^6*!O0=EOt9yQPLB zI}S<}`LW$G>*j+U@rYQ%E;cZE%h=uF+F~<>4FSe0SIPyfHDkqEP3itMk&#L;P;0Ql zRSr|GyzbiJ80p}a!^4;vq=WTD_2*Av9V*e!K?@KQdWjxqK9m=4nQCva18Vkxa|Z9# zO)l>K_Z9;Sz0cI}g==lBYymxA(tG$39zUl1EnH}SyA<|95WwU@&3syDMdGb!wuT(s z3n?pVd)bVPO@BzFmuO<4!Gu=oV`&2`?XAfCvSHzqlvx!C$t=k5zeKUaVY^`H#z+)O z;Vs(fbZE$&$hU00#YIChXFjALO3E@;yLoH-$KfZgW9*TS(#N4G`>BCE^uuTBV`j&g z?R(oz?q9kA(w7|F(rr&+@xoKD8D7q&!Q2SAfnROk% z?c|SS5jNZ59YRkmMuz@DuK|2CNm{+CRQES3EZ7x%iWix$ zSxQPO2tMSK+WI5Erd zXIqxrXveu;6vy2bh7^FF`xd(EOJ=6_hb`SQt4F&uyc_A<%}~}sz2;q*%0w9DsC~V5 zXh!Q`F0>qAbM@n+^>tq3Vsv5)*Gn;Ml1hStCCy_r+^bIws!sSL0RcFRwzO+0lW$5pO!-#_bNOD1>ljn5c&>~P zKP1nU)TMPsq;)}b5g~IQK&?AR8!gCn^fE2p%HBFb=R_Z(}G7@e-_L3KovfrcdoLKC) z&bqUmfbM^ojb>?9k0%1id-VKF%Wm1m%tncM*e}C|nh+C4%gTaxkO@eQakZYqhTE9qmfH5F zwa?w$-`N>leTcG=rMa*sY)WgyZGqJ?4-8KitXoc96ENUo` zMQ4KL02@od!<^aidx=59Jf>{{c~Q&WAh`0Unrc+%dOqv#49^1kO1q4aWO?XVB3HNi zVI6f$An#9>IQnmI4)j?W(dYU94?^z^>h=x4|4g@O$6|mSq@2Ku2(JQ)L5g%RH4psS ze?c`a!`9c==`UR}Y76=BVQ=G$Po8u5|IO}c$J$;-G`MfSFfuZ7aM%FyLS$s*%WL$G z`)dn-wAV1`?b^Ay&X3!(?Xe=BuX4g~%Y0x`h}pRH&>0SB9-@6)FJ<_eqg$Hf#&3^br*hq41Q>0_4yL-e5ZZ1XGZw-~)8L2J{?_arsMy%+Dg`=a zcU6*w>F)TG(zI*?SzN2=xpW=s>P$92u=en_j&adb?Z9 zzD-eCIU_h?iRj$9;>0^j2^VkN`?aWpi=^EifcJE#6hsf78@Gy+jFF#Tx_7Cu{)^F$)Y3x|O7`=lr0HjoU{9(5$_lSh6->0; zX|2k|Yg8z_M)jP|W;fQ^hQ;Zb1We`o_wN^JAB3CMJS#Mqnws+O1JZcN4emFK5B2+= z;1#H~i5m6ZeIyjRyYw_!4Cr29`z_yn_!G%n^bt^ncgVItB4NgO z{b=sh^`Cj;Bl8agfZAsa$BR`LTJ4~6WuFJ}4ED3BwusxMrGY^~Dg6EN=8Uq0rjK}T zQ$;Gu``0%H}Wic(!&2oe5se>)>8l%+Q17 zq5NP1%hwlWUqDP?a)>Vic0cbWjO#m;*qOj*es-Ma4Ddb)c-op{ra^zr^&b-uI3?eJ zvd+W`vH_k@cP;G{4?}!Jh}<2frpYSjRtr1V#?Iw`*SL;0{0G>io_n< z#6=hII%jUnev2=UJ{i;E=g73HuH&m*jx=MvYPqgVs$2H(2lOkdp$4I6e-O5_oKNH= zAJJqTaI6T4k=TNt`V#Wy>*CgH+h~cKuI(1A5F8c3|HDP{QJA-tY``P1FsSuO`0w}3 zmO7ErA03|hFSK;oC@(4`tBW9~?WD}(OBZ9y*97Ruf1bTal>{_}?#vr-Be*Y!K- z*ou`JZ=NoRN}HT>2v?JPw5U_#ci%l+i|JL9t=9t%k1QIJWdBiO*m{f6gEqqQr^GLR za-^n*dsU4<&|-T>JS;3MckZ-kUDTuh$Gty7pf=s&Kxn{%>=N4ib+^$WoX94ZVyRO1 zu>vF7$rnX<&fibiNH_gS>jaO^UDYjm$j^owbsxb5-#vvOy7-s-X{4YCN%3#ZFhPKb zCBeG@9zAU2gFu1B$nP8}&s;*B$+x(Vb|;<#S>{TA6v$%0sWcF0of3S(#IE{e${3RV z^=0uC6mttw_|iT6WowVr_oD!l?1h-s-rzXebaP7-a{VxUoy%ZnYikU6P1thuYxrX^Jv}|3Ho`X4 zF`)JW3H~+8ZzpVUieTm3A4}M+wnZAg7m0#DaC|eJtC@d`V_q64vGXu7w~b#QgKnm{ zPP!Ap$os^~$%q)p{#ZG95sDcC!ECj2-F)bhrB~(Tf03#ZMRfM;wYwVcpB?QE8&;v9 zTL|W)hcBn4DFX11ZF3;l`!lM*F1_T+^rL~Oj+(@U*Jk94RNxgu@7=*Pxk#{J-r)`@bTQ$6M6-#C zijG&~r(P4GP3HK^+X2s|VaTLXVaw^^ zfW_n6Mf+R&hGpATNcC%$vZ6+nn+|Sse|eu8HpTU46rT3$Ul9kpBEa8Na2kT--=M); zIQ1xG>urC*@qVdF7LYDaEUsx+8BP)(aKSOlMq$1md?Y&kqCdCj5fcOYweJ+epA|*^ z_w@abk0rKdPyanL;=@9%P6#Z6ZnCnn4i5LESuFE_JMQbX z*QoYpQV6sqgbJV&6@Jyv5@+S9t-;qE&O+qtL)Iy(X~B2#kXh9GVX*pJm`W@m<3B19 zEfX5-s3cy?K7dVt33UwQ3jl^TQozpa0$q@tr! z76jfP@7d^QEF~_BeE?6_xNkRzSya0$ssV7Gl?8GgxXBzEc#Zb<_5d2@DV&>~m5#4H zed)~KC$U)--;f!8F={+VN`2`2cTnzI_I+9r>gTyg3(}Ybk zuWdR62%_p4qD1ds|0OU$1WZ3d;E|`N3nwcpt9e&qshPPn+%BdJM^?)V7@P)ko|=H9f0bF;bQ2)R?dVf}LzkkmyHDNv zM;twPvIVS>h{&`b>KTf?(PDFlyUS_IkiD_1hz93*GA>)-V%2d;2~t%)aN7IDr4G4WMY6cPE>n@qLC{f&kJh@*1Db$VP5q z{oy)A!ehDr@sL0mj$sPhyfCq2#s1_1kv!HM?%fgz%*4rj)|A1nU>O~zzLhe>ahp6= zR17(bFz>lC1O(O;rO zN&L!dLdQ?2*t<{fa&xQR7fFHhS!-fPyudBKefy@Bcq>~Di{75EaasIUhN(dM%%qn- z$x=%vE)+EW_V(-7N0jTpmfRl0;eJ^h(JhA4g98`kS0?-x@`b^<4C_HT52L!D0nE6E zGD}|G-tEzBGJrzbl52c(Ry`7fLZLuJMzgBFK($2x!`FRJ4|r_-(OON~8t{OnoB38$ z2tfHAz{M`g2BDu&pnC2K+No?c1;|ybQ9GX^_&WI8vjFXI&wUH^@a57)dQm-GZpG&2 zCYbLG42aZ??}1mPgDEG;LF5Y;O z`k1uO=a_sE&jR%KZzG{NGr6EATNrm4pK{cdM4einXNBv9>ta^yAR!FnvrMaeJ@+u{ zK!LvJ_xG3Cl_NZMmqhdnh+F5R-nyZshp;;u8;1dbaxKq67TtdY_QN?CJq3kErNfle zRf-E_Wc))<{0UQiNH=$wR5-eET}Z?3TF*UL5pdh4nLy-yo?|)*Pn9eJfPDp|9nhkJ zmOtJq#b&gaoKE=O(38O9Ci63%2mWRSk~#F#>fQ?NpRZ#_jPs(d{5^rjZYD{@HmSmX zZ@XxmlbTyXX#(O#N-ZOc6h#zs3_~R>GIZF2_{lf-bdPnGZ>vjOvH!`hIr!I14>t7k zNEEJTv&69V_&Wry`6>#LA7EN7?=)!6cnepf;50!$U zXx~4ttsiHcb_G7^uLux&w|I7~!@Vjbzpn#K_Bt|x1xYl7@@gCsbT zqkIl*$B2`uzIn?h02sOxFM>k)y_RHeyIZ~4jm{@^C)>Ku5kWX}Bs3xT_l!q(qB+Uh6& zb8O$UwOd??^~ru44MR9)hcJWs_s-GLD#o#fGXSi#pzK!s(As##I-qPiKMJgaqY1m| z0RQjo?skIY{()9d2M+~)T#Es99M>s;EVbxO0bN&At?T+^&3e7UJjim{-~$VbEGz^h zVlIuWC*?My9y<#WadBZ1nS@j4(>NvU~1L2kM&4Y2wslMLP9x4A);2I`bcd2g!Bw&Z)c$UA_Y zdfnmq>+305pTkps>@%g8R?0#=cEhvyJr*GEgMcy3cf^;NBCcG?4-dbjxdX~d_zEc% z59;@qkrO)FS!@cDMHzT3rh{ST>y!n-=)HGTLCu=$N~!_pDa8HGxqEu{Q@KPjerMENdxPl|w zde0?XuRGow2Nhe)33XlpcB`*Gz8MJ&nOF2FGwb+P!$u#&fg3)dRLV#ikd?|xTNO5= zYAI3|l7WEBfHvK{eEV?^&ztMLFA^vz*_F*{gx&51_ZK9=Kp_-SxC4PWEShzilU#q^ zn<8Brh^%$LuK-)xt|_)5Jsu{-U@)gop9X#xG>GRSHwz0Eh}iM#?8m>cP8q^{LT9Kd zmhtH(L6Qjv!irt)mP}1wX0GrXmule8*BfDx7}qwahT^c-4ZVsUhf)JxkQwcDu))Zc zQqp@zbnH9mmlt)2$Y?)dMn<%P3>$osp6XV+SX#kUBoxf~=MvmN-@Q{YwY;n_{M_;3 zI3Pi~f>{vA4s*FW6tWh5pn5$91sDB-iuA)a74xwmn8bk7zx1*3CO9u6@s|y3NgVkp zRrX&k2P4RwWYJz&A2$sR4X}1@i{J#>ScSbIV6(@L)cES!9G{xJefREZjs~K?KQf2( z#=Y0`M+XOP!lX5W0ADN>D%3cKMSYKEu+7!2DBvDGvsz-A+8z0FX@H8)iXzxkn4=(@ zi8RGdkkx|Jd#h?b`Di9gOe>Mvx{{O-pUZ@Z|0saGv)NP+h(Tg;&O#Yhy96@Dav2(A zJz=Co)_DrBY69Q__yNFN%1R_Bv^fHfwFuD9SA0Co1OYzkwJ#Ku`9S-5Iav(n#!7wV z3M>Jo@{vCufR+}$t6-o*TwFPt`G6k`(@9U$tX0T;tG*Vg|v`S+NCjmkAIvw1h$90G0`y zF)>06@J@!8e%ka;tK{23e7GqDdK%wmOF__P5>(Q%s&sx;#fO(Z44$}i5b8pvUIwxw zplFs$x<%VThMj5(&;|)Ft)jv;mQ&xK?56x(gEZNQ0V%uHu`=K)#?xYoeZN3A<)Dy99L|4KuHqCG4u zj7#eaL(SSp`})xoX%ZjVlUeL>lRTM4K=}iTQPi|892{@c%+6}Dm=04ws~0)RrB~UrWxoPWc-gOv6uF%1!vf5^ z6bugB$hnSuF_s*Ar_PtWj@v05&5YsI8+KCbq4q}s>VLe{vT4lj_c;7lO}%pm9VlQ& zpF~yvSts@qSA&T&T|;9*>zBf_-IxBT$Ha{IdRzi{TmIG2NkJpIj4=)7@Au8>h8fU{ z7kv7E1+R;zF8n)l#i2(o8RYOqjF=RrKw9BqRF6 z=|5^mbk?QcGhVwf#vhfN^*6w<_g(Yq*iIsHW2Pr@H^wxJDmkm%z8RL*`&z}hmEE2wE)Zfh1lQ!$l;Q-SJ+M(dkP&4LJcN}x10a(9!dVm8oc-f10b~W= zjnB7;rPs*Um-VMU_f*R;UjcyRl`VZ1^oCDgdj3&&;keI3b`PiFQzo8d)Z^*hak19@ z%c+&Dn345%L;sMA#EA`HmxGD{04UejP!hjC97n{73Tz-JTg}=`K6D#0UjB!mKe@>i_GV2V4{%`lhcMA9;jjvq@K@|Q;o9dmMI`6yiH&#wn zbL;ArD+#=oK-Q-9NUtmc$1Gp>1LWGA1c7$MaRYvbZ!Y5-=zc*<8;U}i{&~$GsJ}82 z1?YGw85tU9^*80aKp8Nou)EnTU^DW_(PoGH@5;(R6z12jUoa+xK1%pBIHLZ8TT|_? ziU*$813U%j_Jb){C8~7+CIj8~76x$S7pZyQH^*}5K7P42S=SDuSR5%z4GU8N>~d=; zO)EL0a?-=yAzgcS504iJSUM=_psh7R17LpY)Tvr(1z4Y_u(;tvAIt%*pp%=YXNC3f z2g4|fp}f(a&ywy=8^0Q(nj)><{DX61L5Mj{OHEY29M030ToM9Y1z^PS-hpco7{J9G zgM?b=x^4jU4Io8yge{Gh%!72W7!EM72Ebq7l(3+!25DE8R3q69~oeHj589?qm=-{Xd`dcLGaBPSmysow*pIn)-N=4IH1(kd3&7 zx$XWO$YK7HwY9Zcy`bB%2Cf7Is+(7xxgn|Dt09X!~;s_hfxWi_HM# zosDg+8JKVV)>Hi4psXQM#PMWqA8 zov9=?3&b;KQPE_xz7KE>G$^v{f?&16L=WFLgTU1SKx~ic;WVJ(uzTb7+KCXnEW=)J zj}!%pJtzL)Qba@qyK*fKdjupo^G*GlSKzF6n0`XR!s4QwVC|h|)_Fk72!m6|ueb5r zSrrBayekMP*o}RFW6FjN*z~J;p`2X8!eH#**hj&ifHbt73fhaO04>ph!vmK6Ev>Ed zc(zVjzuE;*oXXwFB9^=1fM{sI9tO{<#Phs+g>v}}oFia^?nFN`n1ZR0yw@qSl9rPC z0^vCSBZfm^{_{5Yfdc%oSa!qvbpjgz5^h79*)+1gMiMN@`5fF^9D*V@&JeWWb23u@i~C`nFs2C=Zk&VL8WR zi8BO*nUsad!R4dnBivEh1%lTXf2#yFm$2%xK^f zQ6?sGtrlzi90tynO5rz!v)WoP=S!`nZO6qsVHcsanPI1jSiQLaT|+`boB~60~fo; zS-xi;#>7Z+VK$K}N@?f*P%44O43auuKRNb^^Ntu*8qW=~H*p#b)MsIs_oqW8YmYS> zh7Q}J!oSntjw>Ti{Y%XM8zCpgjlE;$w9L4;gjg=Z!Gg2J(zJroM62w3OfwGI+1t@C zv|i!9u)ln@OWRGi=^5t$XGb(G_Q>WuE<9AEq?>FtIknbeYZfJaB6=6eZD||9pbSR* z3dO{-)gDeN4fGsQx8k3x(F49s3$hn%X`>bRRza8k_&l!z^MEQP6~}J`TPr6rG;(A% zm^n<5jBL+ihZYHK>~{@R3FY7jDApIH(F96sO}> zq|p1Ho|*W{1J&McPg}IdZ;GLYq_Z2q-y(5g9TL$9RjsXa~K|w)r^{PqUsn;GSl$d}e zsI)E~4ZJdSBaG@CUR;KzT1DJ^zwvTLTBp9^!Goz?9|QW4`$*w>zIR<}Tj6@(MK(~X z=l;CIC;oD5OMTmyH{j`Hcns+rc@9BDY|<*W_|HoTY{X5qfZ}*h=0wrN17G|Y&VF@p zV7S!;tP2HM_oGZt3=a|b*I^^@_anSar5Wz!DxLHha^hxq-=RbeF+6pTmi9gVnKf)n z7nx3`{>(Jh`l2J~9cLrJ-lMZO&Wkyp0< zw9$hHmm-YMB3z#hP|5$(;PCHH^qS-SMYd}YF?RMm&3qlul=>-tc`(SDa3%ZZ zvKBCr?EyLq_r;C{{M#93;zWbi6ObGYg`#i~ z&pptt3A+QG2$%r2(?0V!j-HVQztf|V_&~gnB6F1;Z@_o}3}2c*03~;4*09zsVqWXD z-3<7V0x&s%|I@h(>kj(PWN6^IC=8qkVS$0h2=H@1gN24Tgyo9Nzm1qH5ngIF)O=QM zZf>Rs7$}*n>?NQq14rD8O;GC&4h~j;t+?z*f}9@c{_X=I3?^{b_GjfL;EZH(!pUFL z_Xo1oL04%WpZ0-ravOLsj6l-U?gRuPyVjT2*OP?Zi-E8c1$av__bt;p6krXp>9GbW zx2oeoOGzSMU%Ti3_ALc4VbC7{{;<2fosF{#HY{~A=l>&Ir69Qcib?R}JIqzLB5v#d z1iX`(GF-F{@NaqF0Fi{ZaV91v>X>yxe3O%t!6-k3hLVzyv`4Y_fAu9)|G5idsSKbF zPzOX^7JA-azAdXK*PtEY3%(3+m=~yzE?t0dG6QeH$mn~mSM677m}m+ipz$IYCC_o9 z0snxAxZMi)PoRndBdRMX=XI!tgXv)DPNT4Ogta{&M1fY>J{3s_g&c}HG)mSU>Ox(aTC=DeYGIDql zbbO(-f-vR_P$*RL!_AY#0(LF)cm2Svb@AVnjlb-Ev!`1iHWS#MaTY)Uw*rxSAr0vO zC@obM;Lnlqb;`Suzsl^9ScEo*_xpMP4Sn2hJ7OSLN;XwE^(Vks|y zxto@IGeqnHKcxL#XZbT><(;%OBor)0ZKhI>9|MN@2mnq%(VGcU-VIh@2-w>PHW>)Y zMaLvQL&R<46L1KDDAH~45jlDQSHJ=^2S8{W9gI24Qf~{8?%=mU_EEGtzzCK%c}_;n z(|RC_`_+n8G6ZZ$sb{_O1k8WWk6=;ooVys*CwT>E1+DbZj%narFsIqHuSd67nUP%4 zs&#W5d%vARE_(19z5#Y7K)MR5f!%O1mDm?ZThD_HV-Vm~cqbI9BR%^aQ$>s5CX1 z;0K^Rm~@*VRm%eq*t{*=S1hU^UX+CS0ub(N27gdOz5qN5dJHUZ7-%^GXb6xmXs*(T zAx*%f#5gsqh;+%M#nu`)Iq|HPlU%zi6%V+!T#f82v0j}!uSHhdJa-nvJybHMVJZO6 z`ttx1UA_>|t5X%K13M0)HQXYY>+XDltH+C(@Pn%a-^;9rv(QCFMZ!c6=>J|!E+d8& z4Hba5b9^2StvBzc^Tzk7tZ@F(!ww3zZtjTZupHH6(Bo~XRg;c!M?Qw#qZji@Gy?_p z{_zi`Cr>Wf=9zaUT)TeVoJAk-y?|lGVvp=$#&tIRs-+Bg2LI_0^4y^DH=9S$ypTOu zwWp`&Hu5Gh$Ul+W@9O;S=!-do%o5E1eOZ}U(2wqdHsSE?g{xY%pq(sjd%(|p>wCMs z_h6Tdxj*yd!MZv2wKMn;rr%V$znA<>q8A-;syQ0jX=!OdDmQBj|NnY>>$ob{tqT;z z01K255J8lX7L}ARKmiFsxV~jZ;tPM60BMN1&^*8Qc?dluk9d1ud8r01Cx07C)fR>*A zW5x{Z=rXX!@b6{KIBl{uD{xme+KFUM{_tO+2-sQP?&GUpqnd$3cIuQc7Q%Gk!+?YN zBb3`LdZg8jD!D9QGc&}nc;VqCmSQ2py_i>9G0GIHSK8WL=RW)+rfC`;<6EKNUcAqh zdS=W_mfr3FvX$RZ)>#t^R-MasktaASH4#P&Pwz=%1SATi%edS+V&BLGXq?0lEU2nn zF1VOaCqeORb^ZcGI!6qiolF7MTp1~U^Qr)CkHTCza+47K=yc}9j`rlcWcT~3>)BRC zC$G|<{GV^d@j^EwCOY7?Ek@9#ak+Fk&^|(Nc&N*YavmKP&u;eRURfR?Tf~Q3Xc3s0 zzx-FA5dSTXR@V>ldsKhXBzKHEQCy$7VM==PfE}E@TfSA&QfnVlM@qHxx6P!I08V9%SIWn)J1?v zpai>53pg-T6>maAJEaYcGS7IZCXxm#~0r+CTfW>-TflmAARqL@3j=cXJNIsC?EtV9tZZqcNw%q#U)HK6?K6 z@C$zsXg5O+0}u2AQkp)6-&l_l(vzS#Ll;vxl6MCM>hk45y#q%pKRv@fZ`rvEqmP@N zr=-aPuy5jRr(FK&7wSFY$)jR5gn3w#Z~)-ps5+_nZ*+U$qF?t{yWKzzL%`c{_92HU z|KTfP5&X+nz5K&H7W*%Me}<0waf6*Q&ZGU=*ngM*Ig|r9r|%hs3YlPSAJ)n^lz#iz z8~b!uT>G$|vTq-8cqsQlG_LS}4&(y%6)U$5kHe$BZ9F(^F8ng+xY#a~ZM;%0cl$lM zVdqS5tlV&CJ6gm7Mma1fpI}0|fOh zHllznf%tTcl%?+eGpc|2=2L+PJ}|zL^YilqlC%N>s=@2kD{w-UIj%CLdmRNx$Vwy*m6a^KThAo}rwb2r&-W9U5rpv$bH< z^`RPVXjBF=2r0W_`d2_@taAEDO^AljeDE=AE!4BC=A{BrLmUPNIGoF@iux4N z#jc?IuwysWukG^J+5?IXDv=ON)n|QXlz_d_cYMSSqYD;lAf>QqmQ}IasDuW;J|DZ? z{#>HG;%KAp)Ox`r?j%r$u&)Eu9x%G)ma-`)>hlTyWBJ11z9!?)sc^$**@e0cpl!B6 z#$yq~Bz#rQ)(46-dIHXJY*S0XVUIB7|M`_)XfX9+1is4QP@k1+InjVsqTo;A-9dvQ zux|s!ORNyc%_q4Z57)o;^Gmb`l4^96h4Y@|e{2z`UqrbK_m^OSnZ8vCs~^`Vl<6$q|Uz z@7JE>sYaGcEn0QK`LUri9rJDH4I_=*s~dDc2_dJM>M5P+uOlzAT&p(!A~zpGa|t+k z(sSn;TgHxj4ZebntQY^zL(EK~l2&JS1A8AXt_%Q_fI^kvM;;f#29Zr|&$S1+g}@8{ zZ0|$XxeNQ70jyGBzxs^z2Jh$bzd%A3$Liw{&3JWeJ5vo8+GRB=teQ4D@1gF(CoNbK zW9>4q)}h@->@v4b*X;lLc2Aiu6IY^QZ~~%lC}1#S(^*eKq6yO4FAiUE$O9mfgXiZr zb5LCqxSPHGjoYciR;VheNMjYYXbK@Q@%0;YmtA46<)9c!lUN1!mT>*S_x^VTD=k*` z-D~HC?j)P*^nh0D6B^=@6c78`tLnJ2D?$&Sqjhz4#pVoMr5yn&pC5a3^C$%OACwN3 z){qAVzA(qIwOgU`c67?=?Qc$w51ii~`|~S;>0;j4kFB9PLegB)I9;3xE@MxKzdj_$ zbKHt$uSO8Z6sz|9?dOunR?#JJVw*G2iVL2z+)g?B3xG z=elsUj$HH~5`;~7p>KNV20p9PQXI&^ogU9GmWAH0qO|Zf^pX>13A6>eiZtp){ ztoT%7$#auevaqbDg=#;abxrDZ+bBxL&b+Cp#E*sk-KbZ%8mO?wxJ z7iKR$w?{|J-4tPvj_#bgHaa#22dCrW@GaeEiERSFYbiLjBb-l@dxxjC(tyum^V3o4 zOnX^bSr{SE@p)_SBXC5WDWa;h*odJr=!ut4`=hUsxIqn(ycJpGT` zN<4bppdru@x;5uiQ*)cDL7B0rcrF8S2*emzI?z|I>jH+@Y@lcr-X~qH5DmpW0f`^8 z$=RxqwB=yo!9RIYFHBoo896D`i+(#ubQC znE10`y&KR5Ze{@L8m?V-8LvAnB!q$m@-hC~DXWQwT)jq8z9+!RK-k=xNy$(;&C00( zbxr`gWT4-lsf58WatLUMA(yRJ!Ss)g69WNkC<9&0G`b;LP9?G?%st=`i%ksi@)En<9=;CP}Fdk0O#InPZso3b%};h1M4I2=Cgy=1f6WrSi7vnp4oy#dHm&e?iNX$ z!dnk+F6melR^j?b944;DJxq5YwNh00YZcT*|^$k}H_nDGsGu5%3R+!jt{ z@vnny7IxmC4vClLzW*BWH4t$d{X$%2LJ?i-OCAt%#^@6tI3vz9^78TmPbDQOX>(Ks z{R!NlI5H@(P#!%&re$mb{T?>t25-PFzbg*iM)H8v}HyAJd_kG3xt6qL{t zbb?(BqkQx3-Mi3m-fi56fb;D{oLD2w9<+vuO;d(~3>@k?BG+^^)}rv_kI_ zg1pB=7$4q6oN-cX+hmmh>IPG3Vp3AEzz|852)?|n(_lnE(woT06Lf>QMj`#zl%@xY^Z8!^ zak?``y+_#S<>f_ITZj9KT8QeQgT*TlX)S1)XPtoVC9XVw1^j|W8Knv(H#2o>Po>&| zO|R|H#Y>lRsZIP*gny1CCJ?cNMu5)&+k+UMOTxq|XnS#S5oCeJv`i^*L;#K04gUkC zkxeP{W@kjeHYm`6EXp4t(8awMV3R9^VD(vsm$y3)>;!8qHx^2!qMfb`)KZQ2+nTmM z#_=$P1OSqUE5zUW^E2!NPTjx?=am%|nPO0i$T1&G-CoIy& zet;RBgmojh`7IuujmV$s--A99Zq%8AYxJ`Rw#O_BA6bBN1imv+#KYf;LklHHd=u`r zh_f`ae2B)cCtxz1c!(aL>Y^5Kysl7A>;T^u+UC89p{lyd)JDtwOyy2LoMl()yLZ)~ zHB!>Wix(GrlsdmFD>l{Dm2caFYXbXzo?c#U$CA=X`bUe*iBH_9>RF@(cQ*or?Y8S6 z>C8tglL<6Ma7&k%dqf%K6^tH>JR&vstu4L?SKEFGh*R%y@DXT~6kp&0&4M8Y@%+}y zZRdlZ9!d+)-J{{jS2Zov>&r3hBZ(}B#{Lm6rFlyAUYCuqSKqGBAHCsD~JJJ zaN>{(Oh~hXG?-15Eo68&lWXu4Wd1Nyic90LLcy`N1*J^d4iNn0(1qM+B;_Hq`wBx zg=9~13QDV}uRij0IVpsfCRY@<=^ioaHWg?b*2gfagg&xE;h`PllwsK7ViQPMlyxmg^ZX}Pp1iQ%C$FKtmod7aQEo7a59L;57fy!YJ2w2#tJBJWNd@S#!J7T82>hZ`9^V|^m8+57dQiF$QJYl`Ji zO-OCb;KwP;?!#)~-D~$4v^clBx+>W;>#W`mpZ~qJj+R^FU0^b#qhymv=nD2^jJvF$ z#bNCu6D`+}l3Pyta7$R&A$n0$&$Tmkj_>wRVE%bkJ@gkZccd%hY(-nb>PCv0`5C5l zdTzR*16R%;^b}X|iX3Gba;d)7zwRa1kPDxYfr!)02}|jXA##>p8VvQGuV&F)nHgi| zj@5O_8jJ2a7B^0m-}hIDs!M+A8Z7OJzx#R1$-TFgvF)pT!t}>2jn6K@8SNi`;C z92yMLU=D}y1qF&9_PksG7j<^Z8ONpEJI%~MNB8dCyNU7f#}VLh4jb17(W}q#6R@al zInZuM-PzWb%g+)-|I}2L)TgMAjF&Fq)d^d>nE>^j2l1p z(qSOjdeV0QJ9VWhXZw3FMB9(feaV&#zka$JoL8bYdqaD>46_Sh8Uxprmt*SFE@6R! z`MiGHxn7!ZfTjv47w0da&?PlBNwnoa84tWueIoQ!xHBoz0R?0f*B?J^$jr=y8)kGy z0BN3<1UnS8U<>bk1VyPuBkls3|FY~3UdDh5z6WwxCO;5%fXxZc^IhlQI9>hz{d*9~ zn%cbPW#GE%0Lb z=xvvNFPf#7io6`|xHk6%&Qz%S)o}o?V{awY<6I6uLO}Hu@&bsaP$UE$e2Zk!7HTIr zU3M`BEV|#Go`wdZR@L;j6~A_b`=62O?_>J_4N0w@a;i%1%zK&moV3rn`S(o0aFz*| zlgL07?ZH&WVCW6S@xUJ1_6RS5{}bd?InbYVKwpe20PPvBXPVWL%sRm&|6yf5f2c^{ z=m*(%4PgBg-ho+qHx5}+77Vy0QKT)TtB=~a{&6qKOj2)Ag&d-9el%>z&t$$~_jKw!n+Uh6^u6j^}0{aFr#Zb9cwGNG2%h6XsCJK(=p zq6v>y2xjduoU7= zn?MGkdJ@?0(Rk4Ok1`Ap>H zGozQ~+L`K*F;P+Kz=&Y9hK>&u+hJkxYOd)zR2P|*EY$$B>vM7P+h^msMM%g2Mnl?6 zdK6oy4%0F5Vh4zIMhtAt4#8fASogojJbVjcCPR`(^+zG0557kZ7>j-dX!e?`lPg#_ z2?eSBmwLgxTdAOv3#>HtHK!%hJuvBD32=}v+T651!COwO@zW4yOf=$Zf4=gljxgUK zvJD_OBSz=*g+WZM0(2+Vw6`zlbt6Xn2$ul7@0-Vodd5ExVJuaxFo#* zESl#`3l7LSH?rp69D}TK;tBXNSygf#LyAVhW$a16q=V{TE-mXfElz{l5W4}Jvw3N- zDeax85s+sAUk^Q>Oo8433#I#XG5=@CxM3lv^jD&GSJ_2(!PzJh&^S@C2^AMGMOV8y z$|!FhWBC!UA%cEMYBBW+ef~d!y?hz%-b%0l7TA$RH1a{W6L12@>nwp&8ER|>fa*Aa z2?;W7HClr_M2QzbC>xtpznd8Ek)zZu8#LhwgU4Oq=^)sEe`FD0UJ>qj0Y_rV&n}dB z$k%bk&zqpZeFz!#@S{iXqJD=J?bvajYc~vv&7>!N;Nbmrs>#s`Z8a4R1Wd6O#)qVc zW(z#jU2Q&$gnbWj7Uofkc&ar96d1;V*E?U%{mUWOP&`h3e=xJCr{79EubeNvLh_Et z!a(#;2Y7YP@mYU^sCQ)nTQ?6rE>(f$zZC#AXGEG6IRFh*=do~_2uUs1E>{jQg_dt&-uN_w?$Xwbhhv9GP7Iyan}3O4<6ayrgaaOpfR* zXFjx|Z=AFtG2~-NeW$Q`XC)hoYgezXsBU7<-hCt+H=GO0m)8?D$6g>ZYA7Y6}Y|q?9abuLb5NR z&uzK&;vc8eOo&9Vw}t&NxlZjB+5eg+vE!NzMdsHH1$Jl7 zMY{cw%mpHfMd|`=Cn$9l*9{fF_`uzgQ?ntw0yJL4w!CY)*_-_O5 znNINx`hk~Z(DU9_vh}|c$Me?p0N-4I8(7J$694DXJ5@A(Pgpp|q+dbveyZDVB>wl& z`i>*E3#EL}LkWxcK$-+1OIR)%E~bJa02-PRfQ51TP~3razpLi6DUfo4t5Nu!Qa4G~ z(|uN)Rh8a{=a6^rHe|t;%%kUjgZe*a3zrt#Z^8W-32>5f;0cFXu?N|}1;PLA1o#Kk z9k>b`nwo_5?Cp8Hfs+Lj66v`a`klUuq|i*_>C!DYriGWKCHytl=O5H#-K!k2tt~BgCBglaXEwy90!;Mwpwohv9y>(_v(AA_ zN4^!2vAtD-GGj`-MngkGK!C0Qj>cbB9siN_|HneXWx_!HEMYag2J|Q7VP?Kh43MG| zN=&lmM8<4HI2uDFFRy(cP*tsJ_y~=0U}s@h!q5GGR1Q61u$G*hd>H^nevAhoTAk-? z;n-8u(;aZeLoRZkK*Sk@T>IY_*?}O0vRdwwAO-Z{xO$(O7ZB#3&}lNy4Eneof|&5P zMVrrwbOp|d7~n%wQxlxaUU~~iY{jCuAY8mT?Bu{8 z1LLTes$>BSQk)Od&X;mFmK|^pL-(0q}B5w7?A}rej6vX|H{J?!04(Bk9*^244G|tM|S1 z$x_jhA348BeLi!G7#(wZ;Ex@gA3kmn!<%o^zV35w#hk=2&)`XFSs1bLKX02gI!rB+ zI~6e}ueda+4PvH7D z3BE;V9i8G&GVT#Y-duMCj9qf2(skBl7w(+>v2#Wi?P8p!!C3jq*H;Zr440EJ4_|Yx((c45oVZXX6W*v$y?lC)GM?P-`mS~ zH9a%e`(XvRj3tY`v)a@rsM0w*r5$ao$5$5M?o@#5R-lAsvC>Grgqg%35%UI^Mn1s> zrgpiKckJ>pF%v{_xB(lCh0iuaL&=&JV%I}Q!E&gEqN8bf0e?YHtGQLP+r6GttFfmA zGvvSbEmHx`Ny76FRwm$&pjX75ISx2t4IVxEmQP#d0P($=x;}&wu+>aG_eLq=HXh9` zoR7gzMawSygl(q10UxCCXsQkY#8^wtR=t=wjD;A79-!$Qc4}aIT{)lnqRfW41wWre z5ze0D-9TP58T4$cx?3UqS`1<3}N)14qQThAdU>A(I;OYPOKY}m& zEBH|o2#nn%vz~oxcHZ5p!lXJ#;uv?`-|I_e^@r#dws$E*LY8Je$7!A|UYhYH;m+qLZg_P!RX0AN{ty%7j-rJ|zZ=m?iF z-2hv#>u8miukVS{**oNLDIC$W>=>fkEfT`m$9vqYR+73FyQwULHgqH^o!WY4#-{v{ zmY0{@`7v<#-)@5ItF2ft@L!)0NTx*YHYfd67dk#ZN02Z; z6neSGzYfI@$%y%Kz)bV}h~m zsqYF4e`5lL(&=eoC{%5e$IitfN(XPKyR+cMB-43 zixeL3wbQv5Dy8B$t(HFadCVA0sOHJj3NbKDoh1P4Q)lWb0}KI&pmsUVIB+ydHy`Tj zC#K7vPbr+?VtiM8IudSAi&5E3MHdT))Y_&SnUr4 zavmWW!-LrOd$=G#^9nBN^eX?-ice!e4;!FYEJvSBLt*Q|PU^u6n8#`IDZz-VaE%z& z*X=z4y}1_`&9hj_H?*LgfDXBnY3KVld0mv)c}*O2x=rz~%kS__G`J8oKR&7lwZL?+ z1T&NS6>3Ud;YNofqi>L>0yiVfyv7e*5>oQ7yyzOV4o_Z>_OF5aF@=Zcrri9m5y>3C zI!CK=?JRqW^LrPCGCCCG>t?8(y!10j%>r|6WlHGnvXQg<@|A}_$ zAh8%#XfS}wkjxP^Pt5q5JO9^BHiUd_xCx3wVv1VMV;KtcyE_mt zo|_jC-ca*s3=KdtG$y2<(_=pE+sspd5~?_$2M5B4u6 zMm!lN%*q;jrRtteo}p-jT`34#OtdQAz9w6` zev!?1v`5S9~H@-g|$J%Og zbdn&FNDE?U{jLMb1@X6RrTu;!BLhPcFqE)h!msKzK=8uqx~YZQl}FkrBoQsB^8J{4_jez@eN=}q-V`8+?u}-4Hmd=ooJlxc|K|9f`dc( zRZRGnTv`OD)0zir`{U)>VLtXW(XfV~Mzem>_<{ZkcOq|M#^z8{D% zKh;jlWxM_SFp)6cu-Iv0W4a#U)4T`oAS?FbEQiXd;r2J2;%c!cc0M~=Py8hPr=d%6 z;Of=JOqz;kdSiJS={=8sEcr7FD#ex)IeLwW6te*VdkaE)UcuE}DX2;pE)z?`o;Q4@ zy0wT6BIXNKarmbxc@{Z%JIlidrSC9c@M3z+=leuYmt`9$N-g`UXR5M{a|&KL%N`@h zqJ+dcc0dV$K3-Uv5<0_EaOk*w-&tC&uG`aL1Ju1OWMu2q*HJum% zNlb8XFnt8L-5`dr`y?(+OL|h%W||FoaNGz9Qo&q5mXNplf?(ICM?HUb&0$pd%=0W8 zBj3xTR0D56L2y?{eGqF5I{x^{!%ladXS?lm%)qlyyu0}U4wAN)qz`L0S2K(~6;hWo zTvtC23YxQ5p3IVchwjl(#b29AaVBY1?t%RF(cB@A@@L{9r=V`$F8AEb{vjq>jTs`*M ztggICdpLD>9v7FL3@yE_k9&#W;a>|zvmB=d(A*_YPr8s|+ttt~<#=QNF0aq8rttx$wH* z-`J!*L9ixI$Dzj8E-QAF*GSbOscgBW$Z`~T0%9an55utv?72CX-9PS_u5y`^D;m2aQOPJ444u*Ms!n~GUrQ&^+A zG?s43N%U-a`j9p_@9K!8t(%q*b%)!c1b5DxFyD@_wVXs z5V*7D&#J*$5d6@Dhtd+Rui%k!v&tlD>df+0zC?NW4JkqS@DmXwBp19 z48a>-c4;Cpg^=?L?pTNBSys3ys^)B{KjhHy@!k|=(PeVy)T_%huqPP1jX7|j=Ii@U zldB= zF*Gz^yOb3fEqJu!vW1KFRwh3Y@*Bl1*#MFa@0r7+cTwRxcUco&hqbsJt@pL>%y0!Wr z@#9T+>50-Vu3PaR0Hwm!ThEv4K_t%-XJI0LN@}W{=d(5KbBPJ=yM#7x^osmq?Mn-P z?wmsnv%~}=F`Fp62SE1`J`7v#SDlPm*Qnk|fCKx@(J8S8O!q zO%C2JJH!0y^Wxam3u?7V=X<~JgoQ3onSPxbu_<(W??R$g3e2B>XO$8@wCu7JYX80HL(CCV8c~;r<2p z>S|{iRp}@dHtN3nmETC1JvmbC1(Th*=$Z=*<}HLU<8*j0Ets`K)$3muyRj-=xrH6I zP=Z_OIYy4$tAj-C8*^NP3!S{tTTbBP8noAaiV%Da{3(0$#3tTWNX%*b*KgL<#jc&^ ziIFPjBxRIMSnHBD0zUJJ`!T(0HPQ}eHBT@;8nmVdrY{d3&G(J^K zAoNw`hDGbrhO$fh2$m^UzX@YjRlKlUyxmZaSvGoNUp|t!k_8Jh&cq zDmjU&GktpC=ZR*IdRPfPCAlBf1@uvfy2p*{KJ6{EVy-507z)~7TyAB~)Y$Vo{mdD> zuDzP&XhVH{CVfLVe`!?#2ufp7hu;*@D-K75oCAPvu$3bRq>>KDE?o?1@uZ35~btuuAR+Lrt3c zC5hxLugEXlM%_48&RI|l*N@(zkH2DMMqY4B&B=rgBM6O`d$xqoqUW-Fqk1x2Q?{wj zlA2S?@xxlR&;dJkz;@O3OS+s@cgt!YUH@x&W~Qt6R|b5_7q^%>Xgb8Hn@tr~|e zv#YNKx}`Yo)~HWBp+7h^fd5VX-F=SUvJdA48NI)Vo3YiQ_w1-@1btJTTlp_?n;2b76RL7NB-shRcGNi5TEJ|W|} z^7vpJy=v)w7r%_3fNdd)mcfj(i+s}+Hi9-=&qAx2+lT@Ssw;8~)5hSYia4b8HCq7< zcf&l`5<^+&r5UQ$`Z<%|x!V?hrSEZHPMKUsk&O`?_dyF96MB=Q6CEBtq|O>24}L_>Xo=;64>J>sbcG%Ze z4I}`rzG}m59QsNJa7j5dNa!OSv-T~_@p{$b-2e#@*p~2TuN%suAaJKBNQN-KZPY3A zJ58?d0+)P;5Ex@$Zz}EP*MSREy(VKdHWnUTyT&3KVsl{{`+|i+C9kmxW7I)zkXgK z3fh)DuYVPK`S|jgUuf>T+tQe3;X;|yt5x3Up`v7^tVl$IyTh69v5S?g`JKe2a{D`k zp|C2yH+JRQOo7*>OV+3dK3=8LWM$x*CWH0$kPSdxVoRWm@U>}6eZ zyV%yXAy2w~-Jz5ZOXiK028`Qx5^J0ZPq>yAtSjsjK|9G>L>>FQ1?$4+=13ia%LB#( zxAi~DROcd5HbxRqTB4Fyf}3A^_&B}2(8>AqOy0Xxb;{Ri3@R(cJ?)CLMQ>iGIXV$4 zYp_3&ywM9=!+mY*<_d5=feAcx`=gH3t$^*ABvxyZVnt8K+p|fhnj&mD##(!NvV18z zeMmCtyL%QY2oR3TkZsYSs+mt-l1w|=lNLdT;6vC`H!*z-3G&6mT_jaVq1BA`@CwQ))> zJ;mh5DbjiI(oje4B+0Ks^ZTJlrXx``j@o1yU{PK`@xDstr8n5w65=!cy4cht7d2aw zKWXpsX0$`vL;G-Vh-O*()=c~ri5LFPi(HeR`-Tp-^VZ&%u~TCgnWJX#4R_sLuE#73 z6(bx z)vVD5vC(gpFIR(y@QAqd8ZKjkj>ad)$m7sbXWN3z(!6&Dlhj9kGEJvufvMYgs>BU! zP|yJTk%7VNdZ;vUso2B)!TVQ2w?VVMRd6T5KAM14=*?#7lAQHR8@HL(v`+1wNmjU$ z$F-~4WtF9Xq zf+uHvPENg|2nh|nEI;&Bco|s zo6#NG<6eu`*wQNU054}jK|xMV4j5r)3C529H^Yf&UPmu)D-IQgZ)mv4B?rq~(;p?K z!Hm+Cb#`_F@s9nRk!BM0=xV)=ZEkzntp81QfY%w=-Pw#zX*|vr(m2JqDQq7=s`c<2 z(5NQGk}d}gR6(hjV8E&%v}YR)N}iA3anD98q9ylgT;vM#(hY}1L_{z`jY7E=wSG%7 z6~U*rXl)-}mCzAuJY-2iIU+S=OCTf~k%9#?JWxiH5f)uRY4 zgERJ(u=ojXjZaIl4a%^aOdsxvv441+{XSpt6R|5eRd-#3Gw1{a1VG)2KRQRLDEMmQ z03{xGMc8OQa{Gkjts4D-8nt2LNjLvWwS5_`%DRMQHMSKitGs~VPW*x3{^Om_XAT`~ z`l)ZkU+Zsj2yK`}n^bId8 zTyxT%=<~)1tWZrQZ4H0=x{l6;s|8(Q%@?TnS_HEwpSiz{bIR@9h(rOg-|DsNhsh&s zpeICj7}4!hR{NsJnU1B8ogRX%Oj^j->I;1(6SZZR)Zbk{n30=FDx)54C%GjxBS632 z$GD4arWOHKDOR#hEe0~agruagkBX;-p5l(&y~&^QR7}v;8KgQ&V`W4|iOg6W6$O7W;@o9{-InkCmuGSb;`Ez{b>Mo_xw<-0 z4%A-vvQe>xg#|cAMj73_hI)IRca#s~ZhfjB4tJ$@!8uy-%A8*9SnVcx_;X*lGO@7y zOA|hgN8$cFdrjLb&)kVIAh}Xsn{IJ}@=U-g+&%}DAn#E^r|M(m^N%MugCTin_dsy9 z&ymof51DnK6H?a!hl8Mhm&H_FnMF+1sn&AC5oAZ=o0Lx~1#CmLVV!&9BTN z5ydB8^7z7v;J|W>6^G81Q(}0aG@l_n$cQm*y>vWw^TCqCtBmc865iF~TYXqpaNTww znhVx7P`vU^WLkyGCiW zQ@NaA!!n%!3j@XH3}?<>hBe=vvCD`otX#iD4Tc#v!cn|^P2cm<+i~pM`#nWsKb_~` z&wrEm-D)2 zfBv(`TRPB{=@1G2m|WbU#+DY1_06+!8#^Yi>DW{v0|Rrwkq<}E_33;%?3&SoHM6(8 z)^mH9sQ+YHq%+5*OJi^wNTXvZBUAhWo+fee1*kWtqniNTOU@a_jP~&%S@e3d${G0r z#sp`XDATi2(a+-U^uRQ%G)BjuQ2DPP>=c?DtpXDn^th9e?!vkzp5HBpcby6TmKm%l zn3vHxGUw;~*^;9g99G!saMw*5Q>lSk_nFq&P4K#1WJ=z|E`ZN?zT*aSH~3L140V{u z(dO5*YM4kW6}A-@h)dJc)3C3zuBlr+5x6YpIx^h${vLDpr@EV{8}OKJhr)40cdLi4 zp5>ln%t5sFERQcEV%I@fAoiukOkDifF1>_Rb7A611>2y>^kA@ z@u}APrP3g*I}*&_YX&K8(GDu=A2@#736egLZkVmTD}8&Fw+A~SEY< zE7?#@L}*I4EF8$ugNN3b*`V>Qj*`8gR|)z_7};7(?trhEJ2pIVtP9y5@|o+x`1 z&(>P0ktkW!*Ab;teQcgs^GV@aqm$Rp5a|aYl=jAC&g%X=SMfE8?z#sUkakVeYm^Le z8+jEC9^X}S?MbJ;v3LLdZUq-^zA1(sm3I#YTS>T#ZqIV9y2|#2yVTy)e8zIh`a#~d zq43?9UV7Btl_4a9#?nV@D7d{%GlWFh4m;hBeOPf%U$a2#_QF7)*Y5X$2!)JS$;(>= z%XB9kTDM-pui|ms+og5g>J^P`UXqL{3$*#P#k@JFr<$^P?u=qn>F$B7sc}zsc`od5 zik8)Rj8m%=RLHM1aLwp6Hs$+vqo`cwYY#{o~oPG_jUR(M!PJoS;6_V*#4*- z^!YHZ$>RWdydtfG>6g4Du7#^JrK6Xe&-d-5hLO*rw{@d=^;FE%!oo9lumQd5#s?(9 zDOROZUA1b|jR)GCo++$i?NAJUQQ;X$hq2GRBqj(~8imdJ9PXeVnetwXdYbFixHCk9 zeRu0|X*8W|Y{y^y_;0G20 literal 43725 zcmbrm1ys~s*FJ26B4vOysDJ`PceivXIdn@%4BZV%BT9#)(hS{*lsI&k^ni4CeP_`7 zx$ozB|8K1Ixt5EyCVuCfefHV=+Sk6$yi<^Sfq94U&Xp@yFeN2KUtYO#Ee`y*Lca!H zX}G0z75sT_C#Gg+U}f!WVPtG~<%N-@5lqj{$dFv$nf$e#oi#TDgSCa8rJem73wi^q zH@J*k#8<9djWShIv-|7yE2zgfCE7>I%YPHZY1v5F<>|l`ehn48#`owU`qk`vv`*SJ z*Dd=j+t0JN*OKti-@1$^9V}E>8E=Fj$EtaE9?8E+)iY8UHc^KKZ_dBpz3z|bF(Azq zeLeNf>{dRW=vV(wvvrXlSFxz-F$9C@9&)pHl3k;3% zn;91o8~&X7Sazr12GlKZc7<~iqwamwk}wEwT{d%z|ALnjP%;;!iIz>|p(vkV(>GBsk>hO@^ljs}6RPtROA?i(Ey(czz z^y>o|y{vJ5`YHAV8Xn*IIB6KV1iPAL%`Jw*ni{>)b?;OALhbzK?1ztB;+wT1Y-9q- zcNi5j2mF7S+Og}jnTRwDdqm*f8+dSYXv@2Vzd4Bf?%7we(r=&6_*eH%EyESl7gTZ} zPhAa|!lz|v6x|4=I$A4d=u37rq3GM9IMhv+fso2EZYbUx9k`-U>Mnm8e1wB}V>~>< zbmi8SD_&P5MTL}{v{#eR)E>MbYQu#e6e!+L7Y~KEJ{x%qZ&j-oO^3Hlx&{-9NU*|* z*x)VKXlTR~)AVn$s;oYCpo8nFK6v_R!rjx#u6Vr>?l?ip;kvOAXOd#7v5@4r&|q7G zA?M;lj_yM)+A5hWgmXg($4?<5`abIK$bbG-(?RI8Qcp}4U(EliLaRA_v^+_s(H!aP z=B#}Ah`tcEGTyEBl2>z!g^1Cw!`aa`g8Wj7FY1XdA8h*74C+BW|2;ssvl518SXfbI z5v*`PKk~S1M-hz;$%7j7hTij`-fdd#gi}p3mNKlP(w$IDZHC!z_SJKA^^dU_@%MGw)-xjl$d zfyldUhn$sSMS57ju7i6Zt}Qci>BKZ_Wxk5+?d?^tdvA;SWKnFX*-^I5&M3oTmg;<; zSG+|`{?GdGw{I(9$RECF*ss0iP@_jjQb9ZkQi|wfPI67=_jm}*%inn&7kZd>Yg-+3 zMa;E@+j7OEc%dx&c0eL3dTO#bCBMk(20aI!#r>;$qhUn6#(@C=Fs{#;Tqx_rO2?O; z&c`|zCVw!=KY6?#0oP4H|3Vf~hPAIX4ii*R=t<^tef;=wflh;*^yNeuV^~d(8s!88 z!z(_R8|4jU-&*x|SFN$vE-~)Rl1^@Q=C-R7Bv zg$((K+h9VEAsNbuJ-o9N)~OK7dV!9wX>My{WxKVBs9oywd047xwQ#}UNjZPr!z)6h z!QIX67oWrBVljq#Vb(Sx->XkUb#lw}LhJdhe81LW7P;5qnNU>lXhe#9S1t6|n@!l& z<8s%zbdUvoHb~$t9qxx!d*d5t#gZR12#bgI&R|6;!&3C~YGKm&$hL5@&kZNyC`#zXYsf3y^KR>^PSl79ixwZ9Xsz_kb zv(F7}{}|H1)C2kBAzh(}h={L`j~i{dcXVO)CME0m__%8e5zYa#*F&!Ru>EjlYg)lz z7;1Tp__?N4ljMtPYAjq+B_{HMNQc59B$>y}&h!4Svn|2uhD&{!xvGU&=;*q_UFS2; zEpNV7{4=5~WSGdq)C7j*JgIOt=qbEYxXZ@sdbEw~*`Sn;)(z%VSyZdsn5f$6Nfl9x zjEcDQ#uhboL~5H%7e#l1xxH^Rn##(RPGg3ed}!GnjppHejX)%4^aehIc1Tzl6$LfQ z--6-A(JZlPR)ymj(E64=jl5o8UtbQZ$&fP6^0$G0eu6Ej2MX>3Pyc*cQ4B#qfq5*1 za2!~{Y~+W{e{b|fJ6Qi244I{tOZ*B=RQkQ=VL?z*5X7KikXc3X@8-WF5U%m-qpg_| zijE&m$F-rKkRy*#BdRkNbYGWyD!_sAFr4SQ0nvekL!<2IsR5b1moG^%iXcq2F3sZb zmH=u=pZdqM2HJ!n;laVK+w<*bCkIwPtL@ju*s2tWzRr#hZ^{zRrh<_hFvH$GnLFgf zs9V2$0u?#ra@}x>|K%@S0r63ADgzhH$q)1Y`lbKvq5s$S6{QgyYh3Fo*;u6$-I)%% z<-RaV>faNlO$~|`sIfB;Nj1iS;SC{S0%aaVrkA1ai}zj`@A-Oqr_mVWL+p+75*_gh zRakPx%o0S8#`GwCZjs@%Jle;;Y3@G$d;s2!gd<;ds^U@QQO;PS8+8tAhw~a#^PlT2)Ah#Pg_ioNH5O}^FwH;h`&5L;%SQHCWsNG>{o>9b^l@Jq z$~PY_cysLV&76y2lGm`wn65L@3c_VV63)J2*9M-Nn8Nq!-O31reG?5s#?Uvn*rw&AKp#TXQ7Bi5grtD2Ll7+)a+3%jzaa` zI%GW36vFj6tin>apybWShbJ$>L`6k4Yn`@^_f~+h1OtD_TE&cfC5wIM5E`F4!Ova^ zEQB}}b#=g@-P9g$@N7^gF_Hc*nISYISP~Ykqg@=iw7bCkW_E*LpB6?nzu1-3wB)!t zf=f(Xd%kluZ|pcoCxy%5Ugno52eh=`r1jFzBb`N{bmG&eVY|7%d6V^^Ar zaLj@qt&PkAy~$u#YKMJ%d^(mnHH76JW8OiFe^`1twBYVRUuIK`=^xKmV<&Rl&n@S? z`>PkEXv^_(%wf2}$-X_N3p3Z0Qto&Q%VJ(J>z@T@t;B+4C7ZzR9}w`()tcokk5JXp z+C8Gf>nxF;;afk}3@&ZkAzx~O2EVpZHkhlLFlbZmmncg30IL+BgQm^zUaKjyG61>w z^U}}+VQ`fPVv}KEW4Apd9;spYGHK3*eV#Wp_yu8MnvD0CopbuXE9a^l9UV1-F(2XL z;*yX+IO??YuY2lJL4O*R!cIn}b1aDIcJ8l@3gvxu?L;6Dd0{1#C~vX;lqrcgn(}L` zCeF3Zj+m3t{7$j_y~^!~xqPuZMZlJMwlH2RF44-IX?OV}ZNyG#URU;9K2hw-p&e<9 zIFIG63ahEGlcJU3Ld0(yXQWG~x?5N)vtvacz1v?USDCIW*KfH~!rc`e5hdaK&D*#t zTKa;j14&7=XH_p4bzX`^zP!p-adK^M$jY&44n zkc}&>@8t_hIEI(j4#|;N{ruEpzlsO;$+W8L0^zMhHn2)NO4Qvfz-qC8agnJ7_M6b~8U2cvblwMPTv!`PSHrH_5 zAUc92Lw*SR#x1l5uTPg_2{f@~)#LlW1~SP`dEJerf3puZ;{(i_ z98G<~q1W*cR@ZB_?Rj$Jc+tVr-q2*Y$yPOPgh~Ai*uDR5x^bx}Yo*Jtwb=K&&_(U= zA>7W2hY#4?CLQb~1#@boQ~%!sZm*#Zm{>u3ZI5cY}G5Ewn2a z>|wOh83pCs*YctwIq#&w9+>7sxgR2fImr6Mw8?E`GIK*&if&v=h8Y@ZmMqaNp4HKk zj!FrLP6Oy7t7G^G=8D z35w_ZIy9G4=3ZHJa?9nAVDH((U_OteSwuuGM6+y+<~FyHy?Bu2;Q}pWAlWgU#=^Vj z#@{2b#DX4-)H)~I7^#0{_5NQLtL%R#lkrv2W*gaDYsgW#+tJJW)cfoO7T6%zNe*Js zO|MspzI&W0jlVInWjps$T_Rf~3Q}ilq8ds_rc$8kFi}a0fhY5I|Lh>R;lxrgx3Hp* zHnu!~y_C54XU&1CThV4jjzbpHbnQz>45iUkeA_Mk2%CCVUB`aJt)y9RC$`G6RQHnZS91$+nICLdUWFit%i0>&jia+HXy&H*a=U zx!4Eiq0dZtHer)MtBepEl}^ZE3*O|pS*-Q3GEfj;FM%L~^7Z#Q0*{CS{q2TfbGg+v z1{y-d00i4lDynd6{)RaNE54{tCLI0DSnm6PjZFFK*3;jQ^qn;I_CV_Pu_C6i`7xVj@x~`oiCmpW3X*Z zVfPcqWra(TRMUg_mOYjtvg+9elULqVBP>S5ZHQMO}@ASfI)8 z-|8oeM%v{p9?`1GElA4v#@^K{9T~aaXC~vN=V{lUqa0=PMWe!Dvk8wbHs+^DQNpeJ zF^$+QQL#;m&Wl}QZk!iq2QXsHwq53lw;4}QK>~D!cEJysoQpG%RW;f|ZA~RJQ%T%x zDU7N3-5^0xkc;)afMGnMDrS>U6qib|f{F%ASnuBp41~kg<(6loLseBwzhw z8T1k;L;@Op8}!6h;}x%pZNfL|SHfhR2xmtqUH9`g;c+Z4wx7%;f6}Ok9?7(xIUV^X zW}vSv&(u!(gHvsRI(y999~?Yvk}=%K9AoJ>+Xy7 zsf(5Ol)+!eHtIDV*isSCEp)C87g~wo9^>~RJUckt3Htg7Sj4BjIO%w=^7)VR8-|ho z#C*}jGp-PoyKN6@b<&(ZmsV!=y;q-$KOUqeY6~5 zBwCm(e^dXCI;PIWoy&aanbKEGl3S$19>fG~rhUz!5KHY^&aqSx7UIy2x5~m2-}Uj@ z%0eIYs=MsGt-8W;lgf_xs9V7Et6S=3d}by#so#vl%vhOjbTbrf=Yfv=BQ*a4gNlr0 z?A9!U#`g14;^QD%y?$=XMW(B%gc?-(7*;~hYm!WcCo18zIYL1rG&sq(Jbi~L>aAxE zVyh09C;CeSZrlzEJ8TN9S?oN)dSM{;uT8#swLa)Xb!d6YlPs`ZiFns-N2WEe5kvbo4ESdr#zOL*ri$~J$p;wt8Os8Tc4q&<76v}M@H;*6Bt79)VFHe@ zU*sN!hm)(L>FOKl%vkG^weSSIXyJ zFPpbgS9hJzjNYp?r!3^#)7^eA_BVvZ9Une)S3Y?8!?F)9x;|V85!Ko+xl1KFVFpjp zw+p~+@r1NR!e1_iJ?3FH&Sf@|lEAkA)gyI&+#1KSVso7yvNn)i_02pwx+{sN+@$+L z(p)ZyyQBG)+Q07@@3YrfS@!I!OdK;|3deJs{hv>)lPr`Q3%KYk-q|^JNVzFvay748 z_%sO>&7Ll%5rp-Gg^H9JyOfbwD@Wh!GTO4nzo{1Lec90v*pQ0frax!g(?0|JtZiJeAOy< zrWOOS*4~OeT9H!uQAoq>Le0a8T^aXPi$6F$e)S{$(&av|rXwxf=`cDJx|7!eSs0+K zk;8$8vzG5dNjR_g3A&VCy*>s}pKT1E$V9BvJj1JYvHM;$w3%H>7j$GuP&W*wmq_c6hqOT?IqxW~#j%&QX@EW{6(BQ>YFdgU>B0=eUvc zNtc-+W%K0zN^A*XsKhowCslJBaZ^SzfxVNhAf%?LDbT&hB|@uY)d+n8E`%P4y>Ua& zSlSw|D`m>-hgMB_L^2jvM`je?2b-b}`Ilwa3+`7is6n@gIg6AEigb;niAh}!&VwAk zEcJoholqHUNTwbfVBBilzgp^yU$&=0>m$Iglxmftwwr{@~8dM9h0#Io<~NEwE7$35`1KAfp?d_ zhVxoYI`-MZxoZcmL0)`4yV}a^7B0YG&`1wTvhj?ZN-15K$HkkMe6Spn?lR)5?=`Dn z>bo{lKiYiWjq)WE}+TAt*Mo2+xq?lRmc(ItYktv+#m z;G?|v7B^{zrLvaS8754VC^P9Ph@ZewnD9IbBM9({->38qNKe)(@(r~cCod%a<T1W3F{4QA+n-h7pzlrQ_iVR?Yqk-hKboGx!7Zp_gwhL59C?6)#4 zsfdb-pW+?&JQ{kXre@$0X~vaOA9BFaY|6v!URHN}gK0=k>UA=y@}GKP)#)J^}9|a!#5Fb@3mjgD7v;q_O@<(O+RhheqPN%z2KdhtQ2Mv)ZHU(bW$R?U`~75{?3d~j z&k2W38V|p#^ukEVDJ$`>%rtN`5dQoMhvq4pt|=pbv0dq0036`$R#!Ly`~aq9N@nO^iwx=Q`5T39L4A zSu9#E$996=*PIPEYJT1I)VWFDnEYlA53N;iLmci!NpkmE%OC+kn`ob(6XN}wG1gU( z8yJKSmvg%xm{l$96QZ^C!ph4>i;<2NB9pZ`c`Rz<&9-=RPc&2!xV3ejt(0)G_C6iN zT96XYq!Z)r+ISYUY`afUHB06;eJh8RWm|KjG_d8Z77*;vt-~CrAU~`oL4^M`0v`_V z?p3z5{CE^8`90Do_a}a&H4kQ?bf1UOnja9NEApJfkHZwiimZRxq4M5+T$x(I2;20pH zor|3e=ee~BW_G$)BpO2RVx7D>RQBj# z=#)foVq5sUYDp$$`R*&OQ=Q|^H zRXb^ext=YZe!>v>vby4FPG}fU!!}Y{?|rk%aq|sJ?8QaNiQ%DqjZp0Sb5Eqph=X$l z&L6b}htNu2XK3;BZ7g#?xfUH>c4K&(%{)t2&$PCX^%?PNtQ=(JQWt=tWcD*Nxs0)+ zB1o%x(|B4{tOUaQ_q zdL9wOqYO!5HhK+81oDTkjUyl51V9!s6~pi8aUF_zTSyTRy~kn%1AQMHTB+Z0lSvP4 zf&iaZrROmGIsD2=srkWiOdpqR>ohyQY8dfdg8i6}&a(ZP;iPMgf=%Qteqr30L_>bo z`d5BTV!CbA>33L;7z>g-v~t(8a{yrJpj+7I;x1@$eW`{3oiXVJ+AdyubzH;B-Sp%Qt2ZtE zQ?i)QtTRwS8UR$*LgVnWIu2F#u)vWRRHk3Aq;SGHXmk+`YQ3lc^U^`PUovD$$al;@ z2Rpnz)+{5lwLiutSf)aiurw8kgIE{8Gxk#gVW7Xi|EqV*soMAY;o)gt?r_YA(fR3C zp9wwZHH&BYwTAD|JXx?fd^%`j)8p&!E~PRmft1&*wP#m2Q5p-PveBcS>GdcEu$HcuH-o_%~?f@lZwDab4no4jv6oXtsG(O-;?`&!6d7=;%7ypYOT9xo%%;?<@S9 zw$DIvOP^iR-4W3k_<;5u*i(BKE#Q7U0NQB7!v~;?$(rU$JlB9<8=t0d0Vc zqw(@LJT|kUFJImZD(bm7nDWfb{PEw=ald)Mn~=bW;p|t`8s!!nwL4hMw8}YlC;M-- zZ8s+C0IAgekrtn3zAI^bYAOYP=DSG1-K7!ulOPZWjt{pCv<>n8Cw?;T6EccQ))mYVic$t8ZD<=i$&ai@Zm z-Tj|7L#1bXyuu2fUh^Q9?8hWWQ2>UOI93 z9Z&Fopq3%_kc+8{a}KkCXX*>Bp+r0L?N1N`OLm<1=O@O;6Og4AqoBJOX*GNtZm4?t zzdeeK#aL!%q0=Z1>LHwCH7uRi!J7~~lsK;#cZG8L~&`#M&{PpXXiLGZL2txkxAz5uPQ78f=fzot{mPKQ#VLz4R2A`DjVogTaMhis zjn^QQWW%pN- z<7Bo%>NP1vYT%*4c#zo>EHeIDx1;S<$)l5vhVXNG0`|)Tp+p=~G*IuiZ{Gr+oers75iO~E%X;Pdw-81unLAD5 zFJ2%z-yD2d#>N|eF_>G-XNV>Qubi{E&2_uY&hz;oOtI2w>#?Ppu!u;n?nFZ#Ro|7n z=q%r28K2(;^xE~Rsx?yOvqt@sFD}aEfve=t@Ej8%6x1`Z>kRp(M|&&7-AO!wS+iY6 zC;MwcqJ&;o^~4|Dr}Eb`(AS?|D0fxbLknI@2U|{B?E6V=0@Z)=GpKGT%|ccx3q7&v zzK4tJ&AvhX_n1WZ_|zN~Khtvr)GWx93xDiKklbjQy=)*6_n&2^MN{*85H3~S&~WyS z|Kwb$A;goOp58l6>(Jg3^|>NEHYmULYuCSKasU2(B$!3VHk$28i~dQhy)vGGr7c}+ z*V?CB>?Qd*s2M%|nbhoYJZ9&a{RIhEwL0M*{HCHky%}M&dOvh8xHaBDHR25kn&NSM zDK7~*VuYG-1wWLnt$=)-8!K&>&D5D&Fd8n;I>bO|9;PK!Zci+_WZt)J=S63b@;Xn4 zb%?me$6|%^ZQpPPa_NeCD}S$A!|OaQhnu5AHaMAu$^+YnztB?G&)^^NIe85UPDBmP z(%=gt4-GZigg(@(C|*iFe2T7SAW@+l|MLBgzU}AN#Q|EI-)Ojq#=p-l1SE8SFO3SKir)wG z?)kTw0dvG`-F9pW)1zgueky^uDg1BWL79W^vi+XQpMhK!hN4skUqT;2LC0*eH~j^| z7L$&Ryt|A@;?itoxFU$Ux;p8PG?d+JJwLs8hb@0=3kCv8HMRbHMo|%QpG+WhSJMZ0 zjvIK9NLMVp4DBBq2Tc0Ddpnumo!fGva(OUUBnRY2po5Uqen3Vhpx^xV$46RMa73M* zCCg67%FIc)?F4&43tAF!+dQ?|0IZ=CPW!z)%=ejlQWtbGM>%&JiRflgsJ2_WM=AA` zk`n&-S!qJTICz8Ge%a5h0Qv6SJLHd#BF}HsJFJbh1U-BLq0aNU7yc0aZ^yHDF>@9c z77i!n>q_QByytOPwT8h!{>GaHrm%N#;0ICx+8mt*{^4!VCjRD+A<~QMx%*3TeWD7? zD>oviEy(}x{pRK?)4U~00`=HiR&EBV=33-}Sbvu69F*Uj%g$FOysgPEUBj^}Wl^^9-<66gS|ZEU#ge&Nvi%-ce+@7(#3 zB5(mR{$9ZFG{%Exf|owT$-I<}ynXw&KL)<#SZQ`eh2vDcJH|tr<}%{Dgsfjc=2pvd zTpn1eJD8kXL?aRrlR9gJ zhz4S(6(HQ97~!y-&=muFYtS0vZGi$FSFc`;cvBCgLKWnjmX?+^jvJ(JyzobfGLYlwsaz7^%$H8=uUZL^w%+X+cItP{KhreZFyHx^ zq!oz#2-HceenC+BA12N@!q8-TMy?m=G^1wbNI8YwY3y;G#Ko9L_h}1h{{0Mt^Oz#` z)9W_5agk3`z{*vM!jPhk4>pmkjO{7CMw`Xi4gN=H1gf8OEl2wGZ$#PNxR9~0@EBlX z^qjNjA|xhZ46P%Jd606YMEd#)orTenC0y5MS`JG(AIRH9LYmU`N<=fX@2*1<) zC5gyK!{7EI#tg$uw46PGQED|E8@;^11ppnd!2I=<9JIeO2u!$8hH*Cosq&3{-m>xG zn3l%F#N{dXSAA^4=0K_x280HGrp3m1umPuCBJ2Z#IX^ED13#b#B$x7bs%?7qeXzqs zMOI-!XaT*{4H0>0GU>Db@<~30J~mVaLiYwI?eNevWAUB^@@AOdy~duX=+9_U)#9%q zpRax){a5x9JED_U{yhrnyI?|?f_wjAEoYZc8Rim*cZL*yQtF@S{{MU(1OrmCGxC8t zfxk`Kf1Oh6NojQd6(#I{Ihdbz9Lm~%-nxHdhBG2MH~3#G3Md64I|_1;ttfp`sUh;% z|6wRAK1hS@qFf5Ud$r?+$6PC>^C(f4TvD~ooH*W#PTR#UNofYnN=ChJH|E1ZgBj$H zzQ=IEnw~q(1ve-?C(!}qelqYmcb;_~YHg24T(xxX(?U zeQ#j~V3GXD^{%X}1W*{nD!KUQce0@(lEdivNY*QZzQ5tk<+p=wD~SQ$%}+(zE_6JH zmOdK*)z3?yToWw@D%if4$ucUSyvpi`WirsN zb!ud`;Z9_I{5VZ9UHmPp#mFW|svwTP9xsQy2Y?swmsq*&^w&AifTrn%BEazg<^kJk z*Eqa+T4TSm5122H0#FhF332@QHiFM`Nk4WXOF$$BMb$?JopWDo{*eYx0fujsp`?5u z3-^)mINZg;qC&auz2C0O&NiBft0?n{1{?(|Oo)KZY;&c}+$ZhH$w`#T+Wa*;!$+#9 zK^QvCEJ(pFB`=sQK;BS;>wBJV1;)hS8xrNTZ;#%o1cWfiqZ-wA&p*_I6@%&$g(Kp9 zc|rh-UmVYA<$VnhR5_)ud(*&<8g(bTpPwE9QI{C($A{-Y`V9(OLpC7cRS1${{rn=F zl#{=!D+s4MiW<8sEDfal1%N$(cI#m%2~RnYFDo41zEAalUNg2d@zy7)-=Sq}z%WK! zl*u~>gr+*SQq7C~!XFD}N1)|^yC}V8=T2C#VKW3j`XL$Ebl!ObL1AQ!4@e(u+UV6hoV62Cb;+@d>Q z9c7ukLAM25;5LPcSe@&^e`{GZC@BHKyUL~E3Gf_zV&aZj8ylN1;e)m3oz6!IJ9Kdo z5#+MPoLw4qF7|k6pddB?)V$M6hfZSR9F=@%pZS7M=li_dpXF1c*(u1$z5cspA49PQ zS@V%<)8Obl=jA=^BrV+9-#=eW@l=~=X`y6g{m=qeX{}#U@6c+zhxB#5Mp6i_=iK>k53o5#<}R;wOD!AX??7BY{-SxX{1BX)8^?B`Dhr z$d?hIOm|)AAc($kcD(1hnB)kAq&m?SleI^M4d*{*Q6~dXGqlVUlf@ag!3@Bm*#Y{7 zqC>FHHU)-->hXXi5DUiBs)A7>+Ttf0%Rn$}YaB3qkwF5&VFe(h7|u`Jf+>_cL13t^ ztOSIKG4Lb+W&nVdRz^gX<8i)a_iK)8MKA@r>W+u zti|Yf=p9itYechxxy*ywU-grq_q+SlvvvxU31P z!t%*(50l_Qozkpmfp@iTu-%CSp>4BO9;@WL=;(sm{qh1@wjZVGrkdLZcM}-u?i&0@J}8ty+&9oq$Fmw)8f)qvUEA&>cV^O~lB)is-yZya#Zs>0GhP*f~g=;elaRx)ssD=JOb zrjvb0MA5+6jXhY&XOkk)Ui!2U&F^dZ!9lVcZ24aGZSTRzfRljr1a|8VuzA<6Uzbnf zZV4m50cX9U{3l<4`YlZXk)mCF4lPeIJ2J}YoGbJ#8BeuLj!c$Td%q^!UP}Eiz&V|_ z=-CvA_$|Tsqqu&51EzR@ULKfnl?-<5Uw6x?;27GDkUu%98pyJ*vX7Eyn5?W2xHhxD zFJkK&mI$EehjkGu{KD|H4_DLGWBJ^^`M?E^oC-nE2YS~A=N&2@ADrgCD@vHZQ9%>{ z0P4`Llo%ihW~w|LZiUHpBb2WpEY&==N=IM8hMOJQi6Y1zJ$n0)%a1sC8(iE#9F!XT z6O{d!@)x&VP-{4T87 z|1b#P>w^EK>KBI6;}Gts{auE#fk6Pb?AOYx@^_Vsa-9t1wN$3?K{eaeJO8pN#{cP& z0Johp^Uqk0FrlF3jsNl;8Z$0{!%+7M1_J*s<57!4!CG|TH=xuJ19bbw##Do+Cmsrz z)zqAX5U@-ZY?Fa|6M{GK4)*s+`Q0i@S?TF5yAruTfo2YRjsSE4@Ie82h{1}98S?I( z=~(F!hz9d5fO#qR0YkBVLKVB9vb}r9Wsj_%VqQ*8Zpz~X^>yUlBn}>405{$G(o(xU zi6)2}K(c?a*@WE|LeO8R(*U3o+v}byZHo_^ugQvB$0cCWZywh1gfLKn%UTa<%$#TE zJ_E-u0yNM)!k%s5@k3t}eOpqsakeXhLM0>-_S`?IQ{4K>-)Pk10gp8XagbUj_Urql zuqskS8R$Z|g2uIg^L9q9c(uNzEjsdFg~eq!==F+L&3>z=>Mh+kafhc(UMaLRCQ8(5c$Jv!R+DD(IV`;yu9Ke zk0NPR3vOW&YF695!*6MB-USVA0Du&Fumw&dE{;1{_rRmUIe^jQ61nhh=mn{mvNHdT>e*CSa1-UiX_Lis4yPf4R=gq?QC@@FRpg^T0jzOIr z0P0M)fu#XB>I5(`Q|cq2Kb-inwt<}i1gi#JXVAenxl;|G)MK%rX-z;*&$31O-K;;| zmZtk49YbFSAbH}o{q{H(>M<;g&3GX12itB0V0O>4%ic1HfJfrqH@}&5>uQilJx;gU zILGjH+_nIFwGHlTjQJ-JX$CYjG$n*?ESdMThHKobPuQNKwyh}B@u$5lQ~g4ej~ zPr*(+ASArQGtErCmWPhk4(tn>5529xs3zYd^uXPxN|Mo9=N*t*1N-yU;68(P%oEu% ziJZ7>4adv5pviLqa`4g8=af&4uX*UM@O&Bz#%GZFNVC^)afbcEizWu5f%kae}V0=3ATO?Pp{GE=C7OIJpt!k89nEKrfQEu9;Il1hebdcg{{xw)pOC9HodWI><>RZd4#K|uikZjm1v0!*uv zUZn_lc1gp<8MLZd@eUd;&UtjUmocp>^ppwr1As?uRTMV>=cK=4EZigJb_aMW7*SCh!+f_mrGUMp3~@xG;&>4aGp$i77Q+6CWPC(Egzmxgrq}v0t40?MGQ2NveVB71XFH1p}V!uvlp5Iv7`73mC(WUL7-8fa1D3= z)svdywtYKTI;GPWP{lhbXfkgr=uCxcGuuIB3+@Mk(`f-9Gib3uK_OW@OegICU?M2m zYQF$D-G>l_&3yCcl>|3-S>C6t+&0$(lnoFxk76$X2lam@E+z&~qf;*~8Xjl_r}+J# z(q^~7#WeXy@jPfzwo8KomHvJ&DDvQkMS4xBprrlumF#&dh(L(H>-})Em7)%tfv4W1Iyr;aNuz#6_|7mXkVSya!P1#m(XV1a8U^5?D?f)EJ`b8#=`8!x4 z-}2Mk><~acfBFWh+}3ci?n%={F>o%IChK@UWP^wXScibTVmCT9&=&iVE2$h+hZiQY zxBfH1z23-8JB~geFmSOWt^~BKS2yYbf;W<0a?}K;PM4v0Mjr^}I;Uh=z{`eGVE+7W zhajAtt_P&7gS%p9ldc?=5hzcLgx#eLM7;l{g2_YN3Qx1iJ_Ay|yW$+R^x+dGQnth0;_J z$SU@$W`UWtyfIEh92^zTUuAu_?f;6*6!Pe@U0tQ8W{R0W zc0uKEUR7JQ1vnEEQ)Q>i;bv;>S1G|R_avSCE?o9`t9xpn-hq3O4H_YpaDLY3y#t<} z6?t5K_kP!|D4b|)dK5zM8zXxbYKnqD-{*(YGce!71GEKWC^h24+JkpaD-)j_n&gx$ z)eW7iFTbIiSZ)5!CI6U#x`leW*a(ol=rjhj2ze<+do;mk6wy>1fuM1Q%El$7i8r&5 zm(_&wC-BfdZASXCzzn(@hS_b8PsYMn=w+WzjFUBDNvqwJwM4aNeou%iAJNZ2VBWR@ zYX~Xhz%xCMrZKVBiaG0Vs-rT{>Y7+RuaDYfy+2c*N(e5Gzsqdz)B~M7RBoe#aBS5k z7G2$6f){Fg+GdmN%3-_<8Xh~hsaQGZIog4hOoWv3u8n-o#WDNMZZpi?Uk@N@LWSj6 zw)XeYpBWr}!B=T_?74o%1)(jN+rf5u=MF|XVI`wY)Q5+Meu06A;M*-Dskt~b6qo$C z-(-hmbZKJ5H$UPqRE?J*biqUMVxDbM&{7-+3k$ec&r@l&Tlcp+jq15~f>m=o4?-tG z$cc$T#~@WQy6B4S1u0JzfeKRa}f4dctfa~X*{?FFy z6QQU)!M7{$d1H2QO;w5xvCCHFCE5G>{X=vczUYaL*0(D(epQ!^Pw?FT{5WcZ;tg*K zYlc&DlrYU!-_fH-byHEZrNxb&ud znQ2tzBU=n^9dkTEM?)19#MbZm0K5XUD{$>kp|7)fIg+de!Mm3g73cI*B0Ri>`3(04 zVWQrb&X(LWUck_P4<0URD)J*}q=sJ-l@`3ySiUl$dh(U^X?$z-;Q%)1Ty{Z8SQ}Cr7w|OU5*Ew$7 z_85i~@WTlJxQv6WMEn$BS0Z)`-9fb-5n*8<{tT9gV>UwlnuB)TaXWPi`B4|ohGwO; zHyMk%`6qlDZY1g0X94=V)WS;uA{^0Ae@^lE5&7f=5OrXa@vn+P*T446FQ8iE&%3Hj zU;JeTV=}i*@064&04~T)BLr1$DEq#ajbpxP4@`5FZ+)skfYwJGk46doS}lN&Pg5g7 z72!9Ky1>wII=i}h_oqIaySqD}f$@w#f%F2Fs(17W^h8rUj!g{>=Ru;k*#zL_2cWc& z1T4nW=-{enfc81CVBRnAro^m|q94yK^fdr})o{a9igX)+snXH$6^acd<>k9ULGySN z+~@nw)s^ene+n}FEH~&lssqgi$WwF4*M|h}InqSfI(+?**H}s{1|%FJy#NS=Tt5d5 zKZ`;TdmjRY5CCu6w%xPgi@3jhjZA!XoEpZ zz#5RkwZ?#)0{mI?Y|l0z@8a>xEJp7I&jEEv(LCT-ih4|J@`l0B38?e3vOb_y$_vL0 z2YdIP60!cXM!okf?vs~&umNw0oq5od9m-R0n!QgY^BSan1|MA%G2LQQ3fQ*dLy-F- z{0d5*?k1blnDZMZJZ!`QH1w(Xjib|?m&LdGx5f8}Hq$`4G*j>0q9;QN8mf;Wj)t#c zwm|r>GQX&qOAeXYC*o1D@i9`@Y6u?LAc{G;9d&7Ck@Q{ocyq7(1ISHaeV;F*fFL$_ht(_(QH> z0guyIa57WdJ5lnBsJNebEr>(E8ojp5%DX(#Fivxex`%>-LXCds;t0fkr#i>xhDmd{+S6S#_)eL~!^gMO$+Mnl@?gQCBL9nZHfj3wnV0$;8 z;x&RYRNv-vg)&QKhD^RJbyV3cw=%ghLel%5(}NkU?TK704S|9NMlq4~BYmCdd>|3| z0iD2UqO=-@hFq~sf#sBk`^BS2j}8G&f*%6d_o*4|oElgysO;d^*i(@qettL5wOd07 zKt-k|2k3cFY;UPhUXNkWX>~s8-Zme~laxf@L!k2u3sk^(;MX<)2fbq$O2~#sr}lOB z`8$Avp|zQk$e{=-ic=u4)3Bt-~&!U z#Daoj2jYdU;{XAp?iG3}>1evs>F#7cS`ZC^7Ee(LI4mHNx3ymWbFSK;;{%-eHBZNi z<)L60%9uP9Ex?#}%w&oIcu67VJ1~x@C5)oY`v}55r_<*2moLvumjH$F0$d0NF$q}E z+0}K2tQ2=9rGROF{U?Udo5@>yX_cNsLnFL2r4!#!d!n6d|A+|29!KW3Q9HlhtYnu#Bi3VHM|IG zgH8BF0MSf;NF`|k9>)_p!M~7&%`$$=jU4^Pr!~~9tF6a908V=O6(W$}Cp)@wk(JUU z4Ix>6#F}+3%Eyyv`WkYH{}X(z+IRc=(($KOux|_gmDfnD>yf#rd^-G;1WsHDNWX z_^%oimhaXv;&O6sw*AY0C$cNNZB#dSAr_uu>C-{>HV-H3~=pYS>}lc~Ef zE{?O>M2RP3n`*#%l(+D@lX*&9%q`UK9f1X_fnNxMKLZD)-c4SZY0Ube@a@az$^C-# z!IoTC+X6eaQ!2o1>`;FJ`6UF*XIe1lLJn&_h1>oPO&H+HdFkop>Zyfr{y*B@I;^Vo zTN}0z6hulINdZYgkOoDpD^o_GJZ)wR}~&wS<>_qgwSjHg~40GU~jZD(TQ*UBHiR-W45raES=&!X!gn0w>T zRgmeSMWB^J)e17t8Cq}jp3FieL>^ogg8%>e3ay!wBRa1gh?$|M#u%c%@y8K`ee0TX zpY0JA`oY2Sw&L=~<~6YN0D+Dk*<+3dsYmucuaUpe@qo&w@)4IQC^SKV0>GjdSXT84c>ny% z|0InOy{kZLu-29UVZ&=VgcsH&x{G7uRG^*u4;mgEHL0%AnJkE2TPCK={QPT9R<@16 zy|zY}fROH&Cg4XetPt;0tz?z?FNMKC zlKmnU7PCU~i8IAO+<{-=>o&;qlsu+*fq8&4LA#$s8~}L-FvcJT%)FsgLea~oI$w+F z7Cw|E5)cyF{N6*)#TAAE0Po`LylT$ok1G32k)8p;8X0~Cn;VMO5W5vu29N?;A|RFC z#FZam|Cgwtejf?=q#LLj$a?y2Ri-_3E!%*WHG07F3RD9X=+;dR(BuN#W6S1`@#@{) zjQfDWU3b>az~dWw5$S6?jm1wA0B9bJ+bQtm@>7k9g@>P($HWW*Gj5}11Dx#mS@jyZ zOlbFB2AAFTtrwo2Fo-S*tfT+(Te7ns0!FRfT@oS&@Omz-;rSp8GNZ9o7uH}mu^C=l1Epr6>9rjq)q}npt?S4T?>07bTBei3uz<9Wxt?q{}W{7l=Yd`h#kJ!DAAN=6fNeq zaI@$?ovG*-0}M6IAJ7i|42JeZAvHt_WJ0u?FtoZ3n3Yr7K1=;_}tMUn`CkG4a^SP(!Yn$$yP5wd(s(Z!9|%xMzyaS zfiK+&dgPU2w2by1t-lTQuEOnIpc0I1f~rcr+}8LY89~UL9zQ4hyA}flLKVw65ER3cS=4 zF3Z*C{qI&VHo;K|Wg9Xa_QoRAQ4{F7bC+0E8#&lDOS}kncXn1&L8hOkVK(nhz6CUX z2(?(}D!@qGFOT}N6yZZ42VBvPxqV>Km-TgdxhouKSXL-RiK+p3K|Mtd2nmS^B~FxR zr}W-*sMxo=FYf3*;neXsEshrl<73d*M#ISX4U{kM9l2O;2s=!|6AcaY3=CdP@W_YX zt8vbqcZ7>p*aWESJUvst9hSQv=@F7N}gz?iVp%@o6O8nGo~(ne{t%hP*{31AQ;H zzfMRu^k#iOzWP||%ZSu_W z$zh|Wy-M38bV6Lh00W;Jm?WR;b9E78TIp+ewm`FQmt09?c<&4d z`!z5NDWgv80TuD^pnXDii$q!JVQp=ijOhtQuOKuu>$OG1WLk4a51?>k8!N^*(=@>y zVg2?);pooTYbxp+*z>kG0+yGB{GVIWjqxedvk#I&b4Tny1Y<7^L~g+>s{Z(qC{Ojz zTNBVqQ(~`opWV;sLUxchrK8AiN7|&PMiV+;H#rHlME;cpRyz-p2J1O8^G9r}+p(`> z$ZDId2AGpXTwg#a-xa$Jq(87>P1zb?F`}^qHcidKCPvWZkZ+`M6U7s7ZWqlQnGyra z_d2&7ZL6yrNBt5!m}!bKLtUi(LE6gHk$wf@rK-J^f<&s5HX zjdd)j-<38c65>t`qQ6wE71_0_?EUcMZ^Qf?R#D&LDw-V_qVJneUM*?7m`CnBVq+1^NkOd2l7b=^~8^WX@+#9^E{ zw&ADK^8`?lDSiqIK*)VJgPUDR`P=>Z;RYMjAE3$kI1DWDC#FP%ztG^Oo9!lE>g}{w z`5tIG@!`oAcvOF1gYQ^80ib-$XsBjD?FZ$3#O#j^$f?XwMV9!biN7VfV?R-(H#QC> z(Qo+&60pa1Z$q=PAD>5ENH6KM89Mi-&JaOtT(`_Bk+7;Tsd( zW=knv)p`$hmHrwWpB4Yq)KqSh&UW|9KQ}fc-^yi1sOFzg{DcoT>&K0a=iGtrq=*Pn zcOU{e{!CmmFXN3Hzd$gp0@RWT(;jE;Y8d~VYQmn;d(XG`!40rPvGIBK`(h>5!xs){1=XRK}Ddza|M`#AAg}{%rb8W?1{lDZA_*Xm*cc}xJ7#N7y z)E|Q!%4WuOd;z`4AfsCIG4fOTaP#FAupP|FIizRmLHpx%{`JWVephmn!0WnJe^x+vw5$7Txrn+y~pZ&4AyaDJ^9E>6#_@i6!F8|^n9S8vyO=<=V7A-J!#6w2; z;YbO14^$h&wIuG}C2p*%t7D#8_5d?zNRDZ+006Yea3)QVIbmukakDWFCI8DNfRb$e zt6*f<+TJeM0*x>|Mt|oEU(^V&&pyW0>t8lNp*8};Y_N4Jaf#ysbpz=YJ7bCDQ=^zJ{`6l zY!Z(4h!ZisZ3}m6oBYsM1#qrf;~96_Y#Zp$CQM`M1Y{J#pupF zAeB(OK*_WgQQkLK{x2MWDW&V=cxTM$A2V-~2lASXOKFU~ny zY|$Jz6!8T-wi$?FuM%*c(;f_)ye_cr3J(v@9|9O+4c5}(W<$J(C4)+**>XJ!Q*%__ z6GtPnbfNb#7X?0E*iCQM@^ql?0txo%v@j05Q_yQWC!K;QvSDin_><-pq=q{29y<81bzJ_=E!I(Y* zlot=vaNFkcgfH`I?LM8Xcsntt&K`)z`qHZ8)YP@GoenI&%U{%r9MnS>Y?6?{r-`N|mggr@TgvYPWb&M>%`{s8;mqXGU4-e>)#E)|BQRCkEf28Qtmywam6;I55VM_qn1i`Iom6Kh4 zIi~JXbzzD^;b$>6clWj0TJso|gIMolKHu$6JYrv-4uOLW@%^1v<6X@ zlQBJyCe#d<7X;acIVIuek3h<^W5?gowX0|AR103a*1c8xt}5Ct6M=Pd_{Xkbr4`5M zw<+P;##ibZvRD80qXvMPjvIdp6cf-m(}_fZ`%8q9fb>t~*bhg2H|~j zUzp8aSffe+znUls9(J69R?EQO;kli>sfeR=b_S&Mn$E)|R8RI1=De(i2a$v6_>zA1ZO_W|-WK6{e>Eb~pj=lVqPF^1SR zU7wc=EaoiCooG^&ng?6a*+otm`=7tOWfZ~pYr z;Ic&la)mx<>f^1yeXAZ0+qVMZN=mVMW?agmbr`#k_y6_-Pd}P%2M4tmQrJ(aXye^6 zUBMBOK53}O6I?)3IR!_f;zR~aa|l6=dvzM-MNyz%*; z*JhQZ_;EzN-H_d0z`fBxQ7Z?*Ywjdx`saiCMuw3c+$20;5Hl_9O5HS=rz?N&o*=kI z+lL{v0UR^}J4+5ks7s@rQFSLVhxkD=0RRX&$!jqv2**+_OW`X7M&b+!?>~QZsbBF~ z*`MD^*#s80hF*b|I=DWGhX6-Go_JJ{7#&SaNf~4=pmMevjm}bT1N?^01m9G&ceL#B zSCB$e8E;}}#NPR93oHkpY9#!vWLY|x3Y>8nE3*N6{unfhLK4{j7H=IuH*V+v3x&(i-o@`GDq2LX(~t4o3m%n= zH4#nH9}izw%I4m^d*J^vw*C0*BtU~gA*(1u?_h7<5A=-juSf@@ zQpQA_*UQ|L&C6B)x?9fRQ(kx?KaGiCY`z!#$MSu=x{{e()YTD|${loL(06reT<1+r zYbmP+l(O7qN8ixzUAdG2+cFiiCTI$5Y#>L!v!k;7Qc>)qpeT9KZHZ_C|35E3X%jAg>U!1XCXxrZi;nXX&BU&G9AzD# zihx!OMvO*6COPIc=H81~n+D$M^0LYI&-XV}Ay{=G znQyK){0=zd0aNiBgQ1e{)Pt$k%8#cTt{e6@HJ)s}Z@3*WrFX2y&tIeM2Q&?&o#qd9cuYJlAb*+kKs ziPieoC6pHG(|f{G^NNSm4*5<6uEJc6j5lurrng9_iua_Xz71axT6xET#jwhAUIDou z_&b`c5;c_$pgMFyScZ7sJu^_mMGk(S?33hB^^zf{b-KQ`V{Jhg$~kf(etjG-sMTnEb^ERs+?nRaMmfr3U12hKaiu=4F%wU4hF<-`*t@cC z+a|Cg2uX3p72cCA5^KqVtuLh;vd&?$7R85<`Px0@O(WA z7Vsx}ajHbm!uq^TmDEOBuPpvKwLvRCN-&gLS(+NHZ;G<~+8!1yEo#H_<%k5BAB-_k*6z0Xyydz>y1q8i(p97?Q#Z&hW)(4kk(sX z8LM}58FciXIlBMvvjyF9Y;}nd90MqIbHlpeU^o&0st*kf24eK79YcjCp)vtUQ(8#8(Q!@iJdlScO*Tl-2rs;E7 zI^BvVcNsug*sI6pWM*~5kg}mko5-Kk&O+^=pB-GgxO8HK_ygmb@cjIIVs-=!M51r0 zgF=)u5az?6m-gf7i^8id^mJFnI7xU}m9uDm{UBAwkMUFr!>L$vdvpU$V*s}@6E@*I zp94AjU8gyS48X`q%R%%P-JT(geH|Bv0ENV91_-~_-BBpv*_E?iwm>gstl-mkW30l$ zpthx^X6e5{XnoZg%{SC}yd$A@-VRze4 z|EwV+Bjavny%unqY~KfCIeedg>Qeh(kLH$@nLyvX?%~cL&_CQzi@#ug(Q+%N zAgjq%gCPo`1AU$aI)|1mSPTV%r9#zVGVWVneZdQjAM2O~6*8Eb?`V)&d}m5>oC5iA zsK#-{0E9f?FeUKqt6<+0@HGDdM^b*WZpp%c%SkMA&`myk_>jB=o%>Qs*_mkDlR5O2 zV5}DCcr2CAKBip_233aji8C-}W%h4TFkNK6Hv?Pl;;88v9`B(Np-z412Q{EDdic=5 zJs(mUt;%$7Y?oNlq=`?xVgKmhWyo@-lC~HevC_I0t3lPMLI5v#SY_6(w4Vp zUPkh&AUM=2%3f+BYU~rg%mo|4xa&j(+4f8Mz$95_*RF)LwW+fL^{T!!1T+M=m;J#n z<8pfhGPtBIz&SAd5{`nb*Nk&hhL>iPKe_Beh?*r5B~(Pc%u!kpGjtY|x+uiKQspvw zK9j*N7=XHMx2psh3EyR|03!!RJsIPW*}pv;@hS}IlLiiIND3ZPnh0nScl$ML(sV-t z_pU~I?oB1?!Y3FypgsUBc-ITEC*V6b{ZccS)dl*R1ily9ZYrY= zycI5RUR0R1!*}O9ckY01&gL9g^K9KqAX8jmT{zg^Me@a6(?5mF!FsbQBYL_XsKKjU zDG)fa*aCnUc~^zPy|%Um-5NRVE0pLEI2=mfsQH+P=9f@0B`Y$4LDe5mF4k*|rC3;I z#oIP2+9H;RIpP(u-qZNFxHwQhSMbU{JON@3g4ubMpWxbRoz}~PSXBZV+?_BwJVhsx zx}`F*kc}r0Q1Vwl`Lu@y1!Y6;$;;^mTdqrZ+u$~jU3K=wA)_m<0^cXJVLwQ^?dVv> z%%WA6Ul?t8kn*o9y8_;*G=aO>1TA)8iZ>>}*3C9(vd>a07QS)?V-y~X_rpMwk*Ev> zS(M1Hgpa9kM#|K10CN$sG%y=NB_1$JR^0o1Fw7?aG_Ia)_=9G`6xOcIWdX>!C$+vX_t=Y;C*ia}g1ZEa&Wm zT{(!8fdi@r?Rt7@N+OH`Q3E5@ERjzOf4EUQ&4kf3dw%cCKyw?gV{Ar-;0&&Nfa@}{ z4V<4xtwY>2b71R6MzJ!6QU(TeB~1>aa!JD5ThpOPK0#=Yf`&Nn zndL8)B-mDOQNZ~ve5ouQ0#}y@IO3oPrw`|U4o&O+kDf&UV;6P-#ZKDPxMd_3f@fW) zNYkCKU3tK4TsoKYXtX!`;|>0 z`6fg=2;&bOdTqI^)uDap&bxaM|zy_F% z+>()z0k#Y51QXCH!Pcnj_|+S-O6Byd)<}`rX|7KTC-ZF3^B zSE+gby_r$V5+JXj(+6Yr@u0TDSJM`JNiexOK|2o$zr^ZG!1*@KeVyluGC`psh@_`q zSI6_o{)7O&mtAa@zlwO)2$RLTZNeDdL%{fGU%?{oB2n$q3$?2a3JTj?`B|sKJ}HrM z;8Rm`t}WvBtDP_5z8Y%jpw+3FLUoaG`BEzs4Duk~uFq-aX1VHCPM3(OmWo>?-d_wc z8HU~#Brtub(27y2TG~Pgn0|vEBDK20`Ya173M$wdEA^QYn;((4j3*i~oka zETO$!Ci@^tm(te}b`1IKvvaN+{=DhZLsKC%y#$Y9<>QWeC z_ZIkQVf6l&rLEQYHMPE~Q)&D!x$aXcA~(F#p82=DZ%(>DRGicN^SgLQzM8VA_4#s< zpGAAn2WO4mOTYuebWx|ZZJk zec2j>U(pEK2toF@0YvM@`B<@4M7Q?rO%y!26FbRr> zXKRodO+nhjYZkwm>|pzWM>;V}f4YDpw0w8jfR^K|GwHy0DV><>b2$uysKza*hP)A0 z>P1h2zsF=S&l z%kl~QToAYR>a!d}L`v@Ywzvk<%qVWhe_x>#`foqPT`{o>wvxAYg9)$|iboX^Yjov; zJc-o`t_S$*LK%Q9eX=1n!$QlVd@^ss%_Y0i0s1OPG1+qsOo#|;#gCqrkL3M9(;i#@ z`3Xa&Z<2xUhsc^5^S)=H>I?J6-6?sl!On&IkxeSndbxO*zKwA9SbuM-q9+%ij4Lh=NK};BgXy>b^0|aeTdEz>%>RTx`Y|( zC#qsC$6qQ99_;dJ$LnHf&TjI*v0`bxtI&_O09|nO^oCKVEt5N;^#YO!A-F16rX*1{ zEofL8&8A_yy-M}EXxOp@T)chgfC>@p9a}wqJrxx5RF$lOpgY7yM)H8h1hvi{v;wrH zqMK$FfLv<2@k_*QCy%whwF}po&Roh-ON;UcvjeS@_|cXjZekOc`g1>J6;%OjhF*tN zx6LnVFuW!?IT`wlc|=4+!1vz@H3JOHQD_rb1qECY%9ZmVnY~k!aYuT7 z{xSd?;BW{0vF0{>SN{$om_ual6>(3BuEG&E?zoE0GH)IiH2QpwYy5=ez{&#a&h zp&L~E39gKL9J)n{FG%(zZFOXLo>$3LC;(>|e=Kxd_`8Oy6_vrWw^VGWGlJ*$X>M&L zW&fx;K7KmW*(mSxm!Jl?5&+g`bQarykujp8m+!L00odP$UJ^g5hWh%N{a=~|A|U+S zcr@bo=n2ORvA|Ggdpoo)$^%A_#Qy~e%mWPtKwt^o1oP1|W^(We7VSZ)Gc;acC=EIG zaP9SBOSPc=!mFq#jJF^@hs}016vo&G7V~BayouH(M$a%Et(Km;nQgu z774{wa6cc2kl&$@(q=5U>FX8vh;4Wfz(fg1PNCjgppZUa1O<)=N+oX+osZ7scd>qg z8B!7`c2i{vA^Yqy>X02UG2%-O;ZzrI!{C zCm)_=W>HFSfwa2ca8Zmo@B|d1#gMEsU_Q`l@U`peweHnJ2axwOqSF{l(9*vRE|fR7 zI!2}GoNoV)Qh&XRod^!eKKD$=_u=r&!Vw%>uy>6+KsJNzLn4g?2munVv1s%h^xj@z z8H65407+ntif9pY`L*ysUIgROCnXBj1E~Gm_$uaeD`%LNVq;^KkT7O2wa@l>mehZ9 z&tn6tP}IUZgs=p>0}Fi9bTK63dWrS2J~djd*R@3FHqjSW4wM((+ZCYc*{Tie+Wn1n zS=hKU6e3Wfg5+W#bmfYq`8Kd>`RvODhS84~hPeLQHHO~fQiL2O5zP6Gttt_@-M=6$CeSvyJ z1={36{8k!V3}Na@DNDr?2lnDg*hMa@&u@aaDn>*$$Lu!0I6yzAe=1PFu)fhSkO8Jy z!CR`3i$nuus63%!RmoPjfr^>m7G3I&z-s|Mx0xO=uw7a8U)-UZ_|kRhciKu#i^lG% zG2hBV%>f^R&Tq;H4tG|m=v!CnC^VdVGi`YDW!jG%4yJA|J)pH*6+guV9U=7!oGMsDuaJ*PB}v`;Y! zL0`&Dx?@N-FRPNwJo_WXcm@5L!4=KQPgb6_djUMK-y^oh6x3?GCC*I}$|N$1OJk0* zi!r#en&D69LUbqWr2Yt)zu^)(0h8(?sU0VugJuu&K&ZvX0jz;_xQ*^?vV~QvQ;n2q zDxkcQ4N`Xw+U72rKLXdE015EMO0lr0=m8XR7i@pdM98=CRwSOxdR{vttef`zl>qZ!V%W9zEV3%H|IG#Xxo@urZ$ec7rzI8u&-wI%;bXwRfbz7XT2J)VvkP=h@N;hs zoT4J8>J?@wQv_ru&lXY}yD>=JYie^zC~YY9)s>KAjs~#R-O(bjEe7ruK^#}jg=TTJw&Ci&Xy8YD}2s6B^w=S zRqZl46X`}YRy7W$KB?G_r-kKVx(w4Y`?COB)~YfK^OxA$!g z%#RiwR6jcR%}0-_llH#w8C-bM_je6%5~`15{eZI`VBQEIw>dPzL(!)_KX=S2f^6rA ze;`lZ6QVKoM@{e#F82TO4}r@4o3eH0&mToAnly$-)U!WYg#6|UMd8IGIEH6nkFI`y z-}S@)`CkBfeYlNC%KdNYYEpY5IFK>s!TFoN6%~UaW=7GE$Hj|b$SD}l4&0>b>{;R8 zOgGm54`|W^VlluhnB{ocZC#PIwfy%JcZC|j6kcc8 zMHFPQCVUHxXeIb3ikYTpFW$PQ?uP2DBYN-x8br(ma@O!e(l1yPuYx-ngSrrCI6_Q` z50GNf&Z1wy&n=hFCIPR}O4Skaub;3r*jz+^F_@(3oM0FW11e_&oONQqh71ixy&Cn$= z>N33AD=6mVUfas);Zk5O^-c#IjM;UyPWVELg$!hWqheUQ7-mH}E-w60Ag*xFolE)i z)Bh|dzVn?Q%01jDFKg65g2=1+Rw)DWB|Q2pV8hS^JDhZwE71XPGH?cxS{#qr3-lr4 z=zIbzkNGBA^H_10sAXpS)XZj+{#yu1ZDxM_2hZ|8mk}~(RBTcbdYChKGK4Lon<>i8{3 zSD${o>9?+^0|cDlaY4V*#{8H=e-NavwDUZ-sLq$W|KSK=Rg{r|x(yv@l7dbR%4IBG zh%ZRj8f|gCpjeUR$n349_J;_1mx!2af)Q~7R-*peqt8i!t(f>d*A%6V%|i5E z?|jVy@HsPMWOK&A{;0qZD6kkR*lUVz!lsWdw4&}(Vt?_-UNVvV!l_{TS*4Ks;hZ>Fx)l_tAyaAmP3>6C3 zMVsaPJf16Cx8u$Lfpfd5fX?^jd-phhylS-c$b{g47E%k%P5tiGJMOg!c;bG9==UKY z8v6r>wg}Io){zR4tFvBs;*k)j#b3`nV0i9NQmhpYrX9kI1xKnR4#wz>$Jfvr^@ij{ zb`t(WdGZy!<7cUm|L8PkA^32#bk{%IPCY%|61VG0E>O0E^l$5y5*?5AuYa0_Vyr*f zi(EvOqaW+o!1pppVqWflEQ0>=bMslKzhsJ!4bfbT#PcK|fu`tI7OmGS3UdKkFFXUQEEL>~Upc(M@R#4DAk)DNX6qrGs(09@E|&yx6{y#$FWCO= zN6^`6SszJC7`PD#68G<0Du$D`L$$>YSDQ`|4$C)WrWpVHp=Cr_nZHZ&^mhE2(tYTb z2+w4+-OU~=snQ8?iO!VD-%X=hzcx{n;~qVzv&Q9POW?WwG*|l}27B|$3uauc)7TywGd)vzX|zu3n@-*~si1!^k9}+iV(Gd>^K{&!5^bKY z#o4=rMP(uSE6>HsdL%^oS*hbGg7r!bgkB-X=6R`aGbzS>;z*1B+{dV8(oty$N)$91 zDLr@qo^f{|@z>X%JpD{TK)vN@n!0hwr{l7_HJR;dxwP%SF;b_+=<)~|&F=JrUsoLc zJvV=UkIid+D1Bw`+%FwP$K6?=N8~3mUjH3A0 zmmDCe*}&lgrW)u+`gvLAEEl0NUo|b4j16?Up)*M3O|4$D%b?eMyPMhMSh-zVYU-rOE1Wm!=?S8V z$l830Ge)A)&*<$wLkBoU#%edT-s zF?%h@QuvtY5x}Vfhx|^fGhjnfj(w#Hi*S+xM2>s+?>~q#_oZ6aCd?(={vk~_0!W60 zf}#>?H}nvWFY7*ym`s2poC7na3=C4)2&6A_8Jr1No$XrwMRnP}%0V`5o|Kq+>vZwhx7^q2 zc~tGjeYT%tKiyn=5e@uk0T{c%R$W)&3dUZjD<@z=v}6y+q`;LIJ?tPSg27-|nJ>~3 z!GjxVAOxL`=-$aW(D)?ZP~=ZnTaarv=Wl(a&O+UA*l%=R)PpS<-^p_}j--e(1JDqt zzj+f5_wU_9lv*VYp+!Py!>2950APL@c#@${VXqyh&KbXT`On{lZe4^Eg&+&x7ZDhfH(cGegR3V`pM@%4GD<+d-V5d! zWO3I)^8wftLNluF)NBlBa=0sfGC_>zXpTm+&zl%uxq2N|TssGGWwvb?;k;8)U^rpc zJ!w6JF;MMN*%5Cdpk`OXSwrgO;Lz#NRrI=$Y56^@+5Oyumk*|sANADVxUiV*8$F%v z<#6}?gG|OMIaKKAQUs!OYO0)i({HgO`WjZKowE=y zStRtbHmWM^ZpXHB)WZwxV293SQTL*qDE~mRxYBF^FXlbQ6?<%w5Qp418OrLG3r2&t zgJtc|&qv+J*UM{Rv{e3^7BCqF&6gVpv>2wRr=fIqi|=3zx31Y{lt5VK!AVGffDJT% z0&$3L8MWM%LEgUo8teS|ot^p6s8}#)hs|jX4|8AlfGOQ_nQ}Qb+Ygxq32rz)Iee$W z+Mc-k*3LL8m~#8<_!of*kT%#jc$OO23(N=+6e&=3KnFH8w-I{q8_aBH*>pqC zoN-waFun0>e|O>#rkk!n6KWuxuK6}LXHk7O%#}GC`<61#VG)tZGTNO0(7nBPE~>bG7eB3JisW95^^`F|`TQ_`Rp#v(MHQlXZ+=6Fe=%p(BhhIa=DK za;eV!a353A`CGg5;_L!tSEhVkpdYE{XCYgo4DN|xo{A9t)_&>)3h7r9#bevqok_v0 z3N*F7)|}cSMNj5P>SOGe5;)h4m+2p9obe!x+FTA*q@pAyaX^AgV-Hcj(>15S0{O=F z5vD#iv8zsjLF~+osn&r%p+y2KB^=WPK6^U)W@94;K|XD{48KM&Xv|E9>ON5YR15{o znKhqyK8H3L%RFtNOEIC>Z+W)34)as+x%&po#vfGNs<8S}TDTNsg`c8+&hJ3b@o{Vi z{sO7|%dtYHdjmv1fs&4?SS!%eBo!O#IjJx=H+t=xU+$A}zRdZjH;|^~-!V*XW2a#? zykR*E6(i`D;P%(Y%L%5%Kb`g=4o^=xB!HX=vD=-3y3t%sX=&I_Vu!_L_SlAeRe`(Q zwC9X+()HN~0;d|hAM;Q?s8W=x&*SRmF%$Tx2qRdb6W0^?@0(F*{S=0hf~RHxsv4** z!Jwo}Y;0_NYZ^GkU<_xVOMypUdw1IHfzqeGokoZHMdQa_`Y#YUbVpT3ZxYJCMs8@2(yKM z5^s)cUS8&Y`U4LY!h#NQSJXTnTM6o)?OUB6beNQBO!OEUD}N0}BlRc7fG`x-rvh^% z!}w?6s4|>frILj&{N&tU&3^LDDCZzfW>B;8;EbF&$*OyBnerV>IaiN27@wR{==_%S zdS(Q-KHuu#dz#LWDZJw9>S8K$Gp*D!UDQF>oB6l8Z}(q&pmrlMP^lg9SWqJMj`{$RT+lj|$N=qs+hMeF{i8zDi{ z$wXgSY?GV$CTQlT%Hyuib9wwMEu_D3VKzvt6ln-Hv&wA3U4Q1~XV)g8KN& z?ii>Jr8O6FBu#ez{fXL^UFei>yn`4y>lYAtzI}U={eyA>xY*?NY5jOJeyTXeRY``P z#HOPiEF+bkiNwWz5JYcX)g#GJC=ywC6hj+w=nt#TWCo~N!e}4@Li~0!qpN#l50rv( zZZ!XJYI!-%ubEL=$?P_pxKze5>!7Rw$t9(m+kdz!$h3zaa`z|k3$38kT+R$2i+V-P zoTk}$(4A7<^FW`-`HEmzra)`=?2(^=H{|e#4~mHy>IF zj$f*D_4tRk^{>iG2ODB@W9Wmi_NeI!h4Ix?bCbvyQ5T zxgToVVuXIn(W$-%I+^j?RX6R|K5R`d1Les0mbAk{a~q3f_}kg2Ck*-c(a*>>J`Eq< zR|al7CDB=>c>0pC#ybHz(({IwaPem9dVmi zFM7}2=+m}b9w|O?-ObnxGKQ(JiSboetl7M5frss*q@s}m_x|>l-TL$yjuzk|9caoS z&(J;BfaSfm_tiJHWOSBI?PvW`#rv1art#Bh1}ksz8Yz(Xf*!QBNd|cNozpGxwY_na z-}42&k%3rIHste!_QkcZsEi243-w0Ij6M8Vbi+?_@4t2{5y0iRU&xE|!SsAeNPVL^ z+bJ!ckUf6Oxn9nfk*{^L4Df=3wqM?B}NU7h6o?)i`u zuYkG0GJ457xDgx!%`AjSW1JRnF%f@e)K|w8+xxk1K(WS-^Q)mZHfzWRd;`#J$mP%9S;Ljw( z+iEc8s~;RlNmg`^Vy>(!`g2&p88{N;@>kY+7%m+Uc0ba6twTZPW7IB;6j7ZPV7<>( z*Sw>%&GB?zv=7dNLe>0Zi4O)=&tE#2#rf&Avq9}c+9Ge1QTO@Rq9zXCW#O%-{Q`ka zsXRC)uZ-=N$8nR=_OOU8@Ri+BQMmW=Zgz%>NzFWAHaX5|IF0J!-o74mcKN^DzQ^OCyPA=21qV2|TJ!bYA~QM}>osymEkhohugIB5wV8>NXFz>E`;OFg%3pfs z)=Onk@cLH<0 z0URe&aj&cSNx8>it(ETAmNucZ8`h@f9X7YI!h3*y8yaeD%K#TRuI-}ZTS#IT)&SJd z@WU3?=a5ePs7;VW%ZcdQ;7;yw_TEzsLiQ+>P4J)!fYaWTzT! zpp@5ZJ2X_V%)F@*cMP%`vJ|b~kq>-R?@rzzAULqF8{Vy7A6OmKnfIFsBBSr^J=pAv z?^wBt^T{f^1kP*p{rdK{FYzsoS!#8Rnw=kZ{gkB_U|b)In0j3!Ps?4TJ|=GCpDXL@ zv?hv;i~Gru1rvRwbPR&{q8L-J&Y>CZorfDvC_HOt{{$+)tF{3Hc#VmMpaF z(W0cH`PM*T?%}&#2l9{X|ve%^&A}Y<%xT{(?8q9qUIE zZ+K2Q{f?h2Ic{4{ukEX>*u^kOZ_E3MtgNyc=bN0q#Xjt(d|gKGSfE6*-M1>#Qar6v z_Y5EJUUbCjInDA_3ylDb;MH5I`cozGq`Tqa-}E)N!;*Mr=~*X8kc_jLKhpJ`$BWFU zjB&p`A@9=A05uN@meac$pNq|&P&I_V7n4caJNd@oUHjUs^*&pHqd31B*XO%PZJfFr zzNu&w3Jyvw(Mwkb0y&Db%+y21JUon7?(Bt7tto0e)m1~}`Vt&xQ`0jmk6-uF*m8Rv zu7uvW?X#}B#Qj)L9{tuc$&#-x6m~>q)ZV(lEp4W{)z0^t0*n(j2}+*MTlPDA zy>@cYv9ql=RLuRtbmWIO7Qf@>*1@iI@&$l*k+JgwZh;%QE$u4pd#Nb#XHgUKp1x7{Ra`K0`N}hpC;>^C@1CymCiRW_n#ITk{9MX7;_PRfCEk|FR#1vhCJJpUXL9 zWzj?N%GMYju75uuC2aiZjA|ohn~VJHke%91uiz>^dDJ$zyg=q zgJ8rGIukuE(i+p%$e*;UvKqC2zw8Bl8N|0!?cDS`rB%%Z9yVMyFJJt1op@@P#1qUi zO{}e+nQSZrs{<55WUGn+fS51~A))^|A6T zD1x$TK9gPI#f=bkdY@yA+_5cQ2l)}{V$pfJhLv(qsNN&_M(J_ravNn>@dwnqSvZ(wV_oac*`|4wgwx6#Na4@CAJMn#8(slQbkhQM^Ac~cA>dOSw-ds5H6x{G{cr+prb&mmBRK9D0J z=1d|bP{MkkAM0tS;7&poOpmF1v_bK#RR~z`c%|=g|7i3-BuRH9{^GQyv=l$T@s90r z5v6MB((T6-{jz1o$ePA2HbZJcUYtVp5&!hHuqZ?bDI6gFlFc?Zn@1zyB&NahT>S0F z>~nHqVbj;%nYhTS0h6{C7ya7*K0>J^M|sIxGA=Kx2b#~AbPCwl6ft@Gg9lwKm^n;kgRc(1ZF_N~zph@jj=j|SwER!TNpOEK|mqvv~Bch2~!> z!XWroFPpr+z^s@`8d-ReypCHI>gMh8qUXdcf`DV(c-jnJLJqk2%&bmet znALaYy9~2GCevR2^u&$4?e+z--bx7Mvhf4A7!10?+r=#?uoMr-pIw`2x%@#O9lzCM z|NV8Ni+1*Gc2OBOnoC`JxculOHard~7*(&`YdEzNAwN!jBRkZQRJ|tf$JOhz^oElk zS+>(co!wTNX!=9(hAEc=W8pxA>cQN^cO!#M0z$Q%o#!)s9qLq=U-vw{5u9tNZo7f0 z|EfbzKj17GS1M=ReF0wkCHknj6jZ17H%mW{Y zckC*dZAk$DrXgnS63V%{Hyci2zn>Dv^1w{s+avX_M!Uf{?G-*34@q`N&c6$CqrA0Y z!UW!|m-3(L_PcMvOyGB0jbAp*vT%!SQG<@sk*P6JVugOKtb(|)ZA~e?$3)}2CCDru z)c#uo+sf%F%Go_2gvn_WH~?J;z7()nZ{V-p$)%D)M=0I+elfH-&8oTQx}Sn58OoLCV3-j!PS=B(KEbHs_E3o%>%SmYq@#Ah|lx{W?9G+fB#P(4vU^>Y0**^CbA|R zq`RoA>ysk-D}beU&-bYfaA4uKx$dVQ{U?T08YI*<_R?|stgrs08(lILH~L6~ILNrJ zii+yAmAl-x`%gsh9pt9#&r9Qm`gaQF)wD%O7A>=Cuccr8rQQ8iHbE86Te)|y4Z5wq zXvP)(2f|kxQL~uw)iE@R_qCn-uGR$?{RyXFmv->#ffB%92((36DUS&d`DjWA!~g~4 zqotiAF+z%+FVPH#C$wnKHxqMGWPq;&ReSye?}E46tk?*~EM^}1WCkUr@c-Z25Ydh4 zvIbs^1S~h8l|xT0ct$`;css$!hbH>bFO2Kt#Xj5kN_T^5kZcrT8<3ywpl9FQTU*^; z-2FNO7Vko^dqJ|z0DVEsLuda+d0oh6?(dD096dU=aim)WA*=*p*IYI$pY1A;cIUY< zb_?cA15*f-GT>Oq9QXJ!v}*BxzF92@E0;S>ChHqFk@VPnp$S44XEE7Hkw0R|@v)Q*|kX^JbIFIWIJt-nZ-e7LtTj8!P0n1j0C~6sJ$t`i|?ji-pp` zgX5w{LYU5e<2w)lZs(oT?;c0%Ia8M9XX7#vR%(0lh$s3vhY`fFwKg+9S6-2FsONuN z>q17Q!+AOk40?!Xp3@&p@Gssxol4g8YO2{)c!9h&`Mp@#7txBOsAYYjS45>koiW{a z8FF`#*a)lIwL|1!X$$HQX?<=xzQIPWdl^Jmjmu)qxeUC#mk3|LvGH2hLIgq`Pmtqv z_z7;+3czG9f z4~FBp!<0cSmWLdm76o6q{Oqj6^;E8&bW`<{i&(4zPBwad%A{EW@*~Pjxg~MRGF<}4Sd_wVrQkQ6PGZ1)Vcl&^UOaH{8{n|QKYOoZG&J_WxF97#O&<~c=ebMBeU=NcFx zo)L8zhxdd}T=07+VVHVXWZTn8EcO5J3@i{K(^D6Ix~uCn!+)PXNs0E7Aw+Bczs9aK zs;MgoSF0r$B@`E2f+0tD6oZ0R6a_>I zf?!qpN(C~w-tL;4QPsQ8emLpDHO-|ugU&D3kb|rndSq};N_;V z8G-_GL5>oHm!s>C=!|#NW2~DWj|AovmlbRUW1djV5Iap@h{h z#PSkTenSjEFF`4Zd-OUqj6C$&+3w)CCG3zEY4YXbLjw14#w8C{;=pM89hQTy9*v6; z1brp6v$F%+9oN)`h5DNXQ0Xk0SMC(xDQ~qdc1z&_dkaz}y6OVujo;LyLuk%nqcLg! z92N&VMB}Z}Rq!GS7zULJCA#|Hz&75&7Ya6#`n2ajU)5_40Qdni?yteMZVT*<~jhC)cdFQ7R1vNi1XgyCm?GgMY%g4<7;$W*j(S-uD<6o5CLqle}K1h9fQu zCjyV*xAFNkvq9l7q;V}IXo5>W@U3Cu5TFyltSPQ0hj#5PiaM!Iny`Y!C8Jj759+(*hxbz zBGHFGs7M+aQlcl(t2`hE3`sX3{R5H~MTd3bM>O<&f`5 z$7>m=cTbfYFr1v7`ypd1ByOgdpf)q(XVI9x%e_D>$^L`r!@DV8*h4W|vj7pvBPxpO z$`?eWT|MEiv$7=_WbC&*C_*hfhcEV$%Ny&k7Ma2ip0%M9f_nTV3d>3k04AJ<>HJdi zsg5#JtO>nSR0sRmd1^a)mtM`Ka`FhII&L)SZ76VwE)4m{Y*9(ug1~MRm!6&u5TmAc zRx(fKq$w5%@d?rC_f>Y&W4=KZ^K8b_m`kl?MrCxhT`>_K)FORcF!EF=9t$T-K)q{` zOPr)R-;%=~d+@BYmd&r*grNQrV)lD*Ut87=()vvZZ(&LA0ox+)A)AF3E*~=TKW!gc z!pX;<%6FnhTyf5{Tai*WYcIGbL|X2>y%oExlK?zKt92%p8YYQ2Lh}T0&ekg@vW3-} z^g>b5Lm}2gJdPS92nUb;+4((4OHUVb3=+yn&KXzjQc?{I(lc+1tCaEls1f#o?vs`I zzF8xcZ7qMcF;MZ$`+FqdCLL?DkgFM-fDGm&S2Arne+ETWtKSf{gfrl6_*Ahku_**kFU zI^!SP8wVZ{7{=CfOGjBlLG$j?9&h#FXNqxxS!MMS32D!$n0y*LbC7A10?ND~Ms`ae z`^4~>I-ND|^U{8k?i*QM^|kP>#LoA5JyXqpihMAz1PgZ*Dc$pmw(NdaABn19?8v-v zYwR++?}m-kBJnTZ1^wJnI$2p=*1ffdqz2krTD{>eij_Y{Lc!UmtgUk=lzLnyN~rDO zO#w9fv28&k@lSMU4Ad!;zQEC#-tyf1#R?v!ywIC}#ju_vbO~n$y2K=rPVPL%mxN($ zOqgo>V~2GWKW5)Xe`MP`3PiW+=`?2vr+fdtol%+L|IH^7fR}EeEe?S96(v zF_5)U8j6ShyIo`M1(~fso8!E_J zueON9)8yuW`NfMMB4v1Iz+R2Ba?lYg`47v_ zp{_3&PU8^g7BBhfh+CgiSN5!)%3@L8bR#jDIAS(+qBi(Etk+loTbBBrSx&!)$#S$+ zLWK&7DRRUamzfEa!#3c)BlN~qtD%O+Lr1t^^f4dZ2o<>Zn^K=>s($bH34D%Pov UI ++ : add -UI --> NuSchedule -- : fullCommand -NuSchedule --> Parser ++ : parse(fullCommand) +User -> NuSchedule : add +NuSchedule --> Parser ++ : parse() Parser --> NuSchedule -- : parsed command NuSchedule --> AddCommand ++ : execute() AddCommand --> EventList ++ : events.addEvent() diff --git a/docs/diagrams/ListCommand.png b/docs/diagrams/ListCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..fd480d1187fb117b216d3768e7d9e2cf1ca7b95d GIT binary patch literal 37990 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

SFL))aZQ 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/ListCommand.puml b/docs/diagrams/ListCommand.puml new file mode 100644 index 0000000000..b7831e4621 --- /dev/null +++ b/docs/diagrams/ListCommand.puml @@ -0,0 +1,14 @@ +@startuml +actor user + +user --> NuSchedule : list +NuSchedule --> Parser ++ : parse() +Parser --> NuSchedule -- : PrintFullListCommand +NuSchedule --> PrintFullListCommand ++ : execute() +PrintFullListCommand --> UI ++ : PrintEventList() +UI --> EventList ++: getEventList() +EventList --> UI -- : eventList +UI --> PrintFullListCommand -- +PrintFullListCommand --> NuSchedule -- + +@enduml \ No newline at end of file diff --git a/docs/diagrams/ReminderCommand.png b/docs/diagrams/ReminderCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..816d887dc1fc45c0438890f1bc024bd0819adfda GIT binary patch literal 39568 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 J2t0H7{{VPYEtCKN literal 0 HcmV?d00001 diff --git a/docs/diagrams/ReminderCommand.puml b/docs/diagrams/ReminderCommand.puml new file mode 100644 index 0000000000..7f50a10c2b --- /dev/null +++ b/docs/diagrams/ReminderCommand.puml @@ -0,0 +1,14 @@ +@startuml +actor User +activate NuSchedule + +User --> NuSchedule : reminder +NuSchedule --> Parser ++ : parse() +Parser --> NuSchedule -- : ReminderCommand +NuSchedule --> ReminderCommand ++ : execute() +ReminderCommand --> EventList ++ : filterDateWith() +EventList --> ReminderCommand -- : FilteredList +ReminderCommand --> UI ++ : printFilteredList() +UI --> ReminderCommand -- +ReminderCommand --> NuSchedule -- +@enduml \ No newline at end of file From a8592210e2d9d93d8773e1a31bd8f8f1f3666b0b Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 23:30:17 +0800 Subject: [PATCH 122/299] Considers the case when the user enters an event with ending time before starting time --- src/main/java/command/EditCommand.java | 8 +- src/main/java/event/Class.java | 13 +- src/main/java/event/PersonalEvent.java | 13 +- src/main/java/eventlist/EventList.java | 3 +- .../EndBeforeStartEventException.java | 11 + src/main/java/parser/Parser.java | 255 +++++++++--------- src/main/java/storage/Storage.java | 7 +- src/main/java/ui/UI.java | 4 +- 8 files changed, 170 insertions(+), 144 deletions(-) create mode 100644 src/main/java/exception/EndBeforeStartEventException.java diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 241c076c89..0bbe1899f2 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -5,6 +5,7 @@ import exception.EditIndexOutOfBoundsException; import exception.NuScheduleException; import exception.UndefinedEventException; +import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -30,17 +31,20 @@ public EditCommand(Event event, int index) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. - * @throws UndefinedEventException the the user trying to operate (delete/edit/done) some events that does not + * @throws UndefinedEventException the user trying to operate (delete/edit/done) some events that does not * exist. + * @throws WritingFileException Represents the exception when the file is not correctly written. */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws UndefinedEventException { + throws UndefinedEventException, WritingFileException { if (index >= events.getSize() || index == -1) { throw new UndefinedEventException(index + 1); } events.editEvent(event, index); + ui.printConflictEvents(events.checkConflictTiming(event)); ui.printEditEventMessage(event); ui.printNumEvent(events.getSize()); + storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index b5a9f069e5..18aea8af91 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -1,6 +1,7 @@ package event; +import exception.EndBeforeStartEventException; import location.Location; import location.OnlineLocation; @@ -15,16 +16,24 @@ public class Class extends Event { protected LocalDateTime at; protected LocalDateTime end; - public Class(String description, Location location, LocalDateTime at, LocalDateTime end) { + public Class(String description, Location location, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { super(description, location); this.at = at; this.end = end; + if (!end.isAfter(at)) { + throw new EndBeforeStartEventException(); + } } - public Class(String description, OnlineLocation meeting, LocalDateTime at, LocalDateTime end) { + public Class(String description, OnlineLocation meeting, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { super(description, meeting); this.at = at; this.end = end; + if (!end.isAfter(at)) { + throw new EndBeforeStartEventException(); + } } /** diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 1dde2181b2..24629800df 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -1,6 +1,7 @@ package event; +import exception.EndBeforeStartEventException; import location.Location; import location.OnlineLocation; @@ -43,10 +44,14 @@ public PersonalEvent(String description, Location location, LocalDateTime at) { this.at = at; } - public PersonalEvent(String description, Location location, LocalDateTime at, LocalDateTime end) { + public PersonalEvent(String description, Location location, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { super(description, location); this.at = at; this.end = end; + if (!end.isAfter(at)) { + throw new EndBeforeStartEventException(); + } } public PersonalEvent(String description, OnlineLocation location, LocalDateTime at) { @@ -54,10 +59,14 @@ public PersonalEvent(String description, OnlineLocation location, LocalDateTime this.at = at; } - public PersonalEvent(String description, OnlineLocation location, LocalDateTime at, LocalDateTime end) { + public PersonalEvent(String description, OnlineLocation location, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { super(description, location); this.at = at; this.end = end; + if (!end.isAfter(at)) { + throw new EndBeforeStartEventException(); + } } /** diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 45a8f29654..71ea1d2343 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -5,6 +5,7 @@ import event.Event; import exception.EmptyEventListException; import exception.UndefinedEventException; +import ui.UI; import java.time.LocalDate; import java.time.LocalDateTime; @@ -206,7 +207,7 @@ public ArrayList checkConflictTiming(Event event) { filteredEventList2.removeAll(filteredEventList); filteredEventList.addAll(filteredEventList2); } - + filteredEventList.remove(event); return filteredEventList; } } diff --git a/src/main/java/exception/EndBeforeStartEventException.java b/src/main/java/exception/EndBeforeStartEventException.java new file mode 100644 index 0000000000..723e212a0f --- /dev/null +++ b/src/main/java/exception/EndBeforeStartEventException.java @@ -0,0 +1,11 @@ +package exception; + +/** + * Represents the case when the user want to create an Event that ends before it starts. + */ +public class EndBeforeStartEventException extends NuScheduleException { + @Override + public String getMessage() { + return "Just like you cannot die before you exist, an event cannot end before it starts."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index b20bf17bc6..6c0009f42a 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -86,8 +86,11 @@ public abstract class Parser { */ public static Command parse(String fullCommand, LocationList locations) throws NuScheduleException { - // this block deals with exit and list command - switch (fullCommand.trim()) { + + //deletes all the starting and ending spaces + fullCommand = fullCommand.trim(); + // this block deals with single word command + switch (fullCommand) { case EXIT: return new ExitCommand(); case PRINT_EVENT_LIST: @@ -178,7 +181,6 @@ public static Command parse(String fullCommand, LocationList locations) throws N //the position of /t int startTimeDividerPosition; //the position of the space when the user enters a date time in the format yyyy-mm-dd HH:mm - //may use twice if the end time is needed int timeDivider; //the position of /et int endTimeDividerPosition; @@ -191,7 +193,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N String startDateTime; Location location; String endDateTime; - + //the position of the space when the user enters an ending date time in the format yyyy-mm-dd HH:mm + int endingTimeDivider; startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); @@ -256,11 +259,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[2]) { case ASSIGNMENT: - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + locationDividerPosition); return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), @@ -269,19 +269,16 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); } - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + locationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + //if the user does not input the date of the ending time, by default it ends at the same + // day as the starting time + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, locationDividerPosition, endingTimeDivider); return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), @@ -289,28 +286,22 @@ public static Command parse(String fullCommand, LocationList locations) throws N eventIndex); case PERSONAL_EVENT: if (endTimeDividerPosition == -1) { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + locationDividerPosition); return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), eventIndex); } else { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + locationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + //if the user does not input the date of the ending time, by default it ends at the + // same day as the starting time + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, locationDividerPosition, endingTimeDivider); return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), @@ -340,11 +331,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[2]) { case ASSIGNMENT: - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + onlineLocationDividerPosition); return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), @@ -353,19 +341,14 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); } - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), @@ -373,30 +356,21 @@ public static Command parse(String fullCommand, LocationList locations) throws N eventIndex); case PERSONAL_EVENT: if (endTimeDividerPosition == -1) { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + onlineLocationDividerPosition); return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), eventIndex); } else { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = - fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, startTimeDividerPosition - 1), virtualLocation, @@ -458,11 +432,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[0]) { case ASSIGNMENT: - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + locationDividerPosition); return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); @@ -470,46 +441,38 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); } - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + locationDividerPosition - 1).indexOf(SINGLE_SPACE); + + //if the user does not input the date of the ending time, by default it ends at the same + // day as the starting time + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, locationDividerPosition, endingTimeDivider); return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: if (endTimeDividerPosition == -1) { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + locationDividerPosition); return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); } else { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + locationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - locationDividerPosition - 1); + //if the user does not input the date of the ending time, by default it ends at the same + // day as the starting time + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, locationDividerPosition, endingTimeDivider); return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), @@ -538,11 +501,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[0]) { case ASSIGNMENT: - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + onlineLocationDividerPosition); return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime))); @@ -550,47 +510,34 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); } - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: if (endTimeDividerPosition == -1) { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + onlineLocationDividerPosition); return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime))); } else { - startDateTime = fullCommand.substring(startTimeDividerPosition + 3, - startTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, - endTimeDividerPosition - 1); + startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition); - timeDivider = fullCommand.substring(endTimeDividerPosition + 3).indexOf(SINGLE_SPACE); + endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, + onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - endDateTime = fullCommand.substring(endTimeDividerPosition + 3, - endTimeDividerPosition + 3 + timeDivider) - + "T" - + fullCommand.substring(endTimeDividerPosition + 3 + timeDivider + 1, - onlineLocationDividerPosition - 1); + endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, + endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1), virtualLocation, @@ -611,6 +558,48 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new UnknownErrorException(); } + /** + * return the EndDateTime. if the date is not specified, by default, it ends at the same date as the starting date. + * + * @param fullCommand the full command provided by user + * @param startTimeDividerPosition index of "/t" + * @param timeDivider index of " " in the start time + * @param endTimeDividerPosition index of "/e" + * @param locationDividerPosition index of "/o" or "/l" + * @param endingTimeDivider index of " " in the end date time, may be -1 + * @return a string in the format "yyyy-MM-dd HH:mm" that can be parsed into a LocalDateTime object + */ + private static String getEndDateTime(String fullCommand, int startTimeDividerPosition, int timeDivider, + int endTimeDividerPosition, int locationDividerPosition, + int endingTimeDivider) { + return (endingTimeDivider != -1 ? fullCommand.substring(endTimeDividerPosition + 3, + endTimeDividerPosition + 3 + endingTimeDivider) : + fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider)) + + "T" + + (endingTimeDivider != -1 ? fullCommand.substring(endTimeDividerPosition + 3 + endingTimeDivider + 1, + locationDividerPosition - 1) : fullCommand.substring(endTimeDividerPosition + 3, + locationDividerPosition - 1)); + } + + /** + * return the StartDateTime. + * + * @param fullCommand the full command provided by user + * @param startTimeDividerPosition index of "/t" + * @param timeDivider index of " " in the start time + * @param endTimeDividerPosition index of "/e" + * @return a string in the format "yyyy-MM-dd HH:mm" that can be parsed into a LocalDateTime object + */ + private static String getStartDateTime(String fullCommand, int startTimeDividerPosition, int timeDivider, + int endTimeDividerPosition) { + return fullCommand.substring(startTimeDividerPosition + 3, + startTimeDividerPosition + 3 + timeDivider) + + "T" + + fullCommand.substring(startTimeDividerPosition + 3 + timeDivider + 1, + endTimeDividerPosition - 1); + } + /** * This method parses the inputted location. * diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index e5a62977e1..e0320ddf8f 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -5,6 +5,7 @@ import event.Class; import event.PersonalEvent; import exception.CreatingFileException; +import exception.EndBeforeStartEventException; import exception.LoadingException; import exception.WritingFileException; import location.Building; @@ -90,9 +91,11 @@ public void writeFile(ArrayList events) throws WritingFileException { * Prepares the data in the file as an ArrayList, which is used to construct the EventList. * * @return the Events in an ArrayList - * @throws LoadingException represents the Events is not correctly created + * @throws LoadingException represents the Events is not correctly created + * @throws EndBeforeStartEventException Represents the case when the user want to create an Event that ends + * before it starts. */ - public ArrayList loadEvents(LocationList locations) throws LoadingException { + public ArrayList loadEvents(LocationList locations) throws LoadingException, EndBeforeStartEventException { ArrayList events = new ArrayList<>(); File dataFile = new File(filePath); try { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 20c8d9e086..244e8dbc66 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -176,7 +176,7 @@ public void printAddEventMessage(Event eventAdded) { * @param eventEdited the Event being edited */ public void printEditEventMessage(Event eventEdited) { - System.out.println("Got it. I've edited this Event: "); + System.out.println("I've edited this Event: "); System.out.println(eventEdited.toString()); } @@ -269,7 +269,7 @@ public void printConflictEvents(ArrayList conflictEvents) { int numPrintedEvents = 0; System.out.println("You have some events that happen concurrently. Please prepared for multi-thread. " + "\n" - + "Here are the Events in your list that have overlaps with your newly added event:"); + + "Here are the Events in your list that have overlaps with your newly added/edited event:"); for (Event event : conflictEvents) { numPrintedEvents++; System.out.println(numPrintedEvents + ". " + event.toString()); From 302f5f17b924501e2410b66aa5030e0244b25080 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 29 Oct 2020 23:40:22 +0800 Subject: [PATCH 123/299] better coding style --- src/main/java/event/Assignment.java | 4 +-- src/main/java/event/Class.java | 4 +-- src/main/java/event/PersonalEvent.java | 4 +-- src/main/java/location/OnlineLocation.java | 2 +- src/main/java/parser/Parser.java | 41 ++++++++++------------ src/main/java/storage/Storage.java | 6 ++-- src/main/java/ui/UI.java | 4 +-- 7 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 96a706e9b3..c497c2683b 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -22,8 +22,8 @@ public class Assignment extends Event { * @return the result string to be stored. */ public String fileString() { - return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + (location != null ? - location.fileString() : link.fileString()); + return "A//" + (isDone ? 1 : 0) + "//" + description + "//" + by + "//" + (location != null + ? location.fileString() : link.fileString()); } public Assignment(String description, Location location, LocalDateTime by) { diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 18aea8af91..f143a08561 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -42,8 +42,8 @@ public Class(String description, OnlineLocation meeting, LocalDateTime at, Local * @return the result string to be stored. */ public String fileString() { - return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + end + "//" + (location != null ? - location.fileString() : link.fileString()); + return "C//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + end + "//" + (location != null + ? location.fileString() : link.fileString()); } /** diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 24629800df..cdfe48c48e 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -26,8 +26,8 @@ public class PersonalEvent extends Event { * @return the result string to be stored */ public String fileString() { - return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (location != null ? - location.fileString() : link.fileString()); + return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (location != null + ? location.fileString() : link.fileString()); } /** diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 7d1bb3a3ed..37b12e5187 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -49,6 +49,6 @@ public String toString() { * @return the link of the meeting. If there is password, return the password also. */ public String fileString() { - return "online//"+link + (password != null ? "//" + password : ""); + return "online//" + link + (password != null ? "//" + password : ""); } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 6c0009f42a..ae799f6746 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -179,27 +179,24 @@ public static Command parse(String fullCommand, LocationList locations) throws N //these variables are used by either Edit or Add //the position of /t - int startTimeDividerPosition; + int startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); + ; //the position of the space when the user enters a date time in the format yyyy-mm-dd HH:mm int timeDivider; //the position of /et - int endTimeDividerPosition; + int endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); //the position of /l - int locationDividerPosition; + int locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); //the position of /o - int onlineLocationDividerPosition; + int onlineLocationDividerPosition = fullCommand.indexOf(ONLINE_LOCATION_MARKER); //the position of /p - int pwdDividerPosition; + int pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); String startDateTime; Location location; String endDateTime; //the position of the space when the user enters an ending date time in the format yyyy-mm-dd HH:mm int endingTimeDivider; - startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); - endTimeDividerPosition = fullCommand.indexOf(END_TIME_MARKER); - locationDividerPosition = fullCommand.indexOf(LOCATION_MARKER); - onlineLocationDividerPosition = fullCommand.indexOf(ONLINE_LOCATION_MARKER); - pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); + //this block deals with edit command //this block will change fullCommand, but this does not affect the later block since @@ -243,8 +240,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new NoEventLocationException(); } } else { - if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1). - isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1) + .isBlank()) { throw new NoEventTimeException(); } if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { @@ -314,9 +311,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - } - //this deals with the event holding offline - else { + } else { try { timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); OnlineLocation virtualLocation; @@ -386,7 +381,9 @@ public static Command parse(String fullCommand, LocationList locations) throws N } } - } else throw new WrongCommandException(); + } else { + throw new WrongCommandException(); + } } @@ -415,8 +412,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new NoEventLocationException(); } } else { - if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1). - isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1) + .isBlank()) { throw new NoEventTimeException(); } if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { @@ -484,9 +481,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new TimeFormatException(); } - } - //this deals with the event holding online - else { + } else { //this deals with the event holding online try { timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); OnlineLocation virtualLocation; @@ -552,7 +547,9 @@ public static Command parse(String fullCommand, LocationList locations) throws N } } - } else throw new WrongCommandException(); + } else { + throw new WrongCommandException(); + } assert false;//nothing should reach here throw new UnknownErrorException(); diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index e0320ddf8f..0307321183 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -93,7 +93,7 @@ public void writeFile(ArrayList events) throws WritingFileException { * @return the Events in an ArrayList * @throws LoadingException represents the Events is not correctly created * @throws EndBeforeStartEventException Represents the case when the user want to create an Event that ends - * before it starts. + * before it starts. */ public ArrayList loadEvents(LocationList locations) throws LoadingException, EndBeforeStartEventException { ArrayList events = new ArrayList<>(); @@ -163,7 +163,9 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti } else if (words[5].equals(ONLINE)) { events.add(new PersonalEvent(words[2], new OnlineLocation(words[6]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); - } else throw new LoadingException(); + } else { + throw new LoadingException(); + } break; case 8: events.add(new PersonalEvent(words[2], new OnlineLocation(words[6], words[7]), diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 244e8dbc66..f9d0d75f93 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -245,8 +245,8 @@ public void printHelp() { System.out.println("list - view all events added"); System.out.println("clear - clear all events"); System.out.println("There will be more upcoming features in later versions."); - System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4" + - ".github.io/tp/"); + System.out.println("For more information, please refer to detailed user guide: https://ay2021s1-cs2113t-f14-4" + + ".github.io/tp/"); } /** From a9367902faa2079de02f7897b49c839e0d0137da Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 01:37:37 +0800 Subject: [PATCH 124/299] Edits tests --- src/main/java/exception/NoEventLocationException.java | 3 ++- src/main/java/parser/Parser.java | 9 +++++++++ src/test/java/command/AddCommandTest.java | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/exception/NoEventLocationException.java b/src/main/java/exception/NoEventLocationException.java index 167bc5a1f8..746143e309 100644 --- a/src/main/java/exception/NoEventLocationException.java +++ b/src/main/java/exception/NoEventLocationException.java @@ -10,6 +10,7 @@ public class NoEventLocationException extends NuScheduleException { * @return the message */ public String getMessage() { - return "Please input a valid location."; + return "Please input a valid location and mark it with \"/l\" underline locations or \"/o\" for online " + + "location."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ae799f6746..c37009fe40 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -218,6 +218,11 @@ public static Command parse(String fullCommand, LocationList locations) throws N //the following part is almost the same as AddCommand, but returns EditCommand if (words[2].equals(ASSIGNMENT) || words[2].equals(CLASS) || words[2].equals(PERSONAL_EVENT)) { + + if (fullCommand.substring(words[0].length()).isBlank()) { + throw new EmptyEventException(); + } + if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } @@ -392,6 +397,10 @@ public static Command parse(String fullCommand, LocationList locations) throws N //because the default block will throw an exception. // i.e. when this block is entered, the parser will not go to any other blocks if (words[0].equals(ASSIGNMENT) || words[0].equals(CLASS) || words[0].equals(PERSONAL_EVENT)) { + if (fullCommand.substring(words[0].length()).isBlank()) { + throw new EmptyEventException(); + } + if (startTimeDividerPosition == -1) { throw new NoEventTimeMarkerException(); } diff --git a/src/test/java/command/AddCommandTest.java b/src/test/java/command/AddCommandTest.java index ac6b5fd71c..d0316e1725 100644 --- a/src/test/java/command/AddCommandTest.java +++ b/src/test/java/command/AddCommandTest.java @@ -2,6 +2,7 @@ import exception.EmptyEventException; import exception.EmptyEventIndexException; +import exception.NoEventLocationException; import exception.NoEventLocationMarkerException; import exception.NoEventTimeMarkerException; import org.junit.jupiter.api.Assertions; @@ -26,8 +27,8 @@ void execute_NoTimeMarkerGiven_NoEventTimeMarkerException() { } @Test - void execute_NoLocationMarkerGiven_NoEventLocationMarkerException() { - Assertions.assertThrows(NoEventLocationMarkerException.class, () -> { + void execute_NoLocationMarkerGiven_NoEventLocationException() { + Assertions.assertThrows(NoEventLocationException.class, () -> { Command d = Parser.parse("class something /t 2020-02-02 20:00", null); }); } From 01f90cb6b1305d0e5d5cf64952b63209acf71d08 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 02:10:30 +0800 Subject: [PATCH 125/299] delete duplicate method --- src/main/java/event/Class.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 7233ada053..f143a08561 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -36,16 +36,6 @@ public Class(String description, OnlineLocation meeting, LocalDateTime at, Local } } - /** - * Provides the date of the Class. - * - * @return the LocalDate get from LocalDateTime. - */ - @Override - public LocalDate getDate() { - return LocalDate.from(at); - } - /** * Convert the information about this class to a string that is to be stored in a file. * From 5ce943b3af90bd6debc18c193b66a69c0313440f Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 02:56:56 +0800 Subject: [PATCH 126/299] Updates UG and DG --- docs/DeveloperGuide.md | 13 +++++++++---- docs/UserGuide.md | 27 ++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ebb6c0797b..461a82df84 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -143,12 +143,13 @@ This feature allows users to add events and relevant information about them (des Given below is an example usage scenario: Step 1. The user launches the application to add a class to his schedule. The user executes -`class CS1010 Lecture /t 2020-05-05 10:00 /l LT27` to add a new class to the list. +`class CS1010 Lecture /t 2020-05-05 10:00 /e 2020-05-05 12:00 /l LT27` to add a new class to the list. -Step 2. The Parser class parses the input as a new class with description ‘CS1010 Lecture’, time ‘2020-05-05 at 10:00’, -and location ‘LT27’. +Step 2. The Parser class parses the input as a new class with description ‘CS1010 Lecture’, +starting time ‘2020-05-05 at 10:00’, ending time ’2020-05-05 at 12:00’, and location ‘LT27’. -Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events, events. +Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events. This also checks +whether there is any event has overlap timing with the newly added event. The sequence diagram below shows the process of adding a new event. ![AddCommand Sequence Diagram](diagrams/AddCommand.png)
@@ -293,6 +294,7 @@ NUSchedule aims to assist the target audience with: |2.0|exchange student|know the optimal path to reach my next destination|avoid getting lost |2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately +|2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings ## Non-Functional Requirements {Give non-functional requirements} @@ -303,4 +305,7 @@ NUSchedule aims to assist the target audience with: ## Instructions for manual testing +Try different inputs with variations of the format, to check whether the exceptions are being correctly thrown. +Also edit the stored data of events.txt to see whether the reaction is correct. Do not touch bus_stops.txt and +locations.txt for test purposes as they form the data base. {Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c2532d333e..34d829371d 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -36,6 +36,7 @@ This gives the application both simplicity and speed, setting it apart from othe ## Quick Start + 1. Ensure that you have Java 11 or above installed in your Computer. 2. Download the latest `nuschedule.jar` from here. 3. Copy the file into a new folder, which will serve as the home folder for NuSchedule. @@ -48,33 +49,48 @@ This gives the application both simplicity and speed, setting it apart from othe ## Features ### View available commands + Shows list of commands and provides a link to the user guide for more details. Format: `help` ### Add an event + Adds events/tasks to the schedule. Can support various types of tasks: +In the following description, `DATE` refers to the date in the format yyyy-MM-dd. e.g. `2020-10-31` +`TIME` refers to the time in the format HH:mm. e.g. `10:00` + * Personal events - Format: `personalEvent EVENTNAME /t DATE TIME /l LOCATION` + Format: `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for underline event. + OR `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` for online events. + Note that `/e DATE TIME` is optional. You have a personal event without an ending time. + In `/e DATE TIME`, `DATE` is optional. If you enter `/e TIME`, the default date will be the same + as the date that the event starts. + For online events, `/p MEETING_PASSWORD` is optional, since not all online events require a password. * Assignments - Format: `assignment EVENTNAME /t DATE TIME /l LOCATION` + Format: `assignment EVENTNAME /t DATE TIME /l LOCATION` + OR `assignment EVENTNAME /t DATE TIME /o SUBMISSION_LINK` * Classes - Format: `class EVENTNAME /t DATE TIME /l LOCATION` + Format: `class CLASSNAME /t DATE TIME /e DATE TIME /l LOCATION` + OR `class CLASSNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` + Same as in personal events, in `/e DATE TIME`, `DATE` is optional. For online events,`/p MEETING_PASSWORD` is optional. + However, `/e DATE TIME` or `/e TIME` is required, since any class should end at some time. Example of usage: `personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` -`class CS2113 Lecture /t 2020-09-23 10:00 /l LT27` +`class CS2113 Lecture /t 2020-09-23 10:00 /e 12:00 /l LT27` ### Edit an event Edits existing events/tasks. Format: `edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION` +`edit INDEX ` the later part of the format is the same as adding an event. Example: `edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home` @@ -130,7 +146,7 @@ the data of your previous AddressBook home folder. |Action|Command|Example| |------|-------|-------| -|add|`EVENTTYPE EVENTNAME /t DATE TIME /l LOCATION`|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| +|add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| |clear|`clear NUMBER` OR `clear ALL` |`clear 3`| |done|`done INDEX` |`done 1` | |edit|`edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION`|`edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home`| @@ -138,3 +154,4 @@ the data of your previous AddressBook home folder. |list|`list`|| |locate|`locate n/EVENTNAME` |`locate n/CS2113t Tutorial`| |sort|`sort SORT_CRITERIA` |`sort description`| +|delete|`delete INDEX`|`delete 1`| From 7f9f8aff70ca843d6d2256308741c70c1b9a7aee Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 04:48:58 +0800 Subject: [PATCH 127/299] Adds UserInfo --- .gitignore | 1 + src/main/java/NuSchedule.java | 12 ++-- src/main/java/command/SortCommand.java | 4 +- src/main/java/command/UserInfoCommand.java | 38 +++++++++++++ src/main/java/parser/Parser.java | 11 ++++ src/main/java/storage/Storage.java | 56 ++++++++++++++++--- src/main/java/ui/UI.java | 13 ++++- src/main/java/usercommunication/UserInfo.java | 26 +++++++++ src/main/java/usercommunication/UserType.java | 7 +++ 9 files changed, 152 insertions(+), 16 deletions(-) create mode 100644 src/main/java/command/UserInfoCommand.java create mode 100644 src/main/java/usercommunication/UserInfo.java create mode 100644 src/main/java/usercommunication/UserType.java diff --git a/.gitignore b/.gitignore index 460bace592..8b90521f7b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ data/events.txt ======= >>>>>>> Coding_Standard src/main/java/META-INF/MANIFEST.MF +data/UserInfo.txt diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index eddfb74b72..670b4c5fe5 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -7,6 +7,7 @@ import parser.Parser; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Main entry-point for the NUSchedule application. @@ -18,9 +19,9 @@ public class NuSchedule { private static BusStopList busStops; private static LocationList locations; private final UI ui; + private UserInfo userInfo=new UserInfo("",""); - - public NuSchedule(String filePath) { + public NuSchedule(String ...filePaths) { ui = new UI(); busStops = new BusStopList(); @@ -29,12 +30,13 @@ public NuSchedule(String filePath) { //locations.loadLocationData(); try { - storage = new Storage(filePath); + storage = new Storage(filePaths); } catch (CreatingFileException e) { ui.showError(e.getMessage()); } try { events = new EventList(storage.loadEvents(locations)); + userInfo= storage.loadUserInfo(); } catch (NuScheduleException e) { ui.showLoadingError(); events = new EventList(); @@ -52,7 +54,7 @@ public NuSchedule(String filePath) { * Runs the program until termination. */ public void run() { - ui.printGreetingMessage(); + ui.printGreetingMessage(userInfo); boolean isExit = false; while (!isExit) { try { @@ -71,6 +73,6 @@ public void run() { public static void main(String[] args) { - new NuSchedule("data/events.txt").run(); + new NuSchedule("data/events.txt","data/UserInfo.txt").run(); } } diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index b0184b85a1..c8f23e586e 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -5,7 +5,9 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; - +/** + * Represents the command call when the user wants to sort the list. + */ public class SortCommand extends Command { private final String type; diff --git a/src/main/java/command/UserInfoCommand.java b/src/main/java/command/UserInfoCommand.java new file mode 100644 index 0000000000..897e02ac48 --- /dev/null +++ b/src/main/java/command/UserInfoCommand.java @@ -0,0 +1,38 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; +import usercommunication.UserInfo; + +/** + * Represents the command call when the user wants to change the type of himself or herself. + */ +public class UserInfoCommand extends Command { + private UserInfo userInfo; + + public UserInfoCommand(UserInfo userInfo) { + this.userInfo = userInfo; + } + + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NuScheduleException the exceptions can happen in this program, + * to be handled based on the specific exception. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NuScheduleException { + storage.writeUserInfo(userInfo); + ui.helloWithName(userInfo.getName()); + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 8f98de67b4..ce6827a84c 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -16,6 +16,7 @@ import command.ReminderCommand; import command.SortCommand; +import command.UserInfoCommand; import event.Assignment; import event.PersonalEvent; import event.Assignment; @@ -50,6 +51,7 @@ import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; +import usercommunication.UserInfo; import java.time.LocalDate; import java.time.LocalDateTime; @@ -113,6 +115,15 @@ public static Command parse(String fullCommand, LocationList locations) throws N String[] words = fullCommand.split(SINGLE_SPACE); + //this block deals with user info + switch (words[0]) { + case "student": + case "professor": + return new UserInfoCommand(new UserInfo(fullCommand.substring(words[0].length() + 1), words[0])); + default: + break; + } + //this block deals with locate command if (words[0].equals(LOCATE_EVENT)) { return new LocateCommand(words[1]); diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 0307321183..9bc2adfc7d 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -13,12 +13,12 @@ import location.Hostel; import location.LectureTheatre; import location.Location; -import location.LocationType; import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; import parser.Parser; +import usercommunication.UserInfo; import java.io.File; import java.io.FileNotFoundException; @@ -36,16 +36,18 @@ public class Storage { public static final String REGEX_IN_FILE = "//"; public static final String ONLINE = "online"; - private final String filePath; + private final String[] filePaths; + //filePaths[0] will be the events data file. filePath[1] will be the user info file /** * Set the filepath according to the user input. * - * @param filePath is the path of the file + * @param filePaths is the paths of the files */ - public Storage(String filePath) throws CreatingFileException { - this.filePath = filePath; - createFolderAndFIle(filePath); + public Storage(String... filePaths) throws CreatingFileException { + this.filePaths = filePaths; + createFolderAndFIle(this.filePaths[0]); + createFolderAndFIle(this.filePaths[1]); } /** @@ -76,7 +78,7 @@ private static void createFolderAndFIle(String filePath) throws CreatingFileExce */ public void writeFile(ArrayList events) throws WritingFileException { try { - FileWriter fw = new FileWriter(filePath); + FileWriter fw = new FileWriter(filePaths[0]); for (Event event : events) { fw.write(event.fileString()); fw.write(System.lineSeparator()); @@ -87,6 +89,44 @@ public void writeFile(ArrayList events) throws WritingFileException { } } + /** + * Save the data of the user info. + * + * @param userInfo name and type of the user + * @throws WritingFileException Represents the exception when the file is not correctly written. + */ + public void writeUserInfo(UserInfo userInfo) throws WritingFileException { + try { + FileWriter fw = new FileWriter(filePaths[1]); + fw.write(userInfo.fileString()); + fw.close(); + } catch (IOException e) { + throw new WritingFileException(); + } + } + + /** + * Prepares the data in the file as an UserInfo, which is used to construct the userInfo. + * + * @return the name and type of the user + * @throws LoadingException represents the Events is not correctly created + */ + public UserInfo loadUserInfo() throws LoadingException { + UserInfo userInfo = null; + try { + Scanner s = new Scanner(new File(filePaths[1])); + if (s.hasNext()) { + String[] words = s.nextLine().split(REGEX_IN_FILE); + userInfo = new UserInfo(words[0], words[1]); + } + } catch (FileNotFoundException e) { + System.out.println("file not found"); + } catch (IndexOutOfBoundsException e) { + throw new LoadingException(); + } + return userInfo; + } + /** * Prepares the data in the file as an ArrayList, which is used to construct the EventList. * @@ -97,7 +137,7 @@ public void writeFile(ArrayList events) throws WritingFileException { */ public ArrayList loadEvents(LocationList locations) throws LoadingException, EndBeforeStartEventException { ArrayList events = new ArrayList<>(); - File dataFile = new File(filePath); + File dataFile = new File(filePaths[0]); try { Scanner s = new Scanner(dataFile); while (s.hasNext()) { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index c1773b15b7..9da6d5433d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -6,6 +6,7 @@ import location.BusStop; import location.Location; import locationlist.LocationList; +import usercommunication.UserInfo; import java.util.ArrayList; import java.util.Scanner; @@ -45,9 +46,13 @@ public String readCommand() { /** * Prints the logo of DUKE and greet the user. */ - public void printGreetingMessage() { + public void printGreetingMessage(UserInfo userInfo) { printLine(); - + try { + helloWithName(userInfo.getName()); + } catch (NullPointerException e) { + System.out.println("I am NUSchedule! What's your name?"); + } System.out.println("Hello from\n" + LOGO); System.out.println("What can I do for you?"); } @@ -281,5 +286,9 @@ public void printConflictEvents(ArrayList conflictEvents) { } System.out.println("\nBut nonetheless..."); } + + public void helloWithName(String name) { + System.out.println("Hi " + name + ", nice to see you."); + } } diff --git a/src/main/java/usercommunication/UserInfo.java b/src/main/java/usercommunication/UserInfo.java new file mode 100644 index 0000000000..6f5267665c --- /dev/null +++ b/src/main/java/usercommunication/UserInfo.java @@ -0,0 +1,26 @@ +package usercommunication; + +/** + * Represents the personal information about the user. + */ +public class UserInfo { + protected String name=""; + protected UserType type = UserType.UNKNOWN; + + public String getName() { + return name; + } + + public UserInfo(String name, String type) { + this.name = name; + if (type.equalsIgnoreCase("PROFESSOR")) { + this.type = UserType.PROFESSOR; + } else if (type.equalsIgnoreCase("STUDENT")) { + this.type = UserType.STUDENT; + } + } + + public String fileString() { + return name+"//"+type; + } +} diff --git a/src/main/java/usercommunication/UserType.java b/src/main/java/usercommunication/UserType.java new file mode 100644 index 0000000000..1e4f1a36c1 --- /dev/null +++ b/src/main/java/usercommunication/UserType.java @@ -0,0 +1,7 @@ +package usercommunication; + +public enum UserType { + PROFESSOR, + STUDENT, + UNKNOWN +} From 652befee63647e2e631096c0330e65da6c5a0078 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 04:52:29 +0800 Subject: [PATCH 128/299] Coding style --- src/main/java/NuSchedule.java | 8 ++++---- src/main/java/command/SortCommand.java | 1 + src/main/java/usercommunication/UserInfo.java | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 670b4c5fe5..fb03f43db7 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -19,9 +19,9 @@ public class NuSchedule { private static BusStopList busStops; private static LocationList locations; private final UI ui; - private UserInfo userInfo=new UserInfo("",""); + private UserInfo userInfo = new UserInfo("", ""); - public NuSchedule(String ...filePaths) { + public NuSchedule(String... filePaths) { ui = new UI(); busStops = new BusStopList(); @@ -36,7 +36,7 @@ public NuSchedule(String ...filePaths) { } try { events = new EventList(storage.loadEvents(locations)); - userInfo= storage.loadUserInfo(); + userInfo = storage.loadUserInfo(); } catch (NuScheduleException e) { ui.showLoadingError(); events = new EventList(); @@ -73,6 +73,6 @@ public void run() { public static void main(String[] args) { - new NuSchedule("data/events.txt","data/UserInfo.txt").run(); + new NuSchedule("data/events.txt", "data/UserInfo.txt").run(); } } diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index c8f23e586e..fb1555a28f 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -5,6 +5,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; + /** * Represents the command call when the user wants to sort the list. */ diff --git a/src/main/java/usercommunication/UserInfo.java b/src/main/java/usercommunication/UserInfo.java index 6f5267665c..05078f1fc2 100644 --- a/src/main/java/usercommunication/UserInfo.java +++ b/src/main/java/usercommunication/UserInfo.java @@ -4,7 +4,7 @@ * Represents the personal information about the user. */ public class UserInfo { - protected String name=""; + protected String name = ""; protected UserType type = UserType.UNKNOWN; public String getName() { @@ -21,6 +21,6 @@ public UserInfo(String name, String type) { } public String fileString() { - return name+"//"+type; + return name + "//" + type; } } From 500d3454bd8661d27a845bb2f551c7a4ad589206 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 04:56:22 +0800 Subject: [PATCH 129/299] Edit test --- src/test/java/command/EditCommandTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 61603eb01c..a4cdd7f824 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -38,7 +38,7 @@ void execute_InputIsNotInteger_WrongEditFormatException() { @Test void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileException { - Storage storage = new Storage("data/events.txt"); + Storage storage = new Storage("data/events.txt","data/UserInfo.txt"); LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { From e5e790eac375ac6d97a59a057b25d9981067b205 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:22:26 +0800 Subject: [PATCH 130/299] Try for better hyper link --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 461a82df84..d08cb1ccdf 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -11,7 +11,7 @@ Wan Shi Jie Brendan


## Table of Contents -1. [Introduction](#1-introduction) +1. [Introduction](#1.-introduction) 2. [Getting Started](#2-getting-started)
2.1 [Prerequisites](#21-prerequisites)
2.2 [Setting Up](#22-setting-up)
From c24ae470eb9b43bbea405aa797f6e4fcb6b00ec9 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:32:35 +0800 Subject: [PATCH 131/299] try to make the hyperlinks work --- docs/DeveloperGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d08cb1ccdf..db59ca4f26 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -11,7 +11,7 @@ Wan Shi Jie Brendan


## Table of Contents -1. [Introduction](#1.-introduction) +1. [Introduction](#intro) 2. [Getting Started](#2-getting-started)
2.1 [Prerequisites](#21-prerequisites)
2.2 [Setting Up](#22-setting-up)
@@ -28,7 +28,7 @@ Wan Shi Jie Brendan
4.2 [Clear events](#42-clear-events)
4.3 [Edit events](#43-edit-events)
4.4 [Locate](#44-locate)
-4.5 [Reminders](#45-reminders)
+4.5 [Reminders](#45-reminder)
4.6 [Sort events](#46-sort-events)
4.7 [View events](#47-view-events)
5. [Documentation](#5-documentation)
@@ -36,7 +36,7 @@ Wan Shi Jie Brendan
5.2 [Value Proposition](#52-value-proposition)
5.3 [User Stories](#53-user-stories)
-## 1. Introduction +## 1.
Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, NUSchedule will prove itself to be the most efficient way to manage your commitments. From 26513cdf39878f48af4b9d652ca54587e40637be Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:36:51 +0800 Subject: [PATCH 132/299] Updates README.md --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 85ccd4be17..bfb2787bdf 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ -# test +# NUSchedule -{Give product intro here} +A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily. Useful links: * [User Guide](UserGuide.md) From f95cd7b2fd4e24c837d4a05dc05d66af5ba412c2 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:38:02 +0800 Subject: [PATCH 133/299] Try for better appearence of the hyper links --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index db59ca4f26..ee092e5c92 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -36,7 +36,7 @@ Wan Shi Jie Brendan
5.2 [Value Proposition](#52-value-proposition)
5.3 [User Stories](#53-user-stories)
-## 1. Introduction +## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, NUSchedule will prove itself to be the most efficient way to manage your commitments. From 903acef681f9c82ba30a6613cd2bc4ca444a8fc7 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:45:36 +0800 Subject: [PATCH 134/299] Hyperlink --- docs/DeveloperGuide.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ee092e5c92..f3dcac9308 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -12,11 +12,11 @@ Wan Shi Jie Brendan
## Table of Contents 1. [Introduction](#intro) -2. [Getting Started](#2-getting-started)
-2.1 [Prerequisites](#21-prerequisites)
-2.2 [Setting Up](#22-setting-up)
-3. [Design](#3-design)
-3.1 [Architecture](#31-architecture)
+2. [Getting Started](#getting-started)
+2.1 [Prerequisites](#prerequisites)
+2.2 [Setting Up](#setting-up)
+3. [Design](#design)
+3.1 [Architecture](#architecture)
3.2 [UI](#32-ui)
3.3 [Storage](#33-storage)
3.4 [Logic](#34-logic)
@@ -36,7 +36,7 @@ Wan Shi Jie Brendan
5.2 [Value Proposition](#52-value-proposition)
5.3 [User Stories](#53-user-stories)
-## 1. Introduction +## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, NUSchedule will prove itself to be the most efficient way to manage your commitments. @@ -45,14 +45,14 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. -## 2. Getting Started +## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. -### 2.1 Prerequisites +### 2.1 Prerequisites 1. JDK 11 2. Intellij IDEA -### 2.2 Setting Up +### 2.2 Setting Up 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. 2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project to close the existing project dialog @@ -66,7 +66,7 @@ first). 6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project. -## 3. Design +## 3. Design This section describes the different components of the application and how each component interact with each other to run the program. From 72b3ad0c16f14a47542caa80ce3a84c5a8a781e0 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:47:32 +0800 Subject: [PATCH 135/299] hyperlink --- docs/DeveloperGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index f3dcac9308..5cf67c56fe 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -12,7 +12,7 @@ Wan Shi Jie Brendan
## Table of Contents 1. [Introduction](#intro) -2. [Getting Started](#getting-started)
+2. [Getting Started](#getting_started)
2.1 [Prerequisites](#prerequisites)
2.2 [Setting Up](#setting-up)
3. [Design](#design)
@@ -45,7 +45,7 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. -## 2. Getting Started +## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. ### 2.1 Prerequisites From 145eedf3540c79a73a462eac63c3dc3c949b88c5 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 12:58:35 +0800 Subject: [PATCH 136/299] make the hyperlink work --- docs/DeveloperGuide.md | 87 +++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5cf67c56fe..804efb6e35 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -14,27 +14,28 @@ Wan Shi Jie Brendan
1. [Introduction](#intro) 2. [Getting Started](#getting_started)
2.1 [Prerequisites](#prerequisites)
-2.2 [Setting Up](#setting-up)
+2.2 [Setting Up](#setting_up)
3. [Design](#design)
3.1 [Architecture](#architecture)
-3.2 [UI](#32-ui)
-3.3 [Storage](#33-storage)
-3.4 [Logic](#34-logic)
-3.5 [Model](#35-model)
-    3.5.1 [Event](#351-event)
-    3.5.2 [Location](#352-location)
-4. [Implementation](#4-implementation)
-4.1 [Add events](#41-add-events)
-4.2 [Clear events](#42-clear-events)
-4.3 [Edit events](#43-edit-events)
-4.4 [Locate](#44-locate)
-4.5 [Reminders](#45-reminder)
-4.6 [Sort events](#46-sort-events)
-4.7 [View events](#47-view-events)
-5. [Documentation](#5-documentation)
-5.1 [Product scope](#51-product-scope)
-5.2 [Value Proposition](#52-value-proposition)
-5.3 [User Stories](#53-user-stories)
+3.2 [UI](#ui)
+3.3 [Storage](#storage)
+3.4 [Logic](#logic)
+3.5 [Model](#model)
+    3.5.1 [Event](#event)
+    3.5.2 [Location](#location)
+4. [Implementation](#implementation)
+4.1 [Add events](#add_events)
+4.2 [Clear events](#clear)
+4.3 [Edit events](#edit)
+4.4 [Locate](#locate)
+4.5 [Reminders](#reminder)
+4.6 [Sort events](#sort)
+4.7 [View events](#view)
+4.8 [Help](#help)
+5. [Documentation](#documentation)
+5.1 [Product scope](#product_scope)
+5.2 [Value Proposition](#value_proposition)
+5.3 [User Stories](#stories)
## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive @@ -48,11 +49,11 @@ to refer to even if you are already a contributor. ## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. -### 2.1 Prerequisites +### 2.1 Prerequisites 1. JDK 11 2. Intellij IDEA -### 2.2 Setting Up +### 2.2 Setting Up 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. 2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project to close the existing project dialog @@ -66,11 +67,11 @@ first). 6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project. -## 3. Design +## 3. Design This section describes the different components of the application and how each component interact with each other to run the program. -### 3.1 Architecture +### 3.1 Architecture ![architecture](diagrams/architecture.png)
The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into @@ -81,7 +82,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. -### 3.2 UI +### 3.2 UI ![UI Class Diagram](diagrams/Ui.png)
*Figure 3.2.1 Class diagram for UI component* @@ -91,10 +92,10 @@ The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, The `UI` component reads user input using readCommand() and executes user commands according to the Logic component. -### 3.3 Storage +### 3.3 Storage __API__:`Storage.java` The `Storage` component can save the list of event data in .txt format and read it back. -### 3.4 Logic +### 3.4 Logic __API__:`Parser.java` ![Logic Class Diagram](diagrams/LogicClass.png)
@@ -106,13 +107,13 @@ The `logic` component parses the user input and executes commands based on the g 2. The command execution affects the EventList (e.g. clearing the list). 3. The result passes back to the UI, which then displays relevant feedback to the user. -### 3.5 Model +### 3.5 Model The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. -#### 3.5.1 Event +#### 3.5.1 Event __API__:`EventList.java` -### 3.5.2 Location +### 3.5.2 Location ![location class diagram](diagrams/LocationClass.png)
*Figure 3.6.1 Class diagram for location component* @@ -131,12 +132,12 @@ and not edited in any part of the program.
The `Location` component * stores information about various types of locations * prints the list of locations that is saved in the data file -* checks if a location is saved in the list and returns the location when asked +* checks if a location is being saved in the list and returns the location when asked -## 4. Implementation +## 4. Implementation This section describes the implementation of some noteworthy features. -### 4.1 Add events +### 4.1 Add events This feature allows users to add events and relevant information about them (description, time and location) to the list . There are three possible types of events that can be added: classes, assignments, and personal events. @@ -156,7 +157,7 @@ The sequence diagram below shows the process of adding a new event. *Figure 4.1 Sequence Diagram for add function* -### 4.2 Clear events +### 4.2 Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. Given below is an example usage scenario: @@ -170,7 +171,7 @@ The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
*Figure 4.2 Sequence Diagram for clear function* -### 4.3 Edit events +### 4.3 Edit events This feature allows users to edit the information of events that was previously added. Given below is an example usage scenario: @@ -184,7 +185,7 @@ Step 3. `editCommand()` function replaces the original event with the edited one ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
*Figure 4.3 Sequence Diagram for EditCommand()* -### 4.4 Locate +### 4.4 Locate This feature allows users to add locations as part of the event information. If the place is located within the school, additional information about the location will be provided such as nearest bus stops or buildings. If the place is a bus stop, the buses available will be provided instead. The user will add location name as the last piece of information @@ -215,7 +216,7 @@ The sequence diagram below shows exactly which methods, from which classes, are ![locate sequence diagram](diagrams/LocateSequence.png)
*Figure 4.4 Sequence diagram for locate function* -### 4.5 Reminder +### 4.5 Reminder This feature allows users to get a reminder of the events that will occur today. Given below is an example usage scenario: @@ -230,7 +231,7 @@ The sequence diagram belows shows the process of executing the reminder command. ![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) *Figure 4.5 Sequence Diagram for reminder function* -### 4.6 Sort events +### 4.6 Sort events This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available are sorting by time, description and location. @@ -242,7 +243,7 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio ![](diagrams/SortCommand.png)
*Figure 4.6 Sequence diagram for SortCommand()* -### 4.7 View events +### 4.7 View events This feature allows users to view a numbered list of all the events/tasks they have added so far, in the order which they were added. @@ -256,7 +257,7 @@ The sequence diagram below shows what happens when the list command is executed ![ListCommand Sequence Diagram](diagrams/ListCommand.png) *Figure 4.7 Sequence Diagram for list function* -### 4.8 Help +### 4.8 Help This feature allows users to view a summary of all the features available for the current version of NUSchedule. When the user inputs `help`, all available commands and a simple description for each of them will be printed. @@ -265,10 +266,10 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
*Figure 4.8 Sequence Diagram for help function* -## 5. Documentation +## 5. Documentation This section provides other relevant information about the application. -### 5.1 Product scope +### 5.1 Product scope __Target user profile:__ * NUS student or staff * able to type quickly @@ -277,12 +278,12 @@ __Target user profile:__ * prefers using Command Line Interface (CLI) apps * prefers typing instead of mouse interactions -### 5.2 Value proposition +### 5.2 Value proposition NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events -### 5.3 User stories +### 5.3 User stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| From e28313d34630e43904f3ec970e73803d05ea01c5 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 13:18:14 +0800 Subject: [PATCH 137/299] Make the exception message for data file not found more user friendly --- .../exception/DataFileNotFoundException.java | 22 +++++++++++++++++++ .../java/exception/NuScheduleException.java | 5 +++++ src/main/java/storage/Storage.java | 11 +++++----- 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/main/java/exception/DataFileNotFoundException.java diff --git a/src/main/java/exception/DataFileNotFoundException.java b/src/main/java/exception/DataFileNotFoundException.java new file mode 100644 index 0000000000..3de0671e14 --- /dev/null +++ b/src/main/java/exception/DataFileNotFoundException.java @@ -0,0 +1,22 @@ +package exception; + +/** + * Represents the exception happen when the data file is found. + */ +public class DataFileNotFoundException extends NuScheduleException { + private String fileName; + + public DataFileNotFoundException(String fileName) { + this.fileName = fileName; + } + + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return fileName + "is not found. Did you forget to download the data folder provided in the release?"; + } +} diff --git a/src/main/java/exception/NuScheduleException.java b/src/main/java/exception/NuScheduleException.java index ecd82821af..be462bf932 100644 --- a/src/main/java/exception/NuScheduleException.java +++ b/src/main/java/exception/NuScheduleException.java @@ -1,5 +1,10 @@ package exception; public abstract class NuScheduleException extends Exception { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ public abstract String getMessage(); } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 9bc2adfc7d..d13bbc8eed 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -5,6 +5,7 @@ import event.Class; import event.PersonalEvent; import exception.CreatingFileException; +import exception.DataFileNotFoundException; import exception.EndBeforeStartEventException; import exception.LoadingException; import exception.WritingFileException; @@ -240,14 +241,13 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti * * @param busStopList ArrayList of BusStops in BusStopList */ - public void loadBusStopData(ArrayList busStopList) { + public void loadBusStopData(ArrayList busStopList) throws DataFileNotFoundException { File f = new File("./data/bus_stops.txt"); Scanner s; try { s = new Scanner(f); } catch (FileNotFoundException e) { - System.out.println(f.getName() + " not found: " + e.getMessage()); - return; + throw new DataFileNotFoundException(f.getName()); } while (s.hasNext()) { @@ -265,14 +265,13 @@ public void loadBusStopData(ArrayList busStopList) { * * @param locationList ArrayList of Locations in LocationList */ - public void loadLocationData(ArrayList locationList) { + public void loadLocationData(ArrayList locationList) throws DataFileNotFoundException { File f = new File("./data/locations.txt"); Scanner s; try { s = new Scanner(f); } catch (FileNotFoundException e) { - System.out.println(f.getName() + " not found: " + e.getMessage()); - return; + throw new DataFileNotFoundException(f.getName()); } while (s.hasNext()) { From 6283d020c161475401f6ac41d719b5d22c639bf6 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 13:21:23 +0800 Subject: [PATCH 138/299] Error fix --- src/main/java/NuSchedule.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index fb03f43db7..90482db9c6 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -1,6 +1,7 @@ import command.Command; import eventlist.EventList; import exception.CreatingFileException; +import exception.DataFileNotFoundException; import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; @@ -31,7 +32,9 @@ public NuSchedule(String... filePaths) { try { storage = new Storage(filePaths); - } catch (CreatingFileException e) { + storage.loadBusStopData(busStops.getBusStopList()); + storage.loadLocationData(locations.getLocationList()); + } catch (CreatingFileException | DataFileNotFoundException e) { ui.showError(e.getMessage()); } try { @@ -43,8 +46,7 @@ public NuSchedule(String... filePaths) { } - storage.loadBusStopData(busStops.getBusStopList()); - storage.loadLocationData(locations.getLocationList()); + // ui.printBusStopList(busStops.getBusStopList()); // ui.printLocationList(locations.getLocationList()); From f5c45d3cf7c46712ea2535032c50613423eb5130 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 30 Oct 2020 13:23:46 +0800 Subject: [PATCH 139/299] error fix --- src/test/java/command/EditCommandTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index a4cdd7f824..22bdce30c1 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -2,6 +2,7 @@ import eventlist.EventList; import exception.CreatingFileException; +import exception.DataFileNotFoundException; import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; import exception.NoEditEventDescriptionException; @@ -37,7 +38,7 @@ void execute_InputIsNotInteger_WrongEditFormatException() { } @Test - void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileException { + void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileException, DataFileNotFoundException { Storage storage = new Storage("data/events.txt","data/UserInfo.txt"); LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); From c1c52520e6da02306eae1bd681185cab0e3e5f4c Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 17:40:00 +0800 Subject: [PATCH 140/299] Update EditCommand to allow for updating of individual fields --- src/main/java/NuSchedule.java | 3 +- src/main/java/command/EditCommand.java | 45 ++++-- src/main/java/event/Assignment.java | 4 + src/main/java/event/Class.java | 8 + src/main/java/event/Event.java | 14 ++ src/main/java/event/PersonalEvent.java | 8 + src/main/java/eventlist/EventList.java | 140 +++++++++++++++++- .../InvalidEditLocationException.java | 9 ++ .../exception/InvalidEditTypeException.java | 8 + .../java/exception/NoEditTypeException.java | 8 + .../exception/WrongEditFormatException.java | 2 +- src/main/java/location/OnlineLocation.java | 2 +- src/main/java/parser/Parser.java | 99 ++++++++++++- src/main/java/ui/UI.java | 14 ++ src/test/java/command/AddCommandTest.java | 6 +- src/test/java/command/DeleteCommandTest.java | 2 +- src/test/java/command/EditCommandTest.java | 8 +- src/test/java/command/FindCommandTest.java | 6 +- src/test/java/command/SortCommandTest.java | 4 +- 19 files changed, 353 insertions(+), 37 deletions(-) create mode 100644 src/main/java/exception/InvalidEditLocationException.java create mode 100644 src/main/java/exception/InvalidEditTypeException.java create mode 100644 src/main/java/exception/NoEditTypeException.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 90482db9c6..47e1b4f54d 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -62,7 +62,8 @@ public void run() { try { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") - Command c = Parser.parse(fullCommand, locations); + int size = events.getSize(); + Command c = Parser.parse(fullCommand, locations, size); c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); } catch (NuScheduleException e) { diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 0bbe1899f2..58ba845d08 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -3,24 +3,37 @@ import event.Event; import eventlist.EventList; import exception.EditIndexOutOfBoundsException; +import exception.EndBeforeStartEventException; import exception.NuScheduleException; import exception.UndefinedEventException; import exception.WritingFileException; +import location.Location; +import location.OnlineLocation; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import java.time.LocalDateTime; + /** * Represents the command call when the user adds a new event. */ public class EditCommand extends Command { private final int index; - private final Event event; + private final String[] editInformation; + private final LocalDateTime[] startEnd; + //private final Event event; + private final Location location; + private final OnlineLocation onlineLocation; - public EditCommand(Event event, int index) { - this.event = event; - this.index = index; + public EditCommand(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, + OnlineLocation onlineLocation) { + this.index = index; + this.editInformation = editInformation; + this.startEnd = startEnd; + this.location = location; + this.onlineLocation = onlineLocation; } /** @@ -37,14 +50,22 @@ public EditCommand(Event event, int index) { */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws UndefinedEventException, WritingFileException { - if (index >= events.getSize() || index == -1) { - throw new UndefinedEventException(index + 1); + throws UndefinedEventException, WritingFileException, EndBeforeStartEventException { + //events.editEvent(); + System.out.println("Test" + index); + System.out.println(editInformation[0] + " " + editInformation[1] + " " + editInformation[2]); + System.out.println(startEnd[0] + " " + startEnd[1]); + if (location != null) { + System.out.println(location.getName()); + } + if (onlineLocation != null) { + System.out.println(onlineLocation.toString()); } - events.editEvent(event, index); - ui.printConflictEvents(events.checkConflictTiming(event)); - ui.printEditEventMessage(event); - ui.printNumEvent(events.getSize()); - storage.writeFile(events.getEventList()); + + Event newEvent = events.editEvent(index, editInformation, startEnd, location, onlineLocation); + //ui.printConflictEvents(events.checkConflictTiming(event)); + //ui.printEditEventMessage(event); + //ui.printNumEvent(events.getSize()); + //storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index c497c2683b..cc414e779b 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -16,6 +16,10 @@ public class Assignment extends Event { protected LocalDateTime by; + public void setBy(LocalDateTime by) { + this.by = by; + } + /** * Convert the information about this assignment to a string that is to be stored in a file. * diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index f143a08561..3e4d400514 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -16,6 +16,14 @@ public class Class extends Event { protected LocalDateTime at; protected LocalDateTime end; + public void setEnd(LocalDateTime end) { + this.end = end; + } + + public void setAt(LocalDateTime at) { + this.at = at; + } + public Class(String description, Location location, LocalDateTime at, LocalDateTime end) throws EndBeforeStartEventException { super(description, location); diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index f5b0ff1aaa..318e7ccb33 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -22,6 +22,18 @@ public abstract class Event { protected Location location = null; protected OnlineLocation link = null; + public void setDescription(String description) { + this.description = description; + } + + public void setLink(OnlineLocation link) { + this.link = link; + } + + public void setLocation(Location location) { + this.location = location; + } + public Event(String description, Location location) { this.description = description; this.isDone = false; @@ -92,6 +104,8 @@ public Location getLocation() { return location; } + public OnlineLocation getLink() { return link; } + public static Comparator descriptionComparator = (o1, o2) -> o1.getDescription().compareToIgnoreCase(o2.getDescription()); diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index cdfe48c48e..3f7e6b146e 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -20,6 +20,14 @@ public class PersonalEvent extends Event { protected LocalDateTime at; protected LocalDateTime end = null; + public void setAt(LocalDateTime at) { + this.at = at; + } + + public void setEnd(LocalDateTime end) { + this.end = end; + } + /** * Convert the information about this personal event to a string that is to be stored in a file. * diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 74684dc099..8c70006d41 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -2,9 +2,14 @@ import event.Assignment; +import event.Class; import event.Event; +import event.PersonalEvent; import exception.EmptyEventListException; +import exception.EndBeforeStartEventException; import exception.UndefinedEventException; +import location.Location; +import location.OnlineLocation; import ui.UI; import java.time.LocalDate; @@ -64,12 +69,141 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { /** * Edit the contents of an existing event. * - * @param event the new edited event * @param index the index of the event being edited */ - public void editEvent(Event event, int index) { + public Event editEvent(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, + OnlineLocation onlineLocation) throws EndBeforeStartEventException { assert events != null; - events.set(index, event); + + // create new event object with user input + System.out.println("Working as expected"); + + // no change in event type + if (editInformation[0].isBlank()) { + // set new description + editSameType(index, editInformation, startEnd, location, onlineLocation); + } else { + Event newEvent = null; + String newDescription; + Location newLocation = null; + OnlineLocation newOnlineLocation = null; + LocalDateTime start; + LocalDateTime end; + + if (editInformation[0].isBlank()) { + newDescription = events.get(index).getDescription(); + } else { + newDescription = editInformation[1]; + } + + if (location == null && onlineLocation == null) { + if (events.get(index).getLocation() != null) { + newLocation = events.get(index).getLocation(); + } + if (events.get(index).getLink() != null) { + newOnlineLocation = events.get(index).getLink(); + } + } else if (location != null && onlineLocation == null) { + newLocation = location; + newOnlineLocation = null; + } else { + newLocation = null; + newOnlineLocation = onlineLocation; + } + + /* + if (onlineLocation == null) { + if (events.get(index).getLocation() != null) { + newLocation = events.get(index).getLocation(); + } + if (events.get(index).getLink() != null) { + newOnlineLocation = events.get(index).getLink(); + } + } else { + newOnlineLocation = onlineLocation; + } + */ + + + if (startEnd[0] == null) { + start = events.get(index).getStartDateTime(); + } else { + start = startEnd[0]; + } + + if (startEnd[1] == null) { + end = events.get(index).getEndDateTime(); + } else { + end = startEnd[1]; + } + switch (editInformation[0]) { + case "Assignment": + if (newLocation != null) { + newEvent = new Assignment(newDescription, newLocation, start); + } else { + newEvent = new Assignment(newDescription, newOnlineLocation, start); + } + break; + case "class": + if (newLocation != null) { + newEvent = new Class(newDescription, newLocation, start, end); + } else { + newEvent = new Class(newDescription, newOnlineLocation, start, end); + } + break; + case "personalEvent": + if (newLocation != null) { + newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); + } + break; + } + events.set(index, newEvent); + } + + + + + return events.get(index); + } + + + + + private void editSameType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) { + if (!editInformation[1].isBlank()) { + events.get(index).setDescription(editInformation[1]); + } + + // set new location + if (location != null) { + events.get(index).setLocation(location); + events.get(index).setLink(null); + } + if (onlineLocation != null) { + events.get(index).setLink(onlineLocation); + events.get(index).setLocation(null); + } + + // set new time + if (events.get(index) instanceof Assignment) { + if (startEnd[0] != null) { + ((Assignment) events.get(index)).setBy(startEnd[0]); + } + } else if (events.get(index) instanceof PersonalEvent ) { + if (startEnd[0] != null) { + ((PersonalEvent) events.get(index)).setAt(startEnd[0]); + } + if (startEnd[1] != null) { + ((PersonalEvent) events.get(index)).setEnd(startEnd[1]); + } + } else if (events.get(index) instanceof Class) { + if (startEnd[0] != null) { + ((Class) events.get(index)).setAt(startEnd[0]); + } + if (startEnd[0] != null) { + ((Class) events.get(index)).setEnd(startEnd[1]); + } + } } /** diff --git a/src/main/java/exception/InvalidEditLocationException.java b/src/main/java/exception/InvalidEditLocationException.java new file mode 100644 index 0000000000..508c56ca1e --- /dev/null +++ b/src/main/java/exception/InvalidEditLocationException.java @@ -0,0 +1,9 @@ +package exception; + +public class InvalidEditLocationException extends InvalidCommandException { + @Override + public String getMessage() { + return "Enter the location in the format /l LOCATION for offline location and /o LINK /p PASSWORD for " + + "online location."; + } +} diff --git a/src/main/java/exception/InvalidEditTypeException.java b/src/main/java/exception/InvalidEditTypeException.java new file mode 100644 index 0000000000..b43f6cf82e --- /dev/null +++ b/src/main/java/exception/InvalidEditTypeException.java @@ -0,0 +1,8 @@ +package exception; + +public class InvalidEditTypeException extends InvalidCommandException { + @Override + public String getMessage() { + return "Event type can only be personalevent, class or assignment."; + } +} diff --git a/src/main/java/exception/NoEditTypeException.java b/src/main/java/exception/NoEditTypeException.java new file mode 100644 index 0000000000..c4d2fd7771 --- /dev/null +++ b/src/main/java/exception/NoEditTypeException.java @@ -0,0 +1,8 @@ +package exception; + +public class NoEditTypeException extends NuScheduleException { + @Override + public String getMessage() { + return "Please provide the details for the new event to be added."; + } +} diff --git a/src/main/java/exception/WrongEditFormatException.java b/src/main/java/exception/WrongEditFormatException.java index a288fbac2f..17d686a849 100644 --- a/src/main/java/exception/WrongEditFormatException.java +++ b/src/main/java/exception/WrongEditFormatException.java @@ -11,6 +11,6 @@ public class WrongEditFormatException extends NuScheduleException { */ @Override public String getMessage() { - return "Please enter the index of the event that you want to edit as an integer."; + return "Index of an even should be an integer."; } } diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 37b12e5187..b76d7eeae4 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -40,7 +40,7 @@ public OnlineLocation(String link, String pwd) { * @return the link of the location. If there is password, return the password also. */ public String toString() { - return "link:" + link + (password != null ? " password: " + password : ""); + return "link: " + link + (password != null ? " password: " + password : ""); } /** diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ce6827a84c..fd5cbf1582 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -31,6 +31,8 @@ import exception.EmptyEventIndexException; import exception.EmptyFindDateException; import exception.EmptyFindException; +import exception.InvalidEditLocationException; +import exception.InvalidEditTypeException; import exception.InvalidSortCriteriaException; import exception.NoEndTimeClassException; import exception.NoEditEventDescriptionException; @@ -41,6 +43,7 @@ import exception.NoSortCriteriaException; import exception.NuScheduleException; import exception.TimeFormatException; +import exception.UndefinedEventException; import exception.UnknownErrorException; import exception.WrongCommandException; import exception.WrongEditFormatException; @@ -53,11 +56,13 @@ import locationlist.LocationList; import usercommunication.UserInfo; +import java.time.DateTimeException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeParseException; - +import ui.UI; +import eventlist.EventList; /** * This class contains one function -- parse, to call the respective command function according to the user input. */ @@ -93,7 +98,7 @@ public abstract class Parser { * @throws NuScheduleException includes all exceptions may happen during parsing */ - public static Command parse(String fullCommand, LocationList locations) throws NuScheduleException { + public static Command parse(String fullCommand, LocationList locations, int size) throws NuScheduleException { //deletes all the starting and ending spaces fullCommand = fullCommand.trim(); @@ -153,7 +158,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N return new ReminderCommand(); } - int eventIndex;//to indicate what is the Event we are dealing with. may not be used. + int eventIndex; //this block deals with done command if (words[0].equals(EVENT_DONE)) { @@ -213,7 +218,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N //the position of /p int pwdDividerPosition = fullCommand.indexOf(PASSWORD_MARKER); String startDateTime; - Location location; + Location location = null; + OnlineLocation onlineLocation = null; String endDateTime; //the position of the space when the user enters an ending date time in the format yyyy-mm-dd HH:mm int endingTimeDivider; @@ -223,13 +229,94 @@ public static Command parse(String fullCommand, LocationList locations) throws N //this block will change fullCommand, but this does not affect the later block since //it either return an EditCommand, or throw an exception if (words[0].equals(EDIT)) { + if (fullCommand.length() == 4 ) { + throw new EmptyEventIndexException(); + } + try { + eventIndex = Integer.parseInt(words[1]) - 1; + } catch (NumberFormatException e) { + throw new WrongEditFormatException(); + } + + // Check if the index exists + if (eventIndex + 1 > size || eventIndex == -1) { + throw new UndefinedEventException(eventIndex + 1); + } + + // parse and format user inputs. + UI ui = new UI(); + String[] editInformation = ui.readEditCommand(); + LocalDateTime[] startEnd = new LocalDateTime[2]; + + if(!editInformation[0].isBlank()) { + if (editInformation[0].equals(ASSIGNMENT) || editInformation[0].equals(CLASS) || + editInformation[0].equals(PERSONAL_EVENT)) { + + } else { + throw new InvalidEditTypeException(); + } + } + + // user input validation for location + if (!editInformation[2].isBlank()) { + editInformation[2] = editInformation[2].trim(); + if (editInformation[2].startsWith(LOCATION_MARKER)) { + //editInformation[2] = editInformation[2].substring(3); + location = parseLocation(editInformation[2].substring(3), locations); + } + else if (editInformation[2].startsWith(ONLINE_LOCATION_MARKER)) { + int pwdPos = editInformation[2].indexOf(PASSWORD_MARKER); + if (pwdPos == -1) { + onlineLocation = + new OnlineLocation(editInformation[2].substring(3)); + } else { + onlineLocation = + new OnlineLocation(editInformation[2].substring(3, pwdPos - 1), + editInformation[2].substring(pwdPos + 3)); + } + } + else { + throw new InvalidEditLocationException(); + } + } + + // user input validation for start and end time + if (!editInformation[3].isBlank()) { + if (editInformation[3].length() != 16) { + throw new TimeFormatException(); + } + startDateTime = editInformation[3].substring(0, 10) + "T" + editInformation[3].substring(11); + try { + startEnd[0] = LocalDateTime.parse(startDateTime); + //System.out.println(startEnd[0]); + } catch (DateTimeException e) { + throw new TimeFormatException(); + } + } + + if (!editInformation[4].isBlank()) { + if (editInformation[4].length() != 16) { + throw new TimeFormatException(); + } + startDateTime = editInformation[4].substring(0, 10) + "T" + editInformation[4].substring(11); + try { + startEnd[1] = LocalDateTime.parse(startDateTime); + //System.out.println(startEnd[1]); + } catch (DateTimeException e) { + throw new TimeFormatException(); + } + } + + return new EditCommand(eventIndex, editInformation, startEnd, location, onlineLocation); + /* if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); } if (fullCommand.substring(5).isBlank()) { throw new EmptyEventIndexException(); } + try { eventIndex = Integer.parseInt(words[1]) - 1; } catch (NumberFormatException e) { @@ -252,7 +339,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new NoEventLocationException(); } - int prefixLength = words[0].length() + words[1].length() + words[2].length(); + int prefixLength = words[0].length() + words[1].length() + words[2].length() + 2; if (fullCommand.substring(prefixLength, startTimeDividerPosition).isBlank()) { @@ -412,7 +499,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N } else { throw new WrongCommandException(); } - +*/ } //this block deals with add command diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 9da6d5433d..e99824cd58 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -34,6 +34,20 @@ public UI() { in = new Scanner(System.in); } + public String[] readEditCommand() { + String[] editFields = {"TYPE: ", "DESC: ", "LOCATION: ", "START: ", "END: "}; + String[] editInformation = new String[5]; + System.out.println("Enter the fields for each component. Leave as blank if no changes are to be made."); + // populate editinformation with user data + for (int i =0; i<5; i++) { + System.out.print(editFields[i]); + editInformation[i] = in.nextLine(); + } + return editInformation; + } + + + /** * Reads the user input line by line. * diff --git a/src/test/java/command/AddCommandTest.java b/src/test/java/command/AddCommandTest.java index d0316e1725..c7f9232284 100644 --- a/src/test/java/command/AddCommandTest.java +++ b/src/test/java/command/AddCommandTest.java @@ -15,21 +15,21 @@ class AddCommandTest { @Test void execute_NoDescriptionGiven_EmptyEventException() { Assertions.assertThrows(EmptyEventException.class, () -> { - Command d = Parser.parse("class", null); + Command d = Parser.parse("class", null, 0); }); } @Test void execute_NoTimeMarkerGiven_NoEventTimeMarkerException() { Assertions.assertThrows(NoEventTimeMarkerException.class, () -> { - Command d = Parser.parse("class something", null); + Command d = Parser.parse("class something", null,0); }); } @Test void execute_NoLocationMarkerGiven_NoEventLocationException() { Assertions.assertThrows(NoEventLocationException.class, () -> { - Command d = Parser.parse("class something /t 2020-02-02 20:00", null); + Command d = Parser.parse("class something /t 2020-02-02 20:00", null,0); }); } } \ No newline at end of file diff --git a/src/test/java/command/DeleteCommandTest.java b/src/test/java/command/DeleteCommandTest.java index 4c9f49b964..bb0a4f695d 100644 --- a/src/test/java/command/DeleteCommandTest.java +++ b/src/test/java/command/DeleteCommandTest.java @@ -14,7 +14,7 @@ public class DeleteCommandTest { @Test void execute_InvalidIndexGiven_DeleteNumberFormatException() { Assertions.assertThrows(DeleteNumberFormatException.class,() -> { - Command c = Parser.parse("delete f", null); + Command c = Parser.parse("delete f", null,0); }); } } diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 22bdce30c1..7642b448b5 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -25,7 +25,7 @@ class EditCommandTest { void execute_NoIndexSpecified_emptyEventIndexException() throws NuScheduleException { Assertions.assertThrows(EmptyEventIndexException.class, () -> { - Command d = Parser.parse("edit", null); + Command d = Parser.parse("edit", null, 0); }); } @@ -33,7 +33,7 @@ void execute_NoIndexSpecified_emptyEventIndexException() throws NuScheduleExcept @Test void execute_InputIsNotInteger_WrongEditFormatException() { Assertions.assertThrows(WrongEditFormatException.class, () -> { - Command c = Parser.parse("edit c", null); + Command c = Parser.parse("edit c", null, 0); }); } @@ -43,7 +43,7 @@ void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileExcep LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { - Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations) + Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations, 0) .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage); }); } @@ -51,7 +51,7 @@ void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileExcep @Test void execute_NoEditDescriptionProvided_NoEditEventDescriptionException() { Assertions.assertThrows(NoEditEventDescriptionException.class, () -> { - Command c = Parser.parse("edit 1", null); + Command c = Parser.parse("edit 1", null,0); }); } } \ No newline at end of file diff --git a/src/test/java/command/FindCommandTest.java b/src/test/java/command/FindCommandTest.java index 3ec4b3c085..158942e041 100644 --- a/src/test/java/command/FindCommandTest.java +++ b/src/test/java/command/FindCommandTest.java @@ -12,21 +12,21 @@ public class FindCommandTest { @Test void execute_NoDescriptionGiven_EmptyEventException() { Assertions.assertThrows(EmptyFindException.class, () -> { - Command c = Parser.parse("find", null); + Command c = Parser.parse("find", null,0); }); } @Test void execute_NoDateGiven_EmptyFindDateException() { Assertions.assertThrows(EmptyFindDateException.class, () -> { - Command c = Parser.parse("date", null); + Command c = Parser.parse("date", null,0); }); } @Test void execute_InvalidTimeDate_DateFormatException() { Assertions.assertThrows(DateFormatException.class, () -> { - Command c = Parser.parse("date 2100", null); + Command c = Parser.parse("date 2100", null,0); }); } } diff --git a/src/test/java/command/SortCommandTest.java b/src/test/java/command/SortCommandTest.java index 6b005cb9fd..ac147374c3 100644 --- a/src/test/java/command/SortCommandTest.java +++ b/src/test/java/command/SortCommandTest.java @@ -12,14 +12,14 @@ class SortCommandTest { @Test void execute_NoSortCriteria_NoSortCriteriaException() { Assertions.assertThrows(NoSortCriteriaException.class, () -> { - Command d = Parser.parse("sort", null); + Command d = Parser.parse("sort", null,0); }); } @Test void execute_InvalidSortCriteria_InvalidSortCriteriaException() { Assertions.assertThrows(InvalidSortCriteriaException.class, () -> { - Command d = Parser.parse("sort something", null); + Command d = Parser.parse("sort something", null,0); }); } } \ No newline at end of file From 04c8a29b3d370d63f3a5871bee13d39fbe4609e5 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 1 Nov 2020 17:55:00 +0800 Subject: [PATCH 141/299] fixes some bugs --- docs/UserGuide.md | 8 +++----- .../java/exception/DoubleTimeAssignmentException.java | 2 ++ src/main/java/exception/ExistingEventInListException.java | 2 ++ src/main/java/exception/NoPasswordException.java | 2 ++ 4 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 src/main/java/exception/DoubleTimeAssignmentException.java create mode 100644 src/main/java/exception/ExistingEventInListException.java create mode 100644 src/main/java/exception/NoPasswordException.java diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 34d829371d..7604aa1aa0 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -115,11 +115,9 @@ Shows you a list of all events. Format: `list` ### Clear events -Deletes events based on their index in the list. +Deletes all events in the list. -Format: `clear NUMBER` OR `clear ALL` - -Example: `clear 3` +Format: `clear` ### Mark event as done @@ -147,7 +145,7 @@ the data of your previous AddressBook home folder. |Action|Command|Example| |------|-------|-------| |add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| -|clear|`clear NUMBER` OR `clear ALL` |`clear 3`| +|clear|`clear` |`clear`| |done|`done INDEX` |`done 1` | |edit|`edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION`|`edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home`| |help|`help`|| diff --git a/src/main/java/exception/DoubleTimeAssignmentException.java b/src/main/java/exception/DoubleTimeAssignmentException.java new file mode 100644 index 0000000000..b09232895c --- /dev/null +++ b/src/main/java/exception/DoubleTimeAssignmentException.java @@ -0,0 +1,2 @@ +package exception;public class DoubleTimeAssignmentException { +} diff --git a/src/main/java/exception/ExistingEventInListException.java b/src/main/java/exception/ExistingEventInListException.java new file mode 100644 index 0000000000..29de768625 --- /dev/null +++ b/src/main/java/exception/ExistingEventInListException.java @@ -0,0 +1,2 @@ +package exception;public class ExistingEventInListException { +} diff --git a/src/main/java/exception/NoPasswordException.java b/src/main/java/exception/NoPasswordException.java new file mode 100644 index 0000000000..230ca10016 --- /dev/null +++ b/src/main/java/exception/NoPasswordException.java @@ -0,0 +1,2 @@ +package exception;public class NoPasswordException { +} From 6b7d99820977f8f44ebca7ca16714e9461623288 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 1 Nov 2020 17:55:12 +0800 Subject: [PATCH 142/299] fixes some bugs --- docs/UserGuide.md | 10 ++- src/main/java/command/AddCommand.java | 3 +- src/main/java/command/EditCommand.java | 1 - src/main/java/event/Assignment.java | 17 +++++ src/main/java/event/Class.java | 16 ++++ src/main/java/event/PersonalEvent.java | 23 +++++- src/main/java/eventlist/EventList.java | 54 +++++++++----- .../DoubleTimeAssignmentException.java | 16 +++- .../java/exception/EmptyEventException.java | 2 +- .../ExistingEventInListException.java | 16 +++- .../exception/NoEventLocationException.java | 4 +- .../java/exception/NoPasswordException.java | 16 +++- .../java/exception/TimeFormatException.java | 2 +- src/main/java/location/Location.java | 11 +++ src/main/java/location/OnlineLocation.java | 13 ++++ src/main/java/parser/Parser.java | 74 +++++++++++++------ src/main/java/ui/UI.java | 7 +- 17 files changed, 229 insertions(+), 56 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 7604aa1aa0..a131587098 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -48,6 +48,13 @@ This gives the application both simplicity and speed, setting it apart from othe ## Features +### Tips: +In the following description, `DATE` refers to the date in the format yyyy-MM-dd. e.g. `2020-10-31` +`TIME` refers to the time in the format HH:mm. e.g. `10:00` + +`/t` refers to the starting time for PersonalEvent and Class, and deadline for Assignment +`/e` refers to the ending time for PersonalEvent and Class + ### View available commands Shows list of commands and provides a link to the user guide for more details. @@ -59,8 +66,7 @@ Format: `help` Adds events/tasks to the schedule. Can support various types of tasks: -In the following description, `DATE` refers to the date in the format yyyy-MM-dd. e.g. `2020-10-31` -`TIME` refers to the time in the format HH:mm. e.g. `10:00` + * Personal events Format: `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for underline event. diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index 61084e95dd..cd46331eb3 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -2,6 +2,7 @@ import event.Event; import eventlist.EventList; +import exception.ExistingEventInListException; import exception.NuScheduleException; import exception.WritingFileException; import locationlist.BusStopList; @@ -37,7 +38,7 @@ public AddCommand(Event event) { */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws WritingFileException { + throws WritingFileException, ExistingEventInListException { ui.printConflictEvents(events.checkConflictTiming(event)); events.addEvent(event); ui.printAddEventMessage(event); diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 0bbe1899f2..cccaced76d 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -44,7 +44,6 @@ public void execute(EventList events, LocationList locations, BusStopList busSto events.editEvent(event, index); ui.printConflictEvents(events.checkConflictTiming(event)); ui.printEditEventMessage(event); - ui.printNumEvent(events.getSize()); storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index c497c2683b..4a120cdaa0 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -54,4 +54,21 @@ public String toString() { return "[A]" + super.toString() + " (by: " + by.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + "\n" + (location != null ? location : link); } + + /** + * Provides the binary operator for checking whether 2 assignments are the same. + */ + @Override + public boolean equals(Object object) { + boolean isEqual = false; + + if (object instanceof Assignment) { + isEqual = (this.description.equals(((Assignment) object).description)) + && (this.link != null ? (this.link.equals(((Assignment) object).link)) + : (this.location.equals(((Assignment) object).location))) + && (this.by.isEqual(((Assignment) object).by)); + } + + return isEqual; + } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index f143a08561..6e83ee7e2a 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -85,4 +85,20 @@ public String toString() { + "\n" + (location != null ? location : link); } + /** + * Provides the binary operator for checking whether 2 classes are the same. + */ + @Override + public boolean equals(Object object) { + boolean isEqual = false; + + if (object instanceof Class) { + isEqual = (this.description.equals(((Class) object).description)) + && (this.link != null ? (this.link.equals(((Class) object).link)) + : (this.location.equals(((Class) object).location))) + && (this.at.isEqual(((Class) object).at)); + } + + return isEqual; + } } diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index cdfe48c48e..c4bc4a691e 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -26,8 +26,8 @@ public class PersonalEvent extends Event { * @return the result string to be stored */ public String fileString() { - return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (location != null - ? location.fileString() : link.fileString()); + return "P//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (end != null ? end + "//" : "") + + (location != null ? location.fileString() : link.fileString()); } /** @@ -98,8 +98,25 @@ public LocalDateTime getEndDateTime() { */ public String toString() { return "[P]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" - + (end != null ? "\n(end at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : + + (end != null ? "\n(end at: " + end.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : "") + "\n" + (location != null ? location : link); } + + /** + * Provides the binary operator for checking whether 2 classes are the same. + */ + @Override + public boolean equals(Object object) { + boolean isEqual = false; + + if (object instanceof PersonalEvent) { + isEqual = (this.description.equals(((PersonalEvent) object).description)) + && (this.link != null ? (this.link.equals(((PersonalEvent) object).link)) + : (this.location.equals(((PersonalEvent) object).location))) + && (this.at.isEqual(((PersonalEvent) object).at)); + } + + return isEqual; + } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 74684dc099..38d16851f2 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -4,6 +4,7 @@ import event.Assignment; import event.Event; import exception.EmptyEventListException; +import exception.ExistingEventInListException; import exception.UndefinedEventException; import ui.UI; @@ -11,6 +12,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; +import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; @@ -42,7 +44,11 @@ public EventList(ArrayList events) { * * @param eventToBeAdded may be Assignment/Class/Personal Event based on the usage */ - public void addEvent(Event eventToBeAdded) { + public void addEvent(Event eventToBeAdded) throws ExistingEventInListException { + if (events.contains(eventToBeAdded)) { + throw new ExistingEventInListException(); + } + events.add(eventToBeAdded); } @@ -186,29 +192,39 @@ public ArrayList checkConflictTiming(Event event) { eventEndDateTime = null; } ArrayList filteredEventList; - - filteredEventList = (ArrayList) events.stream() - .filter(s -> s.getEndDateTime() != null) - .filter(s -> ((!(s instanceof Assignment)) - && (s.getStartDateTime().isBefore(eventStartDateTime) - || s.getStartDateTime().isEqual(eventStartDateTime)) - && (s.getEndDateTime().isAfter(eventStartDateTime) - || s.getEndDateTime().isEqual(eventStartDateTime)))) - .collect(toList()); - if (eventEndDateTime != null) { - //this considers when the events already in the list lie in the duration of the new event - LocalDateTime finalEventEndDateTime = eventEndDateTime; - ArrayList filteredEventList2 = (ArrayList) events.stream() + ArrayList filteredEventList2 = null; + try { + filteredEventList = (ArrayList) events.stream() + .filter(s -> s.getEndDateTime() != null) .filter(s -> ((!(s instanceof Assignment)) - && (s.getStartDateTime().isAfter(eventStartDateTime) + && (s.getStartDateTime().isBefore(eventStartDateTime) || s.getStartDateTime().isEqual(eventStartDateTime)) - && (s.getStartDateTime().isBefore(finalEventEndDateTime) - || s.getStartDateTime().isEqual(finalEventEndDateTime)))) + && (s.getEndDateTime().isAfter(eventStartDateTime) + || s.getEndDateTime().isEqual(eventStartDateTime)))) .collect(toList()); - filteredEventList2.removeAll(filteredEventList); + } catch (NullPointerException e) { + filteredEventList = null; + } + if (eventEndDateTime != null) { + //this considers when the events already in the list lie in the duration of the new event + try { + LocalDateTime finalEventEndDateTime = eventEndDateTime; + filteredEventList2 = (ArrayList) events.stream() + .filter(s -> ((!(s instanceof Assignment)) + && (s.getStartDateTime().isAfter(eventStartDateTime) + || s.getStartDateTime().isEqual(eventStartDateTime)) + && (s.getStartDateTime().isBefore(finalEventEndDateTime) + || s.getStartDateTime().isEqual(finalEventEndDateTime)))) + .collect(toList()); + filteredEventList2.removeAll(filteredEventList); + } catch (NullPointerException e) { + filteredEventList2 = null; + } + } + if (filteredEventList != null && filteredEventList2 != null) { filteredEventList.addAll(filteredEventList2); + filteredEventList.remove(event); } - filteredEventList.remove(event); return filteredEventList; } } diff --git a/src/main/java/exception/DoubleTimeAssignmentException.java b/src/main/java/exception/DoubleTimeAssignmentException.java index b09232895c..1df23d6e3c 100644 --- a/src/main/java/exception/DoubleTimeAssignmentException.java +++ b/src/main/java/exception/DoubleTimeAssignmentException.java @@ -1,2 +1,16 @@ -package exception;public class DoubleTimeAssignmentException { +package exception; + +/** + * Represent the case when the user enters an end time for an assignment. + */ +public class DoubleTimeAssignmentException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Assignment should have only one time. If you want to indicate an exam, you may consider it as a class."; + } } diff --git a/src/main/java/exception/EmptyEventException.java b/src/main/java/exception/EmptyEventException.java index e8e0520801..f20e5c5bd7 100644 --- a/src/main/java/exception/EmptyEventException.java +++ b/src/main/java/exception/EmptyEventException.java @@ -10,6 +10,6 @@ public class EmptyEventException extends NuScheduleException { * @return the message */ public String getMessage() { - return "Your input is incomplete. Please enter an event description."; + return "Event description is empty. Please give a title/description of the event."; } } diff --git a/src/main/java/exception/ExistingEventInListException.java b/src/main/java/exception/ExistingEventInListException.java index 29de768625..ae71f0eaf3 100644 --- a/src/main/java/exception/ExistingEventInListException.java +++ b/src/main/java/exception/ExistingEventInListException.java @@ -1,2 +1,16 @@ -package exception;public class ExistingEventInListException { +package exception; + +/** + * represent the user trys to add an event that is already in the list. + */ +public class ExistingEventInListException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Seems you have already added this event. Do not input duplicate events."; + } } diff --git a/src/main/java/exception/NoEventLocationException.java b/src/main/java/exception/NoEventLocationException.java index 746143e309..c7cebab4f2 100644 --- a/src/main/java/exception/NoEventLocationException.java +++ b/src/main/java/exception/NoEventLocationException.java @@ -10,7 +10,7 @@ public class NoEventLocationException extends NuScheduleException { * @return the message */ public String getMessage() { - return "Please input a valid location and mark it with \"/l\" underline locations or \"/o\" for online " - + "location."; + return "Please input a valid location and mark it with \"/l\" for underline locations or \"/o\" for online " + + "locations."; } } diff --git a/src/main/java/exception/NoPasswordException.java b/src/main/java/exception/NoPasswordException.java index 230ca10016..40e33f7138 100644 --- a/src/main/java/exception/NoPasswordException.java +++ b/src/main/java/exception/NoPasswordException.java @@ -1,2 +1,16 @@ -package exception;public class NoPasswordException { +package exception; + +/** + * Represents the case when the user enter "/p" but did not enter password + */ +public class NoPasswordException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Seems you forget to enter the password. If there is no password needed, do not enter \"/p\""; + } } diff --git a/src/main/java/exception/TimeFormatException.java b/src/main/java/exception/TimeFormatException.java index 735eaaf66d..868d68cbb3 100644 --- a/src/main/java/exception/TimeFormatException.java +++ b/src/main/java/exception/TimeFormatException.java @@ -12,7 +12,7 @@ public class TimeFormatException extends NuScheduleException { */ public String getMessage() { return "You entered the time in a format that is not accepted by this program.\n" - + "The format should be \"yyyy-MM-dd HH:mm\"\n" + + "The format should be \"yyyy-MM-dd HH:mm\", and both date and time should be valid.\n" + "For example, 2000-01-01 00:00"; } } diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 47d522ed46..20c5beab2a 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -52,4 +52,15 @@ public String toString() { public String fileString() { return null; } + + @Override + public boolean equals(Object object){ + boolean isEqual = false; + + if (object instanceof Location) { + isEqual = (this.name.equals(((Location) object).name)) ; + } + + return isEqual; + } } diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 37b12e5187..e777cb4b8a 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -1,5 +1,7 @@ package location; +import event.Assignment; + /** * Virtual location is also location! * This class represents the online meetings (e.g. zoom sessions) for people to attend, or the link to submit @@ -51,4 +53,15 @@ public String toString() { public String fileString() { return "online//" + link + (password != null ? "//" + password : ""); } + + @Override + public boolean equals(Object object){ + boolean isEqual = false; + + if (object instanceof OnlineLocation) { + isEqual = (this.link.equals(((OnlineLocation) object).link)) ; + } + + return isEqual; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ce6827a84c..4d7fd786e8 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -25,6 +25,7 @@ import exception.DateFormatException; import exception.DeleteNumberFormatException; import exception.DoneNumberFormatException; +import exception.DoubleTimeAssignmentException; import exception.EmptyDeleteException; import exception.EmptyDoneException; import exception.EmptyEventException; @@ -38,6 +39,7 @@ import exception.NoEventLocationException; import exception.NoEventTimeException; import exception.NoEventTimeMarkerException; +import exception.NoPasswordException; import exception.NoSortCriteriaException; import exception.NuScheduleException; import exception.TimeFormatException; @@ -161,7 +163,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N throw new EmptyDoneException(); } try { - eventIndex = Integer.parseInt(fullCommand.substring(5)) - 1; + eventIndex = Integer.parseInt(fullCommand.substring(5).trim()) - 1; } catch (NumberFormatException e) { throw new DoneNumberFormatException(); } @@ -255,23 +257,23 @@ public static Command parse(String fullCommand, LocationList locations) throws N int prefixLength = words[0].length() + words[1].length() + words[2].length(); - if (fullCommand.substring(prefixLength, startTimeDividerPosition).isBlank()) { + if (fullCommand.substring(prefixLength+2, startTimeDividerPosition-1).isBlank()) { throw new EmptyEventException(); } if (locationDividerPosition != -1) { - if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 2, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + if (fullCommand.substring(locationDividerPosition + 2).isBlank()) { throw new NoEventLocationException(); } } else { - if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1) + if (fullCommand.substring(startTimeDividerPosition + 2, onlineLocationDividerPosition - 1) .isBlank()) { throw new NoEventTimeException(); } - if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { + if (fullCommand.substring(onlineLocationDividerPosition + 2).isBlank()) { throw new NoEventLocationException(); } } @@ -284,10 +286,13 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[2]) { case ASSIGNMENT: + if (endTimeDividerPosition != -1) { + throw new DoubleTimeAssignmentException(); + } startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), eventIndex); case CLASS: @@ -305,7 +310,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Class(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime)), eventIndex); @@ -313,7 +318,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), eventIndex); } else { @@ -328,7 +333,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime)), eventIndex); @@ -347,6 +352,16 @@ public static Command parse(String fullCommand, LocationList locations) throws N virtualLocation = new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); } else { + try { + if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1).isBlank()) { + throw new NoEventLocationException(); + } + } catch (NullPointerException | StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + if (fullCommand.substring(pwdDividerPosition + 2).isBlank()) { + throw new NoPasswordException(); + } virtualLocation = new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3, pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); @@ -354,10 +369,13 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[2]) { case ASSIGNMENT: + if (endTimeDividerPosition != -1) { + throw new DoubleTimeAssignmentException(); + } startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), eventIndex); case CLASS: @@ -373,7 +391,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, + return new EditCommand(new Class(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime)), eventIndex); @@ -381,7 +399,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N if (endTimeDividerPosition == -1) { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), eventIndex); @@ -395,7 +413,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, + return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 3, startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime)), @@ -437,34 +455,35 @@ public static Command parse(String fullCommand, LocationList locations) throws N } if (locationDividerPosition != -1) { - if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { + if (fullCommand.substring(startTimeDividerPosition + 2, locationDividerPosition - 1).isBlank()) { throw new NoEventTimeException(); } - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { + if (fullCommand.substring(locationDividerPosition + 2).isBlank()) { throw new NoEventLocationException(); } } else { - if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1) + if (fullCommand.substring(startTimeDividerPosition + 2, onlineLocationDividerPosition - 1) .isBlank()) { throw new NoEventTimeException(); } - if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { + if (fullCommand.substring(onlineLocationDividerPosition + 2).isBlank()) { throw new NoEventLocationException(); } + } //this deals with the event holding offline if (locationDividerPosition != -1) { - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); - } try { timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); switch (words[0]) { case ASSIGNMENT: + if (endTimeDividerPosition != -1) { + throw new DoubleTimeAssignmentException(); + } startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); @@ -526,6 +545,16 @@ public static Command parse(String fullCommand, LocationList locations) throws N virtualLocation = new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); } else { + try { + if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1).isBlank()) { + throw new NoEventLocationException(); + } + } catch (NullPointerException | StringIndexOutOfBoundsException e) { + throw new NoEventLocationException(); + } + if (fullCommand.substring(pwdDividerPosition + 2).isBlank()) { + throw new NoPasswordException(); + } virtualLocation = new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3, pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); @@ -533,6 +562,9 @@ public static Command parse(String fullCommand, LocationList locations) throws N switch (words[0]) { case ASSIGNMENT: + if (endTimeDividerPosition != -1) { + throw new DoubleTimeAssignmentException(); + } startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 9da6d5433d..09618d5926 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -181,7 +181,7 @@ public void printAddEventMessage(Event eventAdded) { * @param eventEdited the Event being edited */ public void printEditEventMessage(Event eventEdited) { - System.out.println("I've edited this Event: "); + System.out.println("I've edited this Event to: "); System.out.println(eventEdited.toString()); } @@ -273,7 +273,10 @@ public void printClearEventsSuccessful() { * @param conflictEvents an ArrayList of Events to be printed one by one. */ public void printConflictEvents(ArrayList conflictEvents) { - if (conflictEvents.size() == 0) { + if (conflictEvents == null) { + return; + } + if (conflictEvents.size()==0){ return; } int numPrintedEvents = 0; From c479175ec059024fba530fbefa4a25c82ed5a5ae Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 1 Nov 2020 18:06:32 +0800 Subject: [PATCH 143/299] coding style --- src/main/java/exception/NoPasswordException.java | 2 +- src/main/java/location/Location.java | 4 ++-- src/main/java/location/OnlineLocation.java | 4 ++-- src/main/java/parser/Parser.java | 8 +++++--- src/main/java/ui/UI.java | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/exception/NoPasswordException.java b/src/main/java/exception/NoPasswordException.java index 40e33f7138..263a1a3941 100644 --- a/src/main/java/exception/NoPasswordException.java +++ b/src/main/java/exception/NoPasswordException.java @@ -1,7 +1,7 @@ package exception; /** - * Represents the case when the user enter "/p" but did not enter password + * Represents the case when the user enter "/p" but did not enter password. */ public class NoPasswordException extends NuScheduleException { /** diff --git a/src/main/java/location/Location.java b/src/main/java/location/Location.java index 20c5beab2a..f70d97a3a5 100644 --- a/src/main/java/location/Location.java +++ b/src/main/java/location/Location.java @@ -54,11 +54,11 @@ public String fileString() { } @Override - public boolean equals(Object object){ + public boolean equals(Object object) { boolean isEqual = false; if (object instanceof Location) { - isEqual = (this.name.equals(((Location) object).name)) ; + isEqual = (this.name.equals(((Location) object).name)); } return isEqual; diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index e777cb4b8a..7e259c30d7 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -55,11 +55,11 @@ public String fileString() { } @Override - public boolean equals(Object object){ + public boolean equals(Object object) { boolean isEqual = false; if (object instanceof OnlineLocation) { - isEqual = (this.link.equals(((OnlineLocation) object).link)) ; + isEqual = (this.link.equals(((OnlineLocation) object).link)); } return isEqual; diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 4d7fd786e8..137cf8fd7e 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -257,7 +257,7 @@ public static Command parse(String fullCommand, LocationList locations) throws N int prefixLength = words[0].length() + words[1].length() + words[2].length(); - if (fullCommand.substring(prefixLength+2, startTimeDividerPosition-1).isBlank()) { + if (fullCommand.substring(prefixLength + 2, startTimeDividerPosition - 1).isBlank()) { throw new EmptyEventException(); } @@ -353,7 +353,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); } else { try { - if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1).isBlank()) { + if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1) + .isBlank()) { throw new NoEventLocationException(); } } catch (NullPointerException | StringIndexOutOfBoundsException e) { @@ -546,7 +547,8 @@ public static Command parse(String fullCommand, LocationList locations) throws N new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); } else { try { - if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1).isBlank()) { + if (fullCommand.substring(onlineLocationDividerPosition + 2, pwdDividerPosition - 1) + .isBlank()) { throw new NoEventLocationException(); } } catch (NullPointerException | StringIndexOutOfBoundsException e) { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 09618d5926..bd71bcd66d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -276,7 +276,7 @@ public void printConflictEvents(ArrayList conflictEvents) { if (conflictEvents == null) { return; } - if (conflictEvents.size()==0){ + if (conflictEvents.size() == 0) { return; } int numPrintedEvents = 0; From 3a6589f3213f470ba124825f82aca14787f0730f Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 18:10:18 +0800 Subject: [PATCH 144/299] Remove test messages, fix bug during conversion from assignment to other events --- src/main/java/command/EditCommand.java | 21 ++++-------- src/main/java/eventlist/EventList.java | 32 ++++++------------- .../exception/EditNoEndTimeException.java | 9 ++++++ 3 files changed, 25 insertions(+), 37 deletions(-) create mode 100644 src/main/java/exception/EditNoEndTimeException.java diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 58ba845d08..e620765c83 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -3,6 +3,7 @@ import event.Event; import eventlist.EventList; import exception.EditIndexOutOfBoundsException; +import exception.EditNoEndTimeException; import exception.EndBeforeStartEventException; import exception.NuScheduleException; import exception.UndefinedEventException; @@ -50,22 +51,12 @@ public EditCommand(int index, String[] editInformation, LocalDateTime[] startEnd */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws UndefinedEventException, WritingFileException, EndBeforeStartEventException { + throws UndefinedEventException, WritingFileException, EndBeforeStartEventException, EditNoEndTimeException { //events.editEvent(); - System.out.println("Test" + index); - System.out.println(editInformation[0] + " " + editInformation[1] + " " + editInformation[2]); - System.out.println(startEnd[0] + " " + startEnd[1]); - if (location != null) { - System.out.println(location.getName()); - } - if (onlineLocation != null) { - System.out.println(onlineLocation.toString()); - } - Event newEvent = events.editEvent(index, editInformation, startEnd, location, onlineLocation); - //ui.printConflictEvents(events.checkConflictTiming(event)); - //ui.printEditEventMessage(event); - //ui.printNumEvent(events.getSize()); - //storage.writeFile(events.getEventList()); + ui.printConflictEvents(events.checkConflictTiming(newEvent)); + ui.printEditEventMessage(newEvent); + ui.printNumEvent(events.getSize()); + storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 8c70006d41..de97b792f7 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -5,6 +5,7 @@ import event.Class; import event.Event; import event.PersonalEvent; +import exception.EditNoEndTimeException; import exception.EmptyEventListException; import exception.EndBeforeStartEventException; import exception.UndefinedEventException; @@ -72,17 +73,15 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { * @param index the index of the event being edited */ public Event editEvent(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, - OnlineLocation onlineLocation) throws EndBeforeStartEventException { + OnlineLocation onlineLocation) throws EndBeforeStartEventException, EditNoEndTimeException { assert events != null; - // create new event object with user input - System.out.println("Working as expected"); // no change in event type if (editInformation[0].isBlank()) { - // set new description editSameType(index, editInformation, startEnd, location, onlineLocation); } else { + // create new event object with user input Event newEvent = null; String newDescription; Location newLocation = null; @@ -90,7 +89,7 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star LocalDateTime start; LocalDateTime end; - if (editInformation[0].isBlank()) { + if (editInformation[1].isBlank()) { newDescription = events.get(index).getDescription(); } else { newDescription = editInformation[1]; @@ -111,19 +110,6 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star newOnlineLocation = onlineLocation; } - /* - if (onlineLocation == null) { - if (events.get(index).getLocation() != null) { - newLocation = events.get(index).getLocation(); - } - if (events.get(index).getLink() != null) { - newOnlineLocation = events.get(index).getLink(); - } - } else { - newOnlineLocation = onlineLocation; - } - */ - if (startEnd[0] == null) { start = events.get(index).getStartDateTime(); @@ -133,11 +119,16 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star if (startEnd[1] == null) { end = events.get(index).getEndDateTime(); + if (end == null && !editInformation[0].equals("assignment")) { + throw new EditNoEndTimeException(); + } } else { end = startEnd[1]; } + + switch (editInformation[0]) { - case "Assignment": + case "assignment": if (newLocation != null) { newEvent = new Assignment(newDescription, newLocation, start); } else { @@ -160,9 +151,6 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star events.set(index, newEvent); } - - - return events.get(index); } diff --git a/src/main/java/exception/EditNoEndTimeException.java b/src/main/java/exception/EditNoEndTimeException.java new file mode 100644 index 0000000000..9ac83fa301 --- /dev/null +++ b/src/main/java/exception/EditNoEndTimeException.java @@ -0,0 +1,9 @@ +package exception; + +public class EditNoEndTimeException extends NuScheduleException { + + @Override + public String getMessage() { + return "Conversion of an assignment to personalEvent/class requires a valid END time."; + } +} From 0442125e226d680446f2a5665b1759a8c435ade3 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 18:28:54 +0800 Subject: [PATCH 145/299] Fix CodeStyle issues --- src/main/java/command/EditCommand.java | 10 +++++----- src/main/java/event/Event.java | 4 +++- src/main/java/eventlist/EventList.java | 9 ++++----- src/main/java/parser/Parser.java | 17 +++++++---------- src/main/java/ui/UI.java | 3 +-- src/test/java/command/EditCommandTest.java | 12 +++--------- 6 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index e620765c83..7254f2a76f 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -30,11 +30,11 @@ public class EditCommand extends Command { public EditCommand(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) { - this.index = index; - this.editInformation = editInformation; - this.startEnd = startEnd; - this.location = location; - this.onlineLocation = onlineLocation; + this.index = index; + this.editInformation = editInformation; + this.startEnd = startEnd; + this.location = location; + this.onlineLocation = onlineLocation; } /** diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 318e7ccb33..a1840357f4 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -104,7 +104,9 @@ public Location getLocation() { return location; } - public OnlineLocation getLink() { return link; } + public OnlineLocation getLink() { + return link; + } public static Comparator descriptionComparator = (o1, o2) -> o1.getDescription().compareToIgnoreCase(o2.getDescription()); diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index de97b792f7..476db4c488 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -142,7 +142,7 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star newEvent = new Class(newDescription, newOnlineLocation, start, end); } break; - case "personalEvent": + default: if (newLocation != null) { newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); } @@ -155,9 +155,8 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star } - - - private void editSameType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) { + private void editSameType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, + OnlineLocation onlineLocation) { if (!editInformation[1].isBlank()) { events.get(index).setDescription(editInformation[1]); } @@ -177,7 +176,7 @@ private void editSameType(int index, String[] editInformation, LocalDateTime[] s if (startEnd[0] != null) { ((Assignment) events.get(index)).setBy(startEnd[0]); } - } else if (events.get(index) instanceof PersonalEvent ) { + } else if (events.get(index) instanceof PersonalEvent) { if (startEnd[0] != null) { ((PersonalEvent) events.get(index)).setAt(startEnd[0]); } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index fd5cbf1582..34fa0f1b4e 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -63,6 +63,7 @@ import ui.UI; import eventlist.EventList; + /** * This class contains one function -- parse, to call the respective command function according to the user input. */ @@ -229,7 +230,7 @@ public static Command parse(String fullCommand, LocationList locations, int size //this block will change fullCommand, but this does not affect the later block since //it either return an EditCommand, or throw an exception if (words[0].equals(EDIT)) { - if (fullCommand.length() == 4 ) { + if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); } @@ -249,11 +250,9 @@ public static Command parse(String fullCommand, LocationList locations, int size String[] editInformation = ui.readEditCommand(); LocalDateTime[] startEnd = new LocalDateTime[2]; - if(!editInformation[0].isBlank()) { - if (editInformation[0].equals(ASSIGNMENT) || editInformation[0].equals(CLASS) || - editInformation[0].equals(PERSONAL_EVENT)) { - - } else { + if (!editInformation[0].isBlank()) { + if (!editInformation[0].equals(ASSIGNMENT) && !editInformation[0].equals(CLASS) + && !editInformation[0].equals(PERSONAL_EVENT)) { throw new InvalidEditTypeException(); } } @@ -264,8 +263,7 @@ public static Command parse(String fullCommand, LocationList locations, int size if (editInformation[2].startsWith(LOCATION_MARKER)) { //editInformation[2] = editInformation[2].substring(3); location = parseLocation(editInformation[2].substring(3), locations); - } - else if (editInformation[2].startsWith(ONLINE_LOCATION_MARKER)) { + } else if (editInformation[2].startsWith(ONLINE_LOCATION_MARKER)) { int pwdPos = editInformation[2].indexOf(PASSWORD_MARKER); if (pwdPos == -1) { onlineLocation = @@ -275,8 +273,7 @@ else if (editInformation[2].startsWith(ONLINE_LOCATION_MARKER)) { new OnlineLocation(editInformation[2].substring(3, pwdPos - 1), editInformation[2].substring(pwdPos + 3)); } - } - else { + } else { throw new InvalidEditLocationException(); } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index e99824cd58..99611d275d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -39,7 +39,7 @@ public String[] readEditCommand() { String[] editInformation = new String[5]; System.out.println("Enter the fields for each component. Leave as blank if no changes are to be made."); // populate editinformation with user data - for (int i =0; i<5; i++) { + for (int i = 0; i < 5; i++) { System.out.print(editFields[i]); editInformation[i] = in.nextLine(); } @@ -47,7 +47,6 @@ public String[] readEditCommand() { } - /** * Reads the user input line by line. * diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 7642b448b5..fc3fa15daa 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -37,21 +37,15 @@ void execute_InputIsNotInteger_WrongEditFormatException() { }); } + @Test void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileException, DataFileNotFoundException { - Storage storage = new Storage("data/events.txt","data/UserInfo.txt"); + Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); LocationList locations = new LocationList(); storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { - Parser.parse("edit 1 assignment something /t 2020-02-02 20:00 /l somewhere", locations, 0) + Parser.parse("edit 1", locations, 0) .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage); }); } - - @Test - void execute_NoEditDescriptionProvided_NoEditEventDescriptionException() { - Assertions.assertThrows(NoEditEventDescriptionException.class, () -> { - Command c = Parser.parse("edit 1", null,0); - }); - } } \ No newline at end of file From cfce055cb916dd3f327cf69ee0e036cb0bb1be99 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 18:42:16 +0800 Subject: [PATCH 146/299] Add javaDocs --- src/main/java/eventlist/EventList.java | 155 ++++++++++++-------- src/main/java/parser/Parser.java | 193 ------------------------- 2 files changed, 93 insertions(+), 255 deletions(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 476db4c488..03dc894860 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -70,7 +70,12 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { /** * Edit the contents of an existing event. * - * @param index the index of the event being edited + * @param index the index of the event being edited. + * @param editInformation array containing command type and description. + * @param startEnd array containing start date and end date. + * @param location new location. + * @param onlineLocation new online location. + * @return Event new edited events */ public Event editEvent(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) throws EndBeforeStartEventException, EditNoEndTimeException { @@ -82,79 +87,105 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star editSameType(index, editInformation, startEnd, location, onlineLocation); } else { // create new event object with user input - Event newEvent = null; - String newDescription; - Location newLocation = null; - OnlineLocation newOnlineLocation = null; - LocalDateTime start; - LocalDateTime end; - - if (editInformation[1].isBlank()) { - newDescription = events.get(index).getDescription(); - } else { - newDescription = editInformation[1]; - } + editNewType(index, editInformation, startEnd, location, onlineLocation); + } - if (location == null && onlineLocation == null) { - if (events.get(index).getLocation() != null) { - newLocation = events.get(index).getLocation(); - } - if (events.get(index).getLink() != null) { - newOnlineLocation = events.get(index).getLink(); - } - } else if (location != null && onlineLocation == null) { - newLocation = location; - newOnlineLocation = null; - } else { - newLocation = null; - newOnlineLocation = onlineLocation; - } + return events.get(index); + } + /** + * Edit the contents of an existing event. Will only be called when the event type is changed. + * + * @param index the index of the event being edited. + * @param editInformation array containing command type and description. + * @param startEnd array containing start date and end date. + * @param location new location. + * @param onlineLocation new online location. + */ + private void editNewType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, + OnlineLocation onlineLocation) throws EditNoEndTimeException, + EndBeforeStartEventException { + Event newEvent = null; + String newDescription; + Location newLocation = null; + OnlineLocation newOnlineLocation = null; + LocalDateTime start; + LocalDateTime end; + + // newDescription is set to the user input if it is not null. Otherwise, set it to the original value. + if (editInformation[1].isBlank()) { + newDescription = events.get(index).getDescription(); + } else { + newDescription = editInformation[1]; + } - if (startEnd[0] == null) { - start = events.get(index).getStartDateTime(); - } else { - start = startEnd[0]; + // newLocation is set to the user input if it is not null. Otherwise, set it to the original value. + if (location == null && onlineLocation == null) { + if (events.get(index).getLocation() != null) { + newLocation = events.get(index).getLocation(); } - - if (startEnd[1] == null) { - end = events.get(index).getEndDateTime(); - if (end == null && !editInformation[0].equals("assignment")) { - throw new EditNoEndTimeException(); - } - } else { - end = startEnd[1]; + if (events.get(index).getLink() != null) { + newOnlineLocation = events.get(index).getLink(); } + } else if (location != null && onlineLocation == null) { + newLocation = location; + newOnlineLocation = null; + } else { + newLocation = null; + newOnlineLocation = onlineLocation; + } + // start and end are set to the user input if they are not null. Otherwise, set them to their original value. + if (startEnd[0] == null) { + start = events.get(index).getStartDateTime(); + } else { + start = startEnd[0]; + } - switch (editInformation[0]) { - case "assignment": - if (newLocation != null) { - newEvent = new Assignment(newDescription, newLocation, start); - } else { - newEvent = new Assignment(newDescription, newOnlineLocation, start); - } - break; - case "class": - if (newLocation != null) { - newEvent = new Class(newDescription, newLocation, start, end); - } else { - newEvent = new Class(newDescription, newOnlineLocation, start, end); - } - break; - default: - if (newLocation != null) { - newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); - } - break; + if (startEnd[1] == null) { + end = events.get(index).getEndDateTime(); + // conversion from an assignment to other type would result in an error if END date is not specified. + if (end == null && !editInformation[0].equals("assignment")) { + throw new EditNoEndTimeException(); } - events.set(index, newEvent); + } else { + end = startEnd[1]; } - return events.get(index); + // create new event object using the new fields. + switch (editInformation[0]) { + case "assignment": + if (newLocation != null) { + newEvent = new Assignment(newDescription, newLocation, start); + } else { + newEvent = new Assignment(newDescription, newOnlineLocation, start); + } + break; + case "class": + if (newLocation != null) { + newEvent = new Class(newDescription, newLocation, start, end); + } else { + newEvent = new Class(newDescription, newOnlineLocation, start, end); + } + break; + default: + if (newLocation != null) { + newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); + } + break; + } + events.set(index, newEvent); } - + /** + * Edit the contents of an existing event. Will only be called when the event type remains the same. + * + * @param index the index of the event being edited. + * @param editInformation array containing command type and description. + * @param startEnd array containing start date and end date. + * @param location new location. + * @param onlineLocation new online location. + */ private void editSameType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) { if (!editInformation[1].isBlank()) { diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 34fa0f1b4e..ee2571e599 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -227,8 +227,6 @@ public static Command parse(String fullCommand, LocationList locations, int size //this block deals with edit command - //this block will change fullCommand, but this does not affect the later block since - //it either return an EditCommand, or throw an exception if (words[0].equals(EDIT)) { if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); @@ -261,7 +259,6 @@ public static Command parse(String fullCommand, LocationList locations, int size if (!editInformation[2].isBlank()) { editInformation[2] = editInformation[2].trim(); if (editInformation[2].startsWith(LOCATION_MARKER)) { - //editInformation[2] = editInformation[2].substring(3); location = parseLocation(editInformation[2].substring(3), locations); } else if (editInformation[2].startsWith(ONLINE_LOCATION_MARKER)) { int pwdPos = editInformation[2].indexOf(PASSWORD_MARKER); @@ -306,197 +303,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } return new EditCommand(eventIndex, editInformation, startEnd, location, onlineLocation); - /* - if (fullCommand.length() == 4) { - throw new EmptyEventIndexException(); - } - if (fullCommand.substring(5).isBlank()) { - throw new EmptyEventIndexException(); - } - - try { - eventIndex = Integer.parseInt(words[1]) - 1; - } catch (NumberFormatException e) { - throw new WrongEditFormatException(); - } - - //the following part is almost the same as AddCommand, but returns EditCommand - if (words.length == 2) { - throw new NoEditEventDescriptionException(); - } - - if (startTimeDividerPosition == -1) { - throw new NoEventTimeMarkerException(); - } - - - if (words[2].equals(ASSIGNMENT) || words[2].equals(CLASS) || words[2].equals(PERSONAL_EVENT)) { - - if (locationDividerPosition == -1 && onlineLocationDividerPosition == -1) { - throw new NoEventLocationException(); - } - - int prefixLength = words[0].length() + words[1].length() + words[2].length() + 2; - - - if (fullCommand.substring(prefixLength, startTimeDividerPosition).isBlank()) { - throw new EmptyEventException(); - } - - if (locationDividerPosition != -1) { - if (fullCommand.substring(startTimeDividerPosition + 3, locationDividerPosition - 1).isBlank()) { - throw new NoEventTimeException(); - } - if (fullCommand.substring(locationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); - } - } else { - if (fullCommand.substring(startTimeDividerPosition + 3, onlineLocationDividerPosition - 1) - .isBlank()) { - throw new NoEventTimeException(); - } - if (fullCommand.substring(onlineLocationDividerPosition + 3).isBlank()) { - throw new NoEventLocationException(); - } - } - - //this deals with the event holding offline - if (locationDividerPosition != -1) { - try { - timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); - location = parseLocation(fullCommand.substring(locationDividerPosition + 3), locations); - - switch (words[2]) { - case ASSIGNMENT: - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - locationDividerPosition); - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), - eventIndex); - case CLASS: - if (endTimeDividerPosition == -1) { - throw new NoEndTimeClassException(); - } - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition); - - endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, - locationDividerPosition - 1).indexOf(SINGLE_SPACE); - - //if the user does not input the date of the ending time, by default it ends at the same - // day as the starting time - endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime)), - eventIndex); - case PERSONAL_EVENT: - if (endTimeDividerPosition == -1) { - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - locationDividerPosition); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime)), - eventIndex); - } else { - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition); - - endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, - locationDividerPosition - 1).indexOf(SINGLE_SPACE); - - //if the user does not input the date of the ending time, by default it ends at the - // same day as the starting time - endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime)), - eventIndex); - } - default: - break; - } - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - } else { - try { - timeDivider = fullCommand.substring(startTimeDividerPosition + 3).indexOf(SINGLE_SPACE); - OnlineLocation virtualLocation; - if (pwdDividerPosition == -1) { - virtualLocation = - new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3)); - } else { - virtualLocation = - new OnlineLocation(fullCommand.substring(onlineLocationDividerPosition + 3, - pwdDividerPosition - 1), fullCommand.substring(pwdDividerPosition + 3)); - } - - switch (words[2]) { - case ASSIGNMENT: - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - onlineLocationDividerPosition); - - return new EditCommand(new Assignment(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime)), - eventIndex); - case CLASS: - if (endTimeDividerPosition == -1) { - throw new NoEndTimeClassException(); - } - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition); - - endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, - onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - - endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - - return new EditCommand(new Class(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime)), - eventIndex); - case PERSONAL_EVENT: - if (endTimeDividerPosition == -1) { - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - onlineLocationDividerPosition); - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), virtualLocation, - LocalDateTime.parse(startDateTime)), - eventIndex); - } else { - startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition); - - endingTimeDivider = fullCommand.substring(endTimeDividerPosition + 3, - onlineLocationDividerPosition - 1).indexOf(SINGLE_SPACE); - - endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, - endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - - return new EditCommand(new PersonalEvent(fullCommand.substring(prefixLength + 1, - startTimeDividerPosition - 1), virtualLocation, - LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime)), - eventIndex); - } - default: - break; - } - } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { - throw new TimeFormatException(); - } - - } - } else { - throw new WrongCommandException(); - } -*/ } //this block deals with add command From 2dff4cbcf5344fccea169a839cd8ef5948f717ec Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 20:53:25 +0800 Subject: [PATCH 147/299] Fix some bugs --- docs/UserGuide.md | 27 ++++++++++++++----- src/main/java/command/SortCommand.java | 5 +++- src/main/java/event/Assignment.java | 10 +++++++ src/main/java/event/Event.java | 15 ----------- src/main/java/eventlist/EventList.java | 14 +++------- .../InvalidSortCriteriaException.java | 2 +- .../exception/NoSortCriteriaException.java | 2 +- src/main/java/parser/Parser.java | 5 ++-- src/main/java/ui/UI.java | 2 +- 9 files changed, 43 insertions(+), 39 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index a131587098..21b7ab16f9 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -93,16 +93,29 @@ Example of usage: `class CS2113 Lecture /t 2020-09-23 10:00 /e 12:00 /l LT27` ### Edit an event -Edits existing events/tasks. +With this command, you can edit existing tasks to change their description, start/end date, location and even the +event type. You can start using this command by entering `edit INDEX`, where INDEX is the number of the task you want to +edit. + +Format: `edit INDEX` + +Example: + +Next, you will be prompted to enter the new values for the 5 fields which are type, description, location start and end +date respectively. Enter your desired changes and press the `ENTER` key to go through the fields. + +If you do not wish to make any changes to any specific field, you can just leave the field empty and just press +enter. The field will then remain unchanged. -Format: `edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION` -`edit INDEX ` the later part of the format is the same as adding an event. -Example: `edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home` ### Sort events -Sorts events based on a sorting criteria. Supported criteria includes time, description and -location. +With this command, you can sort all events by either their end time or their description. When sorting by time, events +will be sorted in a chronological order. Events with an earlier end date will be sorted on top of events with later end +dates. This way, you can prioritize the events that are due soon. + +When sorting by description, the events will be sorted in alphabetical order according to their descriptions. Events +with descriptions starting with 'a' will be sorted on top of events with descriptions starting with 'z' for example. Format: `sort SORT_CRITERIA` @@ -153,7 +166,7 @@ the data of your previous AddressBook home folder. |add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| |clear|`clear` |`clear`| |done|`done INDEX` |`done 1` | -|edit|`edit INDEX EVENT_TYPE DESCRIPTION /t YYYY-MM-DD HH:MM /l LOCATION`|`edit 1 assignment cs2113t homework /t 2020-02-02 20:00 /l home`| +|edit|`edit`, then fill in each fields when prompted and press `ENTER` to move on to the next field|`edit 1` `ENTER` `class` `ENTER` `cs2113t` `ENTER` `\l school` `ENTER` `2020-10-26 19:00` `ENTER` `2020-10-26 20:00`| |help|`help`|| |list|`list`|| |locate|`locate n/EVENTNAME` |`locate n/CS2113t Tutorial`| diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index fb1555a28f..280e1d5ed5 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -1,6 +1,7 @@ package command; import eventlist.EventList; +import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -17,8 +18,10 @@ public SortCommand(String type) { } @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws WritingFileException { events.sortEvent(type); ui.printSortEventMessage(); + storage.writeFile(events.getEventList()); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index 5a8b6207e9..a2b60a8832 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -20,6 +20,7 @@ public void setBy(LocalDateTime by) { this.by = by; } + /** * Convert the information about this assignment to a string that is to be stored in a file. * @@ -49,6 +50,15 @@ public LocalDate getDate() { return LocalDate.from(by); } + /** + * Provides the date time of the class. + * + * @return the LocalDateTime get from LocalDateTime. + */ + public LocalDateTime getEndDateTime() { + return LocalDateTime.from(by); + } + /** * Prepare the string to be printed in the list. * diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index a1840357f4..e4ddac5f02 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -111,21 +111,6 @@ public OnlineLocation getLink() { public static Comparator descriptionComparator = (o1, o2) -> o1.getDescription().compareToIgnoreCase(o2.getDescription()); - public static Comparator timeComparator = (o1, o2) -> { - LocalDate o2Date = o2.getDate(); - LocalDate o1Date = o1.getDate(); - int comparator = o1Date.getYear() - o2Date.getYear(); - if (comparator == 0) { - comparator = o1Date.getMonthValue() - o2Date.getMonthValue(); - if (comparator == 0) { - comparator = o1Date.getDayOfMonth() - o2Date.getDayOfMonth(); - } - } - return comparator; - }; - - public static Comparator locationComparator = (o1, o2) -> - o1.getLocation().getName().compareToIgnoreCase(o2.getLocation().getName()); } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index f6a7961f65..edd99ae3a6 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -16,6 +16,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Comparator; import static java.util.stream.Collectors.toList; @@ -235,18 +236,11 @@ private void editSameType(int index, String[] editInformation, LocalDateTime[] s */ public void sortEvent(String type) { assert events != null; - switch (type) { - case "description": + if (type.equals("description")) { events.sort(Event.descriptionComparator); - break; - case "time": - events.sort(Event.timeComparator); - break; - default: - events.sort(Event.locationComparator); - break; + } else if (type.equals("time")) { + events.sort(Comparator.comparing(Event::getEndDateTime)); } - } /** diff --git a/src/main/java/exception/InvalidSortCriteriaException.java b/src/main/java/exception/InvalidSortCriteriaException.java index f0bc38633c..9fb7f3ed05 100644 --- a/src/main/java/exception/InvalidSortCriteriaException.java +++ b/src/main/java/exception/InvalidSortCriteriaException.java @@ -4,6 +4,6 @@ public class InvalidSortCriteriaException extends NuScheduleException { @Override public String getMessage() { return "Invalid sorting criteria given. Possible sorting criteria includes" - + " description, location and time."; + + " description and time."; } } diff --git a/src/main/java/exception/NoSortCriteriaException.java b/src/main/java/exception/NoSortCriteriaException.java index 9eeb3216bd..ff491f9315 100644 --- a/src/main/java/exception/NoSortCriteriaException.java +++ b/src/main/java/exception/NoSortCriteriaException.java @@ -4,6 +4,6 @@ public class NoSortCriteriaException extends NuScheduleException { @Override public String getMessage() { return "No sorting criteria given. Possible sorting criteria includes" - + " description, location and time."; + + " description and time."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 71be78a9a1..95247985ae 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -194,11 +194,10 @@ public static Command parse(String fullCommand, LocationList locations, int size if (fullCommand.length() == 4) { throw new NoSortCriteriaException(); } - String type = words[1]; + String type = words[1].trim().toLowerCase(); switch (type) { case "description": case "time": - case "location": return new SortCommand(type); default: throw new InvalidSortCriteriaException(); @@ -235,7 +234,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } try { - eventIndex = Integer.parseInt(words[1]) - 1; + eventIndex = Integer.parseInt(fullCommand.substring(5).trim()) - 1; } catch (NumberFormatException e) { throw new WrongEditFormatException(); } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 354706381a..77465610b3 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -41,7 +41,7 @@ public String[] readEditCommand() { // populate editinformation with user data for (int i = 0; i < 5; i++) { System.out.print(editFields[i]); - editInformation[i] = in.nextLine(); + editInformation[i] = in.nextLine().trim(); } return editInformation; } From 8a6aba375513f9957c91ce3ea542a18943eab216 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 20:59:29 +0800 Subject: [PATCH 148/299] Fix editCommand --- src/main/java/parser/Parser.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 95247985ae..7a70c4a585 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -268,11 +268,11 @@ public static Command parse(String fullCommand, LocationList locations, int size int pwdPos = editInformation[2].indexOf(PASSWORD_MARKER); if (pwdPos == -1) { onlineLocation = - new OnlineLocation(editInformation[2].substring(3)); + new OnlineLocation(editInformation[2].substring(3).trim()); } else { onlineLocation = - new OnlineLocation(editInformation[2].substring(3, pwdPos - 1), - editInformation[2].substring(pwdPos + 3)); + new OnlineLocation(editInformation[2].substring(3, pwdPos - 1).trim(), + editInformation[2].substring(pwdPos + 3).trim()); } } else { throw new InvalidEditLocationException(); From e0620dd698244098e82511b7b78ea5a698c7838d Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 22:20:06 +0800 Subject: [PATCH 149/299] Move new information parsing to edit command --- src/main/java/command/EditCommand.java | 6 ++++++ src/main/java/parser/Parser.java | 7 +------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index b44ce61da9..9bdcb6d345 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -60,4 +60,10 @@ public void execute(EventList events, LocationList locations, BusStopList busSto ui.printEditEventMessage(newEvent); storage.writeFile(events.getEventList()); } + + public static String[] newEditInformation() { + UI ui = new UI(); + String[] editInformation = ui.readEditCommand(); + return editInformation; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 7a70c4a585..9d9ab4abfc 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -63,8 +63,6 @@ import java.time.LocalDateTime; import java.time.format.DateTimeParseException; -import ui.UI; -import eventlist.EventList; /** * This class contains one function -- parse, to call the respective command function according to the user input. @@ -244,9 +242,7 @@ public static Command parse(String fullCommand, LocationList locations, int size throw new UndefinedEventException(eventIndex + 1); } - // parse and format user inputs. - UI ui = new UI(); - String[] editInformation = ui.readEditCommand(); + String[] editInformation = EditCommand.newEditInformation(); LocalDateTime[] startEnd = new LocalDateTime[2]; @@ -254,7 +250,6 @@ public static Command parse(String fullCommand, LocationList locations, int size if (!editInformation[0].equals(ASSIGNMENT) && !editInformation[0].equals(CLASS) && !editInformation[0].equals(PERSONAL_EVENT)) { throw new InvalidEditTypeException(); - } } From 2e0cdaef7cdd4945a0c5198161782b0241236fe2 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 22:59:02 +0800 Subject: [PATCH 150/299] Fix bug in editing of an event into a personal event --- src/main/java/eventlist/EventList.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index edd99ae3a6..c76fb53336 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -175,6 +175,8 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st break; default: if (newLocation != null) { + newEvent = new PersonalEvent(newDescription, newLocation, start, end); + } else { newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); } break; From 609eac2b3623cf95d1b1d5281a1477d718b11b5c Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 1 Nov 2020 23:23:10 +0800 Subject: [PATCH 151/299] Fix bug in conversion of assignment into other type --- src/main/java/eventlist/EventList.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index c76fb53336..fbe9d88553 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -142,7 +142,11 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st // start and end are set to the user input if they are not null. Otherwise, set them to their original value. if (startEnd[0] == null) { - start = events.get(index).getStartDateTime(); + if (events.get(index) instanceof Assignment) { + start = events.get(index).getEndDateTime(); + } else { + start = events.get(index).getStartDateTime(); + } } else { start = startEnd[0]; } From c813bcbdf445d4ff95e619a381c9b2effe5e267f Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 2 Nov 2020 13:20:34 +0800 Subject: [PATCH 152/299] Add location sorting --- src/main/java/event/Event.java | 22 +++++++++++++++++++ src/main/java/eventlist/EventList.java | 5 +++-- .../InvalidSortCriteriaException.java | 2 +- src/main/java/location/OnlineLocation.java | 4 ++++ src/main/java/parser/Parser.java | 1 + 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index e4ddac5f02..6edf12504a 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -111,6 +111,28 @@ public OnlineLocation getLink() { public static Comparator descriptionComparator = (o1, o2) -> o1.getDescription().compareToIgnoreCase(o2.getDescription()); + + public static Comparator locationComparator = (e1, e2) -> { + + if (e2.getLocation() == null && e1.getLocation() == null) { + if (e1.getLink() == null) { + return 1; + } + if (e2.getLink() == null) { + return -1; + } + return e1.getLink().getLink().compareToIgnoreCase(e2.getLink().getLink()); + } + + if (e1.getLocation() == null) { + return 1; + } + if (e2.getLocation() == null) { + return -1; + } + return e1.getLocation().getName().compareToIgnoreCase(e2.getLocation().getName()); + }; + } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index fbe9d88553..8684f154b1 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -85,8 +85,6 @@ public void doneEvent(int eventIndex) throws UndefinedEventException { public Event editEvent(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) throws EndBeforeStartEventException, EditNoEndTimeException { assert events != null; - - // no change in event type if (editInformation[0].isBlank()) { editSameType(index, editInformation, startEnd, location, onlineLocation); @@ -199,6 +197,7 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st */ private void editSameType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) { + // set new description if (!editInformation[1].isBlank()) { events.get(index).setDescription(editInformation[1]); } @@ -246,6 +245,8 @@ public void sortEvent(String type) { events.sort(Event.descriptionComparator); } else if (type.equals("time")) { events.sort(Comparator.comparing(Event::getEndDateTime)); + } else { + events.sort(Event.locationComparator); } } diff --git a/src/main/java/exception/InvalidSortCriteriaException.java b/src/main/java/exception/InvalidSortCriteriaException.java index 9fb7f3ed05..f77bbb449d 100644 --- a/src/main/java/exception/InvalidSortCriteriaException.java +++ b/src/main/java/exception/InvalidSortCriteriaException.java @@ -4,6 +4,6 @@ public class InvalidSortCriteriaException extends NuScheduleException { @Override public String getMessage() { return "Invalid sorting criteria given. Possible sorting criteria includes" - + " description and time."; + + " description , location and time."; } } diff --git a/src/main/java/location/OnlineLocation.java b/src/main/java/location/OnlineLocation.java index 8d078c1a71..ef0c873e6e 100644 --- a/src/main/java/location/OnlineLocation.java +++ b/src/main/java/location/OnlineLocation.java @@ -64,4 +64,8 @@ public boolean equals(Object object) { return isEqual; } + + public String getLink() { + return link; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 9d9ab4abfc..0e79a8484a 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -196,6 +196,7 @@ public static Command parse(String fullCommand, LocationList locations, int size switch (type) { case "description": case "time": + case "location": return new SortCommand(type); default: throw new InvalidSortCriteriaException(); From 7beb780c0f91ae3c13168e88041be3e709d7c5ac Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 2 Nov 2020 23:34:23 +0800 Subject: [PATCH 153/299] study time is now available. consider academics related personal event in next commit --- src/main/java/command/StudyTimeCommand.java | 2 ++ src/main/java/exception/EmptyStudyTimeDateException.java | 2 ++ src/main/java/exception/NoEventDoneException.java | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 src/main/java/command/StudyTimeCommand.java create mode 100644 src/main/java/exception/EmptyStudyTimeDateException.java create mode 100644 src/main/java/exception/NoEventDoneException.java diff --git a/src/main/java/command/StudyTimeCommand.java b/src/main/java/command/StudyTimeCommand.java new file mode 100644 index 0000000000..32bbc6e071 --- /dev/null +++ b/src/main/java/command/StudyTimeCommand.java @@ -0,0 +1,2 @@ +package command;public class StudyTimeCommand { +} diff --git a/src/main/java/exception/EmptyStudyTimeDateException.java b/src/main/java/exception/EmptyStudyTimeDateException.java new file mode 100644 index 0000000000..5bed5d5274 --- /dev/null +++ b/src/main/java/exception/EmptyStudyTimeDateException.java @@ -0,0 +1,2 @@ +package exception;public class EmptyStudyTimeDateException { +} diff --git a/src/main/java/exception/NoEventDoneException.java b/src/main/java/exception/NoEventDoneException.java new file mode 100644 index 0000000000..44c2346622 --- /dev/null +++ b/src/main/java/exception/NoEventDoneException.java @@ -0,0 +1,2 @@ +package exception;public class NoEventDoneException { +} From e3173ace4aa4f1b6a031fe3b57546e51ffb51398 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 2 Nov 2020 23:34:57 +0800 Subject: [PATCH 154/299] study time now available. consider academics related personal event in the next commit --- src/main/java/command/StudyTimeCommand.java | 46 ++++++++++++++++++- src/main/java/event/Assignment.java | 9 ++++ src/main/java/event/Class.java | 4 ++ src/main/java/event/Event.java | 7 +++ src/main/java/event/PersonalEvent.java | 4 ++ src/main/java/eventlist/EventList.java | 13 +++++- .../EmptyStudyTimeDateException.java | 16 ++++++- .../java/exception/NoEventDoneException.java | 17 ++++++- src/main/java/parser/Parser.java | 16 +++++++ src/main/java/ui/UI.java | 39 ++++++++++++++++ 10 files changed, 166 insertions(+), 5 deletions(-) diff --git a/src/main/java/command/StudyTimeCommand.java b/src/main/java/command/StudyTimeCommand.java index 32bbc6e071..a8f2f8cc93 100644 --- a/src/main/java/command/StudyTimeCommand.java +++ b/src/main/java/command/StudyTimeCommand.java @@ -1,2 +1,46 @@ -package command;public class StudyTimeCommand { +package command; + +import event.Event; +import eventlist.EventList; +import exception.NoEventDateException; +import exception.NoEventDoneException; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.time.LocalDate; +import java.util.ArrayList; + +/** + * Represents the Command for finding the study time spent on a certain day. + */ +public class StudyTimeCommand extends Command { + protected LocalDate date; + + public StudyTimeCommand(LocalDate date) { + this.date = date; + } + + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NoEventDoneException the users try to find the study time but he had not done any thing related to + * academics on that day. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NoEventDoneException { + ArrayList filteredEventList = events.filterDateDoneEventWith(date); + if (filteredEventList.size() == 0) { + throw new NoEventDoneException(); + } + ui.printStudyTime(filteredEventList,date); + } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index a2b60a8832..a506b6dd81 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -50,6 +50,15 @@ public LocalDate getDate() { return LocalDate.from(by); } + /** + * A dummy method which provides the same function as getDate(). + * + * @return the LocalDate get from LocalDateTime. + */ + public LocalDate getEndDate() { + return getDate(); + } + /** * Provides the date time of the class. * diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 70ea930701..45f77c4f69 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -63,6 +63,10 @@ public LocalDate getDate() { return LocalDate.from(at); } + public LocalDate getEndDate() { + return LocalDate.from(end); + } + /** * Provides the date time of the class. * diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index e4ddac5f02..ea67a603ca 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -53,6 +53,10 @@ public void markAsDone() { this.isDone = true; } + public boolean isDone(){ + return isDone; + } + public abstract String fileString(); /** @@ -91,6 +95,9 @@ public LocalDateTime getEndDateTime() { return null; } + public LocalDate getEndDate(){ + return null; + } /** * Provides the String variable of the description of this Event. * diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index dfe7a9de38..07b4bfa91d 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -47,6 +47,10 @@ public LocalDate getDate() { return LocalDate.from(at); } + public LocalDate getEndDate() { + return LocalDate.from(end); + } + public PersonalEvent(String description, Location location, LocalDateTime at) { super(description, location); this.at = at; diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index fbe9d88553..a1ec786008 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -142,7 +142,7 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st // start and end are set to the user input if they are not null. Otherwise, set them to their original value. if (startEnd[0] == null) { - if (events.get(index) instanceof Assignment) { + if (events.get(index) instanceof Assignment) { start = events.get(index).getEndDateTime(); } else { start = events.get(index).getStartDateTime(); @@ -307,12 +307,21 @@ public ArrayList filterWith(String filterString) { */ public ArrayList filterDateWith(LocalDate date) { ArrayList filteredEventList = (ArrayList) events.stream() - .filter(s -> s.getDate().isEqual(date)) + .filter(s -> (s.getDate().isEqual(date) || + (s.getDate().isBefore(date) && s.getEndDate().isAfter(date)))) .collect(toList()); return filteredEventList; } + public ArrayList filterDateDoneEventWith(LocalDate date) { + ArrayList filteredEventList = filterDateWith(date); + filteredEventList = (ArrayList) filteredEventList.stream() + .filter(Event::isDone) + .collect(toList()); + return filteredEventList; + } + /** * Clear the ArrayList events if it is not empty. * diff --git a/src/main/java/exception/EmptyStudyTimeDateException.java b/src/main/java/exception/EmptyStudyTimeDateException.java index 5bed5d5274..4711bae959 100644 --- a/src/main/java/exception/EmptyStudyTimeDateException.java +++ b/src/main/java/exception/EmptyStudyTimeDateException.java @@ -1,2 +1,16 @@ -package exception;public class EmptyStudyTimeDateException { +package exception; + +/** + * Represents the case when the user types studyTime but do not specify + * the date. + */ +public class EmptyStudyTimeDateException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "OOPS!!! You should enter the date that you want to know your study time."; + } } diff --git a/src/main/java/exception/NoEventDoneException.java b/src/main/java/exception/NoEventDoneException.java index 44c2346622..bd418ab705 100644 --- a/src/main/java/exception/NoEventDoneException.java +++ b/src/main/java/exception/NoEventDoneException.java @@ -1,2 +1,17 @@ -package exception;public class NoEventDoneException { +package exception; + +/** + * Represents the exception when the users try to find the study time but he had not done any thing related to academics + * on that day. + */ +public class NoEventDoneException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Seems you haven't done any thing related to academics on that day."; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 9d9ab4abfc..ca6e8a9817 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -16,6 +16,7 @@ import command.ReminderCommand; import command.SortCommand; +import command.StudyTimeCommand; import command.UserInfoCommand; import event.Assignment; import event.PersonalEvent; @@ -32,6 +33,7 @@ import exception.EmptyEventIndexException; import exception.EmptyFindDateException; import exception.EmptyFindException; +import exception.EmptyStudyTimeDateException; import exception.InvalidEditLocationException; import exception.InvalidEditTypeException; import exception.InvalidSortCriteriaException; @@ -90,6 +92,7 @@ public abstract class Parser { public static final String ONLINE_LOCATION_MARKER = "/o"; public static final String PASSWORD_MARKER = "/p"; public static final String REMIND = "reminder"; + public static final String STUDY_TIME = "studyTime"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -155,6 +158,19 @@ public static Command parse(String fullCommand, LocationList locations, int size } } + //this block deals with study time command + if (words[0].equals(STUDY_TIME)) { + if (fullCommand.substring(9).isBlank()) { + throw new EmptyStudyTimeDateException(); + } + try { + return new StudyTimeCommand(LocalDate.parse(fullCommand.substring(10))); + } catch (DateTimeParseException e) { + throw new DateFormatException(); + } + } + + //this block deals with remind command if (words[0].equals(REMIND)) { return new ReminderCommand(); } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 77465610b3..33c678c8c0 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -8,6 +8,7 @@ import locationlist.LocationList; import usercommunication.UserInfo; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Scanner; @@ -306,5 +307,43 @@ public void printConflictEvents(ArrayList conflictEvents) { public void helloWithName(String name) { System.out.println("Hi " + name + ", nice to see you."); } + + /** + * Prints the amount of time the person spent on study on that day. + * + * @param filteredEventList the list that contains events that are academic related, happen on that day, and have + * been done. + * @param date the date that the user want to know his or her study time. + */ + public void printStudyTime(ArrayList filteredEventList, LocalDate date) { + int hour = 0, minute = 0; + int startHour, endHour, startMinute, endMinute; + for (Event event : filteredEventList) { + if (event.getDate().isBefore(date)) { + startHour = 0; + startMinute = 0; + } else { + startHour = event.getStartDateTime().getHour(); + startMinute = event.getStartDateTime().getMinute(); + } + + if (event.getEndDate().isAfter(date)) { + endHour = 24; + endMinute = 0; + } else { + endHour = event.getEndDateTime().getHour(); + endMinute = event.getEndDateTime().getMinute(); + } + + hour += endHour - startHour; + minute += endMinute - startMinute; + } + + hour += minute / 60; + minute %= 60; + + System.out.println("The amount of time you spent on study on that day is:\n" + + hour + " hour(s) " + minute + " minute(s)"); + } } From d58ba1efbd10e95bcf64407be7283134bc48d396 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Wed, 4 Nov 2020 18:12:48 +0800 Subject: [PATCH 155/299] Better reminder ( considers done/ not done) --- src/main/java/command/EditCommand.java | 2 +- .../java/command/PrintFullListCommand.java | 3 +++ .../java/command/PrintLocationCommand.java | 4 +++- src/main/java/command/ReminderCommand.java | 4 ++-- src/main/java/event/Assignment.java | 2 +- src/main/java/event/Class.java | 2 +- src/main/java/event/PersonalEvent.java | 2 +- src/main/java/eventlist/EventList.java | 20 +++++++++++++++++++ src/main/java/parser/Parser.java | 7 ++----- src/main/java/ui/UI.java | 17 +++++++++++++++- 10 files changed, 50 insertions(+), 13 deletions(-) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 9bdcb6d345..9798b9abc9 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -24,7 +24,7 @@ public class EditCommand extends Command { private final int index; private final String[] editInformation; private final LocalDateTime[] startEnd; - //private final Event event; + private final Location location; private final OnlineLocation onlineLocation; diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 0984c930a5..28cab93860 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -8,6 +8,9 @@ import eventlist.EventList; import ui.UI; +/** + * Represent the command for printing everything in the list. + */ public class PrintFullListCommand extends Command { /** diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java index 2f0510b49a..0fa19ee548 100644 --- a/src/main/java/command/PrintLocationCommand.java +++ b/src/main/java/command/PrintLocationCommand.java @@ -6,7 +6,9 @@ import storage.Storage; import ui.UI; - +/** + * Represent the command for print the locations. + */ public class PrintLocationCommand extends Command { /** * Prints list of locations. diff --git a/src/main/java/command/ReminderCommand.java b/src/main/java/command/ReminderCommand.java index 0660aa7c0a..44545eb04f 100644 --- a/src/main/java/command/ReminderCommand.java +++ b/src/main/java/command/ReminderCommand.java @@ -33,10 +33,10 @@ public ReminderCommand() { @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NoEventDateRemindException { - ArrayList filteredEventList = events.filterDateWith(filterDate); + ArrayList filteredEventList = events.filterDateNotDoneWith(filterDate); if (filteredEventList.size() == 0) { throw new NoEventDateRemindException(); } - ui.printFilteredEventList(filteredEventList); + ui.printRemindEventList(filteredEventList); } } diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index a506b6dd81..c8a3c29ca8 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -86,7 +86,7 @@ public boolean equals(Object object) { boolean isEqual = false; if (object instanceof Assignment) { - isEqual = (this.description.equals(((Assignment) object).description)) + isEqual = (this.description.equalsIgnoreCase(((Assignment) object).description)) && (this.link != null ? (this.link.equals(((Assignment) object).link)) : (this.location.equals(((Assignment) object).location))) && (this.by.isEqual(((Assignment) object).by)); diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 45f77c4f69..8e5e7e467a 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -105,7 +105,7 @@ public boolean equals(Object object) { boolean isEqual = false; if (object instanceof Class) { - isEqual = (this.description.equals(((Class) object).description)) + isEqual = (this.description.equalsIgnoreCase(((Class) object).description)) && (this.link != null ? (this.link.equals(((Class) object).link)) : (this.location.equals(((Class) object).location))) && (this.at.isEqual(((Class) object).at)); diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index 07b4bfa91d..bf35df6fd2 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -123,7 +123,7 @@ public boolean equals(Object object) { boolean isEqual = false; if (object instanceof PersonalEvent) { - isEqual = (this.description.equals(((PersonalEvent) object).description)) + isEqual = (this.description.equalsIgnoreCase(((PersonalEvent) object).description)) && (this.link != null ? (this.link.equals(((PersonalEvent) object).link)) : (this.location.equals(((PersonalEvent) object).location))) && (this.at.isEqual(((PersonalEvent) object).at)); diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index a1ec786008..370c0121d7 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -314,6 +314,12 @@ public ArrayList filterDateWith(LocalDate date) { return filteredEventList; } + /** + * Filter the event list to find the events happen on the date that have been done already. + * + * @param date the date that the user is looking for. + * @return he filtered list. this list contains only the events that satisfy the requirement. + */ public ArrayList filterDateDoneEventWith(LocalDate date) { ArrayList filteredEventList = filterDateWith(date); filteredEventList = (ArrayList) filteredEventList.stream() @@ -386,4 +392,18 @@ public ArrayList checkConflictTiming(Event event) { } return filteredEventList; } + + /** + * Filter the event list to find the events happen on the date that have not been done yet. + * + * @param date the date that the user is looking for. + * @return he filtered list. this list contains only the events that satisfy the requirement. + */ + public ArrayList filterDateNotDoneWith(LocalDate date) { + ArrayList filteredEventList = filterDateWith(date); + filteredEventList = (ArrayList) filteredEventList.stream() + .filter(s -> ((!s.isDone())&&(s.getEndDate().isEqual(date)))) + .collect(toList()); + return filteredEventList; + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index ca6e8a9817..df3505cc19 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -118,6 +118,8 @@ public static Command parse(String fullCommand, LocationList locations, int size return new HelpCommand(); case CLEAR: return new ClearCommand(); + case REMIND: + return new ReminderCommand(); default: break; } @@ -170,11 +172,6 @@ public static Command parse(String fullCommand, LocationList locations, int size } } - //this block deals with remind command - if (words[0].equals(REMIND)) { - return new ReminderCommand(); - } - int eventIndex; //this block deals with done command diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 33c678c8c0..a319d98ac6 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -108,7 +108,7 @@ public void printEventList(ArrayList events) throws EmptyEventListExcepti public void printFilteredEventList(ArrayList events) { int numPrintedEvents = 0; - System.out.println(" Here are the matching Events in your list:"); + System.out.println("Here are the matching Events in your list:"); for (Event event : events) { numPrintedEvents++; System.out.println(numPrintedEvents + ". " + event.toString()); @@ -345,5 +345,20 @@ public void printStudyTime(ArrayList filteredEventList, LocalDate date) { System.out.println("The amount of time you spent on study on that day is:\n" + hour + " hour(s) " + minute + " minute(s)"); } + + /** + * Print the Not Done events today. + * + * @param filteredEventList The events that are not done today. + */ + public void printRemindEventList(ArrayList filteredEventList) { + int numPrintedEvents = 0; + + System.out.println("Here are the events that you should do today:"); + for (Event event : filteredEventList) { + numPrintedEvents++; + System.out.println(numPrintedEvents + ". " + event.toString()); + } + } } From 03dc8bee4d82500c227d99d028d8cd14d5ef55ec Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 5 Nov 2020 00:40:30 +0800 Subject: [PATCH 156/299] Added selfStudy class --- src/main/java/command/StudyTimeCommand.java | 4 +- src/main/java/event/Event.java | 5 +- src/main/java/event/PersonalEvent.java | 8 ++- src/main/java/event/SelfStudy.java | 27 ++++++++++ src/main/java/eventlist/EventList.java | 13 ++--- src/main/java/parser/Parser.java | 57 +++++++++++++++------ src/main/java/ui/UI.java | 8 ++- 7 files changed, 93 insertions(+), 29 deletions(-) create mode 100644 src/main/java/event/SelfStudy.java diff --git a/src/main/java/command/StudyTimeCommand.java b/src/main/java/command/StudyTimeCommand.java index a8f2f8cc93..77daa1fddb 100644 --- a/src/main/java/command/StudyTimeCommand.java +++ b/src/main/java/command/StudyTimeCommand.java @@ -37,10 +37,10 @@ public StudyTimeCommand(LocalDate date) { @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NoEventDoneException { - ArrayList filteredEventList = events.filterDateDoneEventWith(date); + ArrayList filteredEventList = events.filterDateDoneAcademicEventWith(date); if (filteredEventList.size() == 0) { throw new NoEventDoneException(); } - ui.printStudyTime(filteredEventList,date); + ui.printStudyTime(filteredEventList, date); } } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index ea67a603ca..f62055b918 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -53,7 +53,7 @@ public void markAsDone() { this.isDone = true; } - public boolean isDone(){ + public boolean isDone() { return isDone; } @@ -95,9 +95,10 @@ public LocalDateTime getEndDateTime() { return null; } - public LocalDate getEndDate(){ + public LocalDate getEndDate() { return null; } + /** * Provides the String variable of the description of this Event. * diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index bf35df6fd2..ead6df9f53 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -48,7 +48,11 @@ public LocalDate getDate() { } public LocalDate getEndDate() { - return LocalDate.from(end); + try { + return LocalDate.from(end); + } catch (NullPointerException e) { + return LocalDate.from(at); + } } public PersonalEvent(String description, Location location, LocalDateTime at) { @@ -99,7 +103,7 @@ public LocalDateTime getEndDateTime() { try { return LocalDateTime.from(end); } catch (NullPointerException e) { - return null; + return LocalDateTime.from(at); } } diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java new file mode 100644 index 0000000000..4fdea1babb --- /dev/null +++ b/src/main/java/event/SelfStudy.java @@ -0,0 +1,27 @@ +package event; + +import exception.EndBeforeStartEventException; +import location.Location; +import location.OnlineLocation; + +import java.time.LocalDateTime; + +public class SelfStudy extends PersonalEvent { + public SelfStudy(String description, Location location, LocalDateTime at) { + super(description, location, at); + } + + public SelfStudy(String description, Location location, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { + super(description, location, at, end); + } + + public SelfStudy(String description, OnlineLocation location, LocalDateTime at) { + super(description, location, at); + } + + public SelfStudy(String description, OnlineLocation location, LocalDateTime at, LocalDateTime end) + throws EndBeforeStartEventException { + super(description, location, at, end); + } +} diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 370c0121d7..63095d5938 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -5,6 +5,7 @@ import event.Class; import event.Event; import event.PersonalEvent; +import event.SelfStudy; import exception.EditNoEndTimeException; import exception.EmptyEventListException; import exception.ExistingEventInListException; @@ -307,23 +308,23 @@ public ArrayList filterWith(String filterString) { */ public ArrayList filterDateWith(LocalDate date) { ArrayList filteredEventList = (ArrayList) events.stream() - .filter(s -> (s.getDate().isEqual(date) || - (s.getDate().isBefore(date) && s.getEndDate().isAfter(date)))) + .filter(s -> (s.getDate().isEqual(date) + || (s.getDate().isBefore(date) && s.getEndDate().isAfter(date)))) .collect(toList()); return filteredEventList; } /** - * Filter the event list to find the events happen on the date that have been done already. + * Filter the event list to find the academic related events happen on the date that have been done already. * * @param date the date that the user is looking for. * @return he filtered list. this list contains only the events that satisfy the requirement. */ - public ArrayList filterDateDoneEventWith(LocalDate date) { + public ArrayList filterDateDoneAcademicEventWith(LocalDate date) { ArrayList filteredEventList = filterDateWith(date); filteredEventList = (ArrayList) filteredEventList.stream() - .filter(Event::isDone) + .filter(s -> (s.isDone() && ((s instanceof Class) || (s instanceof SelfStudy)))) .collect(toList()); return filteredEventList; } @@ -402,7 +403,7 @@ public ArrayList checkConflictTiming(Event event) { public ArrayList filterDateNotDoneWith(LocalDate date) { ArrayList filteredEventList = filterDateWith(date); filteredEventList = (ArrayList) filteredEventList.stream() - .filter(s -> ((!s.isDone())&&(s.getEndDate().isEqual(date)))) + .filter(s -> ((!s.isDone()) && (s.getEndDate().isEqual(date)))) .collect(toList()); return filteredEventList; } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index df3505cc19..290be5cafc 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -23,6 +23,7 @@ import event.Assignment; import event.Class; import event.PersonalEvent; +import event.SelfStudy; import exception.DateFormatException; import exception.DeleteNumberFormatException; import exception.DoneNumberFormatException; @@ -93,6 +94,7 @@ public abstract class Parser { public static final String PASSWORD_MARKER = "/p"; public static final String REMIND = "reminder"; public static final String STUDY_TIME = "studyTime"; + public static final String SELF_STUDY = "selfStudy"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -324,7 +326,8 @@ public static Command parse(String fullCommand, LocationList locations, int size //we shall check that the user input is not meant for any other command beforehand //because the default block will throw an exception. // i.e. when this block is entered, the parser will not go to any other blocks - if (words[0].equals(ASSIGNMENT) || words[0].equals(CLASS) || words[0].equals(PERSONAL_EVENT)) { + if (words[0].equalsIgnoreCase(ASSIGNMENT) || words[0].equalsIgnoreCase(CLASS) + || words[0].equalsIgnoreCase(PERSONAL_EVENT) || words[0].equalsIgnoreCase(SELF_STUDY)) { if (fullCommand.substring(words[0].length()).isBlank()) { throw new EmptyEventException(); } @@ -396,11 +399,17 @@ public static Command parse(String fullCommand, LocationList locations, int size startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: + case SELF_STUDY: if (endTimeDividerPosition == -1) { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + } else { + return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + } } else { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition); @@ -412,10 +421,15 @@ public static Command parse(String fullCommand, LocationList locations, int size // day as the starting time endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime))); + if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } else { + return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } } default: break; @@ -475,12 +489,19 @@ public static Command parse(String fullCommand, LocationList locations, int size startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: + case SELF_STUDY: if (endTimeDividerPosition == -1) { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, - LocalDateTime.parse(startDateTime))); + if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime))); + } else { + return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime))); + } } else { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition); @@ -490,11 +511,17 @@ public static Command parse(String fullCommand, LocationList locations, int size endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, - LocalDateTime.parse(startDateTime), - LocalDateTime.parse(endDateTime))); + if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { + return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } else { + return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, + startTimeDividerPosition - 1), virtualLocation, + LocalDateTime.parse(startDateTime), + LocalDateTime.parse(endDateTime))); + } } default: break; diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index a319d98ac6..74edb4675c 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -316,8 +316,12 @@ public void helloWithName(String name) { * @param date the date that the user want to know his or her study time. */ public void printStudyTime(ArrayList filteredEventList, LocalDate date) { - int hour = 0, minute = 0; - int startHour, endHour, startMinute, endMinute; + int hour = 0; + int minute = 0; + int startHour; + int endHour; + int startMinute; + int endMinute; for (Event event : filteredEventList) { if (event.getDate().isBefore(date)) { startHour = 0; From 71c050c938e69f257d16bff86809f3024ea39506 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Thu, 5 Nov 2020 09:08:26 +0800 Subject: [PATCH 157/299] Allow edits for new class --- src/main/java/command/EditCommand.java | 3 +- src/main/java/event/SelfStudy.java | 3 ++ src/main/java/eventlist/EventList.java | 51 ++++++++++++++++--- .../exception/EditNoEndTimeException.java | 2 +- .../exception/InvalidEditTypeException.java | 2 +- src/main/java/parser/Parser.java | 22 ++++---- 6 files changed, 63 insertions(+), 20 deletions(-) diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 9798b9abc9..4a50e80d00 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -63,7 +63,6 @@ public void execute(EventList events, LocationList locations, BusStopList busSto public static String[] newEditInformation() { UI ui = new UI(); - String[] editInformation = ui.readEditCommand(); - return editInformation; + return ui.readEditCommand(); } } diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java index 4fdea1babb..b9a42f4417 100644 --- a/src/main/java/event/SelfStudy.java +++ b/src/main/java/event/SelfStudy.java @@ -5,6 +5,7 @@ import location.OnlineLocation; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; public class SelfStudy extends PersonalEvent { public SelfStudy(String description, Location location, LocalDateTime at) { @@ -24,4 +25,6 @@ public SelfStudy(String description, OnlineLocation location, LocalDateTime at, throws EndBeforeStartEventException { super(description, location, at, end); } + + } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 064091b9b2..84ae910f7f 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -109,12 +109,12 @@ public Event editEvent(int index, String[] editInformation, LocalDateTime[] star private void editNewType(int index, String[] editInformation, LocalDateTime[] startEnd, Location location, OnlineLocation onlineLocation) throws EditNoEndTimeException, EndBeforeStartEventException { - Event newEvent = null; + Event newEvent; String newDescription; Location newLocation = null; OnlineLocation newOnlineLocation = null; LocalDateTime start; - LocalDateTime end; + LocalDateTime end = null; // newDescription is set to the user input if it is not null. Otherwise, set it to the original value. if (editInformation[1].isBlank()) { @@ -152,8 +152,11 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st if (startEnd[1] == null) { end = events.get(index).getEndDateTime(); + if (editInformation[4].equals("nil")) { + end = null; + } // conversion from an assignment to other type would result in an error if END date is not specified. - if (end == null && !editInformation[0].equals("assignment")) { + if (end == null && editInformation[0].equals("class")) { throw new EditNoEndTimeException(); } } else { @@ -176,11 +179,34 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st newEvent = new Class(newDescription, newOnlineLocation, start, end); } break; + case "selfStudy": + if (newLocation != null) { + if (end == null) { + newEvent = new SelfStudy(newDescription, newLocation, start); + } else { + newEvent = new SelfStudy(newDescription, newLocation, start, end); + } + } else { + if (end == null) { + newEvent = new SelfStudy(newDescription, newOnlineLocation, start); + } else { + newEvent = new SelfStudy(newDescription, newOnlineLocation, start, end); + } + } + break; default: if (newLocation != null) { - newEvent = new PersonalEvent(newDescription, newLocation, start, end); + if (end == null) { + newEvent = new PersonalEvent(newDescription, newLocation, start); + } else { + newEvent = new PersonalEvent(newDescription, newLocation, start, end); + } } else { - newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); + if (end == null) { + newEvent = new PersonalEvent(newDescription, newOnlineLocation, start); + } else { + newEvent = new PersonalEvent(newDescription, newOnlineLocation, start, end); + } } break; } @@ -225,13 +251,26 @@ private void editSameType(int index, String[] editInformation, LocalDateTime[] s if (startEnd[1] != null) { ((PersonalEvent) events.get(index)).setEnd(startEnd[1]); } + if (editInformation[4].equals("nil")) { + ((PersonalEvent) events.get(index)).setEnd(null); + } } else if (events.get(index) instanceof Class) { if (startEnd[0] != null) { ((Class) events.get(index)).setAt(startEnd[0]); } - if (startEnd[0] != null) { + if (startEnd[1] != null) { ((Class) events.get(index)).setEnd(startEnd[1]); } + } else if (events.get(index) instanceof SelfStudy) { + if (startEnd[0] != null) { + ((SelfStudy) events.get(index)).setAt(startEnd[0]); + } + if (startEnd[1] != null) { + ((SelfStudy) events.get(index)).setEnd(startEnd[1]); + } + if (editInformation[4].equals("nil")) { + ((SelfStudy) events.get(index)).setEnd(null); + } } } diff --git a/src/main/java/exception/EditNoEndTimeException.java b/src/main/java/exception/EditNoEndTimeException.java index 9ac83fa301..3213f7166b 100644 --- a/src/main/java/exception/EditNoEndTimeException.java +++ b/src/main/java/exception/EditNoEndTimeException.java @@ -4,6 +4,6 @@ public class EditNoEndTimeException extends NuScheduleException { @Override public String getMessage() { - return "Conversion of an assignment to personalEvent/class requires a valid END time."; + return "This conversion requires a valid END time."; } } diff --git a/src/main/java/exception/InvalidEditTypeException.java b/src/main/java/exception/InvalidEditTypeException.java index b43f6cf82e..d2f93017ce 100644 --- a/src/main/java/exception/InvalidEditTypeException.java +++ b/src/main/java/exception/InvalidEditTypeException.java @@ -3,6 +3,6 @@ public class InvalidEditTypeException extends InvalidCommandException { @Override public String getMessage() { - return "Event type can only be personalevent, class or assignment."; + return "Event type can only be personalevent, class , selfStudy or assignment."; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 13f6e6c35e..8825807751 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -264,7 +264,7 @@ public static Command parse(String fullCommand, LocationList locations, int size if (!editInformation[0].isBlank()) { if (!editInformation[0].equals(ASSIGNMENT) && !editInformation[0].equals(CLASS) - && !editInformation[0].equals(PERSONAL_EVENT)) { + && !editInformation[0].equals(PERSONAL_EVENT) && !editInformation[0].equals(SELF_STUDY)) { throw new InvalidEditTypeException(); } } @@ -307,15 +307,17 @@ public static Command parse(String fullCommand, LocationList locations, int size } if (!editInformation[4].isBlank()) { - if (editInformation[4].length() != 16) { - throw new TimeFormatException(); - } - startDateTime = editInformation[4].substring(0, 10) + "T" + editInformation[4].substring(11); - try { - startEnd[1] = LocalDateTime.parse(startDateTime); - //System.out.println(startEnd[1]); - } catch (DateTimeException e) { - throw new TimeFormatException(); + if (!editInformation[4].equals("nil")) { + if (editInformation[4].length() != 16) { + throw new TimeFormatException(); + } + startDateTime = editInformation[4].substring(0, 10) + "T" + editInformation[4].substring(11); + try { + startEnd[1] = LocalDateTime.parse(startDateTime); + //System.out.println(startEnd[1]); + } catch (DateTimeException e) { + throw new TimeFormatException(); + } } } From 85089bcceeee9cbdda99c35b998cfb59fb1ec7b1 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Thu, 5 Nov 2020 14:24:18 +0800 Subject: [PATCH 158/299] update Storage of self study. use equalsIgnorecase instead of equals to allow more valid input --- src/main/java/event/SelfStudy.java | 23 +++++++++ src/main/java/eventlist/EventList.java | 6 +-- src/main/java/locationlist/BusStopList.java | 2 +- src/main/java/locationlist/LocationList.java | 4 +- src/main/java/parser/Parser.java | 20 ++++---- src/main/java/storage/Storage.java | 53 ++++++++++++++++++-- 6 files changed, 87 insertions(+), 21 deletions(-) diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java index 4fdea1babb..1a232fd44b 100644 --- a/src/main/java/event/SelfStudy.java +++ b/src/main/java/event/SelfStudy.java @@ -5,6 +5,7 @@ import location.OnlineLocation; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; public class SelfStudy extends PersonalEvent { public SelfStudy(String description, Location location, LocalDateTime at) { @@ -24,4 +25,26 @@ public SelfStudy(String description, OnlineLocation location, LocalDateTime at, throws EndBeforeStartEventException { super(description, location, at, end); } + + /** + * Prepare the string to be printed in the list. + * + * @return the string required in a certain format. + */ + public String toString() { + return "[S]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + + (end != null ? "\n(end at: " + end.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : + "") + + "\n" + (location != null ? location : link); + } + + /** + * Convert the information about this self study event to a string that is to be stored in a file. + * + * @return the result string to be stored + */ + public String fileString() { + return "S//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (end != null ? end + "//" : "") + + (location != null ? location.fileString() : link.fileString()); + } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 63095d5938..59f7fdcbdd 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -155,7 +155,7 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st if (startEnd[1] == null) { end = events.get(index).getEndDateTime(); // conversion from an assignment to other type would result in an error if END date is not specified. - if (end == null && !editInformation[0].equals("assignment")) { + if (end == null && !editInformation[0].equalsIgnoreCase("assignment")) { throw new EditNoEndTimeException(); } } else { @@ -243,9 +243,9 @@ private void editSameType(int index, String[] editInformation, LocalDateTime[] s */ public void sortEvent(String type) { assert events != null; - if (type.equals("description")) { + if (type.equalsIgnoreCase("description")) { events.sort(Event.descriptionComparator); - } else if (type.equals("time")) { + } else if (type.equalsIgnoreCase("time")) { events.sort(Comparator.comparing(Event::getEndDateTime)); } } diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index 94759b933f..384e71a7e7 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -19,7 +19,7 @@ public ArrayList getBusStopList() { */ public boolean checkExistence(String name) { for (BusStop busStop : busStopList) { - if (name.equals(busStop.getName())) { + if (name.equalsIgnoreCase(busStop.getName())) { return true; } } diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index ef615dffd3..808c3d4e47 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -20,7 +20,7 @@ public ArrayList getLocationList() { */ public boolean checkValidLocation(String name) { for (Location location : locationList) { - if (name.equals(location.getName())) { + if (name.equalsIgnoreCase(location.getName())) { return true; } } @@ -37,7 +37,7 @@ public Location findLocation(String name) { Location locationReturned = null; int i = 0; for (Location location : locationList) { - if (name.equals(location.getName())) { + if (name.equalsIgnoreCase(location.getName())) { locationReturned = locationList.get(i); return locationReturned; } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 290be5cafc..536f797c64 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -138,12 +138,12 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with locate command - if (words[0].equals(LOCATE_EVENT)) { + if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { return new LocateCommand(words[1]); } //this block deals with find command - if (words[0].equals(EVENT_FIND)) { + if (words[0].equalsIgnoreCase(EVENT_FIND)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyFindException(); } @@ -151,7 +151,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with find date command - if (words[0].equals(EVENT_FIND_DATE)) { + if (words[0].equalsIgnoreCase(EVENT_FIND_DATE)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyFindDateException(); } @@ -163,7 +163,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with study time command - if (words[0].equals(STUDY_TIME)) { + if (words[0].equalsIgnoreCase(STUDY_TIME)) { if (fullCommand.substring(9).isBlank()) { throw new EmptyStudyTimeDateException(); } @@ -177,7 +177,7 @@ public static Command parse(String fullCommand, LocationList locations, int size int eventIndex; //this block deals with done command - if (words[0].equals(EVENT_DONE)) { + if (words[0].equalsIgnoreCase(EVENT_DONE)) { if (fullCommand.substring(4).isBlank()) { throw new EmptyDoneException(); } @@ -190,7 +190,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with delete command - if (words[0].equals(EVENT_DELETE)) { + if (words[0].equalsIgnoreCase(EVENT_DELETE)) { if (fullCommand.substring(6).isBlank()) { throw new EmptyDeleteException(); } @@ -203,7 +203,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with sorting - if (words[0].equals(SORT)) { + if (words[0].equalsIgnoreCase(SORT)) { if (fullCommand.length() == 4) { throw new NoSortCriteriaException(); } @@ -241,7 +241,7 @@ public static Command parse(String fullCommand, LocationList locations, int size //this block deals with edit command - if (words[0].equals(EDIT)) { + if (words[0].equalsIgnoreCase(EDIT)) { if (fullCommand.length() == 4) { throw new EmptyEventIndexException(); } @@ -262,8 +262,8 @@ public static Command parse(String fullCommand, LocationList locations, int size if (!editInformation[0].isBlank()) { - if (!editInformation[0].equals(ASSIGNMENT) && !editInformation[0].equals(CLASS) - && !editInformation[0].equals(PERSONAL_EVENT)) { + if (!editInformation[0].equalsIgnoreCase(ASSIGNMENT) && !editInformation[0].equalsIgnoreCase(CLASS) + && !editInformation[0].equalsIgnoreCase(PERSONAL_EVENT)) { throw new InvalidEditTypeException(); } } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index d13bbc8eed..003a82f50b 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -4,6 +4,7 @@ import event.Assignment; import event.Class; import event.PersonalEvent; +import event.SelfStudy; import exception.CreatingFileException; import exception.DataFileNotFoundException; import exception.EndBeforeStartEventException; @@ -146,7 +147,7 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti switch (words[0]) { case "C": try { - if (!words[5].equals(ONLINE)) { + if (!words[5].equalsIgnoreCase(ONLINE)) { events.add(new Class(words[2], Parser.parseLocation(words[5], locations), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { @@ -167,7 +168,7 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti break; case "A": try { - if (!words[4].equals(ONLINE)) { + if (!words[4].equalsIgnoreCase(ONLINE)) { events.add(new Assignment(words[2], Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); } else { @@ -189,7 +190,7 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti LocalDateTime.parse(words[3]))); break; case 6: - if (!words[4].equals(ONLINE)) { + if (!words[4].equalsIgnoreCase(ONLINE)) { events.add(new PersonalEvent(words[2], Parser.parseLocation(words[5], locations), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { @@ -198,10 +199,10 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti } break; case 7: - if (words[4].equals(ONLINE)) { + if (words[4].equalsIgnoreCase(ONLINE)) { events.add(new PersonalEvent(words[2], new OnlineLocation(words[5], words[6]), LocalDateTime.parse(words[3]))); - } else if (words[5].equals(ONLINE)) { + } else if (words[5].equalsIgnoreCase(ONLINE)) { events.add(new PersonalEvent(words[2], new OnlineLocation(words[6]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { @@ -216,6 +217,48 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti throw new LoadingException(); } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { + throw new LoadingException(); + } + if (Integer.parseInt(words[1]) == 1) { + events.get(events.size() - 1).markAsDone(); + } + break; + case "E": + try { + switch (words.length) { + case 5: + events.add(new SelfStudy(words[2], Parser.parseLocation(words[4], locations), + LocalDateTime.parse(words[3]))); + break; + case 6: + if (!words[4].equalsIgnoreCase(ONLINE)) { + events.add(new SelfStudy(words[2], Parser.parseLocation(words[5], locations), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else { + events.add(new SelfStudy(words[2], new OnlineLocation(words[5]), + LocalDateTime.parse(words[3]))); + } + break; + case 7: + if (words[4].equalsIgnoreCase(ONLINE)) { + events.add(new SelfStudy(words[2], new OnlineLocation(words[5], words[6]), + LocalDateTime.parse(words[3]))); + } else if (words[5].equalsIgnoreCase(ONLINE)) { + events.add(new SelfStudy(words[2], new OnlineLocation(words[6]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + } else { + throw new LoadingException(); + } + break; + case 8: + events.add(new SelfStudy(words[2], new OnlineLocation(words[6], words[7]), + LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); + break; + default: + throw new LoadingException(); + } + } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { throw new LoadingException(); } From e003b8238e8c3a83760dc0b31867a8aa9d8d1f54 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Sat, 7 Nov 2020 16:23:30 +0800 Subject: [PATCH 159/299] load location data without text file --- src/main/java/NuSchedule.java | 8 ++--- src/main/java/storage/Storage.java | 49 ++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 47e1b4f54d..c54d4adb6b 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -27,14 +27,12 @@ public NuSchedule(String... filePaths) { busStops = new BusStopList(); locations = new LocationList(); - //busStops.loadBusStopData(); - //locations.loadLocationData(); + storage.loadBusStopData(busStops.getBusStopList()); + storage.loadLocationData(locations.getLocationList()); try { storage = new Storage(filePaths); - storage.loadBusStopData(busStops.getBusStopList()); - storage.loadLocationData(locations.getLocationList()); - } catch (CreatingFileException | DataFileNotFoundException e) { + } catch (CreatingFileException e) { ui.showError(e.getMessage()); } try { diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 003a82f50b..2d91f6c26b 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -284,14 +284,8 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti * * @param busStopList ArrayList of BusStops in BusStopList */ - public void loadBusStopData(ArrayList busStopList) throws DataFileNotFoundException { - File f = new File("./data/bus_stops.txt"); - Scanner s; - try { - s = new Scanner(f); - } catch (FileNotFoundException e) { - throw new DataFileNotFoundException(f.getName()); - } + public void loadBusStopData(ArrayList busStopList) { + Scanner s = new Scanner(busStopData); while (s.hasNext()) { String input = s.nextLine(); @@ -308,14 +302,8 @@ public void loadBusStopData(ArrayList busStopList) throws DataFileNotFo * * @param locationList ArrayList of Locations in LocationList */ - public void loadLocationData(ArrayList locationList) throws DataFileNotFoundException { - File f = new File("./data/locations.txt"); - Scanner s; - try { - s = new Scanner(f); - } catch (FileNotFoundException e) { - throw new DataFileNotFoundException(f.getName()); - } + public void loadLocationData(ArrayList locationList) { + Scanner s = new Scanner(locationData); while (s.hasNext()) { String input = s.nextLine(); @@ -346,4 +334,33 @@ public void loadLocationData(ArrayList locationList) throws DataFileNo } } } + + private String locationData = "BLK/EA/EA\n" + + "BLK/EA/Information Technology\n" + + "BLK/E1A/EA\n" + + "BLK/EW1/EA,Information Technology\n" + + "BLK/EW1A/EA\n" + + "BLK/E2/EA\n" + + "BLK/E3/EA,Raffles Hall\n" + + "BLK/E3A/EA\n" + + "BLK/E4/Information Technology\n" + + "BLK/E4A/Opp YIH,YIH\n" + + "BLK/E5/Information Technology\n" + + "BLK/E5A/Raffles Hall\n" + + "BLK/E6/Opp YIH,YIH\n" + + "BLK/IT/Information Technology,CLB\n" + + "H/Raffles Hall/Raffles Hall,NUS Museum\n" + + "L/LT1/E2\n" + + "L/LT2/E2\n" + + "L/LT6/E4\n" + + "L/LT7/EA\n" + + "L/LT7A/EA"; + + private String busStopData = "EA:B2,C,BTC2\n" + + "Raffles Hall:B2,C\n" + + "Information Technology:A2,B1,B2,D1\n" + + "Opp YIH:A2,B1,B2,D1\n" + + "NUS Museum:A2,BTC1,BTC2,C,D1,D2\n" + + "YIH:A1,B1,BTC1,D1\n" + + "CLB:A1,B1,BTC1,D1"; } From ca85fd5591ab4b8620389b8f3dfe430d97ce25b2 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Sat, 7 Nov 2020 17:09:48 +0800 Subject: [PATCH 160/299] fixed locate command --- src/main/java/NuSchedule.java | 6 ++-- .../exception/EmptyLocationException.java | 15 ++++++++ src/main/java/locationlist/BusStopList.java | 2 +- src/main/java/parser/Parser.java | 34 +++---------------- 4 files changed, 23 insertions(+), 34 deletions(-) create mode 100644 src/main/java/exception/EmptyLocationException.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index c54d4adb6b..a586e6ff12 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -27,8 +27,6 @@ public NuSchedule(String... filePaths) { busStops = new BusStopList(); locations = new LocationList(); - storage.loadBusStopData(busStops.getBusStopList()); - storage.loadLocationData(locations.getLocationList()); try { storage = new Storage(filePaths); @@ -43,8 +41,8 @@ public NuSchedule(String... filePaths) { events = new EventList(); } - - + storage.loadBusStopData(busStops.getBusStopList()); + storage.loadLocationData(locations.getLocationList()); // ui.printBusStopList(busStops.getBusStopList()); // ui.printLocationList(locations.getLocationList()); diff --git a/src/main/java/exception/EmptyLocationException.java b/src/main/java/exception/EmptyLocationException.java new file mode 100644 index 0000000000..14a6a7a3a9 --- /dev/null +++ b/src/main/java/exception/EmptyLocationException.java @@ -0,0 +1,15 @@ +package exception; + +/** + * Represents class when user does not input anything for locate command. + */ +public class EmptyLocationException extends InvalidCommandException { + /** + * Prepare message to be printed when the exception occur. + * @return + */ + @Override + public String getMessage() { + return "Please input a valid location."; + } +} diff --git a/src/main/java/locationlist/BusStopList.java b/src/main/java/locationlist/BusStopList.java index 384e71a7e7..94759b933f 100644 --- a/src/main/java/locationlist/BusStopList.java +++ b/src/main/java/locationlist/BusStopList.java @@ -19,7 +19,7 @@ public ArrayList getBusStopList() { */ public boolean checkExistence(String name) { for (BusStop busStop : busStopList) { - if (name.equalsIgnoreCase(busStop.getName())) { + if (name.equals(busStop.getName())) { return true; } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 98d4d112d2..72692204fe 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -24,34 +24,8 @@ import event.Class; import event.PersonalEvent; import event.SelfStudy; -import exception.DateFormatException; -import exception.DeleteNumberFormatException; -import exception.DoneNumberFormatException; -import exception.DoubleTimeAssignmentException; -import exception.EmptyDeleteException; -import exception.EmptyDoneException; -import exception.EmptyEventException; -import exception.EmptyEventIndexException; -import exception.EmptyFindDateException; -import exception.EmptyFindException; -import exception.EmptyStudyTimeDateException; -import exception.InvalidEditLocationException; -import exception.InvalidEditTypeException; -import exception.InvalidSortCriteriaException; -import exception.NoEndTimeClassException; -import exception.NoEditEventDescriptionException; - -import exception.NoEventLocationException; -import exception.NoEventTimeException; -import exception.NoEventTimeMarkerException; -import exception.NoPasswordException; -import exception.NoSortCriteriaException; -import exception.NuScheduleException; -import exception.TimeFormatException; -import exception.UndefinedEventException; -import exception.UnknownErrorException; -import exception.WrongCommandException; -import exception.WrongEditFormatException; +import exception.*; + import location.Building; import location.Hostel; import location.LectureTheatre; @@ -138,8 +112,10 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with locate command - if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { + if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length>1) { return new LocateCommand(words[1]); + } else if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length==1) { + throw new EmptyLocationException(); } //this block deals with find command From 3c101ce12096945593e3f805a446fad27f361b65 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Sat, 7 Nov 2020 17:28:15 +0800 Subject: [PATCH 161/299] fixed coding style --- src/main/java/parser/Parser.java | 34 ++++++++++++++++--- src/main/java/storage/Storage.java | 54 +++++++++++++++--------------- 2 files changed, 56 insertions(+), 32 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 72692204fe..3dd50cf37e 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -20,11 +20,35 @@ import command.UserInfoCommand; import event.Assignment; import event.PersonalEvent; -import event.Assignment; import event.Class; -import event.PersonalEvent; import event.SelfStudy; -import exception.*; +import exception.EmptyLocationException; +import exception.NuScheduleException; +import exception.EmptyFindException; +import exception.EmptyFindDateException; +import exception.DateFormatException; +import exception.EmptyStudyTimeDateException; +import exception.EmptyDoneException; +import exception.DoneNumberFormatException; +import exception.EmptyDeleteException; +import exception.DeleteNumberFormatException; +import exception.NoSortCriteriaException; +import exception.InvalidSortCriteriaException; +import exception.WrongEditFormatException; +import exception.EmptyEventIndexException; +import exception.UndefinedEventException; +import exception.InvalidEditTypeException; +import exception.InvalidEditLocationException; +import exception.TimeFormatException; +import exception.EmptyEventException; +import exception.NoEventTimeMarkerException; +import exception.NoEventLocationException; +import exception.NoEventTimeException; +import exception.DoubleTimeAssignmentException; +import exception.NoEndTimeClassException; +import exception.WrongCommandException; +import exception.UnknownErrorException; +import exception.NoPasswordException; import location.Building; import location.Hostel; @@ -112,9 +136,9 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with locate command - if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length>1) { + if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length > 1) { return new LocateCommand(words[1]); - } else if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length==1) { + } else if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length == 1) { throw new EmptyLocationException(); } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 2d91f6c26b..662eafc9b9 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -335,32 +335,32 @@ public void loadLocationData(ArrayList locationList) { } } - private String locationData = "BLK/EA/EA\n" + - "BLK/EA/Information Technology\n" + - "BLK/E1A/EA\n" + - "BLK/EW1/EA,Information Technology\n" + - "BLK/EW1A/EA\n" + - "BLK/E2/EA\n" + - "BLK/E3/EA,Raffles Hall\n" + - "BLK/E3A/EA\n" + - "BLK/E4/Information Technology\n" + - "BLK/E4A/Opp YIH,YIH\n" + - "BLK/E5/Information Technology\n" + - "BLK/E5A/Raffles Hall\n" + - "BLK/E6/Opp YIH,YIH\n" + - "BLK/IT/Information Technology,CLB\n" + - "H/Raffles Hall/Raffles Hall,NUS Museum\n" + - "L/LT1/E2\n" + - "L/LT2/E2\n" + - "L/LT6/E4\n" + - "L/LT7/EA\n" + - "L/LT7A/EA"; + private String locationData = "BLK/EA/EA\n" + + "BLK/EA/Information Technology\n" + + "BLK/E1A/EA\n" + + "BLK/EW1/EA,Information Technology\n" + + "BLK/EW1A/EA\n" + + "BLK/E2/EA\n" + + "BLK/E3/EA,Raffles Hall\n" + + "BLK/E3A/EA\n" + + "BLK/E4/Information Technology\n" + + "BLK/E4A/Opp YIH,YIH\n" + + "BLK/E5/Information Technology\n" + + "BLK/E5A/Raffles Hall\n" + + "BLK/E6/Opp YIH,YIH\n" + + "BLK/IT/Information Technology,CLB\n" + + "H/Raffles Hall/Raffles Hall,NUS Museum\n" + + "L/LT1/E2\n" + + "L/LT2/E2\n" + + "L/LT6/E4\n" + + "L/LT7/EA\n" + + "L/LT7A/EA"; - private String busStopData = "EA:B2,C,BTC2\n" + - "Raffles Hall:B2,C\n" + - "Information Technology:A2,B1,B2,D1\n" + - "Opp YIH:A2,B1,B2,D1\n" + - "NUS Museum:A2,BTC1,BTC2,C,D1,D2\n" + - "YIH:A1,B1,BTC1,D1\n" + - "CLB:A1,B1,BTC1,D1"; + private String busStopData = "EA:B2,C,BTC2\n" + + "Raffles Hall:B2,C\n" + + "Information Technology:A2,B1,B2,D1\n" + + "Opp YIH:A2,B1,B2,D1\n" + + "NUS Museum:A2,BTC1,BTC2,C,D1,D2\n" + + "YIH:A1,B1,BTC1,D1\n" + + "CLB:A1,B1,BTC1,D1"; } From 0a8acbeae0dbdc8067db935bc63c9cdf4b47f25a Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 8 Nov 2020 02:19:52 +0800 Subject: [PATCH 162/299] implement Repeat Command --- src/main/java/command/RepeatCommand.java | 58 ++++++++++++ src/main/java/event/Assignment.java | 27 +++++- src/main/java/event/Class.java | 24 ++++- src/main/java/event/Event.java | 17 ++++ src/main/java/event/PersonalEvent.java | 23 ++++- src/main/java/event/SelfStudy.java | 13 +++ src/main/java/eventlist/EventList.java | 94 ++++++++++++++++--- .../java/exception/EmptyRepeatException.java | 17 ++++ .../exception/InvalidNumWeekException.java | 16 ++++ .../java/exception/NoClassWeekException.java | 16 ++++ .../java/exception/NoRepeatWeekException.java | 16 ++++ .../exception/RepeatIndexFormatException.java | 17 ++++ src/main/java/parser/Parser.java | 90 ++++++++++++------ src/main/java/storage/Storage.java | 38 ++++---- src/main/java/ui/UI.java | 18 ++++ 15 files changed, 412 insertions(+), 72 deletions(-) create mode 100644 src/main/java/command/RepeatCommand.java create mode 100644 src/main/java/exception/EmptyRepeatException.java create mode 100644 src/main/java/exception/InvalidNumWeekException.java create mode 100644 src/main/java/exception/NoClassWeekException.java create mode 100644 src/main/java/exception/NoRepeatWeekException.java create mode 100644 src/main/java/exception/RepeatIndexFormatException.java diff --git a/src/main/java/command/RepeatCommand.java b/src/main/java/command/RepeatCommand.java new file mode 100644 index 0000000000..d7c9103386 --- /dev/null +++ b/src/main/java/command/RepeatCommand.java @@ -0,0 +1,58 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import exception.UndefinedEventException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +/** + * Represents the command to repeat certain classes for several weeks. + */ +public class RepeatCommand extends Command { + private int index; + private int numWeeks;//repeat the event for numWeeks weeks + private boolean isAllClasses = false; + + public RepeatCommand(int index, int numWeeks) { + this.index = index; + this.numWeeks = numWeeks; + } + + public RepeatCommand(boolean isAllClasses, int numWeeks) { + this.isAllClasses = true; + this.numWeeks = numWeeks; + } + + /** + * Execute the command based on the input. If the input is "repeat INDEX NUMBER_OF_WEEKS", repeat the event for + * NUMBER_OF_WEEKS. + * If the input is "repeat all NUMBER_OF_WEEKS", repeat all the classes happening in the current week for + * NUMBER_OF_WEEKS. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws NuScheduleException the exceptions can happen in this program, + * to be handled based on the specific exception. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NuScheduleException { + if (isAllClasses) { + events.repeatAllClasses(numWeeks); + ui.printRepeatAll(numWeeks); + } else if (index < 0 || index >= events.getSize()) { + throw new UndefinedEventException(index + 1); + } else { + events.repeatEvent(index, numWeeks); + ui.printRepeatEvent(numWeeks); + } + + storage.writeFile(events.getEventList()); + } +} diff --git a/src/main/java/event/Assignment.java b/src/main/java/event/Assignment.java index c8a3c29ca8..f26f3fdca9 100644 --- a/src/main/java/event/Assignment.java +++ b/src/main/java/event/Assignment.java @@ -16,11 +16,6 @@ public class Assignment extends Event { protected LocalDateTime by; - public void setBy(LocalDateTime by) { - this.by = by; - } - - /** * Convert the information about this assignment to a string that is to be stored in a file. * @@ -68,6 +63,10 @@ public LocalDateTime getEndDateTime() { return LocalDateTime.from(by); } + public LocalDateTime getStartDateTime() { + return getEndDateTime(); + } + /** * Prepare the string to be printed in the list. * @@ -94,4 +93,22 @@ public boolean equals(Object object) { return isEqual; } + + public void setDateTime(LocalDateTime newDateTime) { + this.by = newDateTime; + } + + /** + * A copy constructor. + * + * @param anotherAssignment the assignment to be copied. + */ + public Assignment(Assignment anotherAssignment) { + super(anotherAssignment); + this.by = anotherAssignment.by; + } + + public Assignment clone() { + return new Assignment(this); + } } diff --git a/src/main/java/event/Class.java b/src/main/java/event/Class.java index 8e5e7e467a..dfbbc8c266 100644 --- a/src/main/java/event/Class.java +++ b/src/main/java/event/Class.java @@ -16,14 +16,15 @@ public class Class extends Event { protected LocalDateTime at; protected LocalDateTime end; - public void setEnd(LocalDateTime end) { - this.end = end; + public void setDateTime(LocalDateTime at) { + this.at = at; } - public void setAt(LocalDateTime at) { - this.at = at; + public void setEndDateTime(LocalDateTime end) { + this.end = end; } + public Class(String description, Location location, LocalDateTime at, LocalDateTime end) throws EndBeforeStartEventException { super(description, location); @@ -113,4 +114,19 @@ public boolean equals(Object object) { return isEqual; } + + /** + * A copy constructor. + * + * @param anotherClass the class to be copied. + */ + public Class(Class anotherClass) { + super(anotherClass); + this.at = anotherClass.at; + this.end = anotherClass.end; + } + + public Class clone() { + return new Class(this); + } } diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 2a643cec48..7f6828c3f3 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -22,6 +22,17 @@ public abstract class Event { protected Location location = null; protected OnlineLocation link = null; + public Event(Event anotherEvent) { + this.description = anotherEvent.description; + this.isDone = anotherEvent.isDone; + this.location = anotherEvent.location; + this.link = anotherEvent.link; + } + + public Event clone() { + return null; + } + public void setDescription(String description) { this.description = description; } @@ -99,6 +110,12 @@ public LocalDate getEndDate() { return null; } + public void setDateTime(LocalDateTime newDateTime) { + } + + public void setEndDateTime(LocalDateTime newDateTime) { + } + /** * Provides the String variable of the description of this Event. * diff --git a/src/main/java/event/PersonalEvent.java b/src/main/java/event/PersonalEvent.java index ead6df9f53..cd4e09700b 100644 --- a/src/main/java/event/PersonalEvent.java +++ b/src/main/java/event/PersonalEvent.java @@ -20,12 +20,14 @@ public class PersonalEvent extends Event { protected LocalDateTime at; protected LocalDateTime end = null; - public void setAt(LocalDateTime at) { + public void setDateTime(LocalDateTime at) { this.at = at; } - public void setEnd(LocalDateTime end) { - this.end = end; + public void setEndDateTime(LocalDateTime end) { + if (this.end != null) { + this.end = end; + } } /** @@ -135,4 +137,19 @@ public boolean equals(Object object) { return isEqual; } + + /** + * A copy constructor. + * + * @param anotherPersonalEvent the PersonalEvent to be copied. + */ + public PersonalEvent(PersonalEvent anotherPersonalEvent) { + super(anotherPersonalEvent); + this.at = anotherPersonalEvent.at; + this.end = anotherPersonalEvent.end; + } + + public PersonalEvent clone() { + return new PersonalEvent(this); + } } diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java index 1a232fd44b..2b353c4d2a 100644 --- a/src/main/java/event/SelfStudy.java +++ b/src/main/java/event/SelfStudy.java @@ -47,4 +47,17 @@ public String fileString() { return "S//" + (isDone ? 1 : 0) + "//" + description + "//" + at + "//" + (end != null ? end + "//" : "") + (location != null ? location.fileString() : link.fileString()); } + + /** + * A copy constructor; + * + * @param anotherSelfStudy the SelfStudy to be copied. + */ + public SelfStudy(SelfStudy anotherSelfStudy) { + super(anotherSelfStudy); + } + + public SelfStudy clone() { + return new SelfStudy(this); + } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 7c33d8138d..8fd297a43b 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -10,14 +10,19 @@ import exception.EmptyEventListException; import exception.ExistingEventInListException; import exception.EndBeforeStartEventException; +import exception.NoClassWeekException; import exception.UndefinedEventException; import location.Location; import location.OnlineLocation; +import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; +import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.Comparator; +import java.util.Locale; import static java.util.stream.Collectors.toList; @@ -175,9 +180,12 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st } break; case "class": + assert end != null; if (newLocation != null) { + newEvent = new Class(newDescription, newLocation, start, end); } else { + newEvent = new Class(newDescription, newOnlineLocation, start, end); } break; @@ -244,34 +252,34 @@ private void editSameType(int index, String[] editInformation, LocalDateTime[] s // set new time if (events.get(index) instanceof Assignment) { if (startEnd[0] != null) { - ((Assignment) events.get(index)).setBy(startEnd[0]); + (events.get(index)).setDateTime(startEnd[0]); } } else if (events.get(index) instanceof PersonalEvent) { if (startEnd[0] != null) { - ((PersonalEvent) events.get(index)).setAt(startEnd[0]); + (events.get(index)).setDateTime(startEnd[0]); } if (startEnd[1] != null) { - ((PersonalEvent) events.get(index)).setEnd(startEnd[1]); + (events.get(index)).setEndDateTime(startEnd[1]); } - if (editInformation[4].equals("nil")) { - ((PersonalEvent) events.get(index)).setEnd(null); + if (editInformation[4].equalsIgnoreCase("nil")) { + (events.get(index)).setEndDateTime(null); } } else if (events.get(index) instanceof Class) { if (startEnd[0] != null) { - ((Class) events.get(index)).setAt(startEnd[0]); + (events.get(index)).setDateTime(startEnd[0]); } if (startEnd[1] != null) { - ((Class) events.get(index)).setEnd(startEnd[1]); + (events.get(index)).setEndDateTime(startEnd[1]); } } else if (events.get(index) instanceof SelfStudy) { if (startEnd[0] != null) { - ((SelfStudy) events.get(index)).setAt(startEnd[0]); + (events.get(index)).setDateTime(startEnd[0]); } if (startEnd[1] != null) { - ((SelfStudy) events.get(index)).setEnd(startEnd[1]); + (events.get(index)).setEndDateTime(startEnd[1]); } - if (editInformation[4].equals("nil")) { - ((SelfStudy) events.get(index)).setEnd(null); + if (editInformation[4].equalsIgnoreCase("nil")) { + (events.get(index)).setEndDateTime(null); } } } @@ -449,4 +457,68 @@ public ArrayList filterDateNotDoneWith(LocalDate date) { .collect(toList()); return filteredEventList; } + + /** + * Add all the classes happening in the current week for several weeks into the list. + * + * @param numWeeks number of weeks to repeat. + */ + public void repeatAllClasses(int numWeeks) throws NoClassWeekException { + ArrayList filteredClassList; + //the filtered list are all the classes happening in the current week + try { + filteredClassList = (ArrayList) events.stream() + .filter(s -> ((isLocalDateInTheSameWeek(s.getDate(), LocalDate.now())) + && s instanceof Class)) + .collect(toList()); + } catch (NullPointerException e) { + throw new NoClassWeekException(); + } + + ArrayList copyList = new ArrayList<>(); + + for (int i = 1; i <= numWeeks; i++) { + filteredClassList.forEach(s -> copyList.add(s.clone())); + int finalI = i; + copyList.forEach(s -> s.setDateTime(s.getStartDateTime().plusWeeks(finalI))); + copyList.forEach(s -> s.setEndDateTime(s.getEndDateTime().plusWeeks(finalI))); + events.addAll(copyList); + copyList.clear(); + } + } + + //@@author Sunil Katti-reused + //Reused from https://stackoverflow.com/a/56246095 with minor modifications + + /** + * Check whether 2 dates are of the same week. + * + * @param date1 the first date + * @param date2 the second date + * @return ture if they are of the same week. false otherwise. + */ + public static boolean isLocalDateInTheSameWeek(LocalDate date1, LocalDate date2) { + assert date1 != null; + assert date2 != null; + LocalDate mondayBeforeDate1 = date1.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate sundayAfterDate1 = date1.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + return ((date2.isEqual(mondayBeforeDate1) || date2.isAfter(mondayBeforeDate1)) + && (date2.isEqual(sundayAfterDate1) || date2.isBefore(sundayAfterDate1))); + } + //@@author + + /** + * Add the selected event for several weeks into the list. + * + * @param numWeeks number of weeks to repeat. + */ + public void repeatEvent(int eventIndex, int numWeeks) { + Event newEvent; + for (int i = 1; i <= numWeeks; i++) { + newEvent = events.get(eventIndex).clone(); + newEvent.setDateTime(newEvent.getStartDateTime().plusWeeks(i)); + newEvent.setEndDateTime(newEvent.getEndDateTime().plusWeeks(i)); + events.add(newEvent); + } + } } diff --git a/src/main/java/exception/EmptyRepeatException.java b/src/main/java/exception/EmptyRepeatException.java new file mode 100644 index 0000000000..d4075f18ef --- /dev/null +++ b/src/main/java/exception/EmptyRepeatException.java @@ -0,0 +1,17 @@ +package exception; + +/** + * Represents when the user call repeat with about argument provided. + */ +public class EmptyRepeatException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Please enter the arguments for repeat in the following format.\n " + + "\"repeat all NUMBER_OF_WEEKS\" OR \"repeat EVENT_INDEX NUMBER_OF_WEEKS\""; + } +} diff --git a/src/main/java/exception/InvalidNumWeekException.java b/src/main/java/exception/InvalidNumWeekException.java new file mode 100644 index 0000000000..c288c04f5a --- /dev/null +++ b/src/main/java/exception/InvalidNumWeekException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the user call repeat but the number of weeks is entered in a wrong format. + */ +public class InvalidNumWeekException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Please enter the number of weeks to repeat. This should be an integer between 1 and 50."; + } +} diff --git a/src/main/java/exception/NoClassWeekException.java b/src/main/java/exception/NoClassWeekException.java new file mode 100644 index 0000000000..c8d766a6c8 --- /dev/null +++ b/src/main/java/exception/NoClassWeekException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represent the case when the user type repeat all but there is no class in the current week. + */ +public class NoClassWeekException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Seems there is no class in this week."; + } +} diff --git a/src/main/java/exception/NoRepeatWeekException.java b/src/main/java/exception/NoRepeatWeekException.java new file mode 100644 index 0000000000..1e8007a7aa --- /dev/null +++ b/src/main/java/exception/NoRepeatWeekException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represent when the user call repeat without provide the number of weeks to repeat. + */ +public class NoRepeatWeekException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "Please enter the number of weeks to repeat the selected event(s)."; + } +} diff --git a/src/main/java/exception/RepeatIndexFormatException.java b/src/main/java/exception/RepeatIndexFormatException.java new file mode 100644 index 0000000000..2dee630b8a --- /dev/null +++ b/src/main/java/exception/RepeatIndexFormatException.java @@ -0,0 +1,17 @@ +package exception; + +/** + * Represent the user call repeat but provide an invalid index for the event. + */ +public class RepeatIndexFormatException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "If you want to selected an event to repeat, enter the index of it. If you want to repeat all class " + + "in the current week, enter \"all\"."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 98d4d112d2..5e9e414d0a 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -14,13 +14,11 @@ import command.PrintFullListCommand; import command.PrintLocationCommand; import command.ReminderCommand; +import command.RepeatCommand; import command.SortCommand; - import command.StudyTimeCommand; import command.UserInfoCommand; import event.Assignment; -import event.PersonalEvent; -import event.Assignment; import event.Class; import event.PersonalEvent; import event.SelfStudy; @@ -34,19 +32,21 @@ import exception.EmptyEventIndexException; import exception.EmptyFindDateException; import exception.EmptyFindException; +import exception.EmptyRepeatException; import exception.EmptyStudyTimeDateException; import exception.InvalidEditLocationException; import exception.InvalidEditTypeException; +import exception.InvalidNumWeekException; import exception.InvalidSortCriteriaException; import exception.NoEndTimeClassException; -import exception.NoEditEventDescriptionException; - import exception.NoEventLocationException; import exception.NoEventTimeException; import exception.NoEventTimeMarkerException; import exception.NoPasswordException; +import exception.NoRepeatWeekException; import exception.NoSortCriteriaException; import exception.NuScheduleException; +import exception.RepeatIndexFormatException; import exception.TimeFormatException; import exception.UndefinedEventException; import exception.UnknownErrorException; @@ -95,6 +95,8 @@ public abstract class Parser { public static final String REMIND = "reminder"; public static final String STUDY_TIME = "studyTime"; public static final String SELF_STUDY = "selfStudy"; + public static final String REPEAT = "repeat"; + public static final String ALL = "all"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -218,11 +220,41 @@ public static Command parse(String fullCommand, LocationList locations, int size } } + //this block deals with repeat Events + if (words[0].equalsIgnoreCase(REPEAT)) { + if (fullCommand.substring(6).isBlank()) { + throw new EmptyRepeatException(); + } + fullCommand = fullCommand.substring(6).trim(); + String[] controlWords = fullCommand.split(SINGLE_SPACE); + if (fullCommand.substring(controlWords[0].length()).isBlank()) { + throw new NoRepeatWeekException(); + } + int numWeeks; + try { + numWeeks = Integer.parseInt(fullCommand.substring(controlWords[0].length()).trim()); + } catch (NumberFormatException e) { + throw new InvalidNumWeekException(); + } + if (numWeeks <= 0 || numWeeks > 50) { + throw new InvalidNumWeekException(); + } + if (controlWords[0].equalsIgnoreCase(ALL)) { + return new RepeatCommand(true, numWeeks); + } else { + int index; + try { + index = Integer.parseInt(controlWords[0]); + } catch (NumberFormatException e) { + throw new RepeatIndexFormatException(); + } + return new RepeatCommand(index-1, numWeeks); + } + } //these variables are used by either Edit or Add //the position of /t int startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); - ; //the position of the space when the user enters a date time in the format yyyy-mm-dd HH:mm int timeDivider; //the position of /et @@ -327,6 +359,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } + String description; //this block deals with add command //we shall check that the user input is not meant for any other command beforehand //because the default block will throw an exception. @@ -366,7 +399,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } } - + description = fullCommand.substring(words[0].length() + 1, startTimeDividerPosition - 1).trim(); //this deals with the event holding offline if (locationDividerPosition != -1) { @@ -382,8 +415,8 @@ public static Command parse(String fullCommand, LocationList locations, int size startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); - return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + return new AddCommand(new Assignment(description, location, + LocalDateTime.parse(startDateTime))); case CLASS: if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); @@ -400,8 +433,7 @@ public static Command parse(String fullCommand, LocationList locations, int size endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, locationDividerPosition, endingTimeDivider); - return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + return new AddCommand(new Class(description, location, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: case SELF_STUDY: @@ -409,11 +441,11 @@ public static Command parse(String fullCommand, LocationList locations, int size startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, locationDividerPosition); if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + return new AddCommand(new PersonalEvent(description, location, + LocalDateTime.parse(startDateTime))); } else { - return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime))); + return new AddCommand(new SelfStudy(description, location, + LocalDateTime.parse(startDateTime))); } } else { startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, @@ -427,12 +459,12 @@ public static Command parse(String fullCommand, LocationList locations, int size endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, locationDividerPosition, endingTimeDivider); if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + return new AddCommand(new PersonalEvent(description, location, + LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); } else { - return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), location, LocalDateTime.parse(startDateTime), + return new AddCommand(new SelfStudy(description, location, + LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); } } @@ -475,8 +507,8 @@ public static Command parse(String fullCommand, LocationList locations, int size startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); - return new AddCommand(new Assignment(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime))); + return new AddCommand(new Assignment(description, virtualLocation, + LocalDateTime.parse(startDateTime))); case CLASS: if (endTimeDividerPosition == -1) { throw new NoEndTimeClassException(); @@ -490,8 +522,8 @@ public static Command parse(String fullCommand, LocationList locations, int size endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); - return new AddCommand(new Class(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, LocalDateTime.parse(startDateTime), + return new AddCommand(new Class(description, virtualLocation, + LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); case PERSONAL_EVENT: case SELF_STUDY: @@ -499,12 +531,10 @@ public static Command parse(String fullCommand, LocationList locations, int size startDateTime = getStartDateTime(fullCommand, startTimeDividerPosition, timeDivider, onlineLocationDividerPosition); if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, + return new AddCommand(new PersonalEvent(description, virtualLocation, LocalDateTime.parse(startDateTime))); } else { - return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, + return new AddCommand(new SelfStudy(description, virtualLocation, LocalDateTime.parse(startDateTime))); } } else { @@ -517,13 +547,11 @@ public static Command parse(String fullCommand, LocationList locations, int size endDateTime = getEndDateTime(fullCommand, startTimeDividerPosition, timeDivider, endTimeDividerPosition, onlineLocationDividerPosition, endingTimeDivider); if (words[0].equalsIgnoreCase(PERSONAL_EVENT)) { - return new AddCommand(new PersonalEvent(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, + return new AddCommand(new PersonalEvent(description, virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); } else { - return new AddCommand(new SelfStudy(fullCommand.substring(words[0].length() + 1, - startTimeDividerPosition - 1), virtualLocation, + return new AddCommand(new SelfStudy(description, virtualLocation, LocalDateTime.parse(startDateTime), LocalDateTime.parse(endDateTime))); } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 003a82f50b..c7cf6b7ecb 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -140,22 +140,24 @@ public UserInfo loadUserInfo() throws LoadingException { public ArrayList loadEvents(LocationList locations) throws LoadingException, EndBeforeStartEventException { ArrayList events = new ArrayList<>(); File dataFile = new File(filePaths[0]); + String description; try { Scanner s = new Scanner(dataFile); while (s.hasNext()) { String[] words = s.nextLine().split(REGEX_IN_FILE); + description = words[2].trim(); switch (words[0]) { case "C": try { if (!words[5].equalsIgnoreCase(ONLINE)) { - events.add(new Class(words[2], Parser.parseLocation(words[5], locations), + events.add(new Class(description, Parser.parseLocation(words[5], locations), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { if (words.length >= 8) { - events.add(new Class(words[2], new OnlineLocation(words[6], words[7]), + events.add(new Class(description, new OnlineLocation(words[6], words[7]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { - events.add(new Class(words[2], new OnlineLocation(words[6]), + events.add(new Class(description, new OnlineLocation(words[6]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } } @@ -169,10 +171,10 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti case "A": try { if (!words[4].equalsIgnoreCase(ONLINE)) { - events.add(new Assignment(words[2], Parser.parseLocation(words[4], locations), + events.add(new Assignment(description, Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); } else { - events.add(new Assignment(words[2], new OnlineLocation(words[5]), + events.add(new Assignment(description, new OnlineLocation(words[5]), LocalDateTime.parse(words[3]))); } } catch (DateTimeParseException | StringIndexOutOfBoundsException e) { @@ -186,31 +188,31 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti try { switch (words.length) { case 5: - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[4], locations), + events.add(new PersonalEvent(description, Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); break; case 6: if (!words[4].equalsIgnoreCase(ONLINE)) { - events.add(new PersonalEvent(words[2], Parser.parseLocation(words[5], locations), + events.add(new PersonalEvent(description, Parser.parseLocation(words[5], locations), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { - events.add(new PersonalEvent(words[2], new OnlineLocation(words[5]), + events.add(new PersonalEvent(description, new OnlineLocation(words[5]), LocalDateTime.parse(words[3]))); } break; case 7: if (words[4].equalsIgnoreCase(ONLINE)) { - events.add(new PersonalEvent(words[2], new OnlineLocation(words[5], words[6]), + events.add(new PersonalEvent(description, new OnlineLocation(words[5], words[6]), LocalDateTime.parse(words[3]))); } else if (words[5].equalsIgnoreCase(ONLINE)) { - events.add(new PersonalEvent(words[2], new OnlineLocation(words[6]), + events.add(new PersonalEvent(description, new OnlineLocation(words[6]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { throw new LoadingException(); } break; case 8: - events.add(new PersonalEvent(words[2], new OnlineLocation(words[6], words[7]), + events.add(new PersonalEvent(description, new OnlineLocation(words[6], words[7]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); break; default: @@ -224,35 +226,35 @@ public ArrayList loadEvents(LocationList locations) throws LoadingExcepti events.get(events.size() - 1).markAsDone(); } break; - case "E": + case "S": try { switch (words.length) { case 5: - events.add(new SelfStudy(words[2], Parser.parseLocation(words[4], locations), + events.add(new SelfStudy(description, Parser.parseLocation(words[4], locations), LocalDateTime.parse(words[3]))); break; case 6: if (!words[4].equalsIgnoreCase(ONLINE)) { - events.add(new SelfStudy(words[2], Parser.parseLocation(words[5], locations), + events.add(new SelfStudy(description, Parser.parseLocation(words[5], locations), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { - events.add(new SelfStudy(words[2], new OnlineLocation(words[5]), + events.add(new SelfStudy(description, new OnlineLocation(words[5]), LocalDateTime.parse(words[3]))); } break; case 7: if (words[4].equalsIgnoreCase(ONLINE)) { - events.add(new SelfStudy(words[2], new OnlineLocation(words[5], words[6]), + events.add(new SelfStudy(description, new OnlineLocation(words[5], words[6]), LocalDateTime.parse(words[3]))); } else if (words[5].equalsIgnoreCase(ONLINE)) { - events.add(new SelfStudy(words[2], new OnlineLocation(words[6]), + events.add(new SelfStudy(description, new OnlineLocation(words[6]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); } else { throw new LoadingException(); } break; case 8: - events.add(new SelfStudy(words[2], new OnlineLocation(words[6], words[7]), + events.add(new SelfStudy(description, new OnlineLocation(words[6], words[7]), LocalDateTime.parse(words[3]), LocalDateTime.parse(words[4]))); break; default: diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 74edb4675c..31317ebe43 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -364,5 +364,23 @@ public void printRemindEventList(ArrayList filteredEventList) { System.out.println(numPrintedEvents + ". " + event.toString()); } } + + /** + * Print the success message after repeating all classes in the current week. + * + * @param numWeeks number of weeks to repeat. + */ + public void printRepeatAll(int numWeeks) { + System.out.println("All classes in this week have been repeated for " + numWeeks + " weeks."); + } + + /** + * Print the success message after repeating the selected event. + * + * @param numWeeks number of weeks to repeat. + */ + public void printRepeatEvent(int numWeeks) { + System.out.println("The selected event has been repeated for " + numWeeks + " weeks."); + } } From 8e8506a595fe5ebd6d82a4a792af5882c9f51e22 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Sun, 8 Nov 2020 02:23:55 +0800 Subject: [PATCH 163/299] coding style --- src/main/java/event/SelfStudy.java | 2 +- src/main/java/parser/Parser.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java index 2b353c4d2a..e94b1b171c 100644 --- a/src/main/java/event/SelfStudy.java +++ b/src/main/java/event/SelfStudy.java @@ -49,7 +49,7 @@ public String fileString() { } /** - * A copy constructor; + * A copy constructor. * * @param anotherSelfStudy the SelfStudy to be copied. */ diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 5e9e414d0a..ddcf083f8d 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -248,7 +248,7 @@ public static Command parse(String fullCommand, LocationList locations, int size } catch (NumberFormatException e) { throw new RepeatIndexFormatException(); } - return new RepeatCommand(index-1, numWeeks); + return new RepeatCommand(index - 1, numWeeks); } } From 9fd818e786be82c1fe7388f0a8815d8d03184477 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 15:15:19 +0800 Subject: [PATCH 164/299] Add more testing for EditCommand --- src/main/java/eventlist/EventList.java | 1 - src/main/java/ui/UI.java | 3 +- src/test/java/command/EditCommandTest.java | 106 +++++++++++++++++++++ 3 files changed, 107 insertions(+), 3 deletions(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index cb5382fa81..9d9fc6b52a 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -160,7 +160,6 @@ private void editNewType(int index, String[] editInformation, LocalDateTime[] st if (editInformation[4].equals("nil")) { end = null; } - // conversion from an assignment to other type would result in an error if END date is not specified. if (end == null && editInformation[0].equalsIgnoreCase("class")) { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 31317ebe43..452a6cc5ca 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -195,8 +195,7 @@ public void printAddEventMessage(Event eventAdded) { * @param eventEdited the Event being edited */ public void printEditEventMessage(Event eventEdited) { - System.out.println("I've edited this Event to: "); - System.out.println(eventEdited.toString()); + System.out.println("The event has been edited."); } /** diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index fc3fa15daa..b93fc1e817 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -1,13 +1,20 @@ package command; +import event.Assignment; +import event.Class; +import event.PersonalEvent; +import event.SelfStudy; import eventlist.EventList; import exception.CreatingFileException; import exception.DataFileNotFoundException; import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; +import exception.ExistingEventInListException; import exception.NoEditEventDescriptionException; import exception.UndefinedEventException; import exception.WrongEditFormatException; +import location.Location; +import location.OnlineLocation; import locationlist.BusStopList; import locationlist.LocationList; import org.junit.jupiter.api.Assertions; @@ -18,6 +25,10 @@ import storage.Storage; import ui.UI; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.time.LocalDateTime; + class EditCommandTest { @@ -48,4 +59,99 @@ void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileExcep .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage); }); } + + @Test + void execute_ChangeDescription_DescriptionChanged() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + LocalDateTime by = LocalDateTime.parse("2020-02-02T20:00"); + event.Event existing = new Assignment("existing", location, by); + events.addEvent(existing); + //ByteArrayInputStream in = new ByteArrayInputStream("\nsomething\n\n\n\n".getBytes()); + //System.setIn(in); + String[] editInformation = {"","something","","",""}; + LocalDateTime[] startEnd = new LocalDateTime[2]; + + Command c = new EditCommand(0, editInformation, startEnd, null, null); + Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + Assertions.assertEquals("something", events.get(0).getDescription()); + } + + @Test + void execute_ChangeType_EventTypeChanged() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + LocalDateTime start = LocalDateTime.parse("2020-02-02T20:00"); + LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); + event.Event existing = new Class("existing", location, start, end); + events.addEvent(existing); + String[] editInformation = {"personalEvent","","","",""}; + LocalDateTime[] startEnd = new LocalDateTime[2]; + + Command c = new EditCommand(0, editInformation, startEnd, null, null); + Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + Assertions.assertTrue(events.get(0) instanceof PersonalEvent); + + editInformation[0] = "class"; + Command d = new EditCommand(0, editInformation, startEnd, null, null); + d.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + Assertions.assertTrue(events.get(0) instanceof Class); + + editInformation[0] = "selfStudy"; + Command e = new EditCommand(0, editInformation, startEnd, null, null); + e.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + Assertions.assertTrue(events.get(0) instanceof SelfStudy); + + editInformation[0] = "assignment"; + Command f = new EditCommand(0, editInformation, startEnd, null, null); + f.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + Assertions.assertTrue(events.get(0) instanceof Assignment); + } + + @Test + void editEvent_changeLocation_LocationChanged() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + LocalDateTime start = LocalDateTime.parse("2020-02-02T20:00"); + LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); + event.Event existing = new Class("existing", location, start, end); + events.addEvent(existing); + String[] editInformation = {"","","","",""}; + LocalDateTime[] startEnd = new LocalDateTime[2]; + Location location1 = new Location("location1"); + OnlineLocation onlineLocation = new OnlineLocation("zoom.com"); + events.editEvent(0,editInformation,startEnd,location1,null); + Assertions.assertEquals(events.get(0).getLocation().getName(), "location1"); + events.editEvent(0,editInformation,startEnd,null,onlineLocation); + Assertions.assertEquals(events.get(0).getLink().getLink(), "zoom.com"); + } + + @Test + void editEvent_changeTime_StartEndTimeChanged() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + LocalDateTime start = LocalDateTime.parse("2020-02-02T20:00"); + LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); + event.Event existing = new PersonalEvent("existing", location, start, end); + events.addEvent(existing); + + String[] editInformation = {"","","","",""}; + start = LocalDateTime.parse("2020-02-02T19:00"); + end = LocalDateTime.parse("2020-02-02T22:00"); + LocalDateTime[] startEnd = new LocalDateTime[2]; + startEnd[0] = start; + startEnd[1] = end; + events.editEvent(0, editInformation, startEnd,null,null); + Assertions.assertEquals(events.get(0).getStartDateTime(),start); + Assertions.assertEquals(events.get(0).getEndDateTime(), end); + + editInformation[4] = "nil"; + Command c = new EditCommand(0, editInformation, startEnd, null, null); + Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + // end set to null, getEndDate will get start if end is null + Assertions.assertEquals(start, events.get(0).getEndDateTime()); + } } \ No newline at end of file From 6eadd3f987228edf588a040c3c6ef480a40ee26d Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 15:17:34 +0800 Subject: [PATCH 165/299] Fix checkstyle --- src/test/java/command/EditCommandTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index b93fc1e817..ecc8881fb4 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -137,12 +137,12 @@ void editEvent_changeTime_StartEndTimeChanged() throws NuScheduleException { event.Event existing = new PersonalEvent("existing", location, start, end); events.addEvent(existing); - String[] editInformation = {"","","","",""}; start = LocalDateTime.parse("2020-02-02T19:00"); end = LocalDateTime.parse("2020-02-02T22:00"); LocalDateTime[] startEnd = new LocalDateTime[2]; startEnd[0] = start; startEnd[1] = end; + String[] editInformation = {"","","","",""}; events.editEvent(0, editInformation, startEnd,null,null); Assertions.assertEquals(events.get(0).getStartDateTime(),start); Assertions.assertEquals(events.get(0).getEndDateTime(), end); From 6d136e0d5ef148d07e0c5e032483e31f3310991c Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 15:43:57 +0800 Subject: [PATCH 166/299] Add testing for sort command --- src/test/java/command/EditCommandTest.java | 2 - src/test/java/command/SortCommandTest.java | 72 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index ecc8881fb4..8eee8df47e 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -67,8 +67,6 @@ void execute_ChangeDescription_DescriptionChanged() throws NuScheduleException { LocalDateTime by = LocalDateTime.parse("2020-02-02T20:00"); event.Event existing = new Assignment("existing", location, by); events.addEvent(existing); - //ByteArrayInputStream in = new ByteArrayInputStream("\nsomething\n\n\n\n".getBytes()); - //System.setIn(in); String[] editInformation = {"","something","","",""}; LocalDateTime[] startEnd = new LocalDateTime[2]; diff --git a/src/test/java/command/SortCommandTest.java b/src/test/java/command/SortCommandTest.java index ac147374c3..fdc0b13ec0 100644 --- a/src/test/java/command/SortCommandTest.java +++ b/src/test/java/command/SortCommandTest.java @@ -1,11 +1,20 @@ package command; +import event.Assignment; +import event.Class; +import eventlist.EventList; import exception.InvalidSortCriteriaException; import exception.NoSortCriteriaException; +import exception.NuScheduleException; +import location.Location; +import location.OnlineLocation; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import parser.Parser; +import java.time.LocalDateTime; +import java.util.Arrays; + class SortCommandTest { @@ -22,4 +31,67 @@ void execute_InvalidSortCriteria_InvalidSortCriteriaException() { Command d = Parser.parse("sort something", null,0); }); } + + @Test + void execute_descriptionCriteriaGiven_SortByDescription() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + String[] descriptions = {"eeeee", "ddddd", "ccccc", "bbbbb", "aaaaa"}; + LocalDateTime by = LocalDateTime.parse("2020-02-02T20:00"); + + for (int i = 0; i< 5; i++) { + events.addEvent(new Assignment(descriptions[i], location, by)); + } + events.sortEvent("description"); + Arrays.sort(descriptions); + for (int i = 0; i<5; i++) { + Assertions.assertEquals(descriptions[i], events.get(i).getDescription()); + } + } + + @Test + void execute_timeCriteriaGiven_SortByEndTime() throws NuScheduleException { + EventList events = new EventList(); + Location location = new Location("location"); + LocalDateTime[] bys = {LocalDateTime.parse("2020-02-02T20:00"), LocalDateTime.parse("2020-02-02T19:00"), + LocalDateTime.parse("2020-02-02T18:00")}; + + + for (int i = 0; i< 3; i++) { + events.addEvent(new Assignment("description", location, bys[i])); + } + events.sortEvent("time"); + Arrays.sort(bys); + for (int i = 0; i<3; i++) { + Assertions.assertEquals(bys[i], events.get(i).getStartDateTime()); + } + } + + @Test + void execute_locationCriteriaGiven_SortByLocation() throws NuScheduleException { + EventList events = new EventList(); + Location[] locations = {new Location("cccc"), new Location("bbbb"), new Location("aaaa")}; + OnlineLocation[] onlineLocation = {new OnlineLocation("cccc.com"), new OnlineLocation("bbbb.com"), + new OnlineLocation("aaaa.com")}; + LocalDateTime start = LocalDateTime.parse("2020-02-02T20:00"); + LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); + int j = 0, k = 0; + for (int i = 0; i< 6; i++) { + if (i % 2 == 0) { + events.addEvent(new Class("description", locations[j], start, end)); + j++; + } else { + events.addEvent(new Class("description", onlineLocation[k], start, end)); + k++; + } + } + events.sortEvent("location"); + // by locations will be sorted on top of online locations + Assertions.assertEquals("aaaa", events.get(0).getLocation().getName()); + Assertions.assertEquals("bbbb", events.get(1).getLocation().getName()); + Assertions.assertEquals("cccc", events.get(2).getLocation().getName()); + Assertions.assertEquals("aaaa.com", events.get(3).getLink().getLink()); + Assertions.assertEquals("bbbb.com", events.get(4).getLink().getLink()); + Assertions.assertEquals("cccc.com", events.get(5).getLink().getLink()); + } } \ No newline at end of file From 80ccc4a1e837b0a942a212d207ede1fc85aa6d10 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 15:47:00 +0800 Subject: [PATCH 167/299] Fix checkstyle --- src/test/java/command/SortCommandTest.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/test/java/command/SortCommandTest.java b/src/test/java/command/SortCommandTest.java index fdc0b13ec0..7c6967060c 100644 --- a/src/test/java/command/SortCommandTest.java +++ b/src/test/java/command/SortCommandTest.java @@ -38,13 +38,12 @@ void execute_descriptionCriteriaGiven_SortByDescription() throws NuScheduleExcep Location location = new Location("location"); String[] descriptions = {"eeeee", "ddddd", "ccccc", "bbbbb", "aaaaa"}; LocalDateTime by = LocalDateTime.parse("2020-02-02T20:00"); - - for (int i = 0; i< 5; i++) { + for (int i = 0; i < 5; i++) { events.addEvent(new Assignment(descriptions[i], location, by)); } events.sortEvent("description"); Arrays.sort(descriptions); - for (int i = 0; i<5; i++) { + for (int i = 0; i < 5; i++) { Assertions.assertEquals(descriptions[i], events.get(i).getDescription()); } } @@ -55,14 +54,12 @@ void execute_timeCriteriaGiven_SortByEndTime() throws NuScheduleException { Location location = new Location("location"); LocalDateTime[] bys = {LocalDateTime.parse("2020-02-02T20:00"), LocalDateTime.parse("2020-02-02T19:00"), LocalDateTime.parse("2020-02-02T18:00")}; - - - for (int i = 0; i< 3; i++) { + for (int i = 0; i < 3; i++) { events.addEvent(new Assignment("description", location, bys[i])); } events.sortEvent("time"); Arrays.sort(bys); - for (int i = 0; i<3; i++) { + for (int i = 0; i < 3; i++) { Assertions.assertEquals(bys[i], events.get(i).getStartDateTime()); } } @@ -72,11 +69,12 @@ void execute_locationCriteriaGiven_SortByLocation() throws NuScheduleException { EventList events = new EventList(); Location[] locations = {new Location("cccc"), new Location("bbbb"), new Location("aaaa")}; OnlineLocation[] onlineLocation = {new OnlineLocation("cccc.com"), new OnlineLocation("bbbb.com"), - new OnlineLocation("aaaa.com")}; + new OnlineLocation("aaaa.com")}; LocalDateTime start = LocalDateTime.parse("2020-02-02T20:00"); LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); - int j = 0, k = 0; - for (int i = 0; i< 6; i++) { + int j = 0; + int k = 0; + for (int i = 0; i < 6; i++) { if (i % 2 == 0) { events.addEvent(new Class("description", locations[j], start, end)); j++; From 7f185d297afa3697d9eebacf114bcc61db8cdf73 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 16:46:49 +0800 Subject: [PATCH 168/299] Add PPP --- docs/team/xuche.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/team/xuche.md diff --git a/docs/team/xuche.md b/docs/team/xuche.md new file mode 100644 index 0000000000..6d65a23d15 --- /dev/null +++ b/docs/team/xuche.md @@ -0,0 +1,38 @@ +--- +layout: page +title: Xu Che's Project Portfolio Page +--- + +## Project: AddressBook Level 3 + +NuSchedule is a task management application written in Java. It is operated on the command line interface. + +Given below are my contributions to the project. + +* **New Feature**: Added the ability to edit previous events. + * What it does: Allows the user to edit previous commands. User can choose to edit individual fields of an event such as just choosing to edit the location of an event. + * Justification: This feature improves the product significantly because it provides the user a quick and simple method to correct any mistakes made in the addition of an event. Instead of deleting the event and creating a new one, the user can just edit that particular event with the correct field information. + * Highlights: This command has to be constantly updated whenever a new event class is added to allow for the editing of an event into that event class. Testing and implementation of this command was difficult as the command has to cover for all of the event classes. + +* **New Feature**: Added a history command that allows the user to sort events. + * What it does: Allows the user to sort previous commands. User can organise their events to by sorting them in a specified order. + * Justification: This feature improves the product significantly as it allows the user to order the events, allowing the user to prioritise certain events over others. For example, the user can choose to sort by time, which will cause eventing that are due soon to be sorted on top of events that are due later in the future. + * Highlights: This command was implemented by making use of comparators. Sorting by location was challenging to implement as there were two location types, online and offline locations and the command had to account for situations where either of them where null. + +* **Code contributed**: [RepoSense link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=xuche123&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) + +* **Project management**: + * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub + + +* **Documentation**: + * User Guide: + * Added documentation for the features `edit` and `sort` [\#72]() + * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]() + * Developer Guide: + * Added implementation details of the `edit` and `sort` feature. + +* **Community**: + * PRs reviewed (with non-trivial review comments): [\#33](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+) + * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/177), [2](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/175), [3](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/174)) + From be73d0853c713b124ae8ad5eed38c3d343f7266e Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 16:47:26 +0800 Subject: [PATCH 169/299] Rename PPP --- docs/team/{xuche.md => xuche123.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/team/{xuche.md => xuche123.md} (100%) diff --git a/docs/team/xuche.md b/docs/team/xuche123.md similarity index 100% rename from docs/team/xuche.md rename to docs/team/xuche123.md From f61c17f93e7a5b10ccb1c8c122d23f1c4dcee30f Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 18:51:06 +0800 Subject: [PATCH 170/299] -added AutoClearCommand class -added autoclear command in parser --- src/main/java/command/AutoClearCommand.java | 41 +++++++++++++++++++++ src/main/java/parser/Parser.java | 28 ++++++++------ 2 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 src/main/java/command/AutoClearCommand.java diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java new file mode 100644 index 0000000000..b8d7e897ec --- /dev/null +++ b/src/main/java/command/AutoClearCommand.java @@ -0,0 +1,41 @@ +package command; + +import eventlist.EventList; +import exception.EmptyEventListException; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.time.LocalDate; + +/** + * Represents the command call when the user wants to turn on/off the auto-clear function + * if this function is on, events which ends one month earlier will be cleared + */ +public class AutoClearCommand extends Command { + + protected boolean isOn; + protected LocalDate clearDate; + + public AutoClearCommand() { + clearDate = LocalDate.now().minusMonths(1); + isOn = false; + } + + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws EmptyEventListException the exceptions when the user try to clear an empty list. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws EmptyEventListException{ + + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 3dd50cf37e..81e7bc35ff 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -15,6 +15,7 @@ import command.PrintLocationCommand; import command.ReminderCommand; import command.SortCommand; +import command.AutoClearCommand; import command.StudyTimeCommand; import command.UserInfoCommand; @@ -93,6 +94,7 @@ public abstract class Parser { public static final String REMIND = "reminder"; public static final String STUDY_TIME = "studyTime"; public static final String SELF_STUDY = "selfStudy"; + public static final String AUTO_CLEAR = "autoclear"; /** * This function calls the correct command the user want to perform, by returning a Command object. @@ -108,18 +110,20 @@ public static Command parse(String fullCommand, LocationList locations, int size fullCommand = fullCommand.trim(); // this block deals with single word command switch (fullCommand) { - case EXIT: - return new ExitCommand(); - case PRINT_EVENT_LIST: - return new PrintFullListCommand(); - case PRINT_LOCATION_LIST: - return new PrintLocationCommand(); - case HELP: - return new HelpCommand(); - case CLEAR: - return new ClearCommand(); - case REMIND: - return new ReminderCommand(); + case EXIT: + return new ExitCommand(); + case PRINT_EVENT_LIST: + return new PrintFullListCommand(); + case PRINT_LOCATION_LIST: + return new PrintLocationCommand(); + case HELP: + return new HelpCommand(); + case CLEAR: + return new ClearCommand(); + case REMIND: + return new ReminderCommand(); + case AUTO_CLEAR: + return new AutoClearCommand(); default: break; } From b4f5123ac910b5b7ffd4504f5ead3506a46ad326 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 18:55:14 +0800 Subject: [PATCH 171/299] -resolving conflicts --- src/main/java/parser/Parser.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 81e7bc35ff..47314d08cd 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -94,6 +94,8 @@ public abstract class Parser { public static final String REMIND = "reminder"; public static final String STUDY_TIME = "studyTime"; public static final String SELF_STUDY = "selfStudy"; + public static final String REPEAT = "repeat"; + public static final String ALL = "all"; public static final String AUTO_CLEAR = "autoclear"; /** From 44cad7d8050611a0a7dd10d1bb187a83d8e8b4e6 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 19:31:35 +0800 Subject: [PATCH 172/299] -added clearbefore function in eventlist (the autoclear function is called everytime the user type in autoclear --- src/main/java/command/AutoClearCommand.java | 7 ++++++- src/main/java/eventlist/EventList.java | 11 +++++++++++ src/main/java/ui/UI.java | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index b8d7e897ec..a3edac273a 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -36,6 +36,11 @@ public AutoClearCommand() { */ @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws EmptyEventListException{ - + if (!isOn) { + ui.printAutoClearOn(); + events.clearBefore(clearDate); + } else { + ui.printAutoClearOff(); + } } } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 9d9fc6b52a..db86632705 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -523,4 +523,15 @@ public void repeatEvent(int eventIndex, int numWeeks) { events.add(newEvent); } } + + /** + * clear all events before a certain date + * + * @param clearDate before which all events to be cleared + */ + public void clearBefore(LocalDate clearDate) { + if (events != null) { + events.removeIf(event -> event.getDate().compareTo(clearDate) < 0); + } + } } diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 452a6cc5ca..be7b7a7c01 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -381,5 +381,21 @@ public void printRepeatAll(int numWeeks) { public void printRepeatEvent(int numWeeks) { System.out.println("The selected event has been repeated for " + numWeeks + " weeks."); } + + /** + * Print the success message after the user turned the auto-clear function on + * + */ + public void printAutoClearOn() { + System.out.println("Great! You have turned the auto-clear function on! \nEverything happened one month ago will be automatically cleared :)"); + } + + /** + * Print the success message after the user turned the auto-clear function off + * + */ + public void printAutoClearOff() { + System.out.println("Great! You have turned the auto-clear function off!\nYour past events will be kept :)"); + } } From 503b951d961442d0856af326e8d5fbeeee9d3f1a Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 20:39:57 +0800 Subject: [PATCH 173/299] -added Clearbefore command -added EmptyClearDateException -added NoDateBeforeException -added NoEventOneMonthAgoException -updated parser for autoclear & clearbefore command --- src/main/java/NuSchedule.java | 3 ++ src/main/java/command/AutoClearCommand.java | 23 +++++++---- src/main/java/command/ClearBeforeCommand.java | 41 +++++++++++++++++++ src/main/java/eventlist/EventList.java | 25 +++++++---- .../exception/EmptyClearDateException.java | 15 +++++++ .../java/exception/NoDateBeforeException.java | 16 ++++++++ .../NoEventOneMonthAgoException.java | 16 ++++++++ src/main/java/parser/Parser.java | 19 ++++++++- src/main/java/ui/UI.java | 11 ++--- 9 files changed, 147 insertions(+), 22 deletions(-) create mode 100644 src/main/java/command/ClearBeforeCommand.java create mode 100644 src/main/java/exception/EmptyClearDateException.java create mode 100644 src/main/java/exception/NoDateBeforeException.java create mode 100644 src/main/java/exception/NoEventOneMonthAgoException.java diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index a586e6ff12..32be711ad0 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -1,3 +1,4 @@ +import command.AutoClearCommand; import command.Command; import eventlist.EventList; import exception.CreatingFileException; @@ -59,6 +60,8 @@ public void run() { String fullCommand = ui.readCommand(); ui.printLine(); // show the divider line ("_______") int size = events.getSize(); + //Command auto_clear = new AutoClearCommand(); + //auto_clear.execute(events, locations, busStops, ui, storage); Command c = Parser.parse(fullCommand, locations, size); c.execute(events, locations, busStops, ui, storage); isExit = c.isExit(); diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index a3edac273a..0e14a6e32e 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -1,7 +1,10 @@ package command; +import event.Event; import eventlist.EventList; import exception.EmptyEventListException; +import exception.NoDateBeforeException; +import exception.NoEventOneMonthAgoException; import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; @@ -9,19 +12,18 @@ import ui.UI; import java.time.LocalDate; +import java.util.ArrayList; /** * Represents the command call when the user wants to turn on/off the auto-clear function - * if this function is on, events which ends one month earlier will be cleared + * everytime the user input the function, events of one month ago will be cleared */ public class AutoClearCommand extends Command { - protected boolean isOn; protected LocalDate clearDate; public AutoClearCommand() { clearDate = LocalDate.now().minusMonths(1); - isOn = false; } /** @@ -35,12 +37,17 @@ public AutoClearCommand() { * @throws EmptyEventListException the exceptions when the user try to clear an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws EmptyEventListException{ - if (!isOn) { - ui.printAutoClearOn(); - events.clearBefore(clearDate); + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws EmptyEventListException, NoEventOneMonthAgoException { + if (events != null) { + ArrayList filteredEventList = events.filterDateBefore(clearDate); + if (filteredEventList.size() == 0) { + throw new NoEventOneMonthAgoException(); + } else { + ui.printAutoClearOn(); + events.clearBefore(clearDate); + } } else { - ui.printAutoClearOff(); + throw new EmptyEventListException(); } } } diff --git a/src/main/java/command/ClearBeforeCommand.java b/src/main/java/command/ClearBeforeCommand.java new file mode 100644 index 0000000000..7d28c6bc9a --- /dev/null +++ b/src/main/java/command/ClearBeforeCommand.java @@ -0,0 +1,41 @@ +package command; +import event.Event; +import eventlist.EventList; +import exception.*; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +import java.time.LocalDate; +import java.util.ArrayList; + +/* +* Represents the command when the user wants to clear all events before a certain date +* */ +public class ClearBeforeCommand extends Command { + protected LocalDate clearDate; + + public ClearBeforeCommand(LocalDate date) { + clearDate = date; + } + + /** + * Execute the command based on the specific command type. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @throws EmptyEventListException the exceptions when the user try to clear an empty list. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NoDateBeforeException, EmptyEventListException { + ArrayList filteredEventList = events.filterDateBefore(clearDate); + if (filteredEventList.size() == 0) { + throw new NoDateBeforeException(); + } + events.clearBefore(clearDate); + } +} diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index db86632705..853bf7e723 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -6,12 +6,7 @@ import event.Event; import event.PersonalEvent; import event.SelfStudy; -import exception.EditNoEndTimeException; -import exception.EmptyEventListException; -import exception.ExistingEventInListException; -import exception.EndBeforeStartEventException; -import exception.NoClassWeekException; -import exception.UndefinedEventException; +import exception.*; import location.Location; import location.OnlineLocation; @@ -364,6 +359,20 @@ public ArrayList filterDateWith(LocalDate date) { return filteredEventList; } + /** + * Filter the event list to find the events happen before the date looking for by the user. + * + * @param date the date that the user is looking for. + * @return the filtered list. this list contains only the events that satisfy the requirement. + */ + public ArrayList filterDateBefore(LocalDate date) { + ArrayList filteredEventList = (ArrayList) events.stream() + .filter(s -> (s.getDate().compareTo(date) < 0)) + .collect(toList()); + + return filteredEventList; + } + /** * Filter the event list to find the academic related events happen on the date that have been done already. * @@ -529,9 +538,11 @@ public void repeatEvent(int eventIndex, int numWeeks) { * * @param clearDate before which all events to be cleared */ - public void clearBefore(LocalDate clearDate) { + public void clearBefore(LocalDate clearDate) throws EmptyEventListException { if (events != null) { events.removeIf(event -> event.getDate().compareTo(clearDate) < 0); + } else { + throw new EmptyEventListException(); } } } diff --git a/src/main/java/exception/EmptyClearDateException.java b/src/main/java/exception/EmptyClearDateException.java new file mode 100644 index 0000000000..fcd2248fe7 --- /dev/null +++ b/src/main/java/exception/EmptyClearDateException.java @@ -0,0 +1,15 @@ +package exception; + +/* +* Represents the case when the user input clear before but no date is given +* */ +public class EmptyClearDateException extends DeleteException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + public String getMessage() { + return "OOPS!!! You should input the date before which you want to delete all events :)"; + } +} diff --git a/src/main/java/exception/NoDateBeforeException.java b/src/main/java/exception/NoDateBeforeException.java new file mode 100644 index 0000000000..a92ad6e3d8 --- /dev/null +++ b/src/main/java/exception/NoDateBeforeException.java @@ -0,0 +1,16 @@ +package exception; + +/* +* Represents the case when the user input a date in clear before command but there is no event before the given date +* */ +public class NoDateBeforeException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "There is no events existing before the date given by you :(."; + } +} diff --git a/src/main/java/exception/NoEventOneMonthAgoException.java b/src/main/java/exception/NoEventOneMonthAgoException.java new file mode 100644 index 0000000000..514bac8162 --- /dev/null +++ b/src/main/java/exception/NoEventOneMonthAgoException.java @@ -0,0 +1,16 @@ +package exception; + +/* +* Represents the case when there is no event happened one month ago but the user typed in autoclear +* */ +public class NoEventOneMonthAgoException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "OOPS!! There is no events happened one month ago for you to auto clear :("; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 91c419144c..3ee57f53f6 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -17,6 +17,7 @@ import command.RepeatCommand; import command.SortCommand; import command.AutoClearCommand; +import command.ClearBeforeCommand; import command.StudyTimeCommand; import command.UserInfoCommand; @@ -55,6 +56,7 @@ import exception.UnknownErrorException; import exception.WrongCommandException; import exception.WrongEditFormatException; +import exception.EmptyClearDateException; import location.Building; import location.Hostel; import location.LectureTheatre; @@ -101,6 +103,7 @@ public abstract class Parser { public static final String REPEAT = "repeat"; public static final String ALL = "all"; public static final String AUTO_CLEAR = "autoclear"; + public static final String CLEAR_BEFORE = "clearbefore"; /** @@ -131,8 +134,8 @@ public static Command parse(String fullCommand, LocationList locations, int size return new ReminderCommand(); case AUTO_CLEAR: return new AutoClearCommand(); - default: - break; + default: + break; } String[] words = fullCommand.split(SINGLE_SPACE); @@ -261,6 +264,18 @@ public static Command parse(String fullCommand, LocationList locations, int size } } + //this block deals with clear before + if (words[0].equalsIgnoreCase(CLEAR_BEFORE)) { + if (fullCommand.substring(11).isBlank()) { + throw new EmptyClearDateException(); + } + try { + return new ClearBeforeCommand(LocalDate.parse(fullCommand.substring(12))); + } catch (DateTimeParseException e) { + throw new DateFormatException(); + } + } + //these variables are used by either Edit or Add //the position of /t int startTimeDividerPosition = fullCommand.indexOf(TIME_MARKER); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index be7b7a7c01..4408d7185d 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -383,19 +383,20 @@ public void printRepeatEvent(int numWeeks) { } /** - * Print the success message after the user turned the auto-clear function on + * Print the success message after the user input auto clear * */ public void printAutoClearOn() { - System.out.println("Great! You have turned the auto-clear function on! \nEverything happened one month ago will be automatically cleared :)"); + System.out.println("Great! All events happened one month ago are cleared :)"); } /** - * Print the success message after the user turned the auto-clear function off + * Print the success message after the user successfully clear all events before a certain date * */ - public void printAutoClearOff() { - System.out.println("Great! You have turned the auto-clear function off!\nYour past events will be kept :)"); + public void printClearBefore(LocalDate clearDate) { + System.out.println("Great! You have cleared all events before " + clearDate.toString()); } + } From c6066242b9b97edd78749b79b41ee8cd05ca1f21 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 20:46:40 +0800 Subject: [PATCH 174/299] -updated the clearbefore successul message --- src/main/java/command/ClearBeforeCommand.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/command/ClearBeforeCommand.java b/src/main/java/command/ClearBeforeCommand.java index 7d28c6bc9a..5829a1f3f4 100644 --- a/src/main/java/command/ClearBeforeCommand.java +++ b/src/main/java/command/ClearBeforeCommand.java @@ -35,7 +35,10 @@ public void execute(EventList events, LocationList locations, BusStopList busSto ArrayList filteredEventList = events.filterDateBefore(clearDate); if (filteredEventList.size() == 0) { throw new NoDateBeforeException(); + } else { + events.clearBefore(clearDate); + ui.printClearBefore(clearDate); } - events.clearBefore(clearDate); + } } From 4c8189e770fa4cd238147338426c9188aaedab24 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 20:58:42 +0800 Subject: [PATCH 175/299] updated printHelp() function in ui --- src/main/java/parser/Parser.java | 4 ++-- src/main/java/ui/UI.java | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 3ee57f53f6..951cf34f6f 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -102,8 +102,8 @@ public abstract class Parser { public static final String SELF_STUDY = "selfStudy"; public static final String REPEAT = "repeat"; public static final String ALL = "all"; - public static final String AUTO_CLEAR = "autoclear"; - public static final String CLEAR_BEFORE = "clearbefore"; + public static final String AUTO_CLEAR = "autoClear"; + public static final String CLEAR_BEFORE = "clearBefore"; /** diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 4408d7185d..20eb6ac71a 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -254,19 +254,27 @@ public void printBusStopList(ArrayList busStopList) { * Relevant command information with reference to the current user guide draft. */ public void printHelp() { - System.out.println("Current version: v2.0"); + System.out.println("Current version: v2.1"); System.out.println("Below are all the commands and brief descriptions of their functions in the form of " + "command - function: "); System.out.println("help - view all the commands"); System.out.println("assignment - add an assignment event with content, deadline and location"); System.out.println("class - add a class event with content, deadline and location"); System.out.println("personalEvent - add a personal event with content, deadline and location"); + System.out.println("selfStudy - add a self directed study event"); System.out.println("edit - edit event information"); System.out.println("locate - find location information"); System.out.println("locations - view all the locations available"); System.out.println("list - view all events added"); System.out.println("clear - clear all events"); System.out.println("reminder - show events of the day"); + System.out.println("autoClear - clear all events one month ago"); + System.out.println("clearBefore - clear all events before the date input"); + System.out.println("studyTime - show the amount of study time detected by the program of the day"); + System.out.println("sort - sort all events according to the criteria given"); + System.out.println("repeat - repeat events that have previously happened"); + System.out.println("done - mark a certain task/event as done"); + System.out.println("date - show all events on the date given"); System.out.println("There will be more upcoming features in later versions."); System.out.println("For more information, please refer to detailed user guide: " + "https://ay2021s1-cs2113t-f14-4.github.io/tp/"); From 60e0b1156baefa5534aef17c7d161194d2b8f286 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 21:38:49 +0800 Subject: [PATCH 176/299] format & bug fixes --- src/main/java/command/AutoClearCommand.java | 9 +++--- src/main/java/command/ClearBeforeCommand.java | 7 ++-- src/main/java/eventlist/EventList.java | 2 +- .../java/exception/NoDateBeforeException.java | 7 ++-- src/main/java/parser/Parser.java | 32 +++++++++---------- src/main/java/ui/UI.java | 4 +-- 6 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index 0e14a6e32e..a916bbe2e3 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -3,9 +3,7 @@ import event.Event; import eventlist.EventList; import exception.EmptyEventListException; -import exception.NoDateBeforeException; import exception.NoEventOneMonthAgoException; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -15,8 +13,8 @@ import java.util.ArrayList; /** - * Represents the command call when the user wants to turn on/off the auto-clear function - * everytime the user input the function, events of one month ago will be cleared + * Represents the command call when the user wants to turn on/off the auto-clear function. + * Everytime the user input the function, events of one month ago will be cleared. */ public class AutoClearCommand extends Command { @@ -37,7 +35,8 @@ public AutoClearCommand() { * @throws EmptyEventListException the exceptions when the user try to clear an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws EmptyEventListException, NoEventOneMonthAgoException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws EmptyEventListException, NoEventOneMonthAgoException { if (events != null) { ArrayList filteredEventList = events.filterDateBefore(clearDate); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/ClearBeforeCommand.java b/src/main/java/command/ClearBeforeCommand.java index 5829a1f3f4..e5ca4bbbc0 100644 --- a/src/main/java/command/ClearBeforeCommand.java +++ b/src/main/java/command/ClearBeforeCommand.java @@ -1,7 +1,9 @@ package command; + import event.Event; import eventlist.EventList; -import exception.*; +import exception.NoDateBeforeException; +import exception.EmptyEventListException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -31,7 +33,8 @@ public ClearBeforeCommand(LocalDate date) { * @throws EmptyEventListException the exceptions when the user try to clear an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) throws NoDateBeforeException, EmptyEventListException { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + throws NoDateBeforeException, EmptyEventListException { ArrayList filteredEventList = events.filterDateBefore(clearDate); if (filteredEventList.size() == 0) { throw new NoDateBeforeException(); diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 853bf7e723..28fb7bdf59 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -534,7 +534,7 @@ public void repeatEvent(int eventIndex, int numWeeks) { } /** - * clear all events before a certain date + * Clear all events before a certain date. * * @param clearDate before which all events to be cleared */ diff --git a/src/main/java/exception/NoDateBeforeException.java b/src/main/java/exception/NoDateBeforeException.java index a92ad6e3d8..b9a934f211 100644 --- a/src/main/java/exception/NoDateBeforeException.java +++ b/src/main/java/exception/NoDateBeforeException.java @@ -1,8 +1,9 @@ package exception; -/* -* Represents the case when the user input a date in clear before command but there is no event before the given date -* */ +/** + * Represents the case when the user input a date in clear before command but there is no event before the given date. + */ + public class NoDateBeforeException extends NuScheduleException { /** * Prepare the message to be printed when this exception is experienced. diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 951cf34f6f..b91d1fade6 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -120,22 +120,22 @@ public static Command parse(String fullCommand, LocationList locations, int size fullCommand = fullCommand.trim(); // this block deals with single word command switch (fullCommand) { - case EXIT: - return new ExitCommand(); - case PRINT_EVENT_LIST: - return new PrintFullListCommand(); - case PRINT_LOCATION_LIST: - return new PrintLocationCommand(); - case HELP: - return new HelpCommand(); - case CLEAR: - return new ClearCommand(); - case REMIND: - return new ReminderCommand(); - case AUTO_CLEAR: - return new AutoClearCommand(); - default: - break; + case EXIT: + return new ExitCommand(); + case PRINT_EVENT_LIST: + return new PrintFullListCommand(); + case PRINT_LOCATION_LIST: + return new PrintLocationCommand(); + case HELP: + return new HelpCommand(); + case CLEAR: + return new ClearCommand(); + case REMIND: + return new ReminderCommand(); + case AUTO_CLEAR: + return new AutoClearCommand(); + default: + break; } String[] words = fullCommand.split(SINGLE_SPACE); diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 20eb6ac71a..f802ba1002 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -391,7 +391,7 @@ public void printRepeatEvent(int numWeeks) { } /** - * Print the success message after the user input auto clear + * Print the success message after the user input auto clear. * */ public void printAutoClearOn() { @@ -399,7 +399,7 @@ public void printAutoClearOn() { } /** - * Print the success message after the user successfully clear all events before a certain date + * Print the success message after the user successfully clear all events before a certain date. * */ public void printClearBefore(LocalDate clearDate) { From f18a4b9cc514297781a283d122492a018d8beed7 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 21:41:50 +0800 Subject: [PATCH 177/299] Update userguide --- docs/UserGuide.md | 43 +++++++++++++++++++++++++++++++-------- docs/diagrams/edit1.png | Bin 0 -> 3389 bytes docs/diagrams/edit2.png | Bin 0 -> 2782 bytes docs/diagrams/edit3.png | Bin 0 -> 4836 bytes docs/diagrams/edit4.png | Bin 0 -> 5249 bytes docs/diagrams/edit5.png | Bin 0 -> 3765 bytes docs/diagrams/sort1.png | Bin 0 -> 11782 bytes docs/diagrams/sort2.png | Bin 0 -> 13530 bytes docs/diagrams/sort3.png | Bin 0 -> 13360 bytes docs/diagrams/sort4.png | Bin 0 -> 13362 bytes src/main/java/ui/UI.java | 2 +- 11 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 docs/diagrams/edit1.png create mode 100644 docs/diagrams/edit2.png create mode 100644 docs/diagrams/edit3.png create mode 100644 docs/diagrams/edit4.png create mode 100644 docs/diagrams/edit5.png create mode 100644 docs/diagrams/sort1.png create mode 100644 docs/diagrams/sort2.png create mode 100644 docs/diagrams/sort3.png create mode 100644 docs/diagrams/sort4.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 21b7ab16f9..a7cf24b87a 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -93,20 +93,32 @@ Example of usage: `class CS2113 Lecture /t 2020-09-23 10:00 /e 12:00 /l LT27` ### Edit an event -With this command, you can edit existing tasks to change their description, start/end date, location and even the -event type. You can start using this command by entering `edit INDEX`, where INDEX is the number of the task you want to -edit. +The `edit` command allows you to edit the event type, description, start/end date and location for an existing +event. You can start using this command by entering `edit INDEX`, where INDEX is the number of the task you want to +edit. -Format: `edit INDEX` +Format: `edit INDEX` -Example: +Example: + +Let's say you have one event stored in NuSchedule currently: + +![edit1](diagrams/edit1.png) +Suppose you entered the timing incorrectly and would like to edit it to the correct timing. Enter the following command +to edit the event: + +![edit2](diagrams/edit2.png) Next, you will be prompted to enter the new values for the 5 fields which are type, description, location start and end -date respectively. Enter your desired changes and press the `ENTER` key to go through the fields. +date respectively. Enter your desired changes and press the `ENTER` key to go through the fields. You can leave a field +blank and simply press enter if you do not want to make any changes. -If you do not wish to make any changes to any specific field, you can just leave the field empty and just press -enter. The field will then remain unchanged. +![edit3](diagrams/edit3.png) +Expected Outcome: +![edit4](diagrams/edit4.png) + +![edit5](diagrams/edit5.png) ### Sort events @@ -117,10 +129,25 @@ dates. This way, you can prioritize the events that are due soon. When sorting by description, the events will be sorted in alphabetical order according to their descriptions. Events with descriptions starting with 'a' will be sorted on top of events with descriptions starting with 'z' for example. +When sorting by location, the events will be sorted in alphabetical order according to their location. Events with +offline locations will be sorted on top of locations with online locations. + Format: `sort SORT_CRITERIA` Example: `sort description` +Before sorting: +![sort1](diagrams/sort1.png) + +After sorting: +![sort2](diagrams/sort2.png) + +Sort by time: +![sort3](diagrams/sort3.png) + +Sort by location: +![sort4](diagrams/sort4.png) + ### Find a location Shows you the location of the specified event/task. diff --git a/docs/diagrams/edit1.png b/docs/diagrams/edit1.png new file mode 100644 index 0000000000000000000000000000000000000000..17ff5c6ec0a1ad87062c07cc8b832337e8e1a2f8 GIT binary patch literal 3389 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 E0jYoK>;M1& literal 0 HcmV?d00001 diff --git a/docs/diagrams/edit2.png b/docs/diagrams/edit2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e47c8fd4213fbfa7a23c7362fcd25b25113de4 GIT binary patch literal 2782 zcmb`JYgAKL7RRrx)ln==!Qul-O0kU&0-^y?^_j zwf3K~D<<^gmFrgm0Pt~m*p4^=_<&@2kN(>-%hTuT(Fn`5Br7g77-$)Fd~I1QO%I9= z0)SSk6@2I;%X-DJuzgtoVBNbomhka6jsU>QtneK{drlruPAPL{eg0lFzmg;EgXvrP0nMK3)dU$82?_urHjdZgA7}Q^9%Z4k5Fo%DJSa8?h~E6TT){;UfBjHFklerv`Y2r0ptR@KDFhlE<^iF zV|q=w+(`e-3vJ6)?x#q)Zpq9Kc!Z^@UTuJNashkGpxDX*U6pphI`ii%=Q8t(`)0{b zW=NHUqN1D53VLsHE%$BTuye|GfuYfNP|dIjRz6E*bGw*n=88-O+bNw`+oa;}kfC1dCuq$xSi`hGX)$;)Z4AM~OZM!KOy#x=sH zB2yRo_F1iI*>UDdW88j3DE#wXy=Kq);%`3*IRz@C;Q$$iX`UxFLrE6Sgk#!HdNn^TBo^~*~) zU(m@hvG>4jhm;4~D-AV4RZi7JSO{%SSb!B{R;ihYV21`RW8zK}j=OakJ{dhpXm;VD zS*=;-X6;JlP_cV;sfqu4luB^NY#(cE(5_RI7xItub9sI<$;XLJoC(t&vJ(cy6&vzr zulqGXxV`yK6=JA(%XAzuNwIwjb5s(iKv&_9#*Rs`Wlh@B$R>oqkObNZ@plRG{cT`B zZe}hC?1oZgx;bwD87i!Z3&3e&$JXQ0Souy@IqPVLM&hH6$k|>P>KL4?OP@BYHIKHE z6tJ}}NpVS6!w(&T=5LtFByFeBR<6j#k8;;Gb6TB4>WeoX7%~xR@NEhFxHnuBNdRRu z8!|d>lY;h_-2bKK<(e|1+yNhcbX2S*#<&^T=?kpo*W0|OAx2X>zL`4bs$>StJq8C1 z3C6RaGL~Y%IvSe8J0{JrZ{jV>CUcQH9_TE5cY~*v$Fr0W@x4 z4-%SH_72<$x=lbT9Y43V$#LWYL#x_5C&}6Jn4gH95P9!T;a+LCW)(Z1&WV@!3vaLf zUYw-y%A7qvIm6J`v)6G6Fzcb= z(%^cTOEq8Xh%M+MlxM{n?dj%&D$P*~68oK_kSCus-_l_N%@@DRkniAl9QYP?ZEcv? z)G7^eAZ)6~Y0zpSTRJ{n)BHo5oBbK4fMLW2AQ-Y5S)`)U5T$8iFh4~Ik|k~=B%~5iB8@M5j@Ch%46$dr&Er$u^JMJ4 z?DEYDOi}6@0_CD zuVu*}uBVAf-ljGknBSW`F-jTJV_SJDUv9=Q6fdS~_RMoFzhsnvGxv%n3Xc*|6=Sei z7dlDa&CP*NFvk1_yjVif8EQI1Wgi<2KR+_Y+VFk8+b-NfL6t#QCRtBwNI=_^Js~`J zRn;mKUTx=e1SjNY1V-4 zWf)#uGSc^3m1b|LjR0!QB?P#1%nG3B5BJ)8qt`w!jCVNv1^sq2G4k`8%D?#fZ=#(t z(4r9TZ)DaF=d}0{{O;{f9jM}a{>$s8Nea`iiW;ZtSH_)kbznl~s^3gPh*c@J$xyf$ zBNUaqubmvV9ha2;FB28LohZ8Z8SJ0GLJhfga!91rLbc)tEgpj_l_?nu^h{UmMo)Q5 zm0ah;OMGg6dw+v0Fwp9D3?-cia*A!aV7)<~=Bax&A|NRAw?^?elT(BKY?@KW-_~9Y z4ke9^s$SPODYXWn)TO%fh*+AYb7f_Qt_qE?C| z!T+_ddV(oL-thgxFmhRvarlxx#J);!WdMcy%Dk%W8%=b?U z#*pRg+~Hsj7=V9pdM`(eSxC}7s6~?b$BXd#3aB5iJ+stZI6~sZPFplW5jHadZbaK& z?snPU9gno@oSO<1_%F&dpV7uXkB5US0(|1V5Myc+C`zLOd*m+Tb poaF3X#4h4e{*S6-4d)m05-PnBvvI-~X-NkN-x;%`CHUY^{{mfQy#fFL literal 0 HcmV?d00001 diff --git a/docs/diagrams/edit3.png b/docs/diagrams/edit3.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae61dd709aa53b3f64b2f5fb91095e769d02b6b GIT binary patch literal 4836 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 ZZH3vf^|j0?H1DtZ-C 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 bnSGYnl5gc#(TZOi0(-tW@OAaB;}`x1{Ktk! literal 0 HcmV?d00001 diff --git a/docs/diagrams/edit5.png b/docs/diagrams/edit5.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c14d6153a986ea10bbe71cf7be458bc953aa7f GIT binary patch literal 3765 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/sort1.png b/docs/diagrams/sort1.png new file mode 100644 index 0000000000000000000000000000000000000000..4b20be4aa1588a656289906928c3004fbefbf54d GIT binary patch literal 11782 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 A=Kufz literal 0 HcmV?d00001 diff --git a/docs/diagrams/sort2.png b/docs/diagrams/sort2.png new file mode 100644 index 0000000000000000000000000000000000000000..da49a62a5a3214e788dcd7987cec9dcdf51b4121 GIT binary patch literal 13530 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 Date: Sun, 8 Nov 2020 21:45:56 +0800 Subject: [PATCH 178/299] -more format editing --- src/main/java/eventlist/EventList.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 28fb7bdf59..dea37c6173 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -6,7 +6,12 @@ import event.Event; import event.PersonalEvent; import event.SelfStudy; -import exception.*; +import exception.ExistingEventInListException; +import exception.UndefinedEventException; +import exception.EndBeforeStartEventException; +import exception.EditNoEndTimeException; +import exception.EmptyEventListException; +import exception.NoClassWeekException; import location.Location; import location.OnlineLocation; From 709b1a74362782f3680039d8b2a4cae14e1cf222 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 21:46:01 +0800 Subject: [PATCH 179/299] Minor edits --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index a7cf24b87a..423166251e 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -122,7 +122,7 @@ Expected Outcome: ### Sort events -With this command, you can sort all events by either their end time or their description. When sorting by time, events +With this command, you can sort all events by either their end time, location or their description. When sorting by time, events will be sorted in a chronological order. Events with an earlier end date will be sorted on top of events with later end dates. This way, you can prioritize the events that are due soon. From d5acff4a80f8491b507a885d03706ce16327c080 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Sun, 8 Nov 2020 21:58:36 +0800 Subject: [PATCH 180/299] Fix spacing --- docs/UserGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 423166251e..6c8779b501 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -104,6 +104,7 @@ Example: Let's say you have one event stored in NuSchedule currently: ![edit1](diagrams/edit1.png) + Suppose you entered the timing incorrectly and would like to edit it to the correct timing. Enter the following command to edit the event: From 0d62079330e46d5239812c0c408b916e80a584e2 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 22:11:59 +0800 Subject: [PATCH 181/299] -adding ppp for wu nan --- docs/team/max-wunan.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/team/max-wunan.md diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md new file mode 100644 index 0000000000..e69de29bb2 From 84ec4f2fe0d150cdffb5c55052210f1b23e3b53b Mon Sep 17 00:00:00 2001 From: max Date: Sun, 8 Nov 2020 22:12:07 +0800 Subject: [PATCH 182/299] ppp for wu nan --- docs/team/max-wunan.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index e69de29bb2..fdaa9df268 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -0,0 +1,6 @@ +# Wu Nan - Project Portfolio Page + +## Overview + + +### Summary of Contributions \ No newline at end of file From 4540a0d8c2a2b5397cc9b21b616d8d2927ba5488 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 02:20:16 +0800 Subject: [PATCH 183/299] -updated userguide about command autoClear & clearBefore --- docs/UserGuide.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 6c8779b501..4f64721d1f 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -162,10 +162,20 @@ Shows you a list of all events. Format: `list` ### Clear events -Deletes all events in the list. -Format: `clear` +Delete events existing in the list, you can choose to delete all, auto delete or delete events before a certain date: +* Clear all events + Format: `clear` + +* Clear events happened one month ago + Format: `autoClear` + Note that this command will clear all events which happened one month ago no matter they are done or not. + +* Clear events happened before a certain date + Format: `clearBefore CLEAR_DATE` + + Example: `clearBefore 2020-03-10` ### Mark event as done Mark an event that has been completed with `DONE`. @@ -192,7 +202,7 @@ the data of your previous AddressBook home folder. |Action|Command|Example| |------|-------|-------| |add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| -|clear|`clear` |`clear`| +|clear|`clear` OR `autoClear` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| |done|`done INDEX` |`done 1` | |edit|`edit`, then fill in each fields when prompted and press `ENTER` to move on to the next field|`edit 1` `ENTER` `class` `ENTER` `cs2113t` `ENTER` `\l school` `ENTER` `2020-10-26 19:00` `ENTER` `2020-10-26 20:00`| |help|`help`|| From 76b81fee1737f980afea388ce11c09fb9ad9a3c8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 03:15:32 +0800 Subject: [PATCH 184/299] Edit PPP to the draft version --- docs/team/Lee-Juntong.md | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/team/Lee-Juntong.md diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md new file mode 100644 index 0000000000..7fb2168eda --- /dev/null +++ b/docs/team/Lee-Juntong.md @@ -0,0 +1,64 @@ +--- +layout: page +title: Zhuang Mengjin's Project Portfolio Page +--- + +## Project: NUSchedule + +NuSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it using a CLI. It is written in Java and has around 5 kLoC. + +Given below are my contributions to the project. + +* **Main Frame** + * Events and its subclasses: the basic elements in this product. All commands depend on them. + * EventList class: provides the functions to operate on the list of events. + * Storage: the way to store the data as well as load them from the hard disk. + * UI,Parser, Command, and the main running class: makes the product object oriented. + +* **New Feature**: Added the ability to add events, and manage different cases accordingly. + +* **New Feature**: Added the ability to record amount of time spent on study on certain date. + * What it does: allows the user to check what is the amount of time spent on study on the day. + * Justification: this feature provides the way to know the amount of effort the user spent on study, which is useful for NUS students. + * Highlights: the implementation uses several filters of the stream of the list of events, and only the appropriate ones are + recorded. It also considers the case when certain event is across more than one day, the study time will be calculated correctly + for different dates. + +* **New Feature**: Added the ability to mark an event as done. + +* **New Feature**: Added the ability to delete an event. + +* **New Feature**: Added the ability to set the name of the user, as well as indicate the occupation. (i.e. student or professor) + +* **New Feature**: Added the ability to find the events with given keyword in the description. + +* **New Feature**: Added the ability to find the events happening on the given date. + +* **New Feature**: Added the ability to Repeat of required events for several weeks. + * Highlights: Added copy constructor for Event and its subclasses, because Java does not pass reference as a copy, so + we need to create a copy to avoid the edit being effective to the original object. + * Credits: The code to compare whether 2 localDateTimes are within the same week. + Provided by Sunil Katti [here](https://stackoverflow.com/a/56246095) + +* **New Feature**: Added the ability to exit the application. + +* **New Feature**: Added the ability to print the list of events. + +* **Code contributed**: [RepoSense link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=Lee-Juntong&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=Lee-Juntong&tabRepo=AY2021S1-CS2113T-F14-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other) + +* **Project management**: + * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub + +* **Enhancements to existing features**: + * Fix bugs happening to the features. (Pull requests [\#37](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/37), [\#145](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/145)) + +* **Documentation**: + * User Guide: + * Added documentation for the features `delete` and `find` [\#72]() + * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]() + * Developer Guide: + * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) + +* **Community**: + * Contributed to forum discussions (examples: [1](https://github.com/nus-cs2113-AY2021S1/forum/issues/48#issuecomment-709282848)) + * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/Lee-Juntong/ped/issues/9), [2](https://github.com/Lee-Juntong/ped/issues/13), [3](https://github.com/Lee-Juntong/ped/issues/14)) From 07e56c30002101c28bac16484199058008bddc27 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 03:51:16 +0800 Subject: [PATCH 185/299] update the photo --- docs/AboutUs.md | 2 +- docs/diagrams/Lee_Juntong'sCat.jpg | Bin 0 -> 1386652 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/diagrams/Lee_Juntong'sCat.jpg diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9c45c205de..2fa17e77d5 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -6,5 +6,5 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](docs/team/johndoe.md) +![](diagrams/Lee_Juntong'sCat.jpg) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](team/Lee-Juntong.md) diff --git a/docs/diagrams/Lee_Juntong'sCat.jpg b/docs/diagrams/Lee_Juntong'sCat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a72aac50950b4aa742f41ae65531118414511f3d GIT binary patch literal 1386652 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⪚D@KsL_Na)QjAPKlKc7wAFSK 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%0AXdP@P?E+1;*N|&Ulr?g_K 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%0AP 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
_eK-4G_Q%ri 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 cBD#f)oKT6ZhU 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
NN`T%;}c^}aZKiImsm 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

iyxUoCuYK~@FkhomVAZ9(QoEad^<=ZWI_qb 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%0D20OJd- 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

0qd;N{%Z_R2dNDM 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%0DR6r<+Bz6q!26vHbvBsZ*Y3*MwoD{mzl{jM&$r& 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ℜ0IUXf#& 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

    dHO~r{Pu{ZX_F4r!QxFPr0 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

    PS#j<*1q0!~cVHXiSpH=DL& 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 literal 0 HcmV?d00001 diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 20ee8c13c3..3314039c36 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -156,7 +156,7 @@ public static Command parse(String fullCommand, LocationList locations, int size if (words.length == 1) { throw new EmptyLocationException(); } else if (locations.checkIfInteger(words[1])) { - int eventNum = Integer.parseInt(words[1]); + int eventNum = Integer.parseInt(words[1])-1; if (eventNum >= size || eventNum < 0) { throw new InvalidEventIndexException(); } else { From 65e6125d78b3831e89c74544601fd396cadd1976 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 17:34:04 +0800 Subject: [PATCH 210/299] fix style error --- data/locations.txt | 1 + src/main/java/parser/Parser.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data/locations.txt b/data/locations.txt index 64a3bb1a09..1cba4d7d15 100644 --- a/data/locations.txt +++ b/data/locations.txt @@ -13,6 +13,7 @@ BLK/E5A/Raffles Hall BLK/E6/Opp YIH,YIH BLK/IT/Information Technology,CLB H/Raffles Hall/Raffles Hall,NUS Museum +H/Kent Ridge Hall/ L/LT1/E2 L/LT2/E2 L/LT6/E4 diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 3314039c36..fb332ed1fe 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -156,7 +156,7 @@ public static Command parse(String fullCommand, LocationList locations, int size if (words.length == 1) { throw new EmptyLocationException(); } else if (locations.checkIfInteger(words[1])) { - int eventNum = Integer.parseInt(words[1])-1; + int eventNum = Integer.parseInt(words[1]) - 1; if (eventNum >= size || eventNum < 0) { throw new InvalidEventIndexException(); } else { From 3c95c459c3f5dcf8e66551fed9aa521218c38fb9 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 18:16:21 +0800 Subject: [PATCH 211/299] -draft ppp for wu nan --- docs/team/max-wunan.md | 46 ++++++++++++++++++++++++++++++++++++++++-- docs/team/xuche123.md | 2 +- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index fdaa9df268..69578edde2 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -1,6 +1,48 @@ # Wu Nan - Project Portfolio Page -## Overview +## Project: NuSchedule: +NuSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it +using a Command Line Interface (CLI). It is written in Java and has around 5 kLoC. -### Summary of Contributions \ No newline at end of file +Given below are my contributions to this project: + +* __New Feature:__ Added the ability to view all available commands + * What it does: This function allows users to view the current version of this application by typing in `help`, and gives them a brief + description of all features. This function also provides users with a link to the detailed user guide. + * Justification: This feature improves the user-friendliness of this application greatly as users may choose to + refer to help message whenever they feel lost or are unfamiliar yet with the usage of NuSchedule. Also, with further + development of NuSchedule, there will be more and more features/commands available, this function will become more + and more useful for users to refer to. + * Highlights: The code for this function needs to be updated everytime there is a new feature, or a new version release. + +* __New Feature:__ Added the ability to clear events based on users' needs + * What it does: This function allows users to clear all events by typing in `clear`, or clear events that happened + before a certain date by typing in `clearBefore CLEAR_DATE`, or enable autoClear function of this application by + typing in `autoClear`, which clears all events that happened one month ago automatically. + * Justification: This feature improves the product efficiency and user-friendliness as it allows the space and memory + for data storage to be reduced, hence the speed of running this application can be increased. This function also + allows users to view all their events more efficiently as those unwanted events are cleared, users will be able to + have a more clean and straight-forward view of all ongoing events. + * Highlights: This function allows 3 different commands, and the status of `autoClear` function can be kept after + the application stops running. + +* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=max-wunan&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) + +* __Project Management:__ + * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub + +* __Documentation:__ + * User Guide: + * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79) + * Added documentation for help and clear function [#169](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/169), [#175](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/175) + * Developer Guide: + * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79) + * Added implementation details and sequence diagrams for help and clear function [#83](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/83) + +* __Community:__ + * Reviewed Developer Guide of the team and fixed format error [#86](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/86/files) + + + + \ No newline at end of file diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 6bc2bba0eb..eee7ecbdbc 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -28,6 +28,6 @@ Given below are my contributions to the project. * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) * **Community**: - * Revied developer guide for team [Study It](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+). + * Reviewed developer guide for team [Study It](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+). * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/177), [2](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/175), [3](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/174)) From bf7cfa7a4359b736caefad7879f70f508aafd9a9 Mon Sep 17 00:00:00 2001 From: max-wunan <60435396+max-wunan@users.noreply.github.com> Date: Mon, 9 Nov 2020 18:38:24 +0800 Subject: [PATCH 212/299] Update AboutUs.md to make ppp page available from AboutUs --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index f14424bed9..e84d20ae10 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) From 543a61185c4295d8cae2bd996b5e7bb9b9e228ef Mon Sep 17 00:00:00 2001 From: max-wunan <60435396+max-wunan@users.noreply.github.com> Date: Mon, 9 Nov 2020 18:40:34 +0800 Subject: [PATCH 213/299] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e84d20ae10..408f56fa92 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/max-wunan.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) From fbca76ede347a6a0e0f30e29f2000755670274c6 Mon Sep 17 00:00:00 2001 From: max-wunan <60435396+max-wunan@users.noreply.github.com> Date: Mon, 9 Nov 2020 18:41:46 +0800 Subject: [PATCH 214/299] Update AboutUs.md to make all existing ppp available on AboutUs --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 408f56fa92..555eeca698 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -4,7 +4,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) -![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](team/jiaaaqi.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) ![](diagrams/Lee_Juntong'sCat.jpg) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](team/Lee-Juntong.md) From 4ba22a0f0457750021a221c8ef750fcfa77d77da Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 19:23:59 +0800 Subject: [PATCH 215/299] added more location data --- data/bus_stops.txt | 14 +++++++- data/locations.txt | 85 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/data/bus_stops.txt b/data/bus_stops.txt index 2151b17204..119cf974d3 100644 --- a/data/bus_stops.txt +++ b/data/bus_stops.txt @@ -4,4 +4,16 @@ Information Technology:A2,B1,B2,D1 Opp YIH:A2,B1,B2,D1 NUS Museum:A2,BTC1,BTC2,C,D1,D2 YIH:A1,B1,BTC1,D1 -CLB:A1,B1,BTC1,D1 \ No newline at end of file +CLB:A1,B1,BTC1,D1 +LT13:A1,B,D1,BTC1 +AS5:A1,B,D1,BTC1 +Ventus:A2,A2E,B,D1 +BIZ2:A1,A1E,D1,BTC1 +Opp NUSSU:A2,D1 +Opp HSSML:A2,D1 +Opp UHC:A1,C,D2 +COM2:A1,A2,B,D1 +UTown:D1,D2,B1,B1,C,BTC +PGP:A1 +LT27:A1,A1E,C,D2 +S17:A2,A2E,C,D2 \ No newline at end of file diff --git a/data/locations.txt b/data/locations.txt index 1cba4d7d15..55e30f21fc 100644 --- a/data/locations.txt +++ b/data/locations.txt @@ -12,10 +12,91 @@ BLK/E5/Information Technology BLK/E5A/Raffles Hall BLK/E6/Opp YIH,YIH BLK/IT/Information Technology,CLB +BLK/AS1/CLB,LT13 +BLK/AS2/Ventus,LT13 +BLK/AS3/Ventus,LT13 +BLK/AS4/LT13,AS5 +BLK/AS5/AS5 +BLK/AS6/CLB,COM2 +BLK/AS7/Ventus,LT13 +BLK/AS8/CLB +BLK/SDE1/IT +BLK/SDE2/IT +BLK/SDE3/EA +BLK/SDE4/IT +BLK/CELC/IT +BLK/S1/LT27 +BLK/S2/LT27 +BLK/S3/LT27 +BLK/S4/LT27 +BLK/S5/LT27 +BLK/S6/LT27 +BLK/S7/LT27 +BLK/S8/LT27 +BLK/S9/LT27 +BLK/S10/LT27 +BLK/S11/LT27 +BLK/S12/LT27 +BLK/S13/LT27 +BLK/S14/LT27 +BLK/S15/LT27 +BLK/S16/LT27 +BLK/S17/S17,LT27 +BLK/MD1/LT27 +BLK/MD2/LT27 +BLK/MD3/LT27 +BLK/MD4/LT27 +BLK/MD5/LT27 +BLK/MD6/LT27 +BLK/MD7/LT27 +BLK/MD8/LT27 +BLK/MD9/LT27 +BLK/MD10/LT27 +BLK/MD11/LT27 +BLK/COM1/COM2 +BLK/COM2/COM2 +BLK/BIZ1/BIZ2,COM2 +BLK/BIZ2/BIZ2 +BLK/Shaw Foundation Alumni House/Opp NUSSU H/Raffles Hall/Raffles Hall,NUS Museum -H/Kent Ridge Hall/ +H/Kent Ridge Hall/Opp HSSML +H/King Edward VII Hall/PGP +H/Sheares Hall/Opp HSSML +H/Eusoff Hall/Ventus +H/Temasek Hall/Opp NUSSU +H/Cinnamon College/UTown +H/College of Alice and Peter Tan/UTown +H/Residental College 4/UTown +H/RVRC/Opp UHC +H/Tembusu College/UTown +H/Prince George's Park/PGP +H/UTown Residence/UTown L/LT1/E2 L/LT2/E2 L/LT6/E4 L/LT7/EA -L/LT7A/EA \ No newline at end of file +L/LT7A/EA +L/LT8/AS5 +L/LT9/AS1 +L/LT10/AS1 +L/LT11/AS2 +L/LT12/AS3 +L/LT13/AS3 +L/LT14/AS6 +L/LT15/AS6 +L/LT16/COM2 +L/LT17/COM2 +L/LT18/COM2 +L/LT19/COM2 +L/LT20/S3 +L/LT21/S5 +L/LT24/MD4 +L/LT25/MD7 +L/LT26/MD9 +L/LT27/LT27 +L/LT28/LT27 +L/LT29/LT27 +L/LT31/S16 +L/LT32/S1 +L/LT33/S17 +L/LT34/S17 \ No newline at end of file From 01c335aa29b1b4ae18af3f9b1f3a1edfc3c830cf Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 19:24:27 +0800 Subject: [PATCH 216/299] fixed minor error in locate command --- src/main/java/locationlist/LocationList.java | 6 ++- src/main/java/parser/Parser.java | 13 ++++- src/main/java/storage/Storage.java | 53 +++++++++++--------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index 80305d3841..6602e36479 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -20,7 +20,8 @@ public ArrayList getLocationList() { */ public boolean checkValidLocation(String name) { for (Location location : locationList) { - if (name.equalsIgnoreCase(location.getName())) { + String input = name.toLowerCase().replaceAll("\\s",""); + if (input.equals(location.getName().toLowerCase().replaceAll("\\s",""))) { return true; } } @@ -36,8 +37,9 @@ public boolean checkValidLocation(String name) { public Location findLocation(String name) { Location locationReturned = null; int i = 0; + String input = name.toLowerCase().replaceAll("\\s",""); for (Location location : locationList) { - if (name.equalsIgnoreCase(location.getName())) { + if (input.equalsIgnoreCase(location.getName().toLowerCase().replaceAll("\\s",""))) { locationReturned = locationList.get(i); return locationReturned; } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index fb332ed1fe..1569259236 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -153,6 +153,15 @@ public static Command parse(String fullCommand, LocationList locations, int size //this block deals with locate command if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { + String input = ""; + int i; + for (i=1; i< words.length; i++) { + input = input.concat(words[i]); + int j = i; + if (j++ != words.length) { + input = input.concat(" "); + } + } if (words.length == 1) { throw new EmptyLocationException(); } else if (locations.checkIfInteger(words[1])) { @@ -162,10 +171,10 @@ public static Command parse(String fullCommand, LocationList locations, int size } else { return new LocateCommand(words[1]); } - } else if (!locations.checkValidLocation(words[1])) { + } else if (!locations.checkValidLocation(input)) { throw new InvalidLocationException(); } else { - return new LocateCommand(words[1]); + return new LocateCommand(input); } } if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length > 1) { diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 560db9b23f..4ee876268e 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -338,31 +338,34 @@ public void loadLocationData(ArrayList locationList) { } private String locationData = "BLK/EA/EA\n" - + "BLK/EA/Information Technology\n" - + "BLK/E1A/EA\n" - + "BLK/EW1/EA,Information Technology\n" - + "BLK/EW1A/EA\n" - + "BLK/E2/EA\n" - + "BLK/E3/EA,Raffles Hall\n" - + "BLK/E3A/EA\n" - + "BLK/E4/Information Technology\n" - + "BLK/E4A/Opp YIH,YIH\n" - + "BLK/E5/Information Technology\n" - + "BLK/E5A/Raffles Hall\n" - + "BLK/E6/Opp YIH,YIH\n" - + "BLK/IT/Information Technology,CLB\n" - + "H/Raffles Hall/Raffles Hall,NUS Museum\n" - + "L/LT1/E2\n" - + "L/LT2/E2\n" - + "L/LT6/E4\n" - + "L/LT7/EA\n" - + "L/LT7A/EA"; + + "BLK/EA/Information Technology\n" + "BLK/E1A/EA\n" + "BLK/EW1/EA,Information Technology\n" + + "BLK/EW1A/EA\n" + "BLK/E2/EA\n" + "BLK/E3/EA,Raffles Hall\n" + "BLK/E3A/EA\n" + + "BLK/E4/Information Technology\n" + "BLK/E4A/Opp YIH,YIH\n" + "BLK/E5/Information Technology\n" + + "BLK/E5A/Raffles Hall\n" + "BLK/E6/Opp YIH,YIH\n" + "BLK/IT/Information Technology,CLB\n" + + "BLK/AS1/CLB,LT13\n" + "BLK/AS2/Ventus,LT13\n" + "BLK/AS3/Ventus,LT13\n" + + "BLK/AS4/LT13,AS5\n" + "BLK/AS5/AS5\n" + "BLK/AS6/CLB,COM2\n" + "BLK/AS7/Ventus,LT13\n" + "BLK/AS8/CLB\n" + + "BLK/SDE1/IT\n" + "BLK/SDE2/IT\n" + "BLK/SDE3/EA\n" + "BLK/SDE4/IT\n" + "BLK/CELC/IT\n" + "BLK/S1/LT27\n" + + "BLK/S2/LT27\n" + "BLK/S3/LT27\n" + "BLK/S4/LT27\n" + "BLK/S5/LT27\n" + "BLK/S6/LT27\n" + "BLK/S7/LT27\n" + + "BLK/S8/LT27\n" + "BLK/S9/LT27\n" + "BLK/S10/LT27\n" + "BLK/S11/LT27\n" + "BLK/S12/LT27\n" + + "BLK/S13/LT27\n" + "BLK/S14/LT27\n" + "BLK/S15/LT27\n" + "BLK/S16/LT27\n" + "BLK/S17/S17,LT27\n" + + "BLK/MD1/LT27\n" + "BLK/MD2/LT27\n" + "BLK/MD3/LT27\n" + "BLK/MD4/LT27\n" + "BLK/MD5/LT27\n" + + "BLK/MD6/LT27\n" + "BLK/MD7/LT27\n" + "BLK/MD8/LT27\n" + "BLK/MD9/LT27\n" + "BLK/MD10/LT27\n" + + "BLK/MD11/LT27\n" + "BLK/COM1/COM2\n" + "BLK/COM2/COM2\n" + "BLK/BIZ1/BIZ2,COM2\n" + "BLK/BIZ2/BIZ2\n" + + "BLK/Shaw Foundation Alumni House/Opp NUSSU\n" + "H/Raffles Hall/Raffles Hall,NUS Museum\n" + + "H/Kent Ridge Hall/Opp HSSML\n" + "H/King Edward VII Hall/PGP\n" + "H/Sheares Hall/Opp HSSML\n" + + "H/Eusoff Hall/Ventus\n" + "H/Temasek Hall/Opp NUSSU\n" + "H/Cinnamon College/UTown\n" + + "H/College of Alice and Peter Tan/UTown\n" + "H/Residental College 4/UTown\n" + "H/RVRC/Opp UHC\n" + + "H/Tembusu College/UTown\n" + "H/Prince George's Park/PGP\n" + "H/UTown Residence/UTown\n" + + "L/LT1/E2\n" + "L/LT2/E2\n" + "L/LT6/E4\n" + "L/LT7/EA\n" + "L/LT7A/EA\n" + "L/LT8/AS5\n" + "L/LT9/AS1\n" + + "L/LT10/AS1\n" + "L/LT11/AS2\n" + "L/LT12/AS3\n" + "L/LT13/AS3\n" + "L/LT14/AS6\n" + "L/LT15/AS6\n" + + "L/LT16/COM2\n" + "L/LT17/COM2\n" + "L/LT18/COM2\n" + "L/LT19/COM2\n" + "L/LT20/S3\n" + "L/LT21/S5\n" + + "L/LT24/MD4\n" + "L/LT25/MD7\n" + "L/LT26/MD9\n" + "L/LT27/LT27\n" + "L/LT28/LT27\n" + "L/LT29/LT27\n" + + "L/LT31/S16\n" + "L/LT32/S1\n" + "L/LT33/S17\n" + "L/LT34/S17"; private String busStopData = "EA:B2,C,BTC2\n" - + "Raffles Hall:B2,C\n" - + "Information Technology:A2,B1,B2,D1\n" - + "Opp YIH:A2,B1,B2,D1\n" - + "NUS Museum:A2,BTC1,BTC2,C,D1,D2\n" - + "YIH:A1,B1,BTC1,D1\n" - + "CLB:A1,B1,BTC1,D1"; + + "Raffles Hall:B2,C\n" + "Information Technology:A2,B1,B2,D1\n" + "Opp YIH:A2,B1,B2,D1\n" + + "NUS Museum:A2,BTC1,BTC2,C,D1,D2\n" + "YIH:A1,B1,BTC1,D1\n" + "CLB:A1,B1,BTC1,D1\n" + + "LT13:A1,B,D1,BTC1\n" + "AS5:A1,B,D1,BTC1\n" + "Ventus:A2,A2E,B,D1\n" + "BIZ2:A1,A1E,D1,BTC1\n" + + "Opp NUSSU:A2,D1\n" + "Opp HSSML:A2,D1\n" + "Opp UHC:A1,C,D2\n" + "COM2:A1,A2,B,D1\n" + + "UTown:D1,D2,B1,B1,C,BTC\n" + "PGP:A1\n" + "LT27:A1,A1E,C,D2\n" + "S17:A2,A2E,C,D2"; } From 319290a7625e2f005aab03716f17cf48eaf28f3a Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 19:24:37 +0800 Subject: [PATCH 217/299] updated ppp --- docs/team/jiaaaqi.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/team/jiaaaqi.md b/docs/team/jiaaaqi.md index d785f02ff0..81a2df2ef6 100644 --- a/docs/team/jiaaaqi.md +++ b/docs/team/jiaaaqi.md @@ -17,6 +17,8 @@ Given below are my contributions to the project: * What it does: record all the pre-saved location data of places within NUS. It also includes a separate bus stops list, which saves bus stop data. Users are able to view the entire list by keying in the command `locations` or `busstops`. + +*__Storage:__ Added location data of locations within NUS * __New Feature:__ Added a `locate` command to find a location using location name or event index * Justification: This feature will allow user to receive location information. It allows users to find more @@ -25,12 +27,16 @@ Given below are my contributions to the project: * __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=jiaaaqi&tabRepo=AY2021S1-CS2113T-F14-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~other) * __Project Management:__ - * Managed + * Managed releases `v1.0` - `v2.0` on GitHub * __Documentation:__ * User guide: - * Added documentation for `locate` command + * Added documentation for `locate` command ([#84](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/84), [#176](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/176)) * Developer guide: * Added design details for Location, under Model ([#69](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/69/files), [#75](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/75)) * Added implementation details for `locate` feature ([#69](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/69/files), [#75](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/75)) - * Added target user profile and value proposition ([#67](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/67/files)) \ No newline at end of file + * Added target user profile and value proposition ([#67](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/67/files)) + +* __Community:__ + * PRs reviewed (with non-trivial comments): [Fitr](https://github.com/nus-cs2113-AY2021S1/tp/pull/16) + * Reported bugs in other teams: example [1](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/323), [2](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/319), [3](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/322) \ No newline at end of file From b69df3f8d21b53f65fd5488c12146a4a53b549b9 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 19:26:28 +0800 Subject: [PATCH 218/299] -update aboutus to make ppp link available -added page breaker to create cover page for ug/dg --- docs/AboutUs.md | 2 +- docs/README.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index f14424bed9..e84d20ae10 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/README.md b/docs/README.md index bfb2787bdf..451c4a932c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,10 @@ -# NUSchedule +# NuSchedule -A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily. +A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily and efficiently. Useful links: * [User Guide](UserGuide.md) * [Developer Guide](DeveloperGuide.md) * [About Us](AboutUs.md) + + From cdebb04f9470e9fdd8511a0919c8cad9ed754c3f Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 19:26:36 +0800 Subject: [PATCH 219/299] update cover page --- docs/AboutUs.md | 2 +- docs/DeveloperGuide.md | 8 +++++++- docs/UserGuide.md | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index e84d20ae10..408f56fa92 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -2,7 +2,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: -![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/max-wunan.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 557a2b5c38..831e406cb3 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -4,11 +4,17 @@ ![](diagrams/Logo.png)
    Yang Jiaqi
    + Zhuang Mengjin
    + Xu Che
    + Wu Nan
    + Wan Shi Jie Brendan
    -

    + + +

    ## Table of Contents * [1. Introduction](#intro) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 4e39c51024..d9715e6d7b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -12,6 +12,7 @@ Wu Nan Wan Shi Jie Brendan +
    ## Introduction From 12582ba0159d01a32bba17deb60b83d366530bce Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 19:26:42 +0800 Subject: [PATCH 220/299] fixed spacing error --- src/main/java/parser/Parser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 1569259236..d87e40da2d 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -155,7 +155,7 @@ public static Command parse(String fullCommand, LocationList locations, int size if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { String input = ""; int i; - for (i=1; i< words.length; i++) { + for (i = 1; i < words.length; i++) { input = input.concat(words[i]); int j = i; if (j++ != words.length) { From f8606335594343f1a7bbfca0a7acff776b942772 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 19:47:01 +0800 Subject: [PATCH 221/299] updated wu nan's ppp --- docs/team/max-wunan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index 69578edde2..beca27f110 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -34,10 +34,10 @@ Given below are my contributions to this project: * __Documentation:__ * User Guide: - * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79) + * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added documentation for help and clear function [#169](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/169), [#175](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/175) * Developer Guide: - * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79) + * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added implementation details and sequence diagrams for help and clear function [#83](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/83) * __Community:__ From a1b6209c416f6efb5edbb40fa4dbd8ffe5b3a752 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 19:50:26 +0800 Subject: [PATCH 222/299] updated about us --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index f14424bed9..4213daada1 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -4,7 +4,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) -![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/jiaaaqi.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) ![](diagrams/Lee_Juntong'sCat.jpg) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](team/Lee-Juntong.md) From f22e38b59b08563aee7374550d050158c67594e8 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 20:00:13 +0800 Subject: [PATCH 223/299] updated PR reviewed for wu nan's ppp --- docs/team/max-wunan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index beca27f110..fe083de42c 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -42,7 +42,7 @@ Given below are my contributions to this project: * __Community:__ * Reviewed Developer Guide of the team and fixed format error [#86](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/86/files) - + * PRs reviewed (with non-trivial review comments): [#174](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/174#pullrequestreview-526179937) \ No newline at end of file From 02c485eb854a304b221327df3859cbfec6559429 Mon Sep 17 00:00:00 2001 From: jiaaaqi <60423691+jiaaaqi@users.noreply.github.com> Date: Mon, 9 Nov 2020 20:11:57 +0800 Subject: [PATCH 224/299] Update jiaaaqi.md --- docs/team/jiaaaqi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/team/jiaaaqi.md b/docs/team/jiaaaqi.md index 81a2df2ef6..460135e33f 100644 --- a/docs/team/jiaaaqi.md +++ b/docs/team/jiaaaqi.md @@ -18,7 +18,7 @@ Given below are my contributions to the project: list, which saves bus stop data. Users are able to view the entire list by keying in the command `locations` or `busstops`. -*__Storage:__ Added location data of locations within NUS +* __Storage:__ Added location data of locations within NUS * __New Feature:__ Added a `locate` command to find a location using location name or event index * Justification: This feature will allow user to receive location information. It allows users to find more @@ -39,4 +39,4 @@ Given below are my contributions to the project: * __Community:__ * PRs reviewed (with non-trivial comments): [Fitr](https://github.com/nus-cs2113-AY2021S1/tp/pull/16) - * Reported bugs in other teams: example [1](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/323), [2](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/319), [3](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/322) \ No newline at end of file + * Reported bugs in other teams: example [1](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/323), [2](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/319), [3](https://github.com/AY2021S1-CS2113T-W12-4/tp/issues/322) From de29dbb03523678bfeb94e3480fcf238249bf58c Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 20:12:07 +0800 Subject: [PATCH 225/299] added bug reporting for other teams in ppp --- docs/team/max-wunan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index fe083de42c..02be411207 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -43,6 +43,6 @@ Given below are my contributions to this project: * __Community:__ * Reviewed Developer Guide of the team and fixed format error [#86](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/86/files) * PRs reviewed (with non-trivial review comments): [#174](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/174#pullrequestreview-526179937) - + * Reported for bugs and suggestions for other teams in the class (examples: [1](https://github.com/AY2021S1-CS2113T-W12-2/tp/issues/221), [2](https://github.com/AY2021S1-CS2113T-W12-2/tp/issues/223), [3](https://github.com/AY2021S1-CS2113T-W12-2/tp/issues/224)) \ No newline at end of file From 01a33ced1be89f66a91c8e7b46af793902280c75 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 20:12:47 +0800 Subject: [PATCH 226/299] Enhanced both auto clear (by making it an option) and clear before (considers end date instead of start date) --- docs/team/Lee-Juntong.md | 2 +- src/main/java/NuSchedule.java | 11 +++- src/main/java/command/AddCommand.java | 6 ++- src/main/java/command/AutoClearCommand.java | 52 +++++++++++++------ src/main/java/command/ClearBeforeCommand.java | 9 ++-- src/main/java/command/ClearCommand.java | 6 ++- src/main/java/command/Command.java | 5 +- src/main/java/command/DeleteCommand.java | 6 ++- src/main/java/command/DoneCommand.java | 6 ++- src/main/java/command/EditCommand.java | 9 ++-- src/main/java/command/ExitCommand.java | 5 +- src/main/java/command/FindCommand.java | 6 ++- src/main/java/command/FindDateCommand.java | 6 ++- src/main/java/command/HelpCommand.java | 6 ++- src/main/java/command/LocateCommand.java | 12 ++--- .../command/PrintAreaLocationsCommand.java | 5 +- .../java/command/PrintFullListCommand.java | 6 ++- .../java/command/PrintLocationCommand.java | 5 +- src/main/java/command/ReminderCommand.java | 5 +- src/main/java/command/RepeatCommand.java | 7 ++- src/main/java/command/SortCommand.java | 16 +++++- src/main/java/command/StudyTimeCommand.java | 7 +-- src/main/java/command/UserInfoCommand.java | 15 ++++-- src/main/java/eventlist/EventList.java | 2 +- .../WrongAutoClearArgumentException.java | 16 ++++++ src/main/java/parser/Parser.java | 20 +++++-- src/main/java/storage/Storage.java | 4 +- src/main/java/ui/UI.java | 32 +++++------- src/main/java/usercommunication/UserInfo.java | 26 +++++++++- src/test/java/command/EditCommandTest.java | 19 +++---- 30 files changed, 228 insertions(+), 104 deletions(-) create mode 100644 src/main/java/exception/WrongAutoClearArgumentException.java diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 75bcb2e62a..515e36d066 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -57,6 +57,6 @@ Given below are my contributions to the project. * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) * **Community**: - * PRs reviewed (with non-trivial review comments):[\#162](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/162), [\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172) + * PRs reviewed (with non-trivial review comments):[\#162](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/162), [\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172), [\#147](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/147), [\#144](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/144) * Contributed to forum discussions (examples: [1](https://github.com/nus-cs2113-AY2021S1/forum/issues/48#issuecomment-709282848)) * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/Lee-Juntong/ped/issues/9), [2](https://github.com/Lee-Juntong/ped/issues/13), [3](https://github.com/Lee-Juntong/ped/issues/14)) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index e359e56874..d8dbbd8908 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -1,7 +1,9 @@ +import command.AutoClearCommand; import command.Command; import eventlist.EventList; import exception.CreatingFileException; import exception.NuScheduleException; +import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import parser.Parser; @@ -19,7 +21,7 @@ public class NuSchedule { private static BusStopList busStops; private static LocationList locations; private final UI ui; - private UserInfo userInfo = new UserInfo("", ""); + private UserInfo userInfo = new UserInfo("", "",false); public NuSchedule(String... filePaths) { ui = new UI(); @@ -52,6 +54,11 @@ public NuSchedule(String... filePaths) { */ public void run() { ui.printGreetingMessage(userInfo); + try { + AutoClearCommand.autoClear(events, storage, userInfo); + } catch (WritingFileException e) { + ui.showError(e.getMessage()); + } boolean isExit = false; while (!isExit) { try { @@ -61,7 +68,7 @@ public void run() { //Command auto_clear = new AutoClearCommand(); //auto_clear.execute(events, locations, busStops, ui, storage); Command c = Parser.parse(fullCommand, locations, size); - c.execute(events, locations, busStops, ui, storage); + c.execute(events, locations, busStops, ui, storage,userInfo); isExit = c.isExit(); } catch (NuScheduleException e) { ui.showError(e.getMessage()); diff --git a/src/main/java/command/AddCommand.java b/src/main/java/command/AddCommand.java index cd46331eb3..ca6ae37800 100644 --- a/src/main/java/command/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -3,12 +3,12 @@ import event.Event; import eventlist.EventList; import exception.ExistingEventInListException; -import exception.NuScheduleException; import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** @@ -34,10 +34,12 @@ public AddCommand(Event event) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws WritingFileException the file is not correctly written. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws WritingFileException, ExistingEventInListException { ui.printConflictEvents(events.checkConflictTiming(event)); events.addEvent(event); diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index a916bbe2e3..e689f32708 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -3,11 +3,12 @@ import event.Event; import eventlist.EventList; import exception.EmptyEventListException; -import exception.NoEventOneMonthAgoException; +import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDate; import java.util.ArrayList; @@ -18,35 +19,52 @@ */ public class AutoClearCommand extends Command { - protected LocalDate clearDate; + protected boolean isAutoClear; - public AutoClearCommand() { - clearDate = LocalDate.now().minusMonths(1); + public AutoClearCommand(boolean isAutoClear) { + this.isAutoClear = isAutoClear; } /** - * Execute the command based on the specific command type. + * Set the AutoClear flag as ON or OFF. * * @param events the list of Events. * @param locations the list of Locations. * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. - * @throws EmptyEventListException the exceptions when the user try to clear an empty list. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) - throws EmptyEventListException, NoEventOneMonthAgoException { - if (events != null) { - ArrayList filteredEventList = events.filterDateBefore(clearDate); - if (filteredEventList.size() == 0) { - throw new NoEventOneMonthAgoException(); - } else { - ui.printAutoClearOn(); - events.clearBefore(clearDate); - } + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws WritingFileException { + userInfo.setAutoClear(isAutoClear); + storage.writeUserInfo(userInfo); + if (isAutoClear) { + ui.printAutoClearOn(); } else { - throw new EmptyEventListException(); + ui.printAutoClearOff(); + } + } + + /** + * Clear all events one month ago. + * + * @param events the list of Events. + * @param storage store the data. + * @param userInfo User's information. + * @throws WritingFileException the file is not correctly written. + */ + public static void autoClear(EventList events, Storage storage, UserInfo userInfo) throws WritingFileException { + if (userInfo.isAutoClear() && events != null) { + if (events.getSize() != 0) { + try { + events.clearBefore(LocalDate.now().minusMonths(1)); + } catch (EmptyEventListException e) { + return;//this exception is unreachable because of the if condition + } + storage.writeFile(events.getEventList()); + } } } } diff --git a/src/main/java/command/ClearBeforeCommand.java b/src/main/java/command/ClearBeforeCommand.java index e5ca4bbbc0..2f176fa37e 100644 --- a/src/main/java/command/ClearBeforeCommand.java +++ b/src/main/java/command/ClearBeforeCommand.java @@ -8,13 +8,14 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDate; import java.util.ArrayList; /* -* Represents the command when the user wants to clear all events before a certain date -* */ + * Represents the command when the user wants to clear all events before a certain date + * */ public class ClearBeforeCommand extends Command { protected LocalDate clearDate; @@ -30,10 +31,12 @@ public ClearBeforeCommand(LocalDate date) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws EmptyEventListException the exceptions when the user try to clear an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NoDateBeforeException, EmptyEventListException { ArrayList filteredEventList = events.filterDateBefore(clearDate); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/ClearCommand.java b/src/main/java/command/ClearCommand.java index 58689b7d3f..09b32f6250 100644 --- a/src/main/java/command/ClearCommand.java +++ b/src/main/java/command/ClearCommand.java @@ -2,12 +2,12 @@ import eventlist.EventList; import exception.EmptyEventListException; -import exception.NuScheduleException; import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user clears all events. @@ -21,10 +21,12 @@ public class ClearCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws EmptyEventListException the exceptions when the user try to clear an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws EmptyEventListException, WritingFileException { if (events.getSize() == 0) { throw new EmptyEventListException(); diff --git a/src/main/java/command/Command.java b/src/main/java/command/Command.java index f5caf338e0..3872695e78 100644 --- a/src/main/java/command/Command.java +++ b/src/main/java/command/Command.java @@ -6,6 +6,7 @@ import eventlist.EventList; import ui.UI; import exception.NuScheduleException; +import usercommunication.UserInfo; /** * Represents the command to be executed. @@ -21,10 +22,12 @@ public abstract class Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ - public abstract void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public abstract void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, + Storage storage, UserInfo userInfo) throws NuScheduleException; public boolean isExit() { diff --git a/src/main/java/command/DeleteCommand.java b/src/main/java/command/DeleteCommand.java index 0d844ac71f..17dd0028ec 100644 --- a/src/main/java/command/DeleteCommand.java +++ b/src/main/java/command/DeleteCommand.java @@ -2,13 +2,13 @@ import eventlist.EventList; -import exception.NuScheduleException; import exception.UndefinedEventException; import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user deletes some event. @@ -28,11 +28,13 @@ public DeleteCommand(int eventIndex) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws UndefinedEventException the user trying to operate (delete/edit/done) some events that does not exist. * @throws WritingFileException the file is not correctly written. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws UndefinedEventException, WritingFileException { if (eventIndex <= -1 || eventIndex >= events.getSize()) { throw new UndefinedEventException(eventIndex + 1); diff --git a/src/main/java/command/DoneCommand.java b/src/main/java/command/DoneCommand.java index 75b6430af5..d949d67f48 100644 --- a/src/main/java/command/DoneCommand.java +++ b/src/main/java/command/DoneCommand.java @@ -1,13 +1,13 @@ package command; import eventlist.EventList; -import exception.NuScheduleException; import exception.UndefinedEventException; import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user mark a task as done. @@ -27,12 +27,14 @@ public DoneCommand(int eventIndex) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws UndefinedEventException the case when the the user trying to operate (delete/edit/done) some events * that does not exist. * @throws WritingFileException the file is not correctly written. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws UndefinedEventException, WritingFileException { if (eventIndex <= -1 || eventIndex >= events.getSize()) { throw new UndefinedEventException(eventIndex + 1); diff --git a/src/main/java/command/EditCommand.java b/src/main/java/command/EditCommand.java index 4a50e80d00..944f92ebaf 100644 --- a/src/main/java/command/EditCommand.java +++ b/src/main/java/command/EditCommand.java @@ -2,10 +2,8 @@ import event.Event; import eventlist.EventList; -import exception.EditIndexOutOfBoundsException; import exception.EditNoEndTimeException; import exception.EndBeforeStartEventException; -import exception.NuScheduleException; import exception.UndefinedEventException; import exception.WritingFileException; import location.Location; @@ -14,6 +12,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDateTime; @@ -24,7 +23,7 @@ public class EditCommand extends Command { private final int index; private final String[] editInformation; private final LocalDateTime[] startEnd; - + private final Location location; private final OnlineLocation onlineLocation; @@ -45,12 +44,14 @@ public EditCommand(int index, String[] editInformation, LocalDateTime[] startEnd * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws UndefinedEventException the user trying to operate (delete/edit/done) some events that does not * exist. * @throws WritingFileException Represents the exception when the file is not correctly written. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws UndefinedEventException, WritingFileException, EndBeforeStartEventException, EditNoEndTimeException { if (index >= events.getSize() || index == -1) { throw new UndefinedEventException(index + 1); diff --git a/src/main/java/command/ExitCommand.java b/src/main/java/command/ExitCommand.java index 9cb69a30af..0b1859c062 100644 --- a/src/main/java/command/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -5,6 +5,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user exits this program. @@ -19,9 +20,11 @@ public class ExitCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) { isExit = true; ui.printExitMessage(); } diff --git a/src/main/java/command/FindCommand.java b/src/main/java/command/FindCommand.java index 25a961b3af..49da8dc592 100644 --- a/src/main/java/command/FindCommand.java +++ b/src/main/java/command/FindCommand.java @@ -4,11 +4,11 @@ import event.Event; import eventlist.EventList; import exception.NoMatchingEventException; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.util.ArrayList; @@ -30,11 +30,13 @@ public FindCommand(String filterString) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NoMatchingEventException the user trying to find a Task with a certain keyword, but such task does not * exist in the list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NoMatchingEventException { ArrayList filteredEventList = events.filterWith(filterString); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/FindDateCommand.java b/src/main/java/command/FindDateCommand.java index 428fbf5fb9..b93fb020df 100644 --- a/src/main/java/command/FindDateCommand.java +++ b/src/main/java/command/FindDateCommand.java @@ -4,11 +4,11 @@ import event.Event; import eventlist.EventList; import exception.NoEventDateException; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDate; import java.util.ArrayList; @@ -31,11 +31,13 @@ public FindDateCommand(LocalDate date) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NoEventDateException the user trying to find a Event with a certain date, but such Event does not * exist in the list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NoEventDateException { ArrayList filteredEventList = events.filterDateWith(date); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/HelpCommand.java b/src/main/java/command/HelpCommand.java index b658c6a326..e2a21bf788 100644 --- a/src/main/java/command/HelpCommand.java +++ b/src/main/java/command/HelpCommand.java @@ -1,11 +1,11 @@ package command; import eventlist.EventList; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user asking for helps. @@ -19,9 +19,11 @@ public class HelpCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) { ui.printHelp(); } } diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 404961e541..8100179527 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -1,22 +1,18 @@ package command; -import event.Event; import eventlist.EventList; -import exception.InvalidEventIndexException; -import exception.InvalidLocationException; -import exception.NuScheduleException; -import exception.UnknownErrorException; import location.Location; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user wants to locate an event. */ public class LocateCommand extends Command { - private String input; + private final String input; public LocateCommand(String input) { this.input = input; @@ -30,9 +26,11 @@ public LocateCommand(String input) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) { int eventNum; if (locations.checkIfInteger(input)) { eventNum = Integer.parseInt(input) - 1; diff --git a/src/main/java/command/PrintAreaLocationsCommand.java b/src/main/java/command/PrintAreaLocationsCommand.java index efe0643235..b52a9c768b 100644 --- a/src/main/java/command/PrintAreaLocationsCommand.java +++ b/src/main/java/command/PrintAreaLocationsCommand.java @@ -5,6 +5,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command for printing locations available at some areas in NUS. @@ -24,9 +25,11 @@ public PrintAreaLocationsCommand(String area) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) { switch (area.toUpperCase()) { case "FOS": ui.printFosLocations(); diff --git a/src/main/java/command/PrintFullListCommand.java b/src/main/java/command/PrintFullListCommand.java index 28cab93860..8d6df186c2 100644 --- a/src/main/java/command/PrintFullListCommand.java +++ b/src/main/java/command/PrintFullListCommand.java @@ -1,12 +1,12 @@ package command; import exception.EmptyEventListException; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import eventlist.EventList; import ui.UI; +import usercommunication.UserInfo; /** * Represent the command for printing everything in the list. @@ -21,10 +21,12 @@ public class PrintFullListCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws EmptyEventListException the exception when the user want to print an empty list. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws EmptyEventListException { ui.printEventList(events.getEventList()); } diff --git a/src/main/java/command/PrintLocationCommand.java b/src/main/java/command/PrintLocationCommand.java index 0fa19ee548..982f95e25f 100644 --- a/src/main/java/command/PrintLocationCommand.java +++ b/src/main/java/command/PrintLocationCommand.java @@ -5,6 +5,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represent the command for print the locations. @@ -18,9 +19,11 @@ public class PrintLocationCommand extends Command { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) { ui.printLocationList(locations.getLocationList()); } } diff --git a/src/main/java/command/ReminderCommand.java b/src/main/java/command/ReminderCommand.java index 44545eb04f..ba47d112a4 100644 --- a/src/main/java/command/ReminderCommand.java +++ b/src/main/java/command/ReminderCommand.java @@ -7,6 +7,7 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDate; import java.util.ArrayList; @@ -29,9 +30,11 @@ public ReminderCommand() { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NoEventDateRemindException { ArrayList filteredEventList = events.filterDateNotDoneWith(filterDate); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/RepeatCommand.java b/src/main/java/command/RepeatCommand.java index d7c9103386..957cb36ab4 100644 --- a/src/main/java/command/RepeatCommand.java +++ b/src/main/java/command/RepeatCommand.java @@ -7,13 +7,14 @@ import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command to repeat certain classes for several weeks. */ public class RepeatCommand extends Command { private int index; - private int numWeeks;//repeat the event for numWeeks weeks + private final int numWeeks;//repeat the event for numWeeks weeks private boolean isAllClasses = false; public RepeatCommand(int index, int numWeeks) { @@ -37,11 +38,13 @@ public RepeatCommand(boolean isAllClasses, int numWeeks) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NuScheduleException { if (isAllClasses) { events.repeatAllClasses(numWeeks); diff --git a/src/main/java/command/SortCommand.java b/src/main/java/command/SortCommand.java index 280e1d5ed5..3d4213d83c 100644 --- a/src/main/java/command/SortCommand.java +++ b/src/main/java/command/SortCommand.java @@ -1,11 +1,13 @@ package command; import eventlist.EventList; +import exception.NuScheduleException; import exception.WritingFileException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; /** * Represents the command call when the user wants to sort the list. @@ -17,8 +19,20 @@ public SortCommand(String type) { this.type = type; } + /** + * Sort the list with given condition. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + * @param userInfo personal information and settings about the user. + * @throws WritingFileException the file is not correctly written. + */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws WritingFileException { events.sortEvent(type); ui.printSortEventMessage(); diff --git a/src/main/java/command/StudyTimeCommand.java b/src/main/java/command/StudyTimeCommand.java index 77daa1fddb..1b68482d4d 100644 --- a/src/main/java/command/StudyTimeCommand.java +++ b/src/main/java/command/StudyTimeCommand.java @@ -2,13 +2,12 @@ import event.Event; import eventlist.EventList; -import exception.NoEventDateException; import exception.NoEventDoneException; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDate; import java.util.ArrayList; @@ -31,11 +30,13 @@ public StudyTimeCommand(LocalDate date) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NoEventDoneException the users try to find the study time but he had not done any thing related to * academics on that day. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NoEventDoneException { ArrayList filteredEventList = events.filterDateDoneAcademicEventWith(date); if (filteredEventList.size() == 0) { diff --git a/src/main/java/command/UserInfoCommand.java b/src/main/java/command/UserInfoCommand.java index 897e02ac48..568f963ca7 100644 --- a/src/main/java/command/UserInfoCommand.java +++ b/src/main/java/command/UserInfoCommand.java @@ -12,12 +12,15 @@ * Represents the command call when the user wants to change the type of himself or herself. */ public class UserInfoCommand extends Command { - private UserInfo userInfo; + private String name; + private String userType; - public UserInfoCommand(UserInfo userInfo) { - this.userInfo = userInfo; + public UserInfoCommand(String name, String userType) { + this.name = name; + this.userType = userType; } + /** * Execute the command based on the specific command type. * @@ -26,12 +29,16 @@ public UserInfoCommand(UserInfo userInfo) { * @param busStops the list of BusStops. * @param ui do outputs. * @param storage store the data. + * @param userInfo personal information and settings about the user. * @throws NuScheduleException the exceptions can happen in this program, * to be handled based on the specific exception. */ @Override - public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, + UserInfo userInfo) throws NuScheduleException { + userInfo.setName(name); + userInfo.setType(userType); storage.writeUserInfo(userInfo); ui.helloWithName(userInfo.getName()); } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index ffe5ef762c..d76cb8f481 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -543,7 +543,7 @@ public void repeatEvent(int eventIndex, int numWeeks) { */ public void clearBefore(LocalDate clearDate) throws EmptyEventListException { if (events != null) { - events.removeIf(event -> event.getDate().compareTo(clearDate) < 0); + events.removeIf(event -> event.getEndDate().compareTo(clearDate) < 0); } else { throw new EmptyEventListException(); } diff --git a/src/main/java/exception/WrongAutoClearArgumentException.java b/src/main/java/exception/WrongAutoClearArgumentException.java new file mode 100644 index 0000000000..c590333efc --- /dev/null +++ b/src/main/java/exception/WrongAutoClearArgumentException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents the case when the user types autoClear but did not provide an arguement. + */ +public class WrongAutoClearArgumentException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "You should type either \"autoClear on\" or \"autoClear off\" to use this function."; + } +} diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 3d1ed8696c..031764a624 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -45,6 +45,7 @@ import exception.InvalidLocationException; import exception.InvalidNumWeekException; import exception.InvalidSortCriteriaException; +import exception.WrongAutoClearArgumentException; import exception.NoEndTimeClassException; import exception.NoEventLocationException; import exception.NoEventTimeException; @@ -67,7 +68,6 @@ import location.OnlineLocation; import location.OutOfNuS; import locationlist.LocationList; -import usercommunication.UserInfo; import java.time.DateTimeException; import java.time.LocalDate; @@ -142,8 +142,6 @@ public static Command parse(String fullCommand, LocationList locations, int size return new ClearCommand(); case REMIND: return new ReminderCommand(); - case AUTO_CLEAR: - return new AutoClearCommand(); default: break; } @@ -154,11 +152,25 @@ public static Command parse(String fullCommand, LocationList locations, int size switch (words[0]) { case "student": case "professor": - return new UserInfoCommand(new UserInfo(fullCommand.substring(words[0].length() + 1), words[0])); + return new UserInfoCommand(fullCommand.substring(words[0].length() + 1), words[0]); default: break; } + //this block deals with auto clear command + if (words[0].equalsIgnoreCase(AUTO_CLEAR)) { + try { + fullCommand = fullCommand.substring(AUTO_CLEAR.length() + 1).trim(); + } catch (StringIndexOutOfBoundsException e) { + throw new WrongAutoClearArgumentException(); + } + if (fullCommand.equalsIgnoreCase("ON")) { + return new AutoClearCommand(true); + } else if (fullCommand.equalsIgnoreCase("OFF")) { + return new AutoClearCommand(false); + } else throw new WrongAutoClearArgumentException(); + } + //this block deals with print locations in the area command if (fullCommand.equalsIgnoreCase(FOS) || fullCommand.equalsIgnoreCase(FOE) || fullCommand.equalsIgnoreCase(SDE) || fullCommand.equalsIgnoreCase(SOC) diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 560db9b23f..1f1a533406 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -119,11 +119,11 @@ public UserInfo loadUserInfo() throws LoadingException { Scanner s = new Scanner(new File(filePaths[1])); if (s.hasNext()) { String[] words = s.nextLine().split(REGEX_IN_FILE); - userInfo = new UserInfo(words[0], words[1]); + userInfo = new UserInfo(words[0], words[1], (Integer.parseInt(words[2]) != 0)); } } catch (FileNotFoundException e) { System.out.println("file not found"); - } catch (IndexOutOfBoundsException e) { + } catch (IndexOutOfBoundsException | NumberFormatException e) { throw new LoadingException(); } return userInfo; diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 81578d1adb..ad440fd27c 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -5,7 +5,6 @@ import exception.EmptyEventListException; import location.BusStop; import location.Location; -import locationlist.LocationList; import usercommunication.UserInfo; import java.time.LocalDate; @@ -39,7 +38,7 @@ public String[] readEditCommand() { String[] editFields = {"TYPE: ", "DESC: ", "LOCATION: ", "START: ", "END: "}; String[] editInformation = new String[5]; System.out.println("Enter the edits for each component. Leave as blank if no edits are to be made."); - // populate editinformation with user data + // populate edit information with user data for (int i = 0; i < 5; i++) { System.out.print(editFields[i]); editInformation[i] = in.nextLine().trim(); @@ -58,14 +57,14 @@ public String readCommand() { } /** - * Prints the logo of DUKE and greet the user. + * Prints the logo of NUSchedule and greet the user. */ public void printGreetingMessage(UserInfo userInfo) { printLine(); - try { - helloWithName(userInfo.getName()); - } catch (NullPointerException e) { + if (userInfo.getName().isBlank()) { System.out.println("I am NUSchedule! What's your name?"); + } else { + helloWithName(userInfo.getName()); } System.out.println("Hello from\n" + LOGO); System.out.println("What can I do for you?"); @@ -133,16 +132,6 @@ public void showLoadingError() { System.out.println("You edit the file in a wrong format. Please check."); } - /** - * Prints the message during executing commands. - * This function is used to make all printing being done in UI. - * - * @param message determined by the command - */ - public void print(String message) { - System.out.print(message); - } - /** * Call when exit the program. */ @@ -391,10 +380,11 @@ public void printRepeatEvent(int numWeeks) { } /** - * Print the success message after the user input auto clear. + * Print the success message after the user input autoClear on. */ public void printAutoClearOn() { - System.out.println("Great! All events happened one month ago are cleared :)"); + System.out.println("Great! Your event happens one month ago will be auto-cleared from the next time you open " + + "this app onwards."); } /** @@ -473,5 +463,11 @@ public void printSocAndBizLocations() { } + /** + * Print the success message after the user input autoClear off. + */ + public void printAutoClearOff() { + System.out.println("Great! Your event happens one month ago will not be auto-cleared now."); + } } diff --git a/src/main/java/usercommunication/UserInfo.java b/src/main/java/usercommunication/UserInfo.java index 05078f1fc2..15aff903b3 100644 --- a/src/main/java/usercommunication/UserInfo.java +++ b/src/main/java/usercommunication/UserInfo.java @@ -6,21 +6,43 @@ public class UserInfo { protected String name = ""; protected UserType type = UserType.UNKNOWN; + protected boolean isAutoClear = false; + + public boolean isAutoClear() { + return isAutoClear; + } + + public void setAutoClear(boolean isAutoClear) { + this.isAutoClear = isAutoClear; + } + + public void setName(String name) { + this.name = name; + } + + public void setType(String userType) { + if (userType.equalsIgnoreCase("PROFESSOR")) { + this.type = UserType.PROFESSOR; + } else if (userType.equalsIgnoreCase("STUDENT")) { + this.type = UserType.STUDENT; + } + } public String getName() { return name; } - public UserInfo(String name, String type) { + public UserInfo(String name, String type, boolean isAutoClear) { this.name = name; if (type.equalsIgnoreCase("PROFESSOR")) { this.type = UserType.PROFESSOR; } else if (type.equalsIgnoreCase("STUDENT")) { this.type = UserType.STUDENT; } + this.isAutoClear = isAutoClear; } public String fileString() { - return name + "//" + type; + return name + "//" + type + "//" + (isAutoClear ? 1 : 0); } } diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 8eee8df47e..9d83ceb56c 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -7,10 +7,7 @@ import eventlist.EventList; import exception.CreatingFileException; import exception.DataFileNotFoundException; -import exception.EditIndexOutOfBoundsException; import exception.EmptyEventIndexException; -import exception.ExistingEventInListException; -import exception.NoEditEventDescriptionException; import exception.UndefinedEventException; import exception.WrongEditFormatException; import location.Location; @@ -25,8 +22,6 @@ import storage.Storage; import ui.UI; -import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.time.LocalDateTime; @@ -56,7 +51,7 @@ void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileExcep storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { Parser.parse("edit 1", locations, 0) - .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage); + .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage, userInfo); }); } @@ -72,7 +67,7 @@ void execute_ChangeDescription_DescriptionChanged() throws NuScheduleException { Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); Assertions.assertEquals("something", events.get(0).getDescription()); } @@ -89,22 +84,22 @@ void execute_ChangeType_EventTypeChanged() throws NuScheduleException { Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); Assertions.assertTrue(events.get(0) instanceof PersonalEvent); editInformation[0] = "class"; Command d = new EditCommand(0, editInformation, startEnd, null, null); - d.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + d.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); Assertions.assertTrue(events.get(0) instanceof Class); editInformation[0] = "selfStudy"; Command e = new EditCommand(0, editInformation, startEnd, null, null); - e.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + e.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); Assertions.assertTrue(events.get(0) instanceof SelfStudy); editInformation[0] = "assignment"; Command f = new EditCommand(0, editInformation, startEnd, null, null); - f.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + f.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); Assertions.assertTrue(events.get(0) instanceof Assignment); } @@ -148,7 +143,7 @@ void editEvent_changeTime_StartEndTimeChanged() throws NuScheduleException { editInformation[4] = "nil"; Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); // end set to null, getEndDate will get start if end is null Assertions.assertEquals(start, events.get(0).getEndDateTime()); } From 8158fe8968eeddba2fabffb4531b14bafdda6416 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 20:15:08 +0800 Subject: [PATCH 227/299] coding style --- src/main/java/parser/Parser.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 031764a624..2d2b54f839 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -168,7 +168,9 @@ public static Command parse(String fullCommand, LocationList locations, int size return new AutoClearCommand(true); } else if (fullCommand.equalsIgnoreCase("OFF")) { return new AutoClearCommand(false); - } else throw new WrongAutoClearArgumentException(); + } else { + throw new WrongAutoClearArgumentException(); + } } //this block deals with print locations in the area command From f1a3515151f4f905dc30124445f601033a23c5b5 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 20:18:50 +0800 Subject: [PATCH 228/299] fixed reposense link --- docs/team/jiaaaqi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/jiaaaqi.md b/docs/team/jiaaaqi.md index 81a2df2ef6..59bd19634a 100644 --- a/docs/team/jiaaaqi.md +++ b/docs/team/jiaaaqi.md @@ -24,7 +24,7 @@ Given below are my contributions to the project: * Justification: This feature will allow user to receive location information. It allows users to find more information using a location name, or an event index based on the event list. -* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=jiaaaqi&tabRepo=AY2021S1-CS2113T-F14-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~other) +* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) * __Project Management:__ * Managed releases `v1.0` - `v2.0` on GitHub From abd075cd3db3edb1282a712fc1238bf31f9b6680 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 20:19:23 +0800 Subject: [PATCH 229/299] coding style --- src/main/java/ui/UI.java | 10 +++--- src/main/java/usercommunication/UserInfo.java | 3 ++ src/test/java/command/EditCommandTest.java | 31 ++++++++++--------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index ad440fd27c..c62c8fa841 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -395,21 +395,21 @@ public void printClearBefore(LocalDate clearDate) { } public void printFassLocations() { - System.out.println("Locations available at FASS are: \n" + System.out.println("Locations exist at FASS are: \n" + "BLK/AS1~8 \n" + "L/LT8~15" ); } public void printSdeLocations() { - System.out.println("Locations available at SDE are: \n" + System.out.println("Locations exist at SDE are: \n" + "BLK/SDE1~4 \n" + "BLK/CELC" ); } public void printFosLocations() { - System.out.println("Locations available at FOS are: \n" + System.out.println("Locations exist at FOS are: \n" + "BLK/S1~17 \n" + "BLK/MD1~11 \n" + "L/LT20~34" @@ -417,7 +417,7 @@ public void printFosLocations() { } public void printFoeLocations() { - System.out.println("Locations available at FOE are: \n" + System.out.println("Locations exist at FOE are: \n" + "BLK/E1~E6 \n" + "BLK/EA \n" + "BLK/E1A \n" @@ -452,7 +452,7 @@ public void printHostelLocations() { } public void printSocAndBizLocations() { - System.out.println("Locations available at SOC or BIZ are: \n" + System.out.println("Locations exist at SOC or BIZ are: \n" + "L/LT16~LT19 \n" + "BLK/COM1 \n" + "BLK/COM2 \n" diff --git a/src/main/java/usercommunication/UserInfo.java b/src/main/java/usercommunication/UserInfo.java index 15aff903b3..264791fab4 100644 --- a/src/main/java/usercommunication/UserInfo.java +++ b/src/main/java/usercommunication/UserInfo.java @@ -32,6 +32,9 @@ public String getName() { return name; } + public UserInfo() { + } + public UserInfo(String name, String type, boolean isAutoClear) { this.name = name; if (type.equalsIgnoreCase("PROFESSOR")) { diff --git a/src/test/java/command/EditCommandTest.java b/src/test/java/command/EditCommandTest.java index 9d83ceb56c..8deea86066 100644 --- a/src/test/java/command/EditCommandTest.java +++ b/src/test/java/command/EditCommandTest.java @@ -21,6 +21,7 @@ import parser.Parser; import storage.Storage; import ui.UI; +import usercommunication.UserInfo; import java.time.LocalDateTime; @@ -51,7 +52,7 @@ void execute_IndexOutOfBounds_UndefinedEventException() throws CreatingFileExcep storage.loadLocationData(locations.getLocationList()); Assertions.assertThrows(UndefinedEventException.class, () -> { Parser.parse("edit 1", locations, 0) - .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage, userInfo); + .execute(new EventList(), new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); }); } @@ -62,12 +63,12 @@ void execute_ChangeDescription_DescriptionChanged() throws NuScheduleException { LocalDateTime by = LocalDateTime.parse("2020-02-02T20:00"); event.Event existing = new Assignment("existing", location, by); events.addEvent(existing); - String[] editInformation = {"","something","","",""}; + String[] editInformation = {"", "something", "", "", ""}; LocalDateTime[] startEnd = new LocalDateTime[2]; Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); Assertions.assertEquals("something", events.get(0).getDescription()); } @@ -79,27 +80,27 @@ void execute_ChangeType_EventTypeChanged() throws NuScheduleException { LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); event.Event existing = new Class("existing", location, start, end); events.addEvent(existing); - String[] editInformation = {"personalEvent","","","",""}; + String[] editInformation = {"personalEvent", "", "", "", ""}; LocalDateTime[] startEnd = new LocalDateTime[2]; Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); Assertions.assertTrue(events.get(0) instanceof PersonalEvent); editInformation[0] = "class"; Command d = new EditCommand(0, editInformation, startEnd, null, null); - d.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + d.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); Assertions.assertTrue(events.get(0) instanceof Class); editInformation[0] = "selfStudy"; Command e = new EditCommand(0, editInformation, startEnd, null, null); - e.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + e.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); Assertions.assertTrue(events.get(0) instanceof SelfStudy); editInformation[0] = "assignment"; Command f = new EditCommand(0, editInformation, startEnd, null, null); - f.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + f.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); Assertions.assertTrue(events.get(0) instanceof Assignment); } @@ -111,13 +112,13 @@ void editEvent_changeLocation_LocationChanged() throws NuScheduleException { LocalDateTime end = LocalDateTime.parse("2020-02-02T21:00"); event.Event existing = new Class("existing", location, start, end); events.addEvent(existing); - String[] editInformation = {"","","","",""}; + String[] editInformation = {"", "", "", "", ""}; LocalDateTime[] startEnd = new LocalDateTime[2]; Location location1 = new Location("location1"); OnlineLocation onlineLocation = new OnlineLocation("zoom.com"); - events.editEvent(0,editInformation,startEnd,location1,null); + events.editEvent(0, editInformation, startEnd, location1, null); Assertions.assertEquals(events.get(0).getLocation().getName(), "location1"); - events.editEvent(0,editInformation,startEnd,null,onlineLocation); + events.editEvent(0, editInformation, startEnd, null, onlineLocation); Assertions.assertEquals(events.get(0).getLink().getLink(), "zoom.com"); } @@ -135,15 +136,15 @@ void editEvent_changeTime_StartEndTimeChanged() throws NuScheduleException { LocalDateTime[] startEnd = new LocalDateTime[2]; startEnd[0] = start; startEnd[1] = end; - String[] editInformation = {"","","","",""}; - events.editEvent(0, editInformation, startEnd,null,null); - Assertions.assertEquals(events.get(0).getStartDateTime(),start); + String[] editInformation = {"", "", "", "", ""}; + events.editEvent(0, editInformation, startEnd, null, null); + Assertions.assertEquals(events.get(0).getStartDateTime(), start); Assertions.assertEquals(events.get(0).getEndDateTime(), end); editInformation[4] = "nil"; Command c = new EditCommand(0, editInformation, startEnd, null, null); Storage storage = new Storage("data/events.txt", "data/UserInfo.txt"); - c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, userInfo); + c.execute(events, new LocationList(), new BusStopList(), new UI(), storage, new UserInfo()); // end set to null, getEndDate will get start if end is null Assertions.assertEquals(start, events.get(0).getEndDateTime()); } From 1dd937b861ffffd99c3954663c133b955e462b79 Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 9 Nov 2020 20:28:18 +0800 Subject: [PATCH 230/299] Updated DG/UG/PPP --- docs/AboutUs.md | 2 +- docs/DeveloperGuide.md | 12 +++--- docs/UserGuide.md | 59 ++++++++++++++++++++++------- docs/diagrams/AddCommand.png | Bin 40679 -> 39075 bytes docs/diagrams/AddCommand.puml | 21 +++++----- docs/diagrams/ReminderCommand.png | Bin 39568 -> 40019 bytes docs/diagrams/ReminderCommand.puml | 22 ++++++----- docs/diagrams/add1.png | Bin 0 -> 7654 bytes docs/diagrams/add2.png | Bin 0 -> 6073 bytes docs/diagrams/add3.png | Bin 0 -> 6092 bytes docs/diagrams/add4.png | Bin 0 -> 16662 bytes docs/diagrams/clear.png | Bin 0 -> 2855 bytes docs/diagrams/done.png | Bin 0 -> 3853 bytes docs/diagrams/list.png | Bin 0 -> 9440 bytes docs/diagrams/reminder.png | Bin 0 -> 5132 bytes docs/team/madbeez.md | 41 ++++++++++++++++++++ 16 files changed, 117 insertions(+), 40 deletions(-) create mode 100644 docs/diagrams/add1.png create mode 100644 docs/diagrams/add2.png create mode 100644 docs/diagrams/add3.png create mode 100644 docs/diagrams/add4.png create mode 100644 docs/diagrams/clear.png create mode 100644 docs/diagrams/done.png create mode 100644 docs/diagrams/list.png create mode 100644 docs/diagrams/reminder.png create mode 100644 docs/team/madbeez.md diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9c45c205de..5f206becfa 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -5,6 +5,6 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/madbeez.md) ![](https://via.placeholder.com/100.png?text=Photo) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](docs/team/johndoe.md) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 804efb6e35..cf693bdbd4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -90,7 +90,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch __API__:`UI.java` The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, `showError`, `printNumEvent`, etc. -The `UI` component reads user input using readCommand() and executes user commands according to the Logic component. +The `UI` component reads user input using readCommand() and then executes user commands according to the Logic component. ### 3.3 Storage
    __API__:`Storage.java` @@ -102,10 +102,10 @@ __API__:`Parser.java` *Figure 3.4.1 Class diagram for Logic component* -The `logic` component parses the user input and executes commands based on the given input. +The `Logic` component parses the user input and executes commands based on the given input. 1. Parser reads the user input and returns a command to be executed by `NuSchedule`. 2. The command execution affects the EventList (e.g. clearing the list). - 3. The result passes back to the UI, which then displays relevant feedback to the user. + 3. The result passes back to the UI, which then displays relevant feedback to the user (e.g. successful execution). ### 3.5 Model The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. @@ -149,8 +149,8 @@ Step 1. The user launches the application to add a class to his schedule. The us Step 2. The Parser class parses the input as a new class with description ‘CS1010 Lecture’, starting time ‘2020-05-05 at 10:00’, ending time ’2020-05-05 at 12:00’, and location ‘LT27’. -Step 3. `addCommand()` is then called with the above parameters, and adds it to the list of events. This also checks -whether there is any event has overlap timing with the newly added event. +Step 3. `addCommand()` is then called with the above parameters, and calls `addEvent()` from EventList to adds it to the list of events. It also checks +whether there are any events that overlap in timing with the newly added event. The newly added event is then printed for the user through `UI`. The sequence diagram below shows the process of adding a new event. ![AddCommand Sequence Diagram](diagrams/AddCommand.png)
    @@ -253,7 +253,7 @@ Step 1. The user wants to see a list of all the events he has added so far, and Step 2. The command calls the `printEventList` function from `UI`, which then prints the list of events. -The sequence diagram below shows what happens when the list command is executed +The sequence diagram below shows what happens when the list command is executed. ![ListCommand Sequence Diagram](diagrams/ListCommand.png) *Figure 4.7 Sequence Diagram for list function* diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 21b7ab16f9..7744e3f33c 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -69,28 +69,50 @@ Adds events/tasks to the schedule. Can support various types of tasks: * Personal events - Format: `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for underline event. - OR `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` for online events. - Note that `/e DATE TIME` is optional. You have a personal event without an ending time. + Format: + `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for offline events. + OR + `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` for online events. + + Note that `/e DATE TIME` is optional. You may input a personal event without an ending time. In `/e DATE TIME`, `DATE` is optional. If you enter `/e TIME`, the default date will be the same as the date that the event starts. For online events, `/p MEETING_PASSWORD` is optional, since not all online events require a password. * Assignments - Format: `assignment EVENTNAME /t DATE TIME /l LOCATION` - OR `assignment EVENTNAME /t DATE TIME /o SUBMISSION_LINK` + Format: + `assignment EVENTNAME /t DATE TIME /l LOCATION` + OR + `assignment EVENTNAME /t DATE TIME /o SUBMISSION_LINK` * Classes - Format: `class CLASSNAME /t DATE TIME /e DATE TIME /l LOCATION` - OR `class CLASSNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` - Same as in personal events, in `/e DATE TIME`, `DATE` is optional. For online events,`/p MEETING_PASSWORD` is optional. - However, `/e DATE TIME` or `/e TIME` is required, since any class should end at some time. + Format: + `class CLASSNAME /t DATE TIME /e DATE TIME /l LOCATION` + OR + `class CLASSNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` + + Similar to personal events, in `/e DATE TIME`, `DATE` is optional. For online events,`/p MEETING_PASSWORD` is optional. + However, `/e DATE TIME` or `/e TIME` is required, since all classes should have an ending time. -Example of usage: - -`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` +Examples of usage: + `class CS2113 Lecture /t 2020-09-23 10:00 /e 12:00 /l LT27` +`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` +`assignment CS1010 Assignment /t 2020-01-04 23:59 /o Luminus` + +Adding a class: +![add1](diagrams/add1.png) + +Adding a personal event: +![add2](diagrams/add2.png) + +Adding an assignment: +![add3](diagrams/add3.png) + +Adding an event with a timing clash: +![add4](diagrams/add4.png) + ### Edit an event With this command, you can edit existing tasks to change their description, start/end date, location and even the @@ -133,24 +155,35 @@ Shows you a list of all events. Format: `list` +Example Output: +![list](diagrams/list.png) + ### Clear events Deletes all events in the list. Format: `clear` +Example Output: +![clear](diagrams/clear.png) ### Mark event as done Mark an event that has been completed with `DONE`. Format: `done INDEX` -Example: `done 1` +Example: `done 2` + +Example Output: +![done](diagrams/done.png) ### Reminder of deadlines Shows a list of all events for today's date. Format: `reminder` +Example Output: +![reminder](diagrams/reminder.png) + ## FAQ diff --git a/docs/diagrams/AddCommand.png b/docs/diagrams/AddCommand.png index c4dd5f6695c38d81b9f99cc9c56b3c473568c43d..c56c875842550cc7126f347ae69c221132dd241b 100644 GIT binary patch literal 39075 zcmc$`2UHZ>)-8+)1VjV`6huUlNK&F?BuPec29+F}B$-ADk|bxEAXz{_a;8NA0i{A^0L@Ga(Kk&qCzxc96V_xn5oiSDYo(Ophn~e zbvijbk?UCMxx;$X6jjS7{~x0Z_2+o?CgfP1>;g_dy`Gwcm+qj$u1Ca5Hhr^MVx-A= zQuDHny6Z~C>5`>yua#PP6luzN-b`9(4oY)V;jUAQ!qSG^fgmd>y_UKsBFAn(1lk%| z=TJWtAjP3mLv^`aHM`Nk-o(qYRC%21w z6WJ*n0c+@XUd(Es%LVZ5D?NvN1h4ZgT(%m4b5B;b6>nFZ_m$V?fYGV54VJ6qYQ{e(p?!3msYnVenQXiod)+`vN z%X`8MP?YgDa+xZXWVt9Uf6V3hp5#DtrxlDLu;>Q}{u{=5V|O$8I$-};5dpW*ib{&w>R*?( z%%;1AD~Bv_Gg09P$zBA@dS4_yIa^C>>vNi`;Lxw4VNk<~Ltb4OLw$5^wzS-hZ)O6v zsoQIjv}ZEahZix|i;xI|QlD+-wxxM`a4E|1n==g%OYL3Q;mPs3fS|fgO#GStmYf|p z@Dtno^1(C+|!w75$tbQhB~NriR~;-Z4G~Pr%ws)j_x;m3 zmL|+%*F|I^_>N9s`x##Gjo)1QGbBB6Z{NI`7!h$t7-I!kAMQMXJD#2#88$OULD{uS zjTbs%X=rF>W@hZ|?PmuuhkU|w*cAvsoEgmYw?LYxvk)QV>{l;e9<6uViKKn6Vj{{WYVXYG zbaPrx%DXp)5}Afs=hDbx1cSiY8LZ{FSlH;WgR-|6Gj?fvBox+F@Z;TV;hDPmj*j4a z^N??nx_xVKE8DWddqY0O^@*-?$421LSJuEVB~BI+^wEqs^T$esX&m7Ua)=f7lP*|L z)sJq+6DU47>=`-UGOr8-*u`i%EiCt>c6;jaspM_%3Tw$3GPw!p{>YCYDE{g9j_y_% zac4ZcVU_Jvqt~(dRwzR05;%Wd>>Qe5ML}A++HU52VU{?sF3Xn;Xaj==+Gxw1VZ9pi zM9pdW`myk|=zXIt%v6v1pGVnn$UQ1dPxQn2wz7R_vy+q}ohws#cCyne()IL3dlWrp zeJ@{rHrsvb`L>)o1OiU`#1_*Ji9XVIVwhQ5_1->wT&XFnRr2Ce9=8RLu6J2(x38}+ zFJ!tNf)Lhm6R*e2mfO7?1YNWIXI{4hI<&#gcpD{;^_>cX3QP4@H)Z|&{Q62^!^@G8 zktHQ1*D#k51)+e~ch^<7tXCQ?(|UkJP*YIU+Dufkn%*P2eOs|Zq0=_Xjo2d)6GrY3 z`tQL;R|eB|VQME`iJZBLDR;Ytt>2)f@e6CxCo#iaRhEOV>;+$%%?JMjF@Og}#pA@o zRH9F&R!+ad+hA+ED-x-#u_(nzoJNT`MB}Rz+$D*8km5#)w5KiR6D=A_^cNK7%RZX1 z<*F;rvpYZU)MUL6vQK~n4{>;SXf;w4)Ov(l-ot>-8JQysEYJ}R$o8GP`4XHaO7TAj zy}qAwy7dZ*v9_=PDwGZF;pq+V`#YY$e}%J)xw@U;e-%pqt5X;DJf7hHysLL?cxwlt zR8P)NHpsv)IB=sFT`7NF?&$^kz2nod&L;Zt2v<&gwlin7QKny~JObf*drxNapO+TZj_F619}`v%qhl5xsMA#hm#zl6NbbM4BRfv0%>yQnNX3&#!Id3*L zMn|T5vb>WUC%y(I4Ia15$V**Q2+YiCx69iD~GMgwF)Fvc~kNtDoM!Zqv3<}ovU(=_yvv&{Qr73T_dE|P~MV{up5 z{!uiM1j+0@3l6>f1`!iIayfU6il}kLy(S3J(18f{+GdYo(I)wiCx8o!$)EgS$Bzx8XQAS zKXBSm@v{mF3UY8np@d#C1s6XezUn{dLV3I50?yUZ8;^1if|?WG-buRlL?(JhWdqG* z)DfG9;B~o8&@~aGNTxO)>PNDqprkP^wk2$~Se{5F^o0W#F+a$=`q@8Ou6nD8kq>XQM!rKaFK7evSPNx^)_tRA+lw+e7ImS zFquadN39{`j`wE91xC!j@DB!WX8QR0g24G+q@R^$iZGaV=IJA^su^Y7k{AA=uN~df z9woP5&cL;g;kwE8Z90u3N3U*AU}a#hVqv`B;{0Si`*A=*>S>qmz3Fl?C5~oUb_t21 z!r?@j!`JOQZkM)jt;Ic-D7v-GP-}BDAcE(fN>urQyauA)tn{PniU=Fmp_7x7|9N4? za}i+KZSuEh2A^4`w$Hxi*4Z8`Fn8--OCED^Ro~JGuMpA9oa-E3GRFP6CZBIB@fLzO z`|h|21o5C>&q5^C{pAy1gVL=Y+2io+EE>iw71Et8k!$CciB+CEj4*Ugs}~V%wKMK z^`TNzmcsAu{&2yx7@>?m!jZ0Tm}dl{Va^9=uD^lJ$g>>u!~S^QdelRK?M-&Gu||QP zYj5ntfS%i(`a-kFlu-V6Tbi`q6>x4A-e1cFv363#W6XHLMQ2pA!A8@N;Y|5?t_BPq zyog+U`D0|kS*E(7hX7x<#Cq&{=ZRzpgI--_HwPj~QnC>> zgtrB&jk}Ym38_%b+S>QHP^x~aPR2&&qLy6nY$b0C@ zKx>*u(PjE19oX>y$)S?P5n4dr6)t*)-R&wu6UREdmaw78+zQP;1jlJB8&hG?W&SG&77i3p>iRz&2GLH&BD~zEPLR=4jynA3+dtlf3^^r!dqI!}lG0B-JpHp%oXMlQ8V{X#G3=-M zYcUJ;zmyFD(8sH*CAOPb6-xL)<`eyi-l$C7Z6D6D?~~Ntx0vc9je9mmxAuZaa4r|v zFAeD5&Z}F#bFzt?Zx_u!`rdTzxrIAQS;zb0MfoK@M#YQHo0Fvm4HOL?E?GgTCZ!+s z>#LuCdPPXd^9az8e1N%=w=SG<;bY&BZ=Y1(^rA>0{8Ws<}4*+T@9r=zNs(M6g$s3h;89 zi3AD`Yb{=bXn&6;AN%=%#csn)0peQKG|nYC2vYO?Vle5TU#@PQ^VM&;RyiK{wbnDo z=hPBU9=u%r9>+?lk*_xGU>LNolLXe$Ixy3mm6;}aXv^Hh;b_}b`7~c$q>rn0U~4N~ z{EeqPRfPgfYF_j?x7GABs`iEU+O+Oo;`pYkt;Kwuuf=hgbjl+Fp4?X2f#D33t#Rlj z6^fL_+~~CI)q?Yhp-o4tHR43eb41K`9PP&VHFqs8I&S*ouYp3$VQ-Zzm3>3cfa3P1 zl7))Bvj599Pd8JwA=G{KRBEBxr4QP)mLt$0Y`*SGCtrJoH2rF+SjWg&lYVS>s>{Z+ z^#tHhCBHe>%>h5*cthsQUjOvXb)U4mTu$fmTHh-RnfBh6A$i&wY+_Sys=R`PhiA`l zSqz9KrJ7%onOp53-8#IUgo$;f8$20=3}wk?;$n*n?a{Do$P`{S_r2~;wb0Ka#fE10 z?@RXEIYa@8G|NCxk#G{ z=p2m8H+rHi9En^Lu>Ags5dZpD^6Ok7r2XmUUn4>(M-DpKJ*w;KB0mj&yxTS~6E{!X@$}MBq3nfkkfH^RHj7s%3ZR zv6{b&WjD-sf2mZPP6KQp*0wksB$)O$kAj8e;>dbN3?a{M`i~eCG`eol$xg!I#mbrE zv{Ig^onE7_iB9;EDT$h8iv+`w@1435&bA20v)O&)btoS>UDMg=s~HVA7#3!UpBb=5 zCuX;3X_WEM=q9~o(gbXTrw^+bjP-Nx(9OzQJi1H4Zw2COdl=Ko=Z*$?7P7fy8n$I) zEx!p`G(LK1nf;!kjJxfdpz30W*=?>pN5gVYE`)OwQ zedCOCpP4Qg-Cs0Sf)Y;Y(CyAil6D1l+Y3a$07uJeu|> zj`mCABkAJ7xpElMTNZOqxALOL&MQHsHqWhAy!DUe#<_KNQ1vYJ&vlmh;#I2UEyge> zbh*z`3CRZYlz|*T_8^-$xn*SDHA<4;6?c-mPF@u~k~^WHbMi49KTooLqs!c27N6Jx zayeJHQz0_Qw2TEOjC=fa3x3Jj?FkMW!$_<1rRv(0&xvod-k&bpQ`UvR{4q&)U&RPEb2G{#e2;2)6@i9QNNV{x%yuwl9$@eE@4Tjy}o*-5w zS(y_lkya~TEwp~W+mkZowAO(LX3S)++Dh`zZfYu98CG`%Tux5Eia~jC9|p&OESoOO z>9pJ?2JdH)N=+6y)9vi&G7puWF|t^Fd6#jJ$o%F=!AM<3RX1l@NaR9#DHp+Fp8QTT zHCOBoyOUl+t^dWSHF|9{irXJzKFDg3E_Uhg3Y&hCfJ;%KuJ=N=w$8KfS9H$dJ8Bf7 zUVFcP9FVV9BgmeyKr!XHqc9^V7j%X$zQArdS$%cNf2W%TIbGeaQ28{PObAWpZ)dpj zD+~g>5;DJIMOQn7FhAG5R%N>(Tz&eQVtyR#?p!wU zg|;L+yg!rpR|m140b}`^{S}wbgVJ&z^s|!Ss%#Rd?|k-bdxdWZ3{4@nasnfzkp3w5 zty!7!`*(43RrnP_rqfXS`0R9JVksmn;%NSB2K%QUwA8}&L-fp}%>qxt*<9S*4QtQr zN;bg!a++T8T3t3Z&$zz9%=L$HzwZr9)~I#bS{V!o%7j0Mo2?!VA9UZ0|7l4^(CJr5Hk%LLN+(T0*tBE?7CymPbf0EcOMM`ZZuxu0$?L0CKSB*7pM~&5 zN9_-?b}sh|Srp0~;IR2{b7lJ@H$wgjFsF}dwd8H@W|BICDrpQx!bQ}t&*V+$8@HGd zCM%!B6+x~2nUbw^S6~qJse~a}4Ag%fXp0SwjtX(OD(kh8uQz8i z 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

    arG|d}u`^W=V>)(ERu;x8cI<)ma^9 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 literal 40679 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 diff --git a/docs/diagrams/AddCommand.puml b/docs/diagrams/AddCommand.puml index d254b96dae..1087af4739 100644 --- a/docs/diagrams/AddCommand.puml +++ b/docs/diagrams/AddCommand.puml @@ -1,15 +1,16 @@ @startuml actor User -activate NuSchedule -User -> NuSchedule : add -NuSchedule --> Parser ++ : parse() -Parser --> NuSchedule -- : parsed command -NuSchedule --> AddCommand ++ : execute() -AddCommand --> EventList ++ : events.addEvent() -EventList --> AddCommand -- : event -AddCommand --> UI ++ : ui.printMessage() -UI --> AddCommand -- : message -AddCommand --> NuSchedule -- : return +User -> ":NuSchedule" ++ : add +":NuSchedule" -> ":Parser" ++ : parse() +":Parser" --> ":NuSchedule" -- : parsed command +":NuSchedule" -> ":AddCommand" ++ : execute() +":AddCommand" -> ":EventList" ++ : addEvent() +":EventList" --> ":AddCommand" -- : event +":AddCommand" -> ":UI" ++ : printMessage() +":UI" --> ":AddCommand" -- : message +":AddCommand" --> ":NuSchedule" -- : return + +deactivate ":NuSchedule" @enduml \ No newline at end of file diff --git a/docs/diagrams/ReminderCommand.png b/docs/diagrams/ReminderCommand.png index 816d887dc1fc45c0438890f1bc024bd0819adfda..f9179e33b350cc1a8c60a468cca576a2bba83084 100644 GIT binary patch literal 40019 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 literal 39568 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 J2t0H7{{VPYEtCKN diff --git a/docs/diagrams/ReminderCommand.puml b/docs/diagrams/ReminderCommand.puml index 7f50a10c2b..6bcd05dc09 100644 --- a/docs/diagrams/ReminderCommand.puml +++ b/docs/diagrams/ReminderCommand.puml @@ -1,14 +1,16 @@ @startuml actor User -activate NuSchedule +activate ":NuSchedule" -User --> NuSchedule : reminder -NuSchedule --> Parser ++ : parse() -Parser --> NuSchedule -- : ReminderCommand -NuSchedule --> ReminderCommand ++ : execute() -ReminderCommand --> EventList ++ : filterDateWith() -EventList --> ReminderCommand -- : FilteredList -ReminderCommand --> UI ++ : printFilteredList() -UI --> ReminderCommand -- -ReminderCommand --> NuSchedule -- +User -> ":NuSchedule" : reminder +":NuSchedule" -> ":Parser" ++ : parse() +":Parser" --> ":NuSchedule" -- : ReminderCommand +":NuSchedule" -> ":ReminderCommand" ++ : execute() +":ReminderCommand" -> ":EventList" ++ : filterDateWith() +":EventList" --> ":ReminderCommand" -- : FilteredList +":ReminderCommand" -> ":UI" ++ : printFilteredList() +":UI" --> ":ReminderCommand" -- +":ReminderCommand" --> ":NuSchedule" -- + +deactivate ":NuSchedule" @enduml \ No newline at end of file diff --git a/docs/diagrams/add1.png b/docs/diagrams/add1.png new file mode 100644 index 0000000000000000000000000000000000000000..6841fa52fdbe9a34381dd815f2b8a568780f499e GIT binary patch literal 7654 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 M5^I=u;^Liu19+uKRR910 literal 0 HcmV?d00001 diff --git a/docs/diagrams/add2.png b/docs/diagrams/add2.png new file mode 100644 index 0000000000000000000000000000000000000000..16446df9d91d317ea245f28895585975aebea66e GIT binary patch literal 6073 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 arJPM7;yF2}DbQ{gb3E#7S8jXm(*FT^SM`(t literal 0 HcmV?d00001 diff --git a/docs/diagrams/add3.png b/docs/diagrams/add3.png new file mode 100644 index 0000000000000000000000000000000000000000..4a968966e4b3573289d18769671ff6c33ec9f6e1 GIT binary patch literal 6092 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 I{rcN~0aq@DssI20 literal 0 HcmV?d00001 diff --git a/docs/diagrams/clear.png b/docs/diagrams/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..68beb7db847066104e00ff837ffae8abc9634e47 GIT binary patch literal 2855 zcmbW3d011~6~Le1h%y3JoMBKBic^V21w~OrcvMl45e%q^f<#d?8e}mN1KFTO6I6z! zsZ~T16(=COB7!V}A6gPzqTho=&|o4#BngBqA%+0GL7h+Aso#A4<1P2Td(S)fEWdM3 z2W|DUFrRM@L6C+2=8fAR$bDGph{lLZZju{!(xTO$IdNnh&gVXSjW?@hG!dLdH4Iy_Ap zQAeZuQh&*~HX~)t&?QZK+mY6*j+MrNA&wiu6g?Y}&X$pjrFC_2t1D!PNh4a$;ROR57Sc7EqjAsGkmPz4hrVpN{GJ#Swnf5?@)u z7`Fn(c*QzP8~bR-u?l#2i^?(YY`_}ZLD%=bajqT?E=OG{OxphK`N7^1o}N*ycG$f= zMK~KBOr(o4Q^P{5h@66Zf=am8I&|wrIB7mC9^7Jw&7`+Uxc{O)Y*38qRmlxh*8m@m z^8T9l_myTmEQcx7)SOS0uy51}4MoL5b@y+7d8<6Gkgq@wN^=cTjVXe`HuX>>Tk84+ zJ38?bA;R6<73Q|zt*z#dbeZO%uX+9GGH0jk37V3wQWf?X~j@haCYiKv)uGEc9*hjRs)%fiSa^)`x%EJ zCosDj|MvsO;HcYzcXLIQ7cUnx`Q)7M*B;KCPceD@%36ef5{;tNVuHylyhK>wWSLXa z&Tyry5JlLgjCY*nr4}r=;O^JUXRDlm(^*x46}jXllwiOI8cyP+ws zs&~&rmulw3kljjRTH98sBeBw4Y64wbjtRN!>$R~~uG?>nBZ=a+V`YCvzD$(E8I8KY z#IB$dt)jOnpRsE*$^!C{@^wi^2^8{tPOBQMzUoMooUPRhE~-c_rHW^4S=0+_-CNu} zIIn)2UvTnfWwNJKeyUd~Rw;tmVaXjM4qnCnCABLN=Vluup1i!? zO_B7`38UqXMyvJeT9mxz3^f{?uRnLO)uT14jCw5el1h;fwx{hXrb$qa8F=zUjK?yE zWu;hfOuq-mnJRm##E%zp$?n$VVtkB;1?vk#VAnDDg9&M-KH7&RhV)u;S7X+=*LZv& z0Yxw>s?^EhzK0vJDhB>p5fj{%G{gHu$ z@gvPvYdQVAW}eI+qvm+79$~xPAXWcF2v^o-Sg8@*l%}if2)O7(n+9=D(4<~eXtmzt%eKC+OFQ4y%IETQFEVdb0`l%Yk^ZS zfokCQsu6ame@wJ7a8{N+6`v@h-V_6YrLo;U=^K3QQR&i0-Fmw>aRmOmg~&oPn;cwJ zjo@%a6=|LZ^FT8dzSISIa|F)F*#H;Udj7~lB+z#g2z-z@7nlydk#PrBZ4B?eQhkoQ zqW)!5I9O;sv>`k7(<0qse6kWtx?+Ft+{tuj!Y(EIO^Y+~GMQQA0n)>{xx%z+DBkl_ znFdccxiqSar5a`poGQjjSE6?_j*Cr3~aCr+ zLi2V=w-%<2dE&B~kpr2pzDZFZiloDDNZ1)E4S=2>3dOog_(!X${4NKOod(sF_$8AH zSYEa~2dM5wPnqxryBU%$^Q?hce3lB|kA?ufPikz@IVO$Nqz+){#w_}=C1xq)k;fWa z5Din?CKW*-qGv*JPGWpFyKl zori$%sWPS#>L0t@%uSyNb{V(rk~!qPP1Jkr)zmhWNl2H{p# zGZxZ0D4cDW-XO+Lo>T~OFHZas8MuoZom)m78XZ9xIBCQ#uFK#Qs2lRR+F=v*{(JDG zEn*)7Ag{y$(@t<09l~$x&U!0XZtUnzWIyLQ23tM1to)ghcA}cV;?Tl83tQGFodd`$ zvODS;c1*cn?f_u?A^zNrwZ(}TB$r;Qs}LM!KVMV~5Ewi=TkX1x_zdkfGF|!$Y)}NH zT`x>3VI8g=Mhbke=vDN6CqMEssk!QlTrpF~!mOU32t_)4BLaufTCkr;XX<8~+e*d? z&QQ{{KRva~Z$C;Iy3%V(-32m`^NK_}=y91T5ggc#)FK1d8C6DB7I}@&W+ zkW>Kp*LGw|b*t#PBpZaCQC1gAQR(^z6P!vDNFK{RVL9czez?fzIm<{vfce3M0yDz+ zQUtFpcdVSa-NmxQvfP(P?S0iEtfsE9oZbHVI4zN@eN$)&BG}lTm>N)`o;XlS@=@OM z#F|`mE)#RPjym)ro<{tSb?;r`lx9ICK7jDjj0ocDxt1;7D%cWQMY^jNuCmv{W?zP zcVdt~R(0o8u3iqHF29J{A>YRaWj2$jt(w?D?!F9gl(ae*ln+pdBQo%2vE8yn^MSPY zWtQWCc({u;bAtNRaNJv~vxeZlC1O0yVA1|MeiTx_d+e$Fr zg1S!z5p0(6q?Md0y?F&b8P6b*}4~dEfWGp67m^=f3aX@4oM( z}QJL-}B@E2RsxmdLBItu?0Gl;Nz1ZdpCOsdUSK! zYT&2fd+UX7{4PS!_9*zLAUdy4hag0*v!lH?oiN)U_7CkEwQHlcjiL>2Ywt4rU+{Z+ zL(4G%J=`|4dtZB&SNuI%yt-%xL8pEee*%50#M}X0RomwdL6&7!3Q%w3N8!e*I&?K) z->;+S_>aP|=1X%0!nS)6dyoo{EH3`7_-*MZ27-nq6Q+U{U6LZysChP05h@!k*w8I_ ze|uO3k`=G|W#U|Ox?eaY5u<{Wez-R%8TqLlRoVbSjZ8}9io2(7*OrJn1Sz4K)x4vW zR!7lS+>^7935zW@PC)cz8yAkgSvtqpjmtwAJ*K{MD zn*U;+XTGW(H)A$_pKv-hXucO~drGn-9HS{Mc@H;O$xDcj&&Ed{T4Tn7DL<2WCcHA- z!73?Fe^5Rf@U1lQitR|muR)PpoN~x^sfS$A{gIdEMHP0xNX#y_-Vic;8Kas@?6$D_ zwQVogWTnchv!d8Y(d9+uj14qxh#p2iw=4d;xs}1!0}YLX>KieQ!_tt*E%}5imT_ss z$7AoB8(N>Qqa(PMT(oLKBP}j`@#C&PPp{T!B-fFMNv?Z?mG`ZU#CBfl{O}KxF zuV6br*q%W5pXZ$DC9cGtq8``gSY{gDO6EWPJE>VkH`=<4=KYDp?Lp%8V~Ar2_Dgl) zq~9K-E-rV^-Uu|t`cw){4{b{%Qp$|xdeePPUB0~U;0hL)Dkomgay!y^dP+0M_etO` zPHacatYBg10cnp3Ui?s)9`)qKeB>9!2_7eX51rKISklFn^jvHq-h!KJPA~3PTh!_q zzwRDQsgjjf6O=2Tp6-_J%bsR084z6Ej8@C0?pe~O!C|>4QCaj^0c8Yli*oPAca$W$ z-R=2OmFEO+lto8jtUKL%&a@P;68e9<$xXW?uIw7`kh!RlxA*Xz7Hg?fNkVaw&=dHX zwroI{W6^BqaR)aCNpbaXLUZ5VkRILxck*_|Xs$MGdZ!0BEh96;n7o^0bI2248DiqE z23C+LA@qC(W-HHpuX>-^one-j2Ui20dM%LdT#dD^2zl2!h1!&DilK(%4OR*LKdtd% zdV_J2rNCXLoXBdzydyP#(%;69$p*977OBAGD%q^G41X;`QJ~v1^U&9wIm@Y7xg%BL z)eWC{Vk#AEVdYy2TMsrMr{nXb%K9^r=NGM|ao2_yuu-#V(bXDwU?hAHQt&3Kj{?ND?sD`9o`eskX}< znquqE4Xp}h!%-YyD$YWY&~t}x0j9=+>&XMBIfc^OW@0?>opd}>{x*Em88tEaM&XC3 z@;qY#b8{#K6Y!Zit<^XrgBd>D?ZkhRv#mBd_il-k@20Cy9+>TaWtieaJzg8UX;@~U zo1i4K3kgrGljBIh9sV?@Fquzf7x9^T@&7Q&xm}78p&^khsx`gk?e5ORWBO=J(DF65 zw>4pZP40=5$<&x9u3awVxI7N4vm%cV<`_gYYYeIMWnW1QopFJYVWbQb&{$&NUMdj8P%s5k2E~+gt4cah~$XIQEMlf?K?yVGP*2=_4oabLZ|~Ur`H4 zx+02CvSWH}B)cB@03ZbNwvG-O3jiZCTrf~a>iXQ$jO$1+Rcqxz&~_u&Z2ig3 z6&DzRA8={}pyaOFrs~lC4H|o*ZEy1RA9VE5IB=U};^Td#x@feu74dB-`q{u6%^=GM zt+hROZ)hyC*RCUn} zbAQ)(MYo6dcE)VtQm^pv8Uu5wUG_B4>e1!(oo4YpOkwfLJ>w7X2Qak{YgzB>3;s7P z2SBGHysI+DmGh1LI#9xAGSm^gq@l%9 z`g{d}TmQ`N*)*6Ju+#-VA_NQOI#i&r&bk#(dq9rZRSyoGIqA+)6R{8^hj*{{Js((_ zWP1HiraWyV8&pn0u8jrbWyj<#1g8mK{w^e^PN!^{5_8)^t}QXrsps$dUmz{TYAbG)$y4!k>I`3Dt8A4W?D%%K5qb~_x zoGZ+AO2W*vWshoib&FC{BoiHnI#Flu=U>DV&g4p@{?Pi zdfW5~s+*=WqJYnC*lc*s-mXZQuKArMT;1|sql%n-nZ^&sdF0r6uBAj6&3!$QV;#vTm%FDF$igP}m;k7^@|;C2;lkX4!6JLW--2uaCe2t5bfZo{cS3g8@g^ZjcxY_RGiNYyy;5z42*T zcd_+PDbw@eoyELuBF{IGC$~q`5u&2=UxU;kb4odYQRz$P;ioNB`sN117(t&iW)1{o z9h)vRO7~%xWQIgp5jSG-aEh+7Zk@M`eQk(|X`1C;n@3Irj_WnVPaEAo4){Cjl4RlQf~;Sg$VJY( z81(&iw8$+UTm)X5LljwJ8jf-0*vC~G=~H|d9noR?UnT}(4*Kv+=Y6O$z|`91cEqTb z;ODY4nk=;Kx*V=p8E81YtWfG8%(Aw5T?1#D#Sobiq4dr$=YV_=wgL#ZyKk9Z zXlz$r2a?}14oXoNB`^~w$~PGret}EFFLz*PC>IPp?&usOk|<@1YE(4Qj&nKfnvaP( zDZf$+!@JPlhnIBVZe%XNfHsZ-h1>4?VEHCzVu?|ONu7^>6J=Pr6$2v05+8qI_BoYB z45oZ-@L~4~{$~+mZQ@VjGlUzeF>9ZGtGmHn+rH0z)p12>FHs$`+p<}suZhP476YEo z?S{CI3Yx8#cLW&l-vqVHMYX(fv7Jd0QqsOT0@M1TRePw>)|J_Lu~axzOXX+FW7t_B z0ATM&2Q7!`uYUoJWKB2w@iP25k>{H0f~Y3MjnyB2uS^2wN7WS}>2ift+j=njlAGz! zlX9`Bg0r*yO8j%!fJI4}l3!zI$k5e+c)3_Ls|&D1O!(UP4>#k~pbG=V%ucWuKsk9q z02`x?5}mIb?u+Z_7AKKTP|j1%qp_Xr!p~md5u1#5jc`E4&;V*|DKK+KGSXMmguj?` zyTZG3i}OL|JOaC>9f{v6Vu30JK`Peqm{WwXAX<7%O!z7d`MIt*6lSZ6;r*bLb~QN$ zu6l5ICOa(yg0wUy^s@@nGX6>7w}2ye34a3z2M5}e;Q04qRk-8GHYW%F!Aw@J`%Re=K3+$mOFty#v# zt1FD$kb`i6j{UKl`@b8OKX!<+whahcYNqI$jv4=1+xTZ2o!eM{f5mvOXelsxC=|4? Okh7D!Bm3~T|M(A&XH2R9 literal 0 HcmV?d00001 diff --git a/docs/diagrams/list.png b/docs/diagrams/list.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdfc89ae755d4b99d71eaaa04bc5097c924f9ed GIT binary patch literal 9440 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 Date: Mon, 9 Nov 2020 20:31:21 +0800 Subject: [PATCH 231/299] update PPP --- docs/team/Lee-Juntong.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 515e36d066..8b8f6dae1d 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -19,7 +19,7 @@ Given below are my contributions to the project. recorded. It also considers the case when certain event is across more than one day, the study time will be calculated correctly for different dates. -* **New Feature**: Added the ability to mark an event as done. +* **New Feature**: Added the ability to mark an event as done, as well as reject it if the current time is before the ending time. * **New Feature**: Added the ability to delete an event. @@ -48,7 +48,8 @@ Given below are my contributions to the project. * **Enhancements to existing features**: * Fix bugs happening to the features. (Pull requests [\#37](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/37), [\#145](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/145)) - + * Make Auto Clear as an option that user can turn on or off. (Pull request [\#182](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/182)) + * **Documentation**: * User Guide: * Added documentation for the features `delete` and `find` [\#72]() From 8434398e379639d3bd7dd50d25b1540c1c366ca7 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 20:35:43 +0800 Subject: [PATCH 232/299] fix repo sense link --- docs/DeveloperGuide.md | 13 ++++--------- docs/team/jiaaaqi.md | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 831e406cb3..384b29d5d4 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -43,8 +43,7 @@ Wan Shi Jie Brendan
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    * [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    -* [Appendix D. Glossary](#appendix-d-glossary)
    -* [Appendix E. Instructions for manual testing](#appendix-e-instructions-for-manual-testing) +* [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) ## 1. Introduction @@ -325,7 +324,7 @@ JUnit is used to write tests for the project. Learn more about JUnit [here](http If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` on your keyboard. Alternatively, you can open a console and run the command `gradelw clean test` (Mac/linus: `.gradlew clean test`). -## Appendix A Product scope +## Appendix A: Product scope ### User profile @@ -343,7 +342,7 @@ NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events -## Appendix B User stories +## Appendix B: User stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| @@ -363,11 +362,7 @@ NUSchedule aims to assist the target audience with: 2. A user that is proficient in typing will find this application to be faster and more convenient to use than applications that requires mouse clicks. -## Appendix D: Glossary - -* *glossary item* - Definition - -## Appendix E: Instructions for manual testing +## Appendix D: Instructions for manual testing 1. Initial launch * Download the jar file [here](https://github.com/AY2021S1-CS2113T-F14-4/tp/releases) and place it in an empty folder. diff --git a/docs/team/jiaaaqi.md b/docs/team/jiaaaqi.md index 59bd19634a..6d8b52ed64 100644 --- a/docs/team/jiaaaqi.md +++ b/docs/team/jiaaaqi.md @@ -24,7 +24,7 @@ Given below are my contributions to the project: * Justification: This feature will allow user to receive location information. It allows users to find more information using a location name, or an event index based on the event list. -* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) +* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi) * __Project Management:__ * Managed releases `v1.0` - `v2.0` on GitHub From 01aea2eddf28197305bf2601336843278d9fed25 Mon Sep 17 00:00:00 2001 From: madbeez <56807788+madbeez@users.noreply.github.com> Date: Mon, 9 Nov 2020 20:36:50 +0800 Subject: [PATCH 233/299] Fixed typo in aboutus.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 0ff80100ca..c8aa2196fd 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -5,6 +5,6 @@ Display | Name | Github Profile | Portfolio ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](team/max-wunan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](team/jiaaaqi.md) -![](https://via.placeholder.com/100.png?text=Photo) | Wan Shi Jie Brendan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/madbeez.md) +![](https://via.placeholder.com/100.png?text=Photo) | Wan Shi Jie Brendan | [Github](https://github.com/madbeez) | [Portfolio](team/madbeez.md) ![](diagrams/Lee_Juntong'sCat.jpg) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](team/Lee-Juntong.md) From e3706ba0595473656e85e8a97a4d6f7236fd5d8d Mon Sep 17 00:00:00 2001 From: madbeez <56807788+madbeez@users.noreply.github.com> Date: Mon, 9 Nov 2020 20:38:48 +0800 Subject: [PATCH 234/299] Update madbeez.md --- docs/team/madbeez.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/madbeez.md b/docs/team/madbeez.md index 40709915ab..ac11e973d7 100644 --- a/docs/team/madbeez.md +++ b/docs/team/madbeez.md @@ -7,7 +7,7 @@ Wan Shi Jie Brendan's Project Portfolio Page NuSchedule is a task scheduling app targeted at NUS students and staff. It is written in Java and has about 5 kLoC. The user interacts with the app via a command line interface. -##Summary of Contributions +## Summary of Contributions Given below are my contributions to the project. * **New Feature**: Implemented the ability to add new events * What it does: This function allows users to add new events to their schedule, like classes and assignments. From b7f4e93e0bd1fe6664fd3915c191dd2bff904aa1 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 20:40:18 +0800 Subject: [PATCH 235/299] Reject the user from marking an event with later end time compared to now as done. Of course, Assignments are not considered inside. --- src/main/java/command/DoneCommand.java | 3 ++- src/main/java/eventlist/EventList.java | 7 ++++++- .../java/exception/DoneBeforeEndException.java | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/exception/DoneBeforeEndException.java diff --git a/src/main/java/command/DoneCommand.java b/src/main/java/command/DoneCommand.java index d949d67f48..b47c66619c 100644 --- a/src/main/java/command/DoneCommand.java +++ b/src/main/java/command/DoneCommand.java @@ -1,6 +1,7 @@ package command; import eventlist.EventList; +import exception.DoneBeforeEndException; import exception.UndefinedEventException; import exception.WritingFileException; import locationlist.BusStopList; @@ -35,7 +36,7 @@ public DoneCommand(int eventIndex) { @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage, UserInfo userInfo) - throws UndefinedEventException, WritingFileException { + throws UndefinedEventException, WritingFileException, DoneBeforeEndException { if (eventIndex <= -1 || eventIndex >= events.getSize()) { throw new UndefinedEventException(eventIndex + 1); } diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index d76cb8f481..8a10bbd208 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -6,6 +6,7 @@ import event.Event; import event.PersonalEvent; import event.SelfStudy; +import exception.DoneBeforeEndException; import exception.ExistingEventInListException; import exception.UndefinedEventException; import exception.EndBeforeStartEventException; @@ -68,8 +69,12 @@ public void addEvent(Event eventToBeAdded) throws ExistingEventInListException { * // * @throws UndefinedEventException the event is not defined but * // the user want to mark it as done */ - public void doneEvent(int eventIndex) throws UndefinedEventException { + public void doneEvent(int eventIndex) throws UndefinedEventException, DoneBeforeEndException { try { + if (events.get(eventIndex).getEndDateTime().isBefore(LocalDateTime.now()) + && !(events.get(eventIndex) instanceof Assignment)) { + throw new DoneBeforeEndException(); + } events.get(eventIndex).markAsDone(); } catch (IndexOutOfBoundsException e) { throw new UndefinedEventException(eventIndex); diff --git a/src/main/java/exception/DoneBeforeEndException.java b/src/main/java/exception/DoneBeforeEndException.java new file mode 100644 index 0000000000..ba2872ec5f --- /dev/null +++ b/src/main/java/exception/DoneBeforeEndException.java @@ -0,0 +1,17 @@ +package exception; + +/** + * Represents the case that the user want to mark an Event has an end time that is after the current time as done. + */ +public class DoneBeforeEndException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message. + */ + @Override + public String getMessage() { + return "The selected event ends at a later time. Perhaps you want to edit the end time of it, if you have " + + "really done it."; + } +} From 280a954ec9e92784890fbdaa87366f97206d1525 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 20:47:33 +0800 Subject: [PATCH 236/299] make the function doneEvent() work as expected --- src/main/java/eventlist/EventList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index 8a10bbd208..07d01ba82e 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -71,7 +71,7 @@ public void addEvent(Event eventToBeAdded) throws ExistingEventInListException { */ public void doneEvent(int eventIndex) throws UndefinedEventException, DoneBeforeEndException { try { - if (events.get(eventIndex).getEndDateTime().isBefore(LocalDateTime.now()) + if (events.get(eventIndex).getEndDateTime().isAfter(LocalDateTime.now()) && !(events.get(eventIndex) instanceof Assignment)) { throw new DoneBeforeEndException(); } From b7427701b022d9e56ae7e25fd1a704bbae9e7a97 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 20:51:46 +0800 Subject: [PATCH 237/299] update q&a --- docs/UserGuide.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index d9715e6d7b..faeab34ede 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -217,6 +217,10 @@ Format: `reminder` **A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder. +**Q**: + +**A**: + ## Command Summary |Action|Command|Example| From 1c0c86b2c2d12d3699932a820f05c2dd86d40688 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 21:07:06 +0800 Subject: [PATCH 238/299] Update xuche123.md --- docs/team/xuche123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index eee7ecbdbc..5ca73a3067 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -1,6 +1,6 @@ # Project: NUSchedule -NuSchedule is a task management application written in Java. It is operated on the command line interface. +NUSchedule is a task management application written in Java. It is operated on the command line interface. Given below are my contributions to the project. From 1c2398fe92fd87168301183049681c28cc19fcab Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 21:07:47 +0800 Subject: [PATCH 239/299] Added NullpointerException for printGreetingMessage() --- src/main/java/ui/UI.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index c62c8fa841..2c51e2e378 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -61,10 +61,14 @@ public String readCommand() { */ public void printGreetingMessage(UserInfo userInfo) { printLine(); - if (userInfo.getName().isBlank()) { + try { + if (userInfo.getName().isBlank()) { + System.out.println("I am NUSchedule! What's your name?"); + } else { + helloWithName(userInfo.getName()); + } + } catch (NumberFormatException e) { System.out.println("I am NUSchedule! What's your name?"); - } else { - helloWithName(userInfo.getName()); } System.out.println("Hello from\n" + LOGO); System.out.println("What can I do for you?"); From b234ae4bde4c4067ef5cb3d3cb4f1dd893fe7759 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 21:17:01 +0800 Subject: [PATCH 240/299] minor edits --- docs/team/madbeez.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/team/madbeez.md b/docs/team/madbeez.md index ac11e973d7..fb462aca74 100644 --- a/docs/team/madbeez.md +++ b/docs/team/madbeez.md @@ -1,6 +1,4 @@ ---- -Wan Shi Jie Brendan's Project Portfolio Page ---- +#Wan Shi Jie Brendan's Project Portfolio Page # Project: NuSchedule From 1e20161cf276c42b986b08853d2104c094c08b7e Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 21:21:37 +0800 Subject: [PATCH 241/299] Update UserGuide.md --- docs/UserGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3b7355bd5f..31471d7c33 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -16,7 +16,7 @@ Wan Shi Jie Brendan ## Introduction -NuSchedule is a straightforward yet sophisticated application that helps you manage your events. It allows you +NUSchedule is a straightforward yet sophisticated application that helps you manage your events. It allows you to keep track of not only your school events or activities (eg. lectures, tutorials, assignments), but also your personal activities. It utilises a command line interface (CLI), which accepts user input in the form of text. This gives the application both simplicity and speed, setting it apart from other apps such as NUSMods and Luminus. From bfae4334d01ff556012aa686db07b7cabd56e24a Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 9 Nov 2020 21:21:50 +0800 Subject: [PATCH 242/299] Fixed UG/PPP formatting --- docs/UserGuide.md | 16 ++++++++-------- docs/team/madbeez.md | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 3b7355bd5f..898e3194bb 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -103,16 +103,16 @@ Examples of usage: `personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` `assignment CS1010 Assignment /t 2020-01-04 23:59 /o Luminus` -Adding a class: +Adding a class: ![add1](diagrams/add1.png) -Adding a personal event: +Adding a personal event: ![add2](diagrams/add2.png) -Adding an assignment: +Adding an assignment: ![add3](diagrams/add3.png) -Adding an event with a timing clash: +Adding an event with a timing clash: ![add4](diagrams/add4.png) @@ -203,7 +203,7 @@ Shows you a list of all events. Format: `list` -Example Output: +Example Output: ![list](diagrams/list.png) ### Clear events @@ -222,7 +222,7 @@ Delete events existing in the list, you can choose to delete all, auto delete or Example: `clearBefore 2020-03-10` -Example Output: +Example Output: ![clear](diagrams/clear.png) ### Mark event as done @@ -232,7 +232,7 @@ Format: `done INDEX` Example: `done 2` -Example Output: +Example Output: ![done](diagrams/done.png) ### Reminder of deadlines @@ -240,7 +240,7 @@ Shows a list of all events for today's date. Format: `reminder` -Example Output: +Example Output: ![reminder](diagrams/reminder.png) diff --git a/docs/team/madbeez.md b/docs/team/madbeez.md index fb462aca74..679b61f175 100644 --- a/docs/team/madbeez.md +++ b/docs/team/madbeez.md @@ -1,4 +1,4 @@ -#Wan Shi Jie Brendan's Project Portfolio Page +# Wan Shi Jie Brendan's Project Portfolio Page # Project: NuSchedule From c684edb2248902af9ab55e256a4b50e1ef210b3b Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 9 Nov 2020 21:22:06 +0800 Subject: [PATCH 243/299] Updated PPP --- docs/team/madbeez.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/madbeez.md b/docs/team/madbeez.md index 679b61f175..eedbc1c887 100644 --- a/docs/team/madbeez.md +++ b/docs/team/madbeez.md @@ -1,6 +1,6 @@ # Wan Shi Jie Brendan's Project Portfolio Page -# Project: NuSchedule +# Project: NUSchedule NuSchedule is a task scheduling app targeted at NUS students and staff. It is written in Java and has about 5 kLoC. The user interacts with the app via a command line interface. From 29815d24268f484a747cceb9032d77f6912e05c9 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 21:24:44 +0800 Subject: [PATCH 244/299] Update xuche123.md --- docs/team/xuche123.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 5ca73a3067..70746b8fc8 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -5,14 +5,14 @@ NUSchedule is a task management application written in Java. It is operated on t Given below are my contributions to the project. * **New Feature**: Added the ability to edit previous events. - * What it does: Allows the user to edit previous commands. User can choose to edit individual fields of an event such as just choosing to edit the location of an event. + * What it does: Allows the user to edit previous commands. The user can choose to edit individual fields of an event such as just choosing to edit the location of an event. * Justification: This feature improves the product significantly because it provides the user a quick and simple method to correct any mistakes made in the addition of an event. Instead of deleting the event and creating a new one, the user can just edit that particular event with the correct field information. - * Highlights: This command has to be constantly updated whenever a new event class is added to allow for the editing of an event into that event class. Testing and implementation of this command was difficult as the command has to cover for all of the event classes. + * Highlights: This command has to be constantly updated whenever a new event class is added to allow for the editing of an event into that event class. Testing and implementation of this command was difficult as the command has to cover for all of the event classes. -* **New Feature**: Added a history command that allows the user to sort events. - * What it does: Allows the user to sort previous commands. User can organise their events to by sorting them in a specified order. +* **New Feature**: Added a sort command that allows the user to sort events. + * What it does: Allows the user to sort previous commands. The user can organise their events to by sorting them in a specified order. * Justification: This feature improves the product significantly as it allows the user to order the events, allowing the user to prioritise certain events over others. For example, the user can choose to sort by time, which will cause eventing that are due soon to be sorted on top of events that are due later in the future. - * Highlights: This command was implemented by making use of comparators. Sorting by location was challenging to implement as there were two location types, online and offline locations and the command had to account for situations where either of them where null. + * Highlights: This command was implemented by making use of comparators. Sorting by location was challenging to implement as there were two location types, online and offline locations and the command had to account for situations where either of them where null. * **Code contributed**: [RepoSense link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=xuche123&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) From b2f48490cd9ecb4568537c0248cd06215dff4e7a Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:25:24 +0800 Subject: [PATCH 245/299] -update q&a of ug --- docs/UserGuide.md | 15 ++++++++++++--- docs/team/max-wunan.md | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 09f4211279..e8711291b3 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -16,7 +16,7 @@ Wan Shi Jie Brendan ## Introduction -NuSchedule is a straightforward yet sophisticated application that helps you manage your events. It allows you +NUSchedule is a straightforward yet sophisticated application that helps you manage your events. It allows you to keep track of not only your school events or activities (eg. lectures, tutorials, assignments), but also your personal activities. It utilises a command line interface (CLI), which accepts user input in the form of text. This gives the application both simplicity and speed, setting it apart from other apps such as NUSMods and Luminus. @@ -251,9 +251,18 @@ Example Output: **A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder. -**Q**: +**Q**: What if I cannot run the application, or the application suddenly stops running unexpectedly? -**A**: +**A**: If you cannot run the application at the beginning, please refer back to the Quick Start section and check +whether the jar file is in the correct folder. If you cannot find what is wrong, please take a screenshot of your computer +and report it as an issue to [this link](https://github.com/AY2021S1-CS2113T-F14-4/tp/issues). + +**Q**: What should I do if I cannot get the input format for adding events correctly? + +**A**: For all wrong input format, there will be an error message to tell you what exactly you have input wrongly. If +the error message is not helpful, please refer back to relevant sections in Features. We recommend you to follow the +instructions provided closely as the current version of NUSchedule has a relatively high requirement in terms of input +accuracy. If you really cannot find what is wrong, please report it as an issue to [this link](https://github.com/AY2021S1-CS2113T-F14-4/tp/issues). ## Command Summary diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index 02be411207..d9e74049a3 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -1,8 +1,8 @@ # Wu Nan - Project Portfolio Page -## Project: NuSchedule: +## Project: NUSchedule: -NuSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it +NUSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it using a Command Line Interface (CLI). It is written in Java and has around 5 kLoC. Given below are my contributions to this project: @@ -11,7 +11,7 @@ Given below are my contributions to this project: * What it does: This function allows users to view the current version of this application by typing in `help`, and gives them a brief description of all features. This function also provides users with a link to the detailed user guide. * Justification: This feature improves the user-friendliness of this application greatly as users may choose to - refer to help message whenever they feel lost or are unfamiliar yet with the usage of NuSchedule. Also, with further + refer to help message whenever they feel lost or are unfamiliar yet with the usage of NUSchedule. Also, with further development of NuSchedule, there will be more and more features/commands available, this function will become more and more useful for users to refer to. * Highlights: The code for this function needs to be updated everytime there is a new feature, or a new version release. From 0bd3f891d0efcfa42402043d666e4717386b6452 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 21:26:40 +0800 Subject: [PATCH 246/299] fixed the problem when UserInfo.txt is empty --- .gitignore | 10 ++++------ src/main/java/command/AutoClearCommand.java | 17 +++++++++-------- src/main/java/storage/Storage.java | 2 +- src/main/java/ui/UI.java | 11 ++++------- 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 8b90521f7b..892becd300 100644 --- a/.gitignore +++ b/.gitignore @@ -12,13 +12,11 @@ src/main/resources/docs/ .DS_Store *.iml bin/ -data/events.txt +data/ + -<<<<<<< HEAD /text-ui-test/ACTUAL.txt text-ui-test/EXPECTED-UNIX.TXT -data/events.txt -======= ->>>>>>> Coding_Standard + src/main/java/META-INF/MANIFEST.MF -data/UserInfo.txt + diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index e689f32708..61e0877299 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -56,15 +56,16 @@ public void execute(EventList events, LocationList locations, BusStopList busSto * @throws WritingFileException the file is not correctly written. */ public static void autoClear(EventList events, Storage storage, UserInfo userInfo) throws WritingFileException { - if (userInfo.isAutoClear() && events != null) { - if (events.getSize() != 0) { - try { - events.clearBefore(LocalDate.now().minusMonths(1)); - } catch (EmptyEventListException e) { - return;//this exception is unreachable because of the if condition + if (userInfo.isAutoClear() && events != null) { + if (events.getSize() != 0) { + try { + events.clearBefore(LocalDate.now().minusMonths(1)); + } catch (EmptyEventListException e) { + return;//this exception is unreachable because of the if condition + } + storage.writeFile(events.getEventList()); } - storage.writeFile(events.getEventList()); } - } + } } diff --git a/src/main/java/storage/Storage.java b/src/main/java/storage/Storage.java index 7acfdf2813..696c16d591 100644 --- a/src/main/java/storage/Storage.java +++ b/src/main/java/storage/Storage.java @@ -114,7 +114,7 @@ public void writeUserInfo(UserInfo userInfo) throws WritingFileException { * @throws LoadingException represents the Events is not correctly created */ public UserInfo loadUserInfo() throws LoadingException { - UserInfo userInfo = null; + UserInfo userInfo = new UserInfo(); try { Scanner s = new Scanner(new File(filePaths[1])); if (s.hasNext()) { diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 2c51e2e378..32b6d80f0b 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -61,15 +61,12 @@ public String readCommand() { */ public void printGreetingMessage(UserInfo userInfo) { printLine(); - try { - if (userInfo.getName().isBlank()) { - System.out.println("I am NUSchedule! What's your name?"); - } else { - helloWithName(userInfo.getName()); - } - } catch (NumberFormatException e) { + if (userInfo.getName().isBlank()) { System.out.println("I am NUSchedule! What's your name?"); + } else { + helloWithName(userInfo.getName()); } + System.out.println("Hello from\n" + LOGO); System.out.println("What can I do for you?"); } From a945c354783fd3710732e3a0263c0be20318bf1d Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:27:14 +0800 Subject: [PATCH 247/299] update ppp for wu nan --- docs/team/max-wunan.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index d9e74049a3..e54102a457 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -36,6 +36,7 @@ Given below are my contributions to this project: * User Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added documentation for help and clear function [#169](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/169), [#175](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/175) + * Added several solutions in Q&A section [#189](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/189) * Developer Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added implementation details and sequence diagrams for help and clear function [#83](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/83) From 5ee600a281f5583bbd4ba628ff43216e43e1005f Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 21:29:48 +0800 Subject: [PATCH 248/299] coding style --- src/main/java/command/AutoClearCommand.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/command/AutoClearCommand.java b/src/main/java/command/AutoClearCommand.java index 61e0877299..db082a08b9 100644 --- a/src/main/java/command/AutoClearCommand.java +++ b/src/main/java/command/AutoClearCommand.java @@ -56,16 +56,16 @@ public void execute(EventList events, LocationList locations, BusStopList busSto * @throws WritingFileException the file is not correctly written. */ public static void autoClear(EventList events, Storage storage, UserInfo userInfo) throws WritingFileException { - if (userInfo.isAutoClear() && events != null) { - if (events.getSize() != 0) { - try { - events.clearBefore(LocalDate.now().minusMonths(1)); - } catch (EmptyEventListException e) { - return;//this exception is unreachable because of the if condition - } - storage.writeFile(events.getEventList()); + if (userInfo.isAutoClear() && events != null) { + if (events.getSize() != 0) { + try { + events.clearBefore(LocalDate.now().minusMonths(1)); + } catch (EmptyEventListException e) { + return;//this exception is unreachable because of the if condition } + storage.writeFile(events.getEventList()); } + } } } From 2b100fafc02b28c5d9d4c0afbc6c62e1396bed20 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:30:22 +0800 Subject: [PATCH 249/299] update readme.md --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 451c4a932c..c730a77ff5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# NuSchedule +# NUSchedule A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily and efficiently. From 7f5508799e9c648c8ea0b7ec791d230e547938d1 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:33:21 +0800 Subject: [PATCH 250/299] added logo/coverpage for ReadMe.md --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index c730a77ff5..4be01687e9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,8 @@ A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily and efficiently. +![Logo](diagrams/Logo.png)
    + Useful links: * [User Guide](UserGuide.md) * [Developer Guide](DeveloperGuide.md) From 5101e381c10fc04c4bb5991f6eea4a49bbde88f0 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:36:36 +0800 Subject: [PATCH 251/299] adding line breakers for ppp to make it more clean to view --- docs/team/max-wunan.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index e54102a457..e0bfcbf208 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -15,7 +15,7 @@ Given below are my contributions to this project: development of NuSchedule, there will be more and more features/commands available, this function will become more and more useful for users to refer to. * Highlights: The code for this function needs to be updated everytime there is a new feature, or a new version release. - +
    * __New Feature:__ Added the ability to clear events based on users' needs * What it does: This function allows users to clear all events by typing in `clear`, or clear events that happened before a certain date by typing in `clearBefore CLEAR_DATE`, or enable autoClear function of this application by @@ -26,12 +26,12 @@ Given below are my contributions to this project: have a more clean and straight-forward view of all ongoing events. * Highlights: This function allows 3 different commands, and the status of `autoClear` function can be kept after the application stops running. - +
    * __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=max-wunan&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) - +
    * __Project Management:__ * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub - +
    * __Documentation:__ * User Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) @@ -40,7 +40,7 @@ Given below are my contributions to this project: * Developer Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added implementation details and sequence diagrams for help and clear function [#83](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/83) - +
    * __Community:__ * Reviewed Developer Guide of the team and fixed format error [#86](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/86/files) * PRs reviewed (with non-trivial review comments): [#174](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/174#pullrequestreview-526179937) From 8ef53140fe034646264e28359bdedbe2a3db8898 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:39:22 +0800 Subject: [PATCH 252/299] fix format error of ppp --- docs/team/max-wunan.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index e0bfcbf208..46a8bceb70 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -26,12 +26,12 @@ Given below are my contributions to this project: have a more clean and straight-forward view of all ongoing events. * Highlights: This function allows 3 different commands, and the status of `autoClear` function can be kept after the application stops running. -
    +
    * __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=max-wunan&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) -
    +
    * __Project Management:__ * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub -
    +
    * __Documentation:__ * User Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) @@ -40,7 +40,7 @@ Given below are my contributions to this project: * Developer Guide: * Added the project logo picture [#79](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/79), [#179](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/179) * Added implementation details and sequence diagrams for help and clear function [#83](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/83) -
    +
    * __Community:__ * Reviewed Developer Guide of the team and fixed format error [#86](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/86/files) * PRs reviewed (with non-trivial review comments): [#174](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/174#pullrequestreview-526179937) From e9396ee966ffd19999f2645265366e43e47c4645 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:40:44 +0800 Subject: [PATCH 253/299] fix format --- docs/team/max-wunan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/max-wunan.md b/docs/team/max-wunan.md index 46a8bceb70..c29accaae8 100644 --- a/docs/team/max-wunan.md +++ b/docs/team/max-wunan.md @@ -28,7 +28,7 @@ Given below are my contributions to this project: the application stops running.
    * __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=max-wunan&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) -
    +

    * __Project Management:__ * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub
    From e451ea8b82fe8a81f19b3ce245e52baa54e2e8e6 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 21:45:29 +0800 Subject: [PATCH 254/299] remove the wrong diagram for autoclear --- docs/DeveloperGuide.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 860580067c..c9232f18b9 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -201,10 +201,6 @@ The sequence diagram below shows the process of clearing events before a certain The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    *Figure 4.2.2 Sequence Diagram for clear function* - -The sequence diagram below shows the process of switching on autoClear function. -![AutoClearCommand Sequence Diagram](diagrams/AutoClearCommand.png)
    -*Figure 4.2.3 Sequence Diagram for autoClear function* ### 4.3 Edit events From a676556e28efcd1caa8b94bf3f6b286ab6d5abae Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 22:00:36 +0800 Subject: [PATCH 255/299] Update UG for repeat --- docs/UserGuide.md | 10 ++++++++++ docs/diagrams/repeat1.png | Bin 0 -> 20747 bytes docs/diagrams/repeat2.png | Bin 0 -> 32110 bytes src/main/java/event/Event.java | 4 ++-- src/main/java/event/SelfStudy.java | 3 ++- 5 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 docs/diagrams/repeat1.png create mode 100644 docs/diagrams/repeat2.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 06331364d4..c31e0f0dcf 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -33,6 +33,7 @@ This gives the application both simplicity and speed, setting it apart from othe * [Clear events](#clear-events) * [Mark event as done](#mark-event-as-done) * [Reminder of deadlines](#reminder-of-deadlines) + * [Repeat of events](#repeat-of-events) * [FAQs](#FAQ) * [Command Summary](#command-summary) @@ -243,6 +244,15 @@ Format: `reminder` Example Output: ![reminder](diagrams/reminder.png) +### Repeat of events +Repeat the selected event for several weeks, or repeat all classes this week for several weeks. + +Format: `repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS` + +Example Output: +![Repeat1](diagrams/repeat1.png) +![Repeat2](diagrams/repeat2.png) + ## FAQ diff --git a/docs/diagrams/repeat1.png b/docs/diagrams/repeat1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca0505abe23e4aa026861e6bac648ac47f796df GIT binary patch literal 20747 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 JNj2Kz{@?Z_D6;?n literal 0 HcmV?d00001 diff --git a/docs/diagrams/repeat2.png b/docs/diagrams/repeat2.png new file mode 100644 index 0000000000000000000000000000000000000000..528413e12bfc68fd1b062134ea0f0fae95df8c25 GIT binary patch literal 32110 zcmeFaXH*mKzxEqMz(Pj_=?aKQ6G0FH1O(|t5JjX*?>+R;R6wK)i1ZFBy|)BJq!W4z zy+}(00tqD~oZxT&_p|ms`#JlZy`FVm`GUy`NhULynft!(>%P99iF~T1Om&6%3IG70 zQdLpZ1pr9i0RR`gE|C-eGv}-iCq9sP=qf)3lnt_O5}#bOk=K+504igzo|=;ppI>%W zG4KEYs5{R8NV;5#EdhW)QdLEHJs%TPE69Z(KC(UuGkyf|WEF_uy?;$czxNt_O#a6A zRFlw;8EpW#RAVsL6LRO*>eD^NZNkB+Zd?!UQ(C=HLMerYU42a@;6+M-eXU=%1rnW; zF_xL@h*#8IfXlPRcV=$={+wEt8T2sdZo#}NaZ>;Tu&N;7w}pjqe{QvboN#u(jhwT` zt;v{l$k`*;AH+9s%1OT_KJ3cKn-L#q?@QnBpWMO+mdau^7y*D__#Fl&Yx_noMj)69 z5I{#Jf04LTAsS{rPxV2Br$MKC#U|hGEMn6kK>d0wKk)-AW^E<;{qb*PTUQ~7FKZv3 zpB^h^48vFs5flsd#9znk5$T06Pi}dV6~EjUup^0Nj;*Z_8UdqeMock=d;QTMaUFqH zN1f}`G+SOCxk5V&*QqZ70E@0SMeaA`g@MLK$I>4>4ko^L6- z&b=ezF*9>n`p9%S6;^IH!%<=UVq5s zG%=u#H`KAGmN^(wpusb4)duWti|on%S;eD2U;eLkcX-=CU+nBSU@C0{V8IqBMnG0D zE0a&x6(QH%w{aHJ!@7YtzXplc&c0)OU)Pt4cM^!PGp6i3+%JO$gGhGU={mx93tzy_ zkA?Ya*Lc|Y&aL|Ov7a7Z4ls7&Pq;;aJJe}?soB1f;;m;l{dlDCBY~CJP^=Fgz3mXAA-Y}vzCT{^J17tl_S@8vBG?76 zP&RXY#-eG+B>&gJ*+~ZYW8ExRHOpqFMnN~evDUm-bADI7bn8TTtLP?pL@U&5xTcuBJq(j0bZ z=%p2oK1SQw+K5?!x}p71e$oie6SISn*pK zs_`1-RrywDt+6$H^A&0ha-C=83+1Uz(5X*W!gsb-*GgoPJaG9YT6eHfir#qfzMcO2 zXVOOaY_EuCx{LlINIhNJ`zjElX^xBZYn|1J%Xc|DcQlQyl>cX@a{MaFO z2K_nOZ=7pKL$KW6dLs-e%HZ{?s^1KEnf=C=?}O(aQfi;1g*9A{gR%R7qw}lh2^%X3 zqI?ab=yXHeQr2Y*aT7BhkmnOrIygT&9PWTKD)pB7&Z0B}vJ3j0r*C8dScqMfEX2;1 zkNU2gA4|}9$Vz!oOBl%N45}HXBL(puLn~7@BI_}NGZ4?r>7AgYK>xDY4q=zA=#%)G zEIS(2CcJFmdglsS5z8D5bJX|r&vg)%XOT%Og}UPJ@JtdS@?{USC$peXcnWQ|+hup2 z5S{F!oI>rOyZ({n0N1ufN%9H?R$5!N(lQAc?KQw7`hVIofbxI1JcG44)xt<((zGsU zx!N9FB%jYYUVd#lpCOyhb|WZwcYh|%F(v=jX}Wkjd2)qCUtOmfdCvQgd)?&>^)}o; z2se(x^9_DXHdis*$rK)JO4$%bH=;it#i8czVqT&TTs!@GZXLJ7RoAv1`ur!SDV zPg&`wN}P%!jLKoM2<%lARQy5x`j*ZdWxp30_U$5JTzzaR z9M?i)xU6}2pJV+FqR{9|*-N$Fmyt7VrqxdKPePk6p8b%FU|vFNxg?Ln6;!q>UGesZ zCvYdGCvIi@cviVe*u9CUyP+JpkUG>CK^G{?-b{01mJCq0b=c1)u)^eZ&zK=hOBWJ% zu(`%b!K+%pYw^vjZrFM3RW6kb-*9$%jYVJoWLdPyO+sn=#)TxV`otejyNHa6^6jFK z#4N-EALwYGR4%0A$V-*Lx5uLDy%;xuO-0=2M0Kyq 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 literal 0 HcmV?d00001 diff --git a/src/main/java/event/Event.java b/src/main/java/event/Event.java index 7f6828c3f3..d5e7313c14 100644 --- a/src/main/java/event/Event.java +++ b/src/main/java/event/Event.java @@ -75,7 +75,7 @@ public boolean isDone() { * * @return returns a tick if the Event is done, and returns a cross if the Event is not done. */ - public String getStatusIcon() { + public String getStatus() { return (isDone ? "Done" : "Not Done"); //return tick or X symbols } @@ -86,7 +86,7 @@ public String getStatusIcon() { * @return the common part for Event, Assignment, Class. */ public String toString() { - return "[" + getStatusIcon() + "]" + description; + return "[" + getStatus() + "]" + description; } /** diff --git a/src/main/java/event/SelfStudy.java b/src/main/java/event/SelfStudy.java index e94b1b171c..7311044763 100644 --- a/src/main/java/event/SelfStudy.java +++ b/src/main/java/event/SelfStudy.java @@ -32,7 +32,8 @@ public SelfStudy(String description, OnlineLocation location, LocalDateTime at, * @return the string required in a certain format. */ public String toString() { - return "[S]" + super.toString() + " (at: " + at.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" + return "[S]" + "[" + getStatus() + "]" + description + " (at: " + at.format(DateTimeFormatter.ofPattern( + "yyyy/MM/dd HH':'mm")) + ")" + (end != null ? "\n(end at: " + end.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH':'mm")) + ")" : "") + "\n" + (location != null ? location : link); From 0ccd4f3b33a9af765c70e474ccfc7972fbfa40a5 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 22:28:54 +0800 Subject: [PATCH 256/299] format fix --- docs/UserGuide.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c31e0f0dcf..6ae62354b8 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -249,7 +249,7 @@ Repeat the selected event for several weeks, or repeat all classes this week for Format: `repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS` -Example Output: +Example Output:
    ![Repeat1](diagrams/repeat1.png) ![Repeat2](diagrams/repeat2.png) @@ -287,3 +287,4 @@ accuracy. If you really cannot find what is wrong, please report it as an issue |list|`list`|| |locate|`locate LOCATION_NAME` OR `locate EVENT_INDEX`|`locate LT1`| |sort|`sort SORT_CRITERIA` |`sort description`| +|repeat|`repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS`|`repeat 1 3`| From 36f88ada3aa48a1c3f2324793960c1925512a3a2 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 22:39:40 +0800 Subject: [PATCH 257/299] update ug/dg for autoclear --- docs/DeveloperGuide.md | 5 +++-- docs/UserGuide.md | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c9232f18b9..e5bac3daef 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -190,9 +190,10 @@ Step 3. After that, the `execute()` function of `clearBeforeCommand` will be cal also be called, where `2020-06-01` will be passed as the parameter `clearDate`. Step 4. The user wants to clear all the extra information of events but does not want to do it manually, hence the user -types in `autoClear` to turn on the autoClear function, which will clear all events happened one month ago automatically. +types in `autoClear on` to turn on the autoClear function, which will clear all events happened one month ago automatically. +This function can be switched off by typing `autoClear off`. -Note that the other two clear commands `clear` and `autoClear` do not require any paramater input. +Note that the command `clear` does not require any parameter input. The sequence diagram below shows the process of clearing events before a certain date. ![ClearBeforeCommand Sequence Diagram](diagrams/ClearBeforeCommand.png)
    diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 6ae62354b8..19edde09eb 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -215,7 +215,7 @@ Delete events existing in the list, you can choose to delete all, auto delete or Format: `clear` * Switch the autoClear function on so that events happened one month ago will be automatically cleared - Format: `autoClear` + Format: `autoClear on` OR `autoClear off` Note that this function will clear all events which happened one month ago no matter they are done or not. * Clear events happened before a certain date @@ -279,7 +279,7 @@ accuracy. If you really cannot find what is wrong, please report it as an issue |Action|Command|Example| |------|-------|-------| |add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| -|clear|`clear` OR `autoClear` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| +|clear|`clear` OR `autoClear STATUS` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| |delete|`delete INDEX`|`delete 1`| |done|`done INDEX` |`done 1` | |edit|`edit`, then fill in each fields when prompted and press `ENTER` to move on to the next field|`edit 1` `ENTER` `class` `ENTER` `cs2113t` `ENTER` `\l school` `ENTER` `2020-10-26 19:00` `ENTER` `2020-10-26 20:00`| From 91d86de6b1327fac74f53aba1e4b7320c3ef67ce Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 23:01:59 +0800 Subject: [PATCH 258/299] update UGDG --- docs/UserGuide.md | 133 ++++++++++++++++++++++++++----- docs/diagrams/add5.png | Bin 0 -> 5578 bytes docs/diagrams/delete.png | Bin 0 -> 17078 bytes docs/diagrams/exit.png | Bin 0 -> 1663 bytes docs/diagrams/find.png | Bin 0 -> 4159 bytes docs/diagrams/findDate.png | Bin 0 -> 3756 bytes docs/diagrams/locationsInNUS.png | Bin 0 -> 6603 bytes docs/diagrams/studyTime.png | Bin 0 -> 3179 bytes docs/diagrams/userInfo1.png | Bin 0 -> 1977 bytes docs/diagrams/userInfo2.png | Bin 0 -> 1959 bytes docs/team/Lee-Juntong.md | 4 +- 11 files changed, 117 insertions(+), 20 deletions(-) create mode 100644 docs/diagrams/add5.png create mode 100644 docs/diagrams/delete.png create mode 100644 docs/diagrams/exit.png create mode 100644 docs/diagrams/find.png create mode 100644 docs/diagrams/findDate.png create mode 100644 docs/diagrams/locationsInNUS.png create mode 100644 docs/diagrams/studyTime.png create mode 100644 docs/diagrams/userInfo1.png create mode 100644 docs/diagrams/userInfo2.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index c31e0f0dcf..a0cd7289ca 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -34,6 +34,13 @@ This gives the application both simplicity and speed, setting it apart from othe * [Mark event as done](#mark-event-as-done) * [Reminder of deadlines](#reminder-of-deadlines) * [Repeat of events](#repeat-of-events) + * [Delete an event](#delete-an-event) + * [Find a keyword](#find-a-keyword) + * [Find a date](#find-a-date) + * [Find locations exist in a certain group](#find-locations-exist-in-a-certain-group) + * [Keep track on the study time](#keep-track-on-the-study-time) + * [Make the app know you](#make-the-app-know-you) + * [Exit the app](#exit-the-app) * [FAQs](#FAQ) * [Command Summary](#command-summary) @@ -67,11 +74,9 @@ Format: `help` ### Add an event -Adds events/tasks to the schedule. Can support various types of tasks: +Adds events/tasks to the schedule. Can support various types of tasks: - - -* Personal events +* PersonalEvent Format: `personalEvent EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for offline events. OR @@ -82,13 +87,13 @@ Adds events/tasks to the schedule. Can support various types of tasks: as the date that the event starts. For online events, `/p MEETING_PASSWORD` is optional, since not all online events require a password. -* Assignments +* Assignment Format: `assignment EVENTNAME /t DATE TIME /l LOCATION` OR `assignment EVENTNAME /t DATE TIME /o SUBMISSION_LINK` -* Classes +* Class Format: `class CLASSNAME /t DATE TIME /e DATE TIME /l LOCATION` OR @@ -97,21 +102,35 @@ Adds events/tasks to the schedule. Can support various types of tasks: Similar to personal events, in `/e DATE TIME`, `DATE` is optional. For online events,`/p MEETING_PASSWORD` is optional. However, `/e DATE TIME` or `/e TIME` is required, since all classes should have an ending time. - +* SelfStudy + Format: + `selfStudy EVENTNAME /t DATE TIME /e DATE TIME /l LOCATION` for offline events. + OR + `selfStudy EVENTNAME /t DATE TIME /e DATE TIME /o MEETING_LINK /p MEETING_PASSWORD` for online events. + + Note that `/e DATE TIME` is optional. You may input a personal event without an ending time. + In `/e DATE TIME`, `DATE` is optional. If you enter `/e TIME`, the default date will be the same + as the date that the event starts. + For online events, `/p MEETING_PASSWORD` is optional, since not all online events require a password. + Examples of usage: `class CS2113 Lecture /t 2020-09-23 10:00 /e 12:00 /l LT27` `personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home` `assignment CS1010 Assignment /t 2020-01-04 23:59 /o Luminus` +`selfStudy Prepare for exam /t 2020-11-26 15:00 /l home` Adding a class: -![add1](diagrams/add1.png) +![add1](diagrams/add1.png) Adding a personal event: -![add2](diagrams/add2.png) +![add2](diagrams/add2.png) Adding an assignment: -![add3](diagrams/add3.png) +![add3](diagrams/add3.png) + +Adding a self study event: +![add5](diagrams/add5.png) Adding an event with a timing clash: ![add4](diagrams/add4.png) @@ -215,9 +234,12 @@ Delete events existing in the list, you can choose to delete all, auto delete or Format: `clear` * Switch the autoClear function on so that events happened one month ago will be automatically cleared - Format: `autoClear` - Note that this function will clear all events which happened one month ago no matter they are done or not. - + Format: `autoClear on` + Note that this function will clear all events which happened one month ago no matter they are done or not. + +* Switch the autoClear function off + Format: `autoClear off` + * Clear events happened before a certain date Format: `clearBefore CLEAR_DATE` @@ -228,6 +250,7 @@ Example Output: ### Mark event as done Mark an event that has been completed with `DONE`. +Note that the events which are not assignments, cannot be done before its ending time. Format: `done INDEX` @@ -247,12 +270,77 @@ Example Output: ### Repeat of events Repeat the selected event for several weeks, or repeat all classes this week for several weeks. -Format: `repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS` +Format: `repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS` + +Example: `repeat 3 1`, `repeat all 2` Example Output: ![Repeat1](diagrams/repeat1.png) ![Repeat2](diagrams/repeat2.png) +### Delete an event +Delete the selected event from the list. + +Format: `delete INDEX` + +Example: `delete 1` + +Example Output: +![Delete](diagrams/delete.png) + +### Find a keyword +Find the events with given keyword. Note that it's case-sensitive. + +Format: `find KEYWORD` + +Example: `find CS` + +Example Output: +![Find](diagrams/find.png) + +### Find a date +Find the events happen on the given date. + +Format: `date yyyy-MM-dd` + +Example `date 2020-11-10` + +Example Output: +![findDate](diagrams/findDate.png) + +### Find locations exist in a certain group +Find the locations in NUS that belongs to certain faculty or the hostels. + +Format: `FOS` OR `FOE` OR `SOC` OR `BIZ` OR `HOSTEL` OR `SDE` OR `FASS` + +Example Output: +![locationsInNUS](diagrams/locationsInNUS.png) + +### Keep track on the study time +Find the amount of time you spent on study on a certain date. + +Format: `studyTime DATE` + +Example Output: +![studyTime](diagrams/studyTime.png) + +### Make the app know you +Tell the app your name, and whether you are a professor or a student. Whether you indicate yourself as a professor, + or a student, will make a difference in another function, which will come in a later version. + +Format: `student NAME` OR `professor NAME` + +Example Output: +![userInfo1](diagrams/userInfo1.png) +![userInfo2](diagrams/userInfo2.png) + +### Exit the app +Exit. + +Format: `bye` + +Example Output: +![Exit](diagrams/exit.png) ## FAQ @@ -278,12 +366,21 @@ accuracy. If you really cannot find what is wrong, please report it as an issue |Action|Command|Example| |------|-------|-------| -|add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| -|clear|`clear` OR `autoClear` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| +|add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event and self study, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| +|clear|`clear` OR `autoClear on` OR `autoClear off` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| |delete|`delete INDEX`|`delete 1`| |done|`done INDEX` |`done 1` | |edit|`edit`, then fill in each fields when prompted and press `ENTER` to move on to the next field|`edit 1` `ENTER` `class` `ENTER` `cs2113t` `ENTER` `\l school` `ENTER` `2020-10-26 19:00` `ENTER` `2020-10-26 20:00`| -|help|`help`|| -|list|`list`|| +|help|`help`| +|list|`list`| |locate|`locate LOCATION_NAME` OR `locate EVENT_INDEX`|`locate LT1`| |sort|`sort SORT_CRITERIA` |`sort description`| +|reminder|`reminder`|`reminder`| +|repeat|`repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS`|`repeat all 1`| +|find (keyword)|`find KEYWORD`|`find book`| +|find (date)|`date`|`date 2020-11-08`| +|calculate study time|`studyTime DATE`|`studyTime 2020-11-08`| +|find locations belongs to a certain group|`FACULTY` or `HOSTEL`|`FOE`,`FOS`| +|UserInfo|`student NAME` OR `professor NAME`|`student LeeJuntong`| +|exit|`bye`|`bye`| + diff --git a/docs/diagrams/add5.png b/docs/diagrams/add5.png new file mode 100644 index 0000000000000000000000000000000000000000..8abac5d41df71cbe673444f67fda08a1ab2d1ac2 GIT binary patch literal 5578 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/delete.png b/docs/diagrams/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..8f10396d01f547ff8b594552a0aaab36ee8f5a47 GIT binary patch literal 17078 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/find.png b/docs/diagrams/find.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b60f0805425855f37e6201064bbe7ca9e7e514 GIT binary patch literal 4159 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 Yd6LDys5jDq5^F$T*F*<)?@|1}07D^81ONa4 literal 0 HcmV?d00001 diff --git a/docs/diagrams/locationsInNUS.png b/docs/diagrams/locationsInNUS.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b0f4b015141640bceb26e8d035327bdf38fd4d GIT binary patch literal 6603 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 Ls1y10<@CP+J#OFX literal 0 HcmV?d00001 diff --git a/docs/diagrams/userInfo2.png b/docs/diagrams/userInfo2.png new file mode 100644 index 0000000000000000000000000000000000000000..c49e8af8afeb4bd0f6368969a95b3ffe69841b4f GIT binary patch literal 1959 zcma)-dpHwpAIEPw3@a*+LkhixX%0$kxR?-uZp~-10y$H{El!mOWQdUpo zd}a>C9u{Ib%pMFmt(a`iw%+x;@AY2S```P=ec!+D?~nVs?)&M7WC`0=(;n7T?em*(-ABVL+j^qgPd6+k;AMJ^Ye^q;KX$tNg zsyo;zh=xYMVN2}jFJAEKXG2BDVQ4qZz&Mi@mQb2>NvHcNpS>KUb-nHw-#{P6Q*ZV4 z-*{J`dP*r<>Rxo^9QpLC6R7=+0i188B@33MPr#tnu%`Xo0?*U-#qL23p_f|ZpLfTt zZ!Xm|q1C2RE^*-IH3_}U@&Q;f*>=>FW_E)S6d2-3J+2(ppgObwsvx7fa)6_EaX~!6 z@lBGzOn!@^ILlgsyLo&6?`ABY_G5eS@s@EPxwA?_NtM;_6ZG^SS45weH%Y@*$#q?O zd+>M{2msX*M(Scf#x^(-V9(@)^5(uwZMj!xVAXtSB5jFDx-r~ z<*bT|vo^QXV?+2)EGpT`ZtFYiXCV}`n7xFt`E0-ZEm zW9V|B?3vsGtZPT{+3eR@&MIZjL48Yc0jamvzkcN=Q1sAj0&@bYnuBUTuYPr$&!YPGZS@-J3=m(8@>_4=-v3KZrqDIxWcI7|F z`5TIi1ChCIEcu*5|M2N+2C&6FwvY3bZ{-f5I)qR9>2e&uhWVIM?`HH_kq@6CO92&j-B zW^#R&kfx9ebo{8|-ktWdHiwM)N zd%{mcquAb0RjcY}EM5*-q|dnz)_|Onee=}fuNFMD<=X__3keXK`Br6>yYiWTyA1$g z^*pi%fTo_m*+VF5ik0&ECo9tTARzP?sh{~jiuvEB%*cvX>ojN0T&%{(L7(QNHDsaN zIf0_VzfG08=4ya*D%8;bsVCNkoAeLS>H(iW_yd&2G959Nr))$JLw8TB&NH*w;v0a2 Mt&`0=#O3&Z0k!AGq5uE@ literal 0 HcmV?d00001 diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 8b8f6dae1d..299ae314d3 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -52,8 +52,8 @@ Given below are my contributions to the project. * **Documentation**: * User Guide: - * Added documentation for the features `delete` and `find` [\#72]() - * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]() + * Add documentation for the features delete, find, studyTime, add events, exit, repeat, find base on date, make the app know you, and find locations exist in a certain group [\#199](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/199) + * Did cosmetic tweaks to existing documentation of features `done`, `autoClear` : [\#199](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/199) * Developer Guide: * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) From 9edb66a00800726db038091c9e456a7e946d90b1 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 23:10:20 +0800 Subject: [PATCH 259/299] update DG --- docs/DeveloperGuide.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e5bac3daef..a29b3dd70f 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -38,6 +38,7 @@ Wan Shi Jie Brendan
    * [4.6. Sort events](#sort)
    * [4.7. View events](#view)
    * [4.8. Help](#help)
    + * [4.9 Repeat](#repeat)
    * [5. Documentation](#documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    @@ -307,6 +308,10 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    *Figure 4.8 Sequence Diagram for help function* +### 4.9 Repeat +This feature allows users to repeat all classes in the current week or a selected event for several weeks. + + ## 5. Documentation All documentation are found in the `docs/` folder. From 2d66d2ae4b2b384370397d239509d59fe014f80c Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 23:15:57 +0800 Subject: [PATCH 260/299] added line breakers before diagrams --- docs/DeveloperGuide.md | 2 +- docs/UserGuide.md | 26 ++++++++++---------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e5bac3daef..4d30ad6c2a 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -309,7 +309,7 @@ The sequence diagram below shows what happens when user enters `help`: ## 5. Documentation -All documentation are found in the `docs/` folder. +All documentation can be found in the `docs/` folder. * [Jekyll](https://jekyllrb.com/) is used to manage documentation. * [Markdown](https://guides.github.com/features/mastering-markdown/) style is used for the documentation. * [PlantUML](https://plantuml.com/) is used to create the diagrams. diff --git a/docs/UserGuide.md b/docs/UserGuide.md index b2db252f60..852fbd9147 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -129,7 +129,7 @@ Adding a personal event: Adding an assignment: ![add3](diagrams/add3.png) -Adding a self study event: +Adding a self study event:
    ![add5](diagrams/add5.png) Adding an event with a timing clash: @@ -233,19 +233,13 @@ Delete events existing in the list, you can choose to delete all, auto delete or * Clear all events Format: `clear` -* Switch the autoClear function on so that events happened one month ago will be automatically cleared -<<<<<<< HEAD +* Switch the autoClear function on so that events happened one month ago will be automatically cleared. Format: `autoClear on` Note that this function will clear all events which happened one month ago no matter they are done or not. * Switch the autoClear function off Format: `autoClear off` -======= - Format: `autoClear on` OR `autoClear off` - Note that this function will clear all events which happened one month ago no matter they are done or not. - ->>>>>>> master * Clear events happened before a certain date Format: `clearBefore CLEAR_DATE` @@ -291,7 +285,7 @@ Format: `delete INDEX` Example: `delete 1` -Example Output: +Example Output:
    ![Delete](diagrams/delete.png) ### Find a keyword @@ -301,7 +295,7 @@ Format: `find KEYWORD` Example: `find CS` -Example Output: +Example Output:
    ![Find](diagrams/find.png) ### Find a date @@ -311,7 +305,7 @@ Format: `date yyyy-MM-dd` Example `date 2020-11-10` -Example Output: +Example Output:
    ![findDate](diagrams/findDate.png) ### Find locations exist in a certain group @@ -319,7 +313,7 @@ Find the locations in NUS that belongs to certain faculty or the hostels. Format: `FOS` OR `FOE` OR `SOC` OR `BIZ` OR `HOSTEL` OR `SDE` OR `FASS` -Example Output: +Example Output:
    ![locationsInNUS](diagrams/locationsInNUS.png) ### Keep track on the study time @@ -327,7 +321,7 @@ Find the amount of time you spent on study on a certain date. Format: `studyTime DATE` -Example Output: +Example Output:
    ![studyTime](diagrams/studyTime.png) ### Make the app know you @@ -336,8 +330,8 @@ Tell the app your name, and whether you are a professor or a student. Whether yo Format: `student NAME` OR `professor NAME` -Example Output: -![userInfo1](diagrams/userInfo1.png) +Example Output:
    +![userInfo1](diagrams/userInfo1.png)
    ![userInfo2](diagrams/userInfo2.png) ### Exit the app @@ -345,7 +339,7 @@ Exit. Format: `bye` -Example Output: +Example Output:
    ![Exit](diagrams/exit.png) ## FAQ From ece62fbbb69a135ffeda658a8e3e7612a45482ac Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 23:27:25 +0800 Subject: [PATCH 261/299] dg content page --- docs/DeveloperGuide.md | 110 ++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 46 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index a29b3dd70f..8b0e42a9e5 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -17,36 +17,42 @@ Wan Shi Jie Brendan

    ## Table of Contents -* [1. Introduction](#intro) -* [2. Getting Started](#getting_started)
    - * [2.1. Prerequisites](#prerequisites)
    - * [2.2. Setting Up](#setting_up)
    -* [3. Design](#design)
    - * [3.1 Architecture](#architecture)
    - * [3.2 UI](#ui)
    - * [3.3 Storage](#storage)
    - * [3.4 Logic](#logic)
    - * [3.5 Model](#model)
    - * [3.5.1. Event](#event)
    - * [3.5.2. Location](#location)
    -* [4. Implementation](#implementation)
    - * [4.1. Add events](#add_events)
    - * [4.2. Clear events](#clear)
    - * [4.3. Edit events](#edit)
    - * [4.4. Locate](#locate)
    - * [4.5. Reminders](#reminder)
    - * [4.6. Sort events](#sort)
    - * [4.7. View events](#view)
    - * [4.8. Help](#help)
    - * [4.9 Repeat](#repeat)
    -* [5. Documentation](#documentation)
    +* [1. Introduction](#1-introduction) +* [2. Getting Started](#2-getting-started)
    + * [2.1. Prerequisites](#21-prerequisites)
    + * [2.2. Setting Up](#22-setting-up)
    +* [3. Design](#3-design)
    + * [3.1 Architecture](#31-architecture)
    + * [3.2 UI](#32-ui)
    + * [3.3 Storage](#33-storage)
    + * [3.4 Logic](#34-logic)
    + * [3.5 Model](#35-model)
    + * [3.5.1. Event](#351-event)
    + * [3.5.2. Location](#352-location)
    +* [4. Implementation](#4-implementation)
    + * [4.1. Add events](#41-add-events)
    + * [4.2. Clear events](#42-clear-events)
    + * [4.3. Edit events](#43-edit-events)
    + * [4.4. Locate](#44-locate)
    + * [4.5. Reminders](#45-reminder)
    + * [4.6. Sort events](#46-sort-events)
    + * [4.7. View events](#47-view-events)
    + * [4.8. Help](#48-help)
    + * [4.9. Repeat](#49-repeat)
    + * [4.10. Delete](#410-delete)
    + * [4.11. Find](#411-find)
    + * [4.12. Print Locations](#412-print-locations)
    + * [4.13. Study Time](#413-study-time)
    + * [4.14. User Info](#414-user-info)
    + * [4.15. Done](#415-done)
    +* [5. Documentation](#5-documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    * [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) -## 1. Introduction +## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, @@ -56,16 +62,16 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. -## 2. Getting Started +## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. -### 2.1 Prerequisites +### 2.1 Prerequisites 1. JDK 11 2. Intellij IDEA -### 2.2 Setting Up +### 2.2 Setting Up 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. 2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project @@ -80,12 +86,12 @@ first). 6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project. -## 3. Design +## 3. Design This section describes the different components of the application and how each component interact with each other to run the program. -### 3.1 Architecture +### 3.1 Architecture ![architecture](diagrams/architecture.png)
    The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into @@ -96,7 +102,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. -### 3.2 UI +### 3.2 UI ![UI Class Diagram](diagrams/Ui.png)
    *Figure 3.2.1 Class diagram for UI component* @@ -106,10 +112,10 @@ The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, The `UI` component reads user input using readCommand() and then executes user commands according to the Logic component. -### 3.3 Storage +### 3.3 Storage __API__:`Storage.java` The `Storage` component can save the list of event data in .txt format and read it back. -### 3.4 Logic +### 3.4 Logic __API__:`Parser.java` ![Logic Class Diagram](diagrams/LogicClass.png)
    @@ -121,13 +127,13 @@ The `Logic` component parses the user input and executes commands based on the g 2. The command execution affects the EventList (e.g. clearing the list). 3. The result passes back to the UI, which then displays relevant feedback to the user (e.g. successful execution). -### 3.5 Model +### 3.5 Model The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. -#### 3.5.1 Event +#### 3.5.1 Event __API__:`EventList.java` -### 3.5.2 Location +### 3.5.2 Location ![location class diagram](diagrams/LocationClass.png)
    *Figure 3.6.1 Class diagram for location component* @@ -148,12 +154,12 @@ and not edited in any part of the program. * prints the list of locations that is saved in the data file * checks if a location is being saved in the list and returns the location when asked -## 4. Implementation +## 4. Implementation This section describes the implementation of some noteworthy features. -### 4.1 Add events +### 4.1 Add events This feature allows users to add events and relevant information about them (description, time and location) to the list . There are three possible types of events that can be added: classes, assignments, and personal events. @@ -174,7 +180,7 @@ The sequence diagram below shows the process of adding a new event. *Figure 4.1 Sequence Diagram for add function* -### 4.2 Clear events +### 4.2 Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. Users may choose to delete all events, events happened one month ago, or events happened before a certain date. @@ -204,7 +210,7 @@ The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    *Figure 4.2.2 Sequence Diagram for clear function* -### 4.3 Edit events +### 4.3 Edit events This feature allows users to edit the information of events that was previously added. @@ -222,7 +228,7 @@ Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the eve ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    *Figure 4.3 Sequence Diagram for EditCommand()* -### 4.4 Locate +### 4.4 Locate This feature allows users to add locations as part of the event information. If the place is located within the school, additional information about the location will be provided such as nearest bus stops or buildings. If the place is a @@ -254,7 +260,7 @@ The sequence diagram below shows exactly which methods, from which classes, are ![locate sequence diagram](diagrams/LocateSequence.png)
    *Figure 4.4 Sequence diagram for locate function* -### 4.5 Reminder +### 4.5 Reminder This feature allows users to get a reminder of the events that will occur today. @@ -270,7 +276,7 @@ The sequence diagram belows shows the process of executing the reminder command. ![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) *Figure 4.5 Sequence Diagram for reminder function* -### 4.6 Sort events +### 4.6 Sort events This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available are sorting by time, description and location. @@ -283,7 +289,7 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio ![](diagrams/SortCommand.png)
    *Figure 4.6 Sequence diagram for SortCommand()* -### 4.7 View events +### 4.7 View events This feature allows users to view a numbered list of all the events/tasks they have added so far, in the order which they were added. @@ -298,7 +304,7 @@ The sequence diagram below shows what happens when the list command is executed. ![ListCommand Sequence Diagram](diagrams/ListCommand.png) *Figure 4.7 Sequence Diagram for list function* -### 4.8 Help +### 4.8 Help This feature allows users to view a summary of all the features available for the current version of NUSchedule. When the user inputs `help`, all available commands and a simple description for each of them will be printed. @@ -308,11 +314,23 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    *Figure 4.8 Sequence Diagram for help function* -### 4.9 Repeat +### 4.9 Repeat This feature allows users to repeat all classes in the current week or a selected event for several weeks. +### 4.10 Delete -## 5. Documentation +### 4.11 Find + +### 4.12 Print locations + +### 4.13 Study Time + +### 4.14 User Info + +### 4.15 Done +This feature allows users to mark an event as done, provided the event's time has passed. + +## 5. Documentation All documentation are found in the `docs/` folder. * [Jekyll](https://jekyllrb.com/) is used to manage documentation. From 35a9420223034d1d3e0fab88b803ede6e6cce657 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 23:29:45 +0800 Subject: [PATCH 262/299] add printAreaLocationsCommand png --- docs/DeveloperGuide.md | 5 +++++ docs/diagrams/printAreaLocationsCommand.png | Bin 0 -> 20525 bytes 2 files changed, 5 insertions(+) create mode 100644 docs/diagrams/printAreaLocationsCommand.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 4d30ad6c2a..520353b108 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -38,6 +38,7 @@ Wan Shi Jie Brendan
    * [4.6. Sort events](#sort)
    * [4.7. View events](#view)
    * [4.8. Help](#help)
    + * [4.9. Print locations by area](#print_areas)
    * [5. Documentation](#documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    @@ -307,6 +308,10 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    *Figure 4.8 Sequence Diagram for help function* +### 4.9 Print locations by area + +This feature allows + ## 5. Documentation All documentation can be found in the `docs/` folder. diff --git a/docs/diagrams/printAreaLocationsCommand.png b/docs/diagrams/printAreaLocationsCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab69228d7a76ad7150d3276d735133efbe76de1 GIT binary patch literal 20525 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 k8OWy?0cW& Date: Mon, 9 Nov 2020 23:30:10 +0800 Subject: [PATCH 263/299] Update DG --- docs/DeveloperGuide.md | 20 ++++++++++++++++++++ docs/team/johndoe.md | 6 ------ 2 files changed, 20 insertions(+), 6 deletions(-) delete mode 100644 docs/team/johndoe.md diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index a29b3dd70f..60a36bc78b 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -39,6 +39,13 @@ Wan Shi Jie Brendan
    * [4.7. View events](#view)
    * [4.8. Help](#help)
    * [4.9 Repeat](#repeat)
    + * [4.10 Delete](#delte)
    + * [4.11 Find](#find)
    + * [4.12 Find base on date](#date)
    + * [4.13 Print locations of a certain group](#location_group)
    + * [4.14 Study time](#study_time)
    + * [4.15 Done](#done)
    + * [4.16 User Info](#user_info)
    * [5. Documentation](#documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    @@ -311,6 +318,19 @@ The sequence diagram below shows what happens when user enters `help`: ### 4.9 Repeat This feature allows users to repeat all classes in the current week or a selected event for several weeks. +### 4.10 Delete + +### 4.11 Find + +### 4.12 Find base on date + +### 4.13 Print locations of a certain group + +### 4.14 Study time + +### 4.15 Done + +### 4.16 User Info ## 5. Documentation diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md deleted file mode 100644 index ab75b391b8..0000000000 --- a/docs/team/johndoe.md +++ /dev/null @@ -1,6 +0,0 @@ -# John Doe - Project Portfolio Page - -## Overview - - -### Summary of Contributions From d570e058019b675f21b250c38b6ef77ec63b6671 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 9 Nov 2020 23:31:36 +0800 Subject: [PATCH 264/299] Update DG --- docs/DeveloperGuide.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 970920c3d8..0c05947860 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -318,7 +318,11 @@ The sequence diagram below shows what happens when user enters `help`: This feature allows users to repeat all classes in the current week or a selected event for several weeks. ### 4.10 Delete +This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the following steps: +1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. + +2. `Eventlist#remove()` is called which will delete the event with the specified index. ### 4.11 Find ### 4.12 Print locations From fe5a0c8c669ccfe868ca871f90efb3c4845465ae Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 23:37:33 +0800 Subject: [PATCH 265/299] update dg for print areas --- docs/DeveloperGuide.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e6381dc8d3..66859b1f74 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -323,6 +323,11 @@ This feature allows users to repeat all classes in the current week or a selecte ### 4.11 Find ### 4.12 Print locations +This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input +abbreviations of various faculties (e.g. FOS). + +![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    +*Figure 4.12 Sequence Diagram for print area locations function* ### 4.13 Study Time From cd391fef785a87d083a9bdfabd4bebb1f1375ebf Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 23:39:11 +0800 Subject: [PATCH 266/299] format fix --- docs/DeveloperGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 66859b1f74..4c959bdfef 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -326,6 +326,7 @@ This feature allows users to repeat all classes in the current week or a selecte This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input abbreviations of various faculties (e.g. FOS). +The sequence diagram belows shows what happens when user input any faculty abbreviation:
    ![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    *Figure 4.12 Sequence Diagram for print area locations function* From 43171f09107cbf87ad4768027db90ceb2e492bfb Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 23:42:05 +0800 Subject: [PATCH 267/299] update done function --- docs/DeveloperGuide.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 8b0e42a9e5..2883785a53 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -328,7 +328,18 @@ This feature allows users to repeat all classes in the current week or a selecte ### 4.14 User Info ### 4.15 Done -This feature allows users to mark an event as done, provided the event's time has passed. +This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event +type `Assignment`, all the other event types cannot be marked as done before event occurs. + +`DoneCommand` marks an event as done with the following steps: + +Step 1. The user will input `done` followed by an integer that represents the index of the event they want to mark as +done. + +Step 2. The program will first check if the index is valid. If invalid, application will print an error message. + +Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an +`Assignment`, then it will print a warning message. Else, it will mark the event as done. ## 5. Documentation From b3877914ecebb30710f976172b952d84202fe8a7 Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 9 Nov 2020 23:43:30 +0800 Subject: [PATCH 268/299] Updated DG --- docs/DeveloperGuide.md | 25 +++++++++++++++++++++++-- docs/team/madbeez.md | 8 ++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 0377bbc36d..d742faa88d 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -41,7 +41,7 @@ Wan Shi Jie Brendan
    * [4.9 Repeat](#repeat)
    * [4.10 Delete](#delte)
    * [4.11 Find](#find)
    - * [4.12 Find base on date](#date)
    + * [4.12 Find based on date](#date)
    * [4.13 Print locations of a certain group](#location_group)
    * [4.14 Study time](#study_time)
    * [4.15 Done](#done)
    @@ -323,16 +323,37 @@ This feature allows the user to delete unwanted events. `DeleteCommand#Execute` ### 4.11 Find -### 4.12 Find base on date +### 4.12 Find based on date + +This feature allows users to find events on the date inputted by the user. + +Given below is an example usage scenario: + +Step 1. The user wishes to find events happening on a certain date, so he inputs `date 2020-10-10`. + +Step 2. This executes FindDateCommand, which calls `filterDateWith(2020-10-10)` to create a new filtered list. + +Step 3. This filtered list is then printed by calling `printFilteredDateEventList` from UI. ### 4.13 Print locations of a certain group + + ### 4.14 Study time ### 4.15 Done ### 4.16 User Info +This feature allows users to input information about themselves into the app, specifically their name, and +whether they are a student or a professor. + +Given below is an example usage scenario: + +Step 1: The user wishes to store his personal information, so he inputs `student Harry`. + +Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, student in UserInfo. + 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. 2. `Eventlist#remove()` is called which will delete the event with the specified index. diff --git a/docs/team/madbeez.md b/docs/team/madbeez.md index eedbc1c887..ecc0a309c8 100644 --- a/docs/team/madbeez.md +++ b/docs/team/madbeez.md @@ -17,20 +17,20 @@ Given below are my contributions to the project. * What it does: Allows users to know what events they have for the day, and the deadlines they need to submit assignments by. * Justification: Helps forgetful users to remember what tasks are due. -* **Enhancements to existing features** +* **Enhancements to existing features**: * Updated Parser to work with new features * Fixed bugs related to Parser and AddCommand -* Code Contributed: [Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=madbeez&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) +* **Code Contributed**: [Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=madbeez&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other) * **Project management**: * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub * **Documentation**: * User Guide * Added documentation for add, reminder and list features - * Added section on command summary + * Added section for command summary * Developer Guide * Added documentation for UI and Logic components - * Added documentation for add, reminder and list features + * Added documentation for add, reminder, list, find based on date, and user info features * Added sections on target user profile and user stories * **Community** From 7e74950a1382bf6ce1a9686257a657313f9926c6 Mon Sep 17 00:00:00 2001 From: Brendan Date: Mon, 9 Nov 2020 23:46:06 +0800 Subject: [PATCH 269/299] Updated DG --- docs/DeveloperGuide.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d742faa88d..a097ebd7dd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -337,8 +337,6 @@ Step 3. This filtered list is then printed by calling `printFilteredDateEventLis ### 4.13 Print locations of a certain group - - ### 4.14 Study time ### 4.15 Done From 118381263aafb7a4e6db20c9324cab8d41445acb Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 23:50:20 +0800 Subject: [PATCH 270/299] dg (find and delete) --- docs/DeveloperGuide.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 898c250341..3564d4b430 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -320,9 +320,23 @@ The sequence diagram below shows what happens when user enters `help`: This feature allows users to repeat all classes in the current week or a selected event for several weeks. ### 4.10 Delete -This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the following steps: +This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the +following steps: + +Step 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. + +Step 2. `Eventlist#remove()` is called which will delete the event with the specified index. ### 4.11 Find +This feature allows the user to filter his/her events by a particular keyword. This command will search through all the events and find events that have descriptions +containing the search criteria. The process takes place in the following steps: + +Step 1. The user enters `find CRITERIA` which will be parsed by the `Parser` class. The `Parser` class will create a new `FindCommand` +object. + +Step 2. `EventList#filterWith()` will be called which will create a ArrayList containing events that match the specified criteria. + +Step 3. `UI#printFilteredEventList` is called to print out the events. ### 4.12 Find base on date From 6d8fdf3c960996c451c420a9e8cd375ba7e6e3e8 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 23:50:49 +0800 Subject: [PATCH 271/299] DG --- docs/DeveloperGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 898c250341..22ea4bc70e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -329,6 +329,7 @@ This feature allows the user to delete unwanted events. `DeleteCommand#Execute` ### 4.13 Print locations of a certain group ### 4.14 Study time +This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. ### 4.15 Done From 016b0ab9a0eb986994969b14f0969d630349b28f Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 23:54:00 +0800 Subject: [PATCH 272/299] update dg --- docs/DeveloperGuide.md | 45 ++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index bb4ad83b29..da2a0466be 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -352,40 +352,18 @@ Step 3. This filtered list is then printed by calling `printFilteredDateEventLis ### 4.13 Print locations of a certain group -### 4.14 Study time -This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. - -### 4.15 Done - -### 4.16 User Info - -This feature allows users to input information about themselves into the app, specifically their name, and -whether they are a student or a professor. - -Given below is an example usage scenario: - -Step 1: The user wishes to store his personal information, so he inputs `student Harry`. - -Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, student in UserInfo. - -1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. - -2. `Eventlist#remove()` is called which will delete the event with the specified index. -### 4.11 Find - -### 4.12 Print locations This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input abbreviations of various faculties (e.g. FOS). The sequence diagram belows shows what happens when user input any faculty abbreviation:
    ![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    -*Figure 4.12 Sequence Diagram for print area locations function* +*Figure 4.13 Sequence Diagram for print area locations function* -### 4.13 Study Time +### 4.14 Study time +This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. -### 4.14 User Info +### 4.15 Done -### 4.15 Done This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event type `Assignment`, all the other event types cannot be marked as done before event occurs. @@ -399,6 +377,21 @@ Step 2. The program will first check if the index is valid. If invalid, applicat Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an `Assignment`, then it will print a warning message. Else, it will mark the event as done. +### 4.16 User Info + +This feature allows users to input information about themselves into the app, specifically their name, and +whether they are a student or a professor. + +Given below is an example usage scenario: + +Step 1: The user wishes to store his personal information, so he inputs `student Harry`. + +Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, student in UserInfo. + +1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. + +2. `Eventlist#remove()` is called which will delete the event with the specified index. + ## 5. Documentation All documentation can be found in the `docs/` folder. From c7e0f1c63304df340294010bf454aefaff003f7d Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Tue, 10 Nov 2020 00:05:31 +0800 Subject: [PATCH 273/299] dg links --- docs/DeveloperGuide.md | 74 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index da2a0466be..3c4444180e 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -18,36 +18,36 @@ Wan Shi Jie Brendan
    ## Table of Contents -* [1. Introduction](#intro) -* [2. Getting Started](#getting_started)
    - * [2.1. Prerequisites](#prerequisites)
    - * [2.2. Setting Up](#setting_up)
    -* [3. Design](#design)
    - * [3.1 Architecture](#architecture)
    - * [3.2 UI](#ui)
    - * [3.3 Storage](#storage)
    - * [3.4 Logic](#logic)
    - * [3.5 Model](#model)
    - * [3.5.1. Event](#event)
    - * [3.5.2. Location](#location)
    -* [4. Implementation](#implementation)
    - * [4.1. Add events](#add_events)
    - * [4.2. Clear events](#clear)
    - * [4.3. Edit events](#edit)
    - * [4.4. Locate](#locate)
    - * [4.5. Reminders](#reminder)
    - * [4.6. Sort events](#sort)
    - * [4.7. View events](#view)
    - * [4.8. Help](#help)
    - * [4.9 Repeat](#repeat)
    - * [4.10 Delete](#delte)
    - * [4.11 Find](#find)
    - * [4.12 Find based on date](#date)
    - * [4.13 Print locations of a certain group](#location_group)
    - * [4.14 Study time](#study_time)
    - * [4.15 Done](#done)
    - * [4.16 User Info](#user_info)
    -* [5. Documentation](#documentation)
    +* [1. Introduction](#1-introduction) +* [2. Getting Started](#2-getting-started)
    + * [2.1. Prerequisites](#21-prerequisites)
    + * [2.2. Setting Up](#22-setting-up)
    +* [3. Design](#3-design)
    + * [3.1 Architecture](#31-architecture)
    + * [3.2 UI](#32-ui)
    + * [3.3 Storage](#33-storage)
    + * [3.4 Logic](#34-logic)
    + * [3.5 Model](#35-model)
    + * [3.5.1. Event](#351-event)
    + * [3.5.2. Location](#352-location)
    +* [4. Implementation](#4-implementation)
    + * [4.1. Add events](#41-add-events)
    + * [4.2. Clear events](#42-clear-events)
    + * [4.3. Edit events](#43-edit-events)
    + * [4.4. Locate](#44-locate)
    + * [4.5. Reminders](#45-reminder)
    + * [4.6. Sort events](#46-sort-events)
    + * [4.7. View events](#47-view-events)
    + * [4.8. Help](#48-help)
    + * [4.9 Repeat](#49-repeat)
    + * [4.10 Delete](#410-delete)
    + * [4.11 Find](#411-find)
    + * [4.12 Find based on date](#412-find-based-on-date)
    + * [4.13 Print locations of a certain group](#413-print-locations-of-a-certain-group)
    + * [4.14 Study time](#414-study-time)
    + * [4.15 Done](#415-done)
    + * [4.16 User Info](#416-user-info)
    +* [5. Documentation](#5-documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    * [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    @@ -319,7 +319,7 @@ The sequence diagram below shows what happens when user enters `help`: ### 4.9 Repeat This feature allows users to repeat all classes in the current week or a selected event for several weeks. -### 4.10 Delete +### 4.10 Delete This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the following steps: @@ -327,7 +327,7 @@ Step 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of th Step 2. `Eventlist#remove()` is called which will delete the event with the specified index. -### 4.11 Find +### 4.11 Find This feature allows the user to filter his/her events by a particular keyword. This command will search through all the events and find events that have descriptions containing the search criteria. The process takes place in the following steps: @@ -338,7 +338,7 @@ Step 2. `EventList#filterWith()` will be called which will create a ArrayList co Step 3. `UI#printFilteredEventList` is called to print out the events. -### 4.12 Find based on date +### 4.12 Find based on date This feature allows users to find events on the date inputted by the user. @@ -350,7 +350,7 @@ Step 2. This executes FindDateCommand, which calls `filterDateWith(2020-10-10)` Step 3. This filtered list is then printed by calling `printFilteredDateEventList` from UI. -### 4.13 Print locations of a certain group +### 4.13 Print locations of a certain group This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input abbreviations of various faculties (e.g. FOS). @@ -359,10 +359,10 @@ The sequence diagram belows shows what happens when user input any faculty abbre ![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    *Figure 4.13 Sequence Diagram for print area locations function* -### 4.14 Study time +### 4.14 Study time This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. -### 4.15 Done +### 4.15 Done This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event type `Assignment`, all the other event types cannot be marked as done before event occurs. @@ -377,7 +377,7 @@ Step 2. The program will first check if the index is valid. If invalid, applicat Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an `Assignment`, then it will print a warning message. Else, it will mark the event as done. -### 4.16 User Info +### 4.16 User Info This feature allows users to input information about themselves into the app, specifically their name, and whether they are a student or a professor. From b360feb8c289bae0507bda34ccdd0688b62455de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:11:14 +0800 Subject: [PATCH 274/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 3c4444180e..1bae487f2d 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -49,8 +49,8 @@ Wan Shi Jie Brendan
    * [4.16 User Info](#416-user-info)
    * [5. Documentation](#5-documentation)
    * [6. Testing](#6-testing)
    -* [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    -* [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    +* [Appendix A. Product scope](#appendix-a-product-scope)
    +* [Appendix B.User stories](#appendix-b-user-stories)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) @@ -406,7 +406,7 @@ JUnit is used to write tests for the project. Learn more about JUnit [here](http If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` on your keyboard. Alternatively, you can open a console and run the command `gradelw clean test` (Mac/linus: `.gradlew clean test`). -## Appendix A: Product scope +## Appendix A: Product scope ### User profile @@ -418,13 +418,13 @@ __Target user profile:__ * prefers using Command Line Interface (CLI) apps * prefers typing instead of mouse interactions -### Value proposition +### Value proposition NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events -## Appendix B: User stories +## Appendix B: User stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| From 08bb606997b59c2626e5c5d92362565fd7282140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:14:11 +0800 Subject: [PATCH 275/299] Rename Lee-Juntong.md to lee-juntong.md --- docs/team/{Lee-Juntong.md => lee-juntong.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/team/{Lee-Juntong.md => lee-juntong.md} (100%) diff --git a/docs/team/Lee-Juntong.md b/docs/team/lee-juntong.md similarity index 100% rename from docs/team/Lee-Juntong.md rename to docs/team/lee-juntong.md From 38e5a9b659c71dff73db33a35162685b2caac766 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Tue, 10 Nov 2020 00:16:57 +0800 Subject: [PATCH 276/299] links --- docs/DeveloperGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 3c4444180e..bcf211d7fb 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -50,7 +50,7 @@ Wan Shi Jie Brendan
    * [5. Documentation](#5-documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    -* [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    +* [Appendix B. User stories](#appendix-b-user-stories)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) @@ -424,7 +424,7 @@ NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events -## Appendix B: User stories +## Appendix B: User stories |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| From 7a58561d6c12ec47ad6b502909d78404e572795f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:17:07 +0800 Subject: [PATCH 277/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1bae487f2d..91e57ef09a 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -437,6 +437,7 @@ NUSchedule aims to assist the target audience with: |2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately |2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings +|2.1|student having periodic lessons|repeat the classes on a weekly basis|spend less time in adding same classes but just different weeks ## Appendix C: Non-Functional Requirements From b3ad2ca6321cafd0f8be85a13c6341748b783fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:17:19 +0800 Subject: [PATCH 278/299] Update DeveloperGuide.md From d2c1faf07ce59dd18af9d46541ec9544846bd7f5 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Tue, 10 Nov 2020 00:22:06 +0800 Subject: [PATCH 279/299] next page --- docs/DeveloperGuide.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index bcf211d7fb..fa12769252 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -14,7 +14,6 @@ Wu Nan
    Wan Shi Jie Brendan
    -
    ## Table of Contents From b9ab74a871a63eb9d26095db62ba89d719d13e66 Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Tue, 10 Nov 2020 00:28:42 +0800 Subject: [PATCH 280/299] update dg --- docs/DeveloperGuide.md | 70 +++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index fa12769252..1a419e2018 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -17,41 +17,41 @@ Wan Shi Jie Brendan
    ## Table of Contents -* [1. Introduction](#1-introduction) -* [2. Getting Started](#2-getting-started)
    - * [2.1. Prerequisites](#21-prerequisites)
    - * [2.2. Setting Up](#22-setting-up)
    -* [3. Design](#3-design)
    - * [3.1 Architecture](#31-architecture)
    - * [3.2 UI](#32-ui)
    - * [3.3 Storage](#33-storage)
    - * [3.4 Logic](#34-logic)
    - * [3.5 Model](#35-model)
    - * [3.5.1. Event](#351-event)
    - * [3.5.2. Location](#352-location)
    -* [4. Implementation](#4-implementation)
    - * [4.1. Add events](#41-add-events)
    - * [4.2. Clear events](#42-clear-events)
    - * [4.3. Edit events](#43-edit-events)
    - * [4.4. Locate](#44-locate)
    - * [4.5. Reminders](#45-reminder)
    - * [4.6. Sort events](#46-sort-events)
    - * [4.7. View events](#47-view-events)
    - * [4.8. Help](#48-help)
    - * [4.9 Repeat](#49-repeat)
    - * [4.10 Delete](#410-delete)
    - * [4.11 Find](#411-find)
    - * [4.12 Find based on date](#412-find-based-on-date)
    - * [4.13 Print locations of a certain group](#413-print-locations-of-a-certain-group)
    - * [4.14 Study time](#414-study-time)
    - * [4.15 Done](#415-done)
    - * [4.16 User Info](#416-user-info)
    -* [5. Documentation](#5-documentation)
    -* [6. Testing](#6-testing)
    -* [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    -* [Appendix B. User stories](#appendix-b-user-stories)
    -* [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    -* [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) +1. [Introduction](#1-introduction) +2. [Getting Started](#2-getting-started)
    + 2.1. [Prerequisites](#21-prerequisites)
    + 2.2. [Setting Up](#22-setting-up)
    +3. [Design](#3-design)
    + 3.1 [Architecture](#31-architecture)
    + 3.2 [UI](#32-ui)
    + 3.3 [Storage](#33-storage)
    + 3.4 [Logic](#34-logic)
    + 3.5 [Model](#35-model)
    + 3.5.1 [Event](#351-event)
    + 3.5.2 [Location](#352-location)
    +4. [Implementation](#4-implementation)
    + 4.1 [Add events](#41-add-events)
    + 4.2 [Clear events](#42-clear-events)
    + 4.3 [Edit events](#43-edit-events)
    + 4.4 [Locate](#44-locate)
    + 4.5 [Reminders](#45-reminder)
    + 4.6 [Sort events](#46-sort-events)
    + 4.7 [View events](#47-view-events)
    + 4.8 [Help](#48-help)
    + 4.9 [Repeat](#49-repeat)
    + 4.10 [Delete](#410-delete)
    + 4.11 [Find](#411-find)
    + 4.12 [Find based on date](#412-find-based-on-date)
    + 4.13 [Print locations of a certain group](#413-print-locations-of-a-certain-group)
    + 4.14 [Study time](#414-study-time)
    + 4.15 [Done](#415-done)
    + 4.16 [User Info](#416-user-info)
    +5. [Documentation](#5-documentation)
    +6. [Testing](#6-testing)
    +Appendix A. [Product scope](#appendix-a-product-scopea-idproduct_scopea)
    +Appendix B. [User stories](#appendix-b-user-stories)
    +Appendix C. [Non-functional requirements](#appendix-c-non-functional-requirements)
    +Appendix D. [Instructions for manual testing](#appendix-d-instructions-for-manual-testing) ## 1. Introduction From 221ffe7a8b6d371279674c79a76c55832e1e9180 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Tue, 10 Nov 2020 00:29:50 +0800 Subject: [PATCH 281/299] some --- docs/DeveloperGuide.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index bb4ad83b29..bc1e4c7485 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -47,6 +47,7 @@ Wan Shi Jie Brendan
    * [4.14 Study time](#study_time)
    * [4.15 Done](#done)
    * [4.16 User Info](#user_info)
    + * [4.17 Print Locations](#417-print-locations)
    * [5. Documentation](#documentation)
    * [6. Testing](#6-testing)
    * [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    @@ -371,9 +372,8 @@ Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. 2. `Eventlist#remove()` is called which will delete the event with the specified index. -### 4.11 Find -### 4.12 Print locations +### 4.17 Print locations This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input abbreviations of various faculties (e.g. FOS). @@ -444,6 +444,7 @@ NUSchedule aims to assist the target audience with: |2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately |2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings +|2.1|student having periodic classes|repeat the events|do not add them again and again ## Appendix C: Non-Functional Requirements From 627c88b06c259319c5588c53f1270baecf33cf05 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 10 Nov 2020 00:35:13 +0800 Subject: [PATCH 282/299] remove numbering of DG --- docs/DeveloperGuide.md | 124 ++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 91e57ef09a..d486d7710f 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -18,43 +18,43 @@ Wan Shi Jie Brendan
    ## Table of Contents -* [1. Introduction](#1-introduction) -* [2. Getting Started](#2-getting-started)
    - * [2.1. Prerequisites](#21-prerequisites)
    - * [2.2. Setting Up](#22-setting-up)
    -* [3. Design](#3-design)
    - * [3.1 Architecture](#31-architecture)
    - * [3.2 UI](#32-ui)
    - * [3.3 Storage](#33-storage)
    - * [3.4 Logic](#34-logic)
    - * [3.5 Model](#35-model)
    - * [3.5.1. Event](#351-event)
    - * [3.5.2. Location](#352-location)
    -* [4. Implementation](#4-implementation)
    - * [4.1. Add events](#41-add-events)
    - * [4.2. Clear events](#42-clear-events)
    - * [4.3. Edit events](#43-edit-events)
    - * [4.4. Locate](#44-locate)
    - * [4.5. Reminders](#45-reminder)
    - * [4.6. Sort events](#46-sort-events)
    - * [4.7. View events](#47-view-events)
    - * [4.8. Help](#48-help)
    - * [4.9 Repeat](#49-repeat)
    - * [4.10 Delete](#410-delete)
    - * [4.11 Find](#411-find)
    - * [4.12 Find based on date](#412-find-based-on-date)
    - * [4.13 Print locations of a certain group](#413-print-locations-of-a-certain-group)
    - * [4.14 Study time](#414-study-time)
    - * [4.15 Done](#415-done)
    - * [4.16 User Info](#416-user-info)
    -* [5. Documentation](#5-documentation)
    -* [6. Testing](#6-testing)
    +* [Introduction](#introduction) +* [Getting Started](#getting-started)
    + * [Prerequisites](#prerequisites)
    + * [Setting Up](#setting-up)
    +* [Design](#design)
    + * [Architecture](#architecture)
    + * [UI](#ui)
    + * [Storage](#storage)
    + * [Logic](#logic)
    + * [Model](#model)
    + * [Event](#event)
    + * [Location](#location)
    +* [Implementation](#implementation)
    + * [Add events](#add-events)
    + * [Clear events](#clear-events)
    + * [Edit events](#edit-events)
    + * [Locate](#locate)
    + * [Reminders](#reminder)
    + * [Sort events](#sort-events)
    + * [View events](#view-events)
    + * [Help](#help)
    + * [Repeat](#repeat)
    + * [Delete](#delete)
    + * [Find](#find)
    + * [Find based on date](#find-based-on-date)
    + * [Print locations of a certain group](#print-locations-of-a-certain-group)
    + * [Study time](#study-time)
    + * [Done](#done)
    + * [User Info](#user-info)
    +* [Documentation](#documentation)
    +* [Testing](#testing)
    * [Appendix A. Product scope](#appendix-a-product-scope)
    * [Appendix B.User stories](#appendix-b-user-stories)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) -## 1. Introduction +## Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, @@ -64,16 +64,16 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. -## 2. Getting Started +## Getting Started This section provides information to help you get NUSchedule up and running on your own computers. -### 2.1 Prerequisites +### Prerequisites 1. JDK 11 2. Intellij IDEA -### 2.2 Setting Up +### Setting Up 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. 2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project @@ -88,12 +88,12 @@ first). 6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project. -## 3. Design +## Design This section describes the different components of the application and how each component interact with each other to run the program. -### 3.1 Architecture +### Architecture ![architecture](diagrams/architecture.png)
    The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into @@ -104,7 +104,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. -### 3.2 UI +### UI ![UI Class Diagram](diagrams/Ui.png)
    *Figure 3.2.1 Class diagram for UI component* @@ -114,10 +114,10 @@ The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, The `UI` component reads user input using readCommand() and then executes user commands according to the Logic component. -### 3.3 Storage +### Storage __API__:`Storage.java` The `Storage` component can save the list of event data in .txt format and read it back. -### 3.4 Logic +### Logic __API__:`Parser.java` ![Logic Class Diagram](diagrams/LogicClass.png)
    @@ -129,13 +129,13 @@ The `Logic` component parses the user input and executes commands based on the g 2. The command execution affects the EventList (e.g. clearing the list). 3. The result passes back to the UI, which then displays relevant feedback to the user (e.g. successful execution). -### 3.5 Model +### Model The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. -#### 3.5.1 Event +#### Event __API__:`EventList.java` -### 3.5.2 Location +### Location ![location class diagram](diagrams/LocationClass.png)
    *Figure 3.6.1 Class diagram for location component* @@ -156,12 +156,12 @@ and not edited in any part of the program. * prints the list of locations that is saved in the data file * checks if a location is being saved in the list and returns the location when asked -## 4. Implementation +## Implementation This section describes the implementation of some noteworthy features. -### 4.1 Add events +### Add events This feature allows users to add events and relevant information about them (description, time and location) to the list . There are three possible types of events that can be added: classes, assignments, and personal events. @@ -182,7 +182,7 @@ The sequence diagram below shows the process of adding a new event. *Figure 4.1 Sequence Diagram for add function* -### 4.2 Clear events +### Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. Users may choose to delete all events, events happened one month ago, or events happened before a certain date. @@ -212,7 +212,7 @@ The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    *Figure 4.2.2 Sequence Diagram for clear function* -### 4.3 Edit events +### Edit events This feature allows users to edit the information of events that was previously added. @@ -230,7 +230,7 @@ Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the eve ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    *Figure 4.3 Sequence Diagram for EditCommand()* -### 4.4 Locate +### Locate This feature allows users to add locations as part of the event information. If the place is located within the school, additional information about the location will be provided such as nearest bus stops or buildings. If the place is a @@ -262,7 +262,7 @@ The sequence diagram below shows exactly which methods, from which classes, are ![locate sequence diagram](diagrams/LocateSequence.png)
    *Figure 4.4 Sequence diagram for locate function* -### 4.5 Reminder +### Reminder This feature allows users to get a reminder of the events that will occur today. @@ -278,7 +278,7 @@ The sequence diagram belows shows the process of executing the reminder command. ![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) *Figure 4.5 Sequence Diagram for reminder function* -### 4.6 Sort events +### Sort events This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available are sorting by time, description and location. @@ -291,7 +291,7 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio ![](diagrams/SortCommand.png)
    *Figure 4.6 Sequence diagram for SortCommand()* -### 4.7 View events +### View events This feature allows users to view a numbered list of all the events/tasks they have added so far, in the order which they were added. @@ -306,7 +306,7 @@ The sequence diagram below shows what happens when the list command is executed. ![ListCommand Sequence Diagram](diagrams/ListCommand.png) *Figure 4.7 Sequence Diagram for list function* -### 4.8 Help +### Help This feature allows users to view a summary of all the features available for the current version of NUSchedule. When the user inputs `help`, all available commands and a simple description for each of them will be printed. @@ -316,10 +316,10 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    *Figure 4.8 Sequence Diagram for help function* -### 4.9 Repeat +### Repeat This feature allows users to repeat all classes in the current week or a selected event for several weeks. -### 4.10 Delete +### Delete This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the following steps: @@ -327,7 +327,7 @@ Step 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of th Step 2. `Eventlist#remove()` is called which will delete the event with the specified index. -### 4.11 Find +### Find This feature allows the user to filter his/her events by a particular keyword. This command will search through all the events and find events that have descriptions containing the search criteria. The process takes place in the following steps: @@ -338,7 +338,7 @@ Step 2. `EventList#filterWith()` will be called which will create a ArrayList co Step 3. `UI#printFilteredEventList` is called to print out the events. -### 4.12 Find based on date +### Find based on date This feature allows users to find events on the date inputted by the user. @@ -350,7 +350,7 @@ Step 2. This executes FindDateCommand, which calls `filterDateWith(2020-10-10)` Step 3. This filtered list is then printed by calling `printFilteredDateEventList` from UI. -### 4.13 Print locations of a certain group +### Print locations of a certain group This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input abbreviations of various faculties (e.g. FOS). @@ -359,10 +359,10 @@ The sequence diagram belows shows what happens when user input any faculty abbre ![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    *Figure 4.13 Sequence Diagram for print area locations function* -### 4.14 Study time +### Study time This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. -### 4.15 Done +### Done This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event type `Assignment`, all the other event types cannot be marked as done before event occurs. @@ -377,7 +377,7 @@ Step 2. The program will first check if the index is valid. If invalid, applicat Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an `Assignment`, then it will print a warning message. Else, it will mark the event as done. -### 4.16 User Info +### User Info This feature allows users to input information about themselves into the app, specifically their name, and whether they are a student or a professor. @@ -392,7 +392,7 @@ Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, 2. `Eventlist#remove()` is called which will delete the event with the specified index. -## 5. Documentation +## Documentation All documentation can be found in the `docs/` folder. * [Jekyll](https://jekyllrb.com/) is used to manage documentation. @@ -400,7 +400,7 @@ All documentation can be found in the `docs/` folder. * [PlantUML](https://plantuml.com/) is used to create the diagrams. -## 6. Testing +## Testing JUnit is used to write tests for the project. Learn more about JUnit [here](https://se-education.org/guides/tutorials/gradle.html). If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` From 6a9da496e99b7ebdb38f1d0bb69375f88d829527 Mon Sep 17 00:00:00 2001 From: max-wunan <60435396+max-wunan@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:40:21 +0800 Subject: [PATCH 283/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d486d7710f..020bcff036 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -50,7 +50,7 @@ Wan Shi Jie Brendan
    * [Documentation](#documentation)
    * [Testing](#testing)
    * [Appendix A. Product scope](#appendix-a-product-scope)
    -* [Appendix B.User stories](#appendix-b-user-stories)
    +* [Appendix B. User stories](#appendix-b-user-stories)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) From 3b3495f1aaf0bbc865d9f56651e6602378593c8a Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Tue, 10 Nov 2020 00:42:10 +0800 Subject: [PATCH 284/299] links --- docs/DeveloperGuide.md | 115 +++++++++++++++++++++++++++-------------- 1 file changed, 75 insertions(+), 40 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 1a419e2018..f08c8e2eae 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -17,42 +17,43 @@ Wan Shi Jie Brendan
    ## Table of Contents -1. [Introduction](#1-introduction) -2. [Getting Started](#2-getting-started)
    - 2.1. [Prerequisites](#21-prerequisites)
    - 2.2. [Setting Up](#22-setting-up)
    -3. [Design](#3-design)
    - 3.1 [Architecture](#31-architecture)
    - 3.2 [UI](#32-ui)
    - 3.3 [Storage](#33-storage)
    - 3.4 [Logic](#34-logic)
    - 3.5 [Model](#35-model)
    - 3.5.1 [Event](#351-event)
    - 3.5.2 [Location](#352-location)
    -4. [Implementation](#4-implementation)
    - 4.1 [Add events](#41-add-events)
    - 4.2 [Clear events](#42-clear-events)
    - 4.3 [Edit events](#43-edit-events)
    - 4.4 [Locate](#44-locate)
    - 4.5 [Reminders](#45-reminder)
    - 4.6 [Sort events](#46-sort-events)
    - 4.7 [View events](#47-view-events)
    - 4.8 [Help](#48-help)
    - 4.9 [Repeat](#49-repeat)
    - 4.10 [Delete](#410-delete)
    - 4.11 [Find](#411-find)
    - 4.12 [Find based on date](#412-find-based-on-date)
    - 4.13 [Print locations of a certain group](#413-print-locations-of-a-certain-group)
    - 4.14 [Study time](#414-study-time)
    - 4.15 [Done](#415-done)
    - 4.16 [User Info](#416-user-info)
    -5. [Documentation](#5-documentation)
    -6. [Testing](#6-testing)
    -Appendix A. [Product scope](#appendix-a-product-scopea-idproduct_scopea)
    -Appendix B. [User stories](#appendix-b-user-stories)
    -Appendix C. [Non-functional requirements](#appendix-c-non-functional-requirements)
    -Appendix D. [Instructions for manual testing](#appendix-d-instructions-for-manual-testing) - +1. [Introduction](#intro) +2. [Getting Started](#start)
    + 2.1. [Prerequisites](#prereq)
    + 2.2. [Setting Up](#setup)
    +3. [Design](#design)
    + 3.1 [Architecture](#architecture)
    + 3.2 [UI](#ui)
    + 3.3 [Storage](#storage)
    + 3.4 [Logic](logic)
    + 3.5 [Model](#model)
    + 3.5.1 [Event](#event)
    + 3.5.2 [Location](#location)
    +4. [Implementation](#implementation)
    + 4.1 [Add events](#add)
    + 4.2 [Clear events](#clear)
    + 4.3 [Edit events](#edit)
    + 4.4 [Locate](#locate)
    + 4.5 [Reminders](#reminder)
    + 4.6 [Sort events](#sort)
    + 4.7 [View events](#view)
    + 4.8 [Help](#help)
    + 4.9 [Repeat](#repeat)
    + 4.10 [Delete](#delete)
    + 4.11 [Find](#find)
    + 4.12 [Find based on date](#findDate)
    + 4.13 [Print locations of a certain group](#printLocations)
    + 4.14 [Study time](#studyTime)
    + 4.15 [Done](#done)
    + 4.16 [User Info](#userInfo)
    +5. [Documentation](#documentation)
    +6. [Testing](#test)
    +Appendix A. [Product scope](#appendixA)
    +Appendix B. [User stories](#appendixB)
    +Appendix C. [Non-functional requirements](#appendixC)
    +Appendix D. [Instructions for manual testing](#appendixD) + + ## 1. Introduction NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive @@ -63,15 +64,18 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. + ## 2. Getting Started This section provides information to help you get NUSchedule up and running on your own computers. + ### 2.1 Prerequisites 1. JDK 11 2. Intellij IDEA + ### 2.2 Setting Up 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. @@ -87,11 +91,13 @@ first). 6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project. + ## 3. Design This section describes the different components of the application and how each component interact with each other to run the program. + ### 3.1 Architecture ![architecture](diagrams/architecture.png)
    @@ -103,6 +109,7 @@ The Architecture Diagram above provides a high-level view of the design of NUSch 4. Storage: Reads data from and writes data to the hard disk. 5. Model: Stores the data the app uses in memory. + ### 3.2 UI ![UI Class Diagram](diagrams/Ui.png)
    @@ -113,9 +120,12 @@ The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, The `UI` component reads user input using readCommand() and then executes user commands according to the Logic component. + ### 3.3 Storage __API__:`Storage.java` The `Storage` component can save the list of event data in .txt format and read it back. + + ### 3.4 Logic __API__:`Parser.java` @@ -128,12 +138,15 @@ The `Logic` component parses the user input and executes commands based on the g 2. The command execution affects the EventList (e.g. clearing the list). 3. The result passes back to the UI, which then displays relevant feedback to the user (e.g. successful execution). + ### 3.5 Model The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. + #### 3.5.1 Event __API__:`EventList.java` + ### 3.5.2 Location ![location class diagram](diagrams/LocationClass.png)
    *Figure 3.6.1 Class diagram for location component* @@ -155,11 +168,12 @@ and not edited in any part of the program. * prints the list of locations that is saved in the data file * checks if a location is being saved in the list and returns the location when asked + ## 4. Implementation - This section describes the implementation of some noteworthy features. + ### 4.1 Add events This feature allows users to add events and relevant information about them (description, time and location) to the list @@ -180,7 +194,7 @@ The sequence diagram below shows the process of adding a new event. ![AddCommand Sequence Diagram](diagrams/AddCommand.png)
    *Figure 4.1 Sequence Diagram for add function* - + ### 4.2 Clear events This feature allows users to completely delete the existing event information that is previously typed in by users. @@ -211,6 +225,7 @@ The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    *Figure 4.2.2 Sequence Diagram for clear function* + ### 4.3 Edit events This feature allows users to edit the information of events that was previously added. @@ -229,6 +244,7 @@ Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the eve ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    *Figure 4.3 Sequence Diagram for EditCommand()* + ### 4.4 Locate This feature allows users to add locations as part of the event information. If the place is located within the school, @@ -261,6 +277,7 @@ The sequence diagram below shows exactly which methods, from which classes, are ![locate sequence diagram](diagrams/LocateSequence.png)
    *Figure 4.4 Sequence diagram for locate function* + ### 4.5 Reminder This feature allows users to get a reminder of the events that will occur today. @@ -277,6 +294,7 @@ The sequence diagram belows shows the process of executing the reminder command. ![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) *Figure 4.5 Sequence Diagram for reminder function* + ### 4.6 Sort events This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available @@ -290,6 +308,7 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio ![](diagrams/SortCommand.png)
    *Figure 4.6 Sequence diagram for SortCommand()* + ### 4.7 View events This feature allows users to view a numbered list of all the events/tasks they have added so far, @@ -305,6 +324,7 @@ The sequence diagram below shows what happens when the list command is executed. ![ListCommand Sequence Diagram](diagrams/ListCommand.png) *Figure 4.7 Sequence Diagram for list function* + ### 4.8 Help This feature allows users to view a summary of all the features available for the current version of NUSchedule. @@ -315,9 +335,11 @@ The sequence diagram below shows what happens when user enters `help`: ![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    *Figure 4.8 Sequence Diagram for help function* + ### 4.9 Repeat This feature allows users to repeat all classes in the current week or a selected event for several weeks. + ### 4.10 Delete This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the following steps: @@ -326,6 +348,7 @@ Step 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of th Step 2. `Eventlist#remove()` is called which will delete the event with the specified index. + ### 4.11 Find This feature allows the user to filter his/her events by a particular keyword. This command will search through all the events and find events that have descriptions containing the search criteria. The process takes place in the following steps: @@ -337,6 +360,7 @@ Step 2. `EventList#filterWith()` will be called which will create a ArrayList co Step 3. `UI#printFilteredEventList` is called to print out the events. + ### 4.12 Find based on date This feature allows users to find events on the date inputted by the user. @@ -349,6 +373,7 @@ Step 2. This executes FindDateCommand, which calls `filterDateWith(2020-10-10)` Step 3. This filtered list is then printed by calling `printFilteredDateEventList` from UI. + ### 4.13 Print locations of a certain group This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input @@ -358,9 +383,11 @@ The sequence diagram belows shows what happens when user input any faculty abbre ![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    *Figure 4.13 Sequence Diagram for print area locations function* + ### 4.14 Study time This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. + ### 4.15 Done This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event @@ -376,6 +403,7 @@ Step 2. The program will first check if the index is valid. If invalid, applicat Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an `Assignment`, then it will print a warning message. Else, it will mark the event as done. + ### 4.16 User Info This feature allows users to input information about themselves into the app, specifically their name, and @@ -391,6 +419,7 @@ Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, 2. `Eventlist#remove()` is called which will delete the event with the specified index. + ## 5. Documentation All documentation can be found in the `docs/` folder. @@ -398,15 +427,17 @@ All documentation can be found in the `docs/` folder. * [Markdown](https://guides.github.com/features/mastering-markdown/) style is used for the documentation. * [PlantUML](https://plantuml.com/) is used to create the diagrams. - + ## 6. Testing JUnit is used to write tests for the project. Learn more about JUnit [here](https://se-education.org/guides/tutorials/gradle.html). If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` on your keyboard. Alternatively, you can open a console and run the command `gradelw clean test` (Mac/linus: `.gradlew clean test`). + ## Appendix A: Product scope - + + ### User profile __Target user profile:__ @@ -417,12 +448,14 @@ __Target user profile:__ * prefers using Command Line Interface (CLI) apps * prefers typing instead of mouse interactions + ### Value proposition NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events + ## Appendix B: User stories |Version| As a ... | I want to ... | So that I can ...| @@ -437,12 +470,14 @@ NUSchedule aims to assist the target audience with: |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately |2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings + ## Appendix C: Non-Functional Requirements 1. This application will work on any computers running either Windows, macOS or Unix that has Java 11 or a higher version installed. 2. A user that is proficient in typing will find this application to be faster and more convenient to use than applications that requires mouse clicks. + ## Appendix D: Instructions for manual testing 1. Initial launch From 7b8cbb03639cc868bbf3e48cc65c3db3dbfa293a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 00:44:46 +0800 Subject: [PATCH 285/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 020bcff036..6cf40a3186 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -47,6 +47,7 @@ Wan Shi Jie Brendan
    * [Study time](#study-time)
    * [Done](#done)
    * [User Info](#user-info)
    + * [Exit](#exit)
    * [Documentation](#documentation)
    * [Testing](#testing)
    * [Appendix A. Product scope](#appendix-a-product-scope)
    @@ -392,6 +393,11 @@ Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, 2. `Eventlist#remove()` is called which will delete the event with the specified index. +### Exit + +This feature allows users to terminate this app. By inputting `bye`, the isExit flag of the app will be changed to true, and the app will exit with +an exit message. + ## Documentation All documentation can be found in the `docs/` folder. From 5ed4b156031c3f9eb41a9d504f0e94aa09ae2af7 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 10 Nov 2020 00:51:50 +0800 Subject: [PATCH 286/299] alignment --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d486d7710f..020bcff036 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -50,7 +50,7 @@ Wan Shi Jie Brendan
    * [Documentation](#documentation)
    * [Testing](#testing)
    * [Appendix A. Product scope](#appendix-a-product-scope)
    -* [Appendix B.User stories](#appendix-b-user-stories)
    +* [Appendix B. User stories](#appendix-b-user-stories)
    * [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    * [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) From b6c744c9d7db1b6bfddae14b8dbb1cedae75b44e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 01:33:58 +0800 Subject: [PATCH 287/299] Update lee-juntong.md --- docs/team/lee-juntong.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/team/lee-juntong.md b/docs/team/lee-juntong.md index 299ae314d3..ba03d54dba 100644 --- a/docs/team/lee-juntong.md +++ b/docs/team/lee-juntong.md @@ -35,9 +35,7 @@ Given below are my contributions to the project. * Credits: The code to compare whether 2 localDateTimes are within the same week. Provided by Sunil Katti [here](https://stackoverflow.com/a/56246095) -* **New Feature**: Added the ability to exit the application. - -* **New Feature**: Added the ability to print the list of events. +* **New Feature**: Added the ability to exit the application. * **New Feature**: Added the ability to print the list of locations at the selected area in NUS. From 73ec595c39c00294477b98180371ecd87dabb578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Tue, 10 Nov 2020 01:34:05 +0800 Subject: [PATCH 288/299] Update lee-juntong.md From 5d715db3d8158a282db19b16637aed34c75ca883 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Fri, 13 Nov 2020 10:04:40 +0800 Subject: [PATCH 289/299] Update UserGuide.md --- docs/UserGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 852fbd9147..061d87b7b5 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -136,7 +136,7 @@ Adding an event with a timing clash: ![add4](diagrams/add4.png) -### Edit an event +### Edit an event - Xu Che The `edit` command allows you to edit the event type, description, start/end date and location for an existing event. You can start using this command by entering `edit INDEX`, where INDEX is the number of the task you want to edit. @@ -166,7 +166,7 @@ Expected Outcome: ![edit5](diagrams/edit5.png) -### Sort events +### Sort events - Xu Che With this command, you can sort all events by either their end time, location or their description. When sorting by time, events will be sorted in a chronological order. Events with an earlier end date will be sorted on top of events with later end dates. This way, you can prioritize the events that are due soon. From da5305f106750fad288d1bb015ac30d3c61226dc Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 13 Nov 2020 12:05:27 +0800 Subject: [PATCH 290/299] clear DG --- docs/DeveloperGuide.md | 472 ----------------------------------------- 1 file changed, 472 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 4020205f7f..e69de29bb2 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1,472 +0,0 @@ -# Developer Guide - -

    -![](diagrams/Logo.png)
    - -Yang Jiaqi
    - -Zhuang Mengjin
    - -Xu Che
    - -Wu Nan
    - -Wan Shi Jie Brendan
    - - -
    - -## Table of Contents - -* [Introduction](#introduction) -* [Getting Started](#getting-started)
    - * [Prerequisites](#prerequisites)
    - * [Setting Up](#setting-up)
    -* [Design](#design)
    - * [Architecture](#architecture)
    - * [UI](#ui)
    - * [Storage](#storage)
    - * [Logic](#logic)
    - * [Model](#model)
    - * [Event](#event)
    - * [Location](#location)
    -* [Implementation](#implementation)
    - * [Add events](#add-events)
    - * [Clear events](#clear-events)
    - * [Edit events](#edit-events)
    - * [Locate](#locate)
    - * [Reminders](#reminder)
    - * [Sort events](#sort-events)
    - * [View events](#view-events)
    - * [Help](#help)
    - * [Repeat](#repeat)
    - * [Delete](#delete)
    - * [Find](#find)
    - * [Find based on date](#find-based-on-date)
    - * [Print locations of a certain group](#print-locations-of-a-certain-group)
    - * [Study time](#study-time)
    - * [Done](#done)
    - * [User Info](#user-info)
    - * [Exit](#exit)
    -* [Documentation](#documentation)
    -* [Testing](#testing)
    -* [Appendix A. Product scope](#appendix-a-product-scope)
    -* [Appendix B.User stories](#appendix-b-user-stories)
    -* [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    -* [Appendix D. Instructions for manual testing](#appendix-d-instructions-for-manual-testing) - -## Introduction - -NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive -interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, -NUSchedule will prove itself to be the most efficient way to manage your commitments. - -This developer guide provides information on the architecture and design of the application, NUSchedule. This guide -provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful -to refer to even if you are already a contributor. - -## Getting Started - -This section provides information to help you get NUSchedule up and running on your own computers. - -### Prerequisites - -1. JDK 11 -2. Intellij IDEA - -### Setting Up - -1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. -2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project -to close the existing project dialog -first). -3. Set up the correct JDK version for Gradle - 1. Click Configure > Project Defaults > Project Structure - 2. Click New… and set it to the directory of the JDK. -4. Click Import Project (or Open or Import in newer version of Intellij). -5. Locate the build.gradle file (not the root folder as you would do in a normal importing) and select it. Click OK. - If asked, choose to Open as Project (not Open as File). -6. Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK - being used for the project. - -## Design - -This section describes the different components of the application and how each component interact with -each other to run the program. - -### Architecture -![architecture](diagrams/architecture.png)
    - -The Architecture Diagram above provides a high-level view of the design of NUSchedule. The app can be broken down into -5 different components: -1. Main: Initializes the other components and connects them with each other. -2. UI: Manages the User Interface that the user interacts with. -3. Logic: Interprets user commands. -4. Storage: Reads data from and writes data to the hard disk. -5. Model: Stores the data the app uses in memory. - -### UI -![UI Class Diagram](diagrams/Ui.png)
    - -*Figure 3.2.1 Class diagram for UI component* - - __API__:`UI.java` -The UI consists of various parts, e.g. `printGreetingMessage`, `printEventList`, `showError`, `printNumEvent`, etc. - -The `UI` component reads user input using readCommand() and then executes user commands according to the Logic component. - -### Storage -__API__:`Storage.java` -The `Storage` component can save the list of event data in .txt format and read it back. -### Logic -__API__:`Parser.java` - -![Logic Class Diagram](diagrams/LogicClass.png)
    - -*Figure 3.4.1 Class diagram for Logic component* - -The `Logic` component parses the user input and executes commands based on the given input. - 1. Parser reads the user input and returns a command to be executed by `NuSchedule`. - 2. The command execution affects the EventList (e.g. clearing the list). - 3. The result passes back to the UI, which then displays relevant feedback to the user (e.g. successful execution). - -### Model -The `Model` component stores an ArrayList, events, that represents the current list of events and available locations. - -#### Event -__API__:`EventList.java` - -### Location -![location class diagram](diagrams/LocationClass.png)
    -*Figure 3.6.1 Class diagram for location component* - -__API:__ `LocationList.java` - -The `LocationList` is made up of an ArrayList of Locations, which is a type of variable that stores different information -for different types of location (eg. `Building`, `Hostel`, etc.). However, do note that any place that is -not within the list of saved locations will be saved as type `OutOfNUS`, and would not be saved into the `location.txt` -file. The location will still be part of the location list before the app closes, and it will also be -saved as part of the Event information. - -
    There is a separate api for bus stops (`BusStopList.java`), which stores all available bus stops -and their information. Although the variable is declared in the main NUSchedule class, it is only referenced -and not edited in any part of the program. - -
    The `Location` component -* stores information about various types of locations -* prints the list of locations that is saved in the data file -* checks if a location is being saved in the list and returns the location when asked - -## Implementation - - -This section describes the implementation of some noteworthy features. - -### Add events - -This feature allows users to add events and relevant information about them (description, time and location) to the list -. There are three possible types of events that can be added: classes, assignments, and personal events. - -Given below is an example usage scenario: - -Step 1. The user launches the application to add a class to his schedule. The user executes -`class CS1010 Lecture /t 2020-05-05 10:00 /e 2020-05-05 12:00 /l LT27` to add a new class to the list. - -Step 2. The Parser class parses the input as a new class with description ‘CS1010 Lecture’, -starting time ‘2020-05-05 at 10:00’, ending time ’2020-05-05 at 12:00’, and location ‘LT27’. - -Step 3. `addCommand()` is then called with the above parameters, and calls `addEvent()` from EventList to adds it to the list of events. It also checks -whether there are any events that overlap in timing with the newly added event. The newly added event is then printed for the user through `UI`. - -The sequence diagram below shows the process of adding a new event. -![AddCommand Sequence Diagram](diagrams/AddCommand.png)
    -*Figure 4.1 Sequence Diagram for add function* - - -### Clear events - -This feature allows users to completely delete the existing event information that is previously typed in by users. -Users may choose to delete all events, events happened one month ago, or events happened before a certain date. - -Given below is an example usage scenario: - -Step 1. The user launches the application and wants to clear some events that happened a long time ago as there is no -need to refer to these events anymore. The user types `clearBefore 2020-06-01` to clear all events before 1st June, 2020. - -Step 2. The Parser class parses the input and identifies the full command to be a ClearBeforeCommand class, and so -`clearBeforeCommand()` will be called to create a `clearBeforeCommand` object with parameter `2020-06-01`. - -Step 3. After that, the `execute()` function of `clearBeforeCommand` will be called and as a result `EventList#clearBefore(clearDate)` will -also be called, where `2020-06-01` will be passed as the parameter `clearDate`. - -Step 4. The user wants to clear all the extra information of events but does not want to do it manually, hence the user -types in `autoClear on` to turn on the autoClear function, which will clear all events happened one month ago automatically. -This function can be switched off by typing `autoClear off`. - -Note that the command `clear` does not require any parameter input. - -The sequence diagram below shows the process of clearing events before a certain date. -![ClearBeforeCommand Sequence Diagram](diagrams/ClearBeforeCommand.png)
    -*Figure 4.2.1 Sequence Diagram for clearBefore function* - -The sequence diagram below shows the process of clearing all events. -![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    -*Figure 4.2.2 Sequence Diagram for clear function* - -### Edit events - -This feature allows users to edit the information of events that was previously added. - -Given below is an example usage scenario: - -Step 1. The user launches the application and inputs `assignment homework \t 2020-02-02 20:00 \l home` command to add an event. - -Step 2. The user realises that there was a mistake in the event added and decides to edit the task information by -entering `edit 1`, which will be parsed by `Parser` and calls an `EditCommand` object. - -Step 3. The user follows the instructions on screen and enters the desired changes. - -Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the event. - -![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    -*Figure 4.3 Sequence Diagram for EditCommand()* - -### Locate - -This feature allows users to add locations as part of the event information. If the place is located within the school, -additional information about the location will be provided such as nearest bus stops or buildings. If the place is a -bus stop, the buses available will be provided instead. The user will add location name as the last piece of information -when adding an event. The LocationList has a method that searches for the place with the exact same name, if such a -place is not found, it will create a location and allocate it to be OutOfNUS. - -This feature also allows users to search for a location based on a given location name, or the location where an event -is held. It will print out additional information about the location to the user. - -The `locate` command executes with the following steps: - -Step 1. When the user type in `locate [input]`, the Parser class will extract the input from the command and call a -`LocateCommand` object. -* `input` will always be a String when passed into the command object. - -Step 2. `LocateCommand` will then try to convert the input into an integer, if possible. - -Step 3. If conversion is possible, the method will obtain the event at the given index and return its location -information. -* Tries to catch `IndexOutOfBoundException` to check if the given index is within the range of the -event list. - -Step 4. If conversion is not possible, then it will check if the given string is a valid location. -* Returns the location if valid -* Prints an error message if invalid - -The sequence diagram below shows exactly which methods, from which classes, are called to obtain the required location. -![locate sequence diagram](diagrams/LocateSequence.png)
    -*Figure 4.4 Sequence diagram for locate function* - -### Reminder - -This feature allows users to get a reminder of the events that will occur today. - -Given below is an example usage scenario: - -Step 1. The user wants to see all the events that are happening today. He inputs the command `reminder`. - -Step 2. The command filters the list of all events based on the current date. - -Step 3. It then calls `UI` to print the filtered list. - -The sequence diagram belows shows the process of executing the reminder command. -![ReminderCommand Sequence Diagram](diagrams/ReminderCommand.png) -*Figure 4.5 Sequence Diagram for reminder function* - -### Sort events - -This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available -are sorting by time, description and location. - -Given below is an example usage scenario: - -Step 1. The user wants to view the events in a chronological order. - -Step 2. The user enters `sort time`, which will call the `sortCommand()` function which will sort all events. -![](diagrams/SortCommand.png)
    -*Figure 4.6 Sequence diagram for SortCommand()* - -### View events - -This feature allows users to view a numbered list of all the events/tasks they have added so far, -in the order which they were added. - -Given below is an example usage scenario: - -Step 1. The user wants to see a list of all the events he has added so far, and executes the command `list`. - -Step 2. The command calls the `printEventList` function from `UI`, which then prints the list of events. - -The sequence diagram below shows what happens when the list command is executed. -![ListCommand Sequence Diagram](diagrams/ListCommand.png) -*Figure 4.7 Sequence Diagram for list function* - -### Help - -This feature allows users to view a summary of all the features available for the current version of NUSchedule. -When the user inputs `help`, all available commands and a simple description for each of them will be printed. - -The sequence diagram below shows what happens when user enters `help`: - -![HelpCommand Sequence Diagram](diagrams/HelpCommand.png)
    -*Figure 4.8 Sequence Diagram for help function* - -### Repeat -This feature allows users to repeat all classes in the current week or a selected event for several weeks. -The command call can be `repeat INDEX NUMBER_OF_WEEKS` OR `reapeat all NUMBER_OF_WEEKS` - -### Delete -This feature allows the user to delete unwanted events. `DeleteCommand#Execute` deletes the specified event in the -following steps: - -Step 1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. - -Step 2. `Eventlist#remove()` is called which will delete the event with the specified index. - -### Find -This feature allows the user to filter his/her events by a particular keyword. This command will search through all the events and find events that have descriptions -containing the search criteria. The process takes place in the following steps: - -Step 1. The user enters `find CRITERIA` which will be parsed by the `Parser` class. The `Parser` class will create a new `FindCommand` -object. - -Step 2. `EventList#filterWith()` will be called which will create a ArrayList containing events that match the specified criteria. - -Step 3. `UI#printFilteredEventList` is called to print out the events. - -### Find based on date - -This feature allows users to find events on the date inputted by the user. - -Given below is an example usage scenario: - -Step 1. The user wishes to find events happening on a certain date, so he inputs `date 2020-10-10`. - -Step 2. This executes FindDateCommand, which calls `filterDateWith(2020-10-10)` to create a new filtered list. - -Step 3. This filtered list is then printed by calling `printFilteredDateEventList` from UI. - -### Print locations of a certain group - -This feature allows users to know locations in a certain faculty, including blocks and lecture theatres when users input -abbreviations of various faculties (e.g. FOS). - -The sequence diagram belows shows what happens when user input any faculty abbreviation:
    -![PrintAreaLocationsCommand Sequence Diagram](diagrams/printAreaLocationsCommand.png)
    -*Figure 4.13 Sequence Diagram for print area locations function* - -### Study time -This feature allows the user to know the amount of time spent on study for certain date. The command is `studyTime DATE`. - -### Done - -This feature allows users to mark an event as done, provided the event's time has passed. With the exception of event -type `Assignment`, all the other event types cannot be marked as done before event occurs. - -`DoneCommand` marks an event as done with the following steps: - -Step 1. The user will input `done` followed by an integer that represents the index of the event they want to mark as -done. - -Step 2. The program will first check if the index is valid. If invalid, application will print an error message. - -Step 3. Then it will check for the type and time of event. If the time of event is later, and the event is not an -`Assignment`, then it will print a warning message. Else, it will mark the event as done. - -### User Info - -This feature allows users to input information about themselves into the app, specifically their name, and -whether they are a student or a professor. - -Given below is an example usage scenario: - -Step 1: The user wishes to store his personal information, so he inputs `student Harry`. - -Step 2: This calls the UserInfoCommand, which stores his name, Harry, and type, student in UserInfo. - -1. The user enters `delete NUMBER` where `NUMBER` refers to the index of the command to be deleted. The user input is parsed by the Parser class which creates a new `DeleteCommand` object. - -2. `Eventlist#remove()` is called which will delete the event with the specified index. - -### Exit -This feature allows users to terminate this app. By inputting `bye`, the isExit flag of the app will be changed to true, and the app will exit with -a exit message. - -## Documentation - -All documentation can be found in the `docs/` folder. -* [Jekyll](https://jekyllrb.com/) is used to manage documentation. -* [Markdown](https://guides.github.com/features/mastering-markdown/) style is used for the documentation. -* [PlantUML](https://plantuml.com/) is used to create the diagrams. - - -## Testing - -JUnit is used to write tests for the project. Learn more about JUnit [here](https://se-education.org/guides/tutorials/gradle.html). -If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` -on your keyboard. Alternatively, you can open a console and run the command `gradelw clean test` (Mac/linus: `.gradlew clean test`). - -## Appendix A: Product scope - -### User profile - -__Target user profile:__ -* NUS student or staff -* able to type quickly -* has quite a number of events to keep track of -* prefers to use desktop apps -* prefers using Command Line Interface (CLI) apps -* prefers typing instead of mouse interactions - -### Value proposition - -NUSchedule aims to assist the target audience with: -* managing all their events in one application (personal or work) -* easily finding out about the location of their events - -## Appendix B: User stories - -|Version| As a ... | I want to ... | So that I can ...| -|--------|----------|---------------|------------------| -|1.0|busy individual|keep track of both personal and school activities|avoid clashing events -|1.0|freshman|know module details and lesson venues|be on time for my activities -|1.0|forgetful person|be reminded of the deadlines for my assignments|submit on time -|1.0|tutor|know the estimated time for my students to travel to their next class|pace my lesson suitably -|1.0|hardworking student|track how much time I have spent studying|allocate my time efficiently -|2.0|exchange student|know the optimal path to reach my next destination|avoid getting lost -|2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| -|2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately -|2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings -|2.1|student having periodic lessons|repeat the classes on a weekly basis|spend less time in adding same classes but just different weeks - -## Appendix C: Non-Functional Requirements - -1. This application will work on any computers running either Windows, macOS or Unix that has Java 11 or a higher version installed. - -2. A user that is proficient in typing will find this application to be faster and more convenient to use than applications that requires mouse clicks. - -## Appendix D: Instructions for manual testing - -1. Initial launch - * Download the jar file [here](https://github.com/AY2021S1-CS2113T-F14-4/tp/releases) and place it in an empty folder. - * Open the command prompt and enter the command `java -jar NuSchedule.jar`. - * Expected: The application shows the NuSchedule logo. - -2. Adding events - * Test case: `assignment homework /t 2020-02-02 20:00 /l home` - * Expected: Confirmation message to indicate that the assignment has been added successfully. - * Test case: `class cs2113 /t 2020-02-02 20:00 /e 2020-02-02 21:00 /o zoom.com /p 123` - * Expected: Confirmation message to indicate that the class has been added successfully. - * Test case: `personalEvent shopping /t 2020-02-02 21:00 /e 2020-02-02 22:00 /l supermarket` - * Expected: Confirmation message to indicate that the personal event has been added successfully. - -3. Editing events - * Test case: `edit NUMBER` where `NUMBER` is the index of the event to be editted. - * Expected: Confirmation message asking for the desired changes. - \ No newline at end of file From 780fa0ff62c5be9e3bd254629b9920c6df2b9226 Mon Sep 17 00:00:00 2001 From: madbeez <56807788+madbeez@users.noreply.github.com> Date: Fri, 13 Nov 2020 13:08:04 +0800 Subject: [PATCH 291/299] Update UserGuide.md --- docs/UserGuide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 061d87b7b5..29ccf09494 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -72,7 +72,7 @@ Shows list of commands and provides a link to the user guide for more details. Format: `help` -### Add an event +### Add an event - Brendan Adds events/tasks to the schedule. Can support various types of tasks: @@ -218,7 +218,7 @@ Format: `locations` Expected output: (list given here is incomplete) ![locations](diagrams/locations.png) -### List all events +### List all events - Brendan Shows you a list of all events. Format: `list` @@ -259,7 +259,7 @@ Example: `done 2` Example Output: ![done](diagrams/done.png) -### Reminder of deadlines +### Reminder of deadlines - Brendan Shows a list of all events for today's date. Format: `reminder` @@ -362,7 +362,7 @@ the error message is not helpful, please refer back to relevant sections in Feat instructions provided closely as the current version of NUSchedule has a relatively high requirement in terms of input accuracy. If you really cannot find what is wrong, please report it as an issue to [this link](https://github.com/AY2021S1-CS2113T-F14-4/tp/issues). -## Command Summary +## Command Summary - Brendan |Action|Command|Example| |------|-------|-------| From a30ee327c31ccc7e5a57cdec65afd9a6e5e2e59d Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Fri, 13 Nov 2020 14:06:45 +0800 Subject: [PATCH 292/299] UG author --- docs/UserGuide.md | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 061d87b7b5..a119717f0b 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -25,22 +25,22 @@ This gives the application both simplicity and speed, setting it apart from othe * [Features](#features) * [View available commands](#view-available-commands) * [Add an event](#add-an-event) - * [Edit an event](#edit-an-event) - * [Sort events](#sort-events) + * [Edit an event](#edit-an-event---xu-che) + * [Sort events](#sort-events---xu-che) * [Find a location](#find-a-location) * [List all locations](#list-all-locations) * [List all events](#list-all-events) * [Clear events](#clear-events) * [Mark event as done](#mark-event-as-done) * [Reminder of deadlines](#reminder-of-deadlines) - * [Repeat of events](#repeat-of-events) - * [Delete an event](#delete-an-event) - * [Find a keyword](#find-a-keyword) - * [Find a date](#find-a-date) - * [Find locations exist in a certain group](#find-locations-exist-in-a-certain-group) - * [Keep track on the study time](#keep-track-on-the-study-time) - * [Make the app know you](#make-the-app-know-you) - * [Exit the app](#exit-the-app) + * [Repeat of events](#repeat-of-events---zhuang-mengjin) + * [Delete an event](#delete-an-event---zhuang-mengjin) + * [Find a keyword](#find-a-keyword---zhuang-mengjin) + * [Find a date](#find-a-date---zhuang-mengjin) + * [Find locations exist in a certain group](#find-locations-exist-in-a-certain-group---zhuang-mengjin) + * [Keep track on the study time](#keep-track-on-the-study-time---zhuang-mengjin) + * [Make the app know you](#make-the-app-know-you---zhuang-mengjin) + * [Exit the app](#exit-the-app---zhuang-mengjin) * [FAQs](#FAQ) * [Command Summary](#command-summary) @@ -267,7 +267,8 @@ Format: `reminder` Example Output: ![reminder](diagrams/reminder.png) -### Repeat of events + +### Repeat of events - Zhuang Mengjin Repeat the selected event for several weeks, or repeat all classes this week for several weeks. Format: `repeat INDEX NUMBER_OF_WEEKS` OR `repeat all NUMBER_OF_WEEKS` @@ -278,7 +279,7 @@ Example Output:
    ![Repeat1](diagrams/repeat1.png) ![Repeat2](diagrams/repeat2.png) -### Delete an event +### Delete an event - Zhuang Mengjin Delete the selected event from the list. Format: `delete INDEX` @@ -288,7 +289,7 @@ Example: `delete 1` Example Output:
    ![Delete](diagrams/delete.png) -### Find a keyword +### Find a keyword - Zhuang Mengjin Find the events with given keyword. Note that it's case-sensitive. Format: `find KEYWORD` @@ -298,7 +299,7 @@ Example: `find CS` Example Output:
    ![Find](diagrams/find.png) -### Find a date +### Find a date - Zhuang Mengjin Find the events happen on the given date. Format: `date yyyy-MM-dd` @@ -308,7 +309,7 @@ Example `date 2020-11-10` Example Output:
    ![findDate](diagrams/findDate.png) -### Find locations exist in a certain group +### Find locations exist in a certain group - Zhuang Mengjin Find the locations in NUS that belongs to certain faculty or the hostels. Format: `FOS` OR `FOE` OR `SOC` OR `BIZ` OR `HOSTEL` OR `SDE` OR `FASS` @@ -316,7 +317,7 @@ Format: `FOS` OR `FOE` OR `SOC` OR `BIZ` OR `HOSTEL` OR `SDE` OR `FASS` Example Output:
    ![locationsInNUS](diagrams/locationsInNUS.png) -### Keep track on the study time +### Keep track on the study time - Zhuang Mengjin Find the amount of time you spent on study on a certain date. Format: `studyTime DATE` @@ -324,7 +325,7 @@ Format: `studyTime DATE` Example Output:
    ![studyTime](diagrams/studyTime.png) -### Make the app know you +### Make the app know you - Zhuang Mengjin Tell the app your name, and whether you are a professor or a student. Whether you indicate yourself as a professor, or a student, will make a difference in another function, which will come in a later version. @@ -334,13 +335,14 @@ Example Output:
    ![userInfo1](diagrams/userInfo1.png)
    ![userInfo2](diagrams/userInfo2.png) -### Exit the app +### Exit the app - Zhuang Mengjin Exit. Format: `bye` Example Output:
    ![Exit](diagrams/exit.png) + ## FAQ From 89ea9d81f650c37f79c8cd9031997f865e09cfe3 Mon Sep 17 00:00:00 2001 From: madbeez <56807788+madbeez@users.noreply.github.com> Date: Fri, 13 Nov 2020 14:35:09 +0800 Subject: [PATCH 293/299] Update UserGuide.md --- docs/UserGuide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 182c26861f..2e33370fa2 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -24,15 +24,15 @@ This gives the application both simplicity and speed, setting it apart from othe * [Quick Start](#quick-start) * [Features](#features) * [View available commands](#view-available-commands) - * [Add an event](#add-an-event) + * [Add an event](#add-an-event---brendan) * [Edit an event](#edit-an-event---xu-che) * [Sort events](#sort-events---xu-che) * [Find a location](#find-a-location) * [List all locations](#list-all-locations) - * [List all events](#list-all-events) + * [List all events](#list-all-events---brendan) * [Clear events](#clear-events) * [Mark event as done](#mark-event-as-done) - * [Reminder of deadlines](#reminder-of-deadlines) + * [Reminder of deadlines](#reminder-of-deadlines---brendan) * [Repeat of events](#repeat-of-events---zhuang-mengjin) * [Delete an event](#delete-an-event---zhuang-mengjin) * [Find a keyword](#find-a-keyword---zhuang-mengjin) @@ -42,7 +42,7 @@ This gives the application both simplicity and speed, setting it apart from othe * [Make the app know you](#make-the-app-know-you---zhuang-mengjin) * [Exit the app](#exit-the-app---zhuang-mengjin) * [FAQs](#FAQ) -* [Command Summary](#command-summary) +* [Command Summary](#command-summary---brendan) ## Quick Start From 86b2eed3d3d198049ee59a9fd1f59fb243898a0c Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Fri, 13 Nov 2020 18:08:37 +0800 Subject: [PATCH 294/299] accidentally deleted a line --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 88a837f2f1..8f86bbe194 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -13,7 +13,7 @@ Wu Nan
    Wan Shi Jie Brendan
    - +
    ## Table of Contents * [Introduction](#introduction) From 529266034c83f89450285900ede2838c2fb65a7d Mon Sep 17 00:00:00 2001 From: max Date: Fri, 13 Nov 2020 19:21:35 +0800 Subject: [PATCH 295/299] adding author --- docs/UserGuide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 44e5ceb43e..0ff0c7cbe9 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -65,7 +65,7 @@ In the following description, `DATE` refers to the date in the format yyyy-MM-dd `/t` refers to the starting time for PersonalEvent and Class, and deadline for Assignment `/e` refers to the ending time for PersonalEvent and Class -### View available commands +### View available commands - Wu Nan Shows list of commands and provides a link to the user guide for more details. @@ -226,7 +226,7 @@ Format: `list` Example Output: ![list](diagrams/list.png) -### Clear events +### Clear events - Wu Nan Delete events existing in the list, you can choose to delete all, auto delete or delete events before a certain date: @@ -248,7 +248,7 @@ Delete events existing in the list, you can choose to delete all, auto delete or Example Output: ![clear](diagrams/clear.png) -### Mark event as done +### Mark event as done - Wu Nan Mark an event that has been completed with `DONE`. Note that the events which are not assignments, cannot be done before its ending time. From 27d16adf88da1a40330901e500015d7a07a3a8f8 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Fri, 13 Nov 2020 21:37:21 +0800 Subject: [PATCH 296/299] Update UserGuide.md --- docs/UserGuide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 0ff0c7cbe9..ddaf3d55ca 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -23,15 +23,15 @@ This gives the application both simplicity and speed, setting it apart from othe * [Quick Start](#quick-start) * [Features](#features) - * [View available commands](#view-available-commands) + * [View available commands](#view-available-commands---wu-nan) * [Add an event](#add-an-event---brendan) * [Edit an event](#edit-an-event---xu-che) * [Sort events](#sort-events---xu-che) * [Find a location](#find-a-location---yang-jiaqi) * [List all locations](#list-all-locations---yang-jiaqi) * [List all events](#list-all-events---brendan) - * [Clear events](#clear-events) - * [Mark event as done](#mark-event-as-done) + * [Clear events](#clear-events---wu-nan) + * [Mark event as done](#mark-event-as-done---wu-nan) * [Reminder of deadlines](#reminder-of-deadlines---brendan) * [Repeat of events](#repeat-of-events---zhuang-mengjin) * [Delete an event](#delete-an-event---zhuang-mengjin) @@ -41,7 +41,7 @@ This gives the application both simplicity and speed, setting it apart from othe * [Keep track on the study time](#keep-track-on-the-study-time---zhuang-mengjin) * [Make the app know you](#make-the-app-know-you---zhuang-mengjin) * [Exit the app](#exit-the-app---zhuang-mengjin) -* [FAQs](#FAQ) +* [FAQs](#faq) * [Command Summary](#command-summary---brendan) From afee2c0f7b9db4e35abcd907c5f6cdd91ae2d000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Mon, 6 Dec 2021 23:25:57 +0800 Subject: [PATCH 297/299] Update README.md --- README.md | 66 ++++++------------------------------------------------- 1 file changed, 7 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 636c4e92aa..4be01687e9 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,12 @@ -# Duke project template +# NUSchedule -This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it. +A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily and efficiently. -## Setting up in Intellij +![Logo](diagrams/Logo.png)
    -Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version. +Useful links: +* [User Guide](UserGuide.md) +* [Developer Guide](DeveloperGuide.md) +* [About Us](AboutUs.md) -1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html). -1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html). -1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/test/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below: - ``` - > Event :compileJava - > Event :processResources NO-SOURCE - > Event :classes - - > Event :Duke.main() - Hello from - ____ _ - | _ \ _ _| | _____ - | | | | | | | |/ / _ \ - | |_| | |_| | < __/ - |____/ \__,_|_|\_\___| - - What is your name? - ``` - Type some word and press enter to let the execution proceed to the end. -## Build automation using Gradle - -* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file). -* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html). - -## Testing - -### I/O redirection tests - -* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script. - -### JUnit tests - -* A skeleton JUnit test (`src/test/java/seedu/test/DukeTest.java`) is provided with this project template. -* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html). - -## Checkstyle - -* A sample CheckStyle rule configuration is provided in this project. -* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html). - -## CI using GitHub Actions - -The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR. - -## Documentation - -`/docs` folder contains a skeleton version of the project documentation. - -Steps for publishing documentation to the public: -1. If you are using this project template for an individual project, go your fork on GitHub.
    - If you are using this project template for a team project, go to the team fork on GitHub. -1. Click on the `settings` tab. -1. Scroll down to the `GitHub Pages` section. -1. Set the `source` as `master branch /docs folder`. -1. Optionally, use the `choose a theme` button to choose a theme for your documentation. From 6a12cece62106e61f39a5a403353dc779cc936c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Mon, 6 Dec 2021 23:27:48 +0800 Subject: [PATCH 298/299] Update README.md --- README.md | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/README.md b/README.md index 4be01687e9..aeb90ea360 100644 --- a/README.md +++ b/README.md @@ -1,12 +1 @@ -# NUSchedule - -A scheduler help you, who live in NUS, to manage your classes, assignments, personal events easily and efficiently. - -![Logo](diagrams/Logo.png)
    - -Useful links: -* [User Guide](UserGuide.md) -* [Developer Guide](DeveloperGuide.md) -* [About Us](AboutUs.md) - - +Please see README.md in docs From c45e85ec170fa7bc15c902a4b8f7d58baa94cfa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E7=9E=B3?= <55589340+Lee-Juntong@users.noreply.github.com> Date: Wed, 14 Dec 2022 00:45:19 +0800 Subject: [PATCH 299/299] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aeb90ea360..8544e5db99 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Please see README.md in docs +Please see [README.md](https://github.com/AY2021S1-CS2113T-F14-4/tp/tree/master/docs) in docs

    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 literal 0 HcmV?d00001 From 834248936007b8d20ffef1dc40c2f3dcd91a2f14 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 10:05:18 +0800 Subject: [PATCH 186/299] Update xuche123.md --- docs/team/xuche123.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 6d65a23d15..eb62fefd4e 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -1,8 +1,3 @@ ---- -layout: page -title: Xu Che's Project Portfolio Page ---- - ## Project: AddressBook Level 3 NuSchedule is a task management application written in Java. It is operated on the command line interface. From ba996c9f58c50d81b906c3b59f563a7ede45672d Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 10:05:33 +0800 Subject: [PATCH 187/299] Update xuche123.md --- docs/team/xuche123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index eb62fefd4e..240292cc7a 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -1,4 +1,4 @@ -## Project: AddressBook Level 3 +# Project: AddressBook Level 3 NuSchedule is a task management application written in Java. It is operated on the command line interface. From 064fce79307b64529baca0177a5e37966f64244b Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 10:06:26 +0800 Subject: [PATCH 188/299] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 9c45c205de..dd61a7df22 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -3,7 +3,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/johndoe.md) +![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](docs/team/johndoe.md) From 718c78e3b759db0bbdf903e9a555073c0e449165 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 10:07:34 +0800 Subject: [PATCH 189/299] Update AboutUs.md --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index dd61a7df22..55f960611c 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -3,7 +3,7 @@ Display | Name | Github Profile | Portfolio --------|:----:|:--------------:|:---------: ![](https://via.placeholder.com/100.png?text=Photo) | Wu Nan | [Github](https://github.com/max-wunan/) | [Portfolio](docs/team/johndoe.md) -![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](docs/team/xuche123.md) +![](https://via.placeholder.com/100.png?text=Photo) | Xu Che | [Github](https://github.com/xuche123) | [Portfolio](team/xuche123.md) ![](https://via.placeholder.com/100.png?text=Photo) | Yang Jiaqi | [Github](https://github.com/jiaaaqi) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Brendan Wan | [Github](https://github.com/madbeez) | [Portfolio](docs/team/johndoe.md) ![](https://via.placeholder.com/100.png?text=Photo) | Zhuang Mengjin | [Github](https://github.com/Lee-Juntong) | [Portfolio](docs/team/johndoe.md) From 78841e6faf227a2bfc07ced62fc1a0a5ffbf20c5 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 10:11:23 +0800 Subject: [PATCH 190/299] Update xuche123.md --- docs/team/xuche123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 240292cc7a..97594eafd6 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -1,4 +1,4 @@ -# Project: AddressBook Level 3 +# Project: NuSchedule NuSchedule is a task management application written in Java. It is operated on the command line interface. From 2b5cc00831ceea020d0c371bfe7eb65e3d821de1 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 9 Nov 2020 12:22:25 +0800 Subject: [PATCH 191/299] Fix diagrams --- docs/diagrams/EditCommand.png | Bin 19865 -> 23506 bytes docs/diagrams/EditCommand.puml | 29 ++++++++++++++++++----------- docs/diagrams/SortCommand.png | Bin 20429 -> 19104 bytes docs/diagrams/SortCommand.puml | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/diagrams/EditCommand.png b/docs/diagrams/EditCommand.png index f0bd72edaf17b7ee4bb16dd2865f9af14e1e1a3c..5f0487cf1dc8e103e6f5e8be280314d3210cdcd8 100644 GIT binary patch literal 23506 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 literal 19865 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 diff --git a/docs/diagrams/EditCommand.puml b/docs/diagrams/EditCommand.puml index 68503536f0..15f8cd1234 100644 --- a/docs/diagrams/EditCommand.puml +++ b/docs/diagrams/EditCommand.puml @@ -2,35 +2,42 @@ actor User box Logic -participant ":NuSchedule" as NuSchedule -participant ":Parser" as Parser -participant ":EditCommand" as EditCommand +participant "NuSchedule" as NuSchedule +participant "Parser" as Parser +participant "EditCommand" as EditCommand end box box Model participant ":EventList" as EventList end box -User -> NuSchedule : edit +User -> NuSchedule: (edit index) activate NuSchedule -NuSchedule -> Parser : parse(edit) -activate Parser +NuSchedule -> Parser: (edit index) +activate Parser -Parser --> NuSchedule : command to execute +create EditCommand +Parser -> EditCommand:newEditInformation() +activate EditCommand + +EditCommand --> Parser: String[] editInformation +deactivate EditCommand + +Parser --> NuSchedule: parsed command deactivate Parser -NuSchedule -> EditCommand : execute(edit) +NuSchedule -> EditCommand: execute() activate EditCommand -EditCommand -> EventList : editCommand(event) +EditCommand -> EventList: editEvent() activate EventList -EventList --> EditCommand : event +EventList --> EditCommand: event deactivate EventList EditCommand --> NuSchedule deactivate EditCommand -deactivate NuSchedule + @enduml \ No newline at end of file diff --git a/docs/diagrams/SortCommand.png b/docs/diagrams/SortCommand.png index a3505e1675b701c709b1c6eb0eb81474257e67a8..ccf6adcd4aac142a8679cc0961e7b9c3c9f4ee3c 100644 GIT binary patch literal 19104 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 literal 20429 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 qfu^NENem SortCommand : execute(sort) activate SortCommand -SortCommand -> EventList : SortCommand(sort type) +SortCommand -> EventList : sortEvent() activate EventList EventList --> SortCommand : event From de8ca136effb8e98f9aaae9418db28ddd58fc7bc Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 12:38:13 +0800 Subject: [PATCH 192/299] add location tests --- src/main/java/command/LocateCommand.java | 20 +++++------ .../exception/EmptyLocationException.java | 2 +- .../exception/InvalidEventIndexException.java | 16 +++++++++ .../exception/InvalidLocationException.java | 8 +++++ src/main/java/locationlist/LocationList.java | 15 ++++++++ src/main/java/parser/Parser.java | 18 ++++++++++ src/test/java/command/LocateCommandTest.java | 34 +++++++++++++++++++ 7 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 src/main/java/exception/InvalidEventIndexException.java create mode 100644 src/main/java/exception/InvalidLocationException.java create mode 100644 src/test/java/command/LocateCommandTest.java diff --git a/src/main/java/command/LocateCommand.java b/src/main/java/command/LocateCommand.java index 0fe03a60d8..404961e541 100644 --- a/src/main/java/command/LocateCommand.java +++ b/src/main/java/command/LocateCommand.java @@ -2,6 +2,10 @@ import event.Event; import eventlist.EventList; +import exception.InvalidEventIndexException; +import exception.InvalidLocationException; +import exception.NuScheduleException; +import exception.UnknownErrorException; import location.Location; import locationlist.BusStopList; import locationlist.LocationList; @@ -30,21 +34,15 @@ public LocateCommand(String input) { @Override public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { int eventNum; - try { + if (locations.checkIfInteger(input)) { eventNum = Integer.parseInt(input) - 1; Location location = events.get(eventNum).getLocation(); System.out.println(events.get(eventNum).getDescription() + " is located at:"); System.out.println(location); - } catch (NumberFormatException e) { - if (locations.checkValidLocation(input)) { - Location location = locations.findLocation(input); - System.out.println("Location Information: "); - System.out.println(location); - } else { - System.out.println("Please input a valid location or event number."); - } - } catch (IndexOutOfBoundsException e) { - System.out.println("Please input an event number that is within the event list."); + } else if (locations.checkValidLocation(input)) { + Location location = locations.findLocation(input); + System.out.println("Location Information: "); + System.out.println(location); } } } diff --git a/src/main/java/exception/EmptyLocationException.java b/src/main/java/exception/EmptyLocationException.java index 14a6a7a3a9..18eb675e7a 100644 --- a/src/main/java/exception/EmptyLocationException.java +++ b/src/main/java/exception/EmptyLocationException.java @@ -10,6 +10,6 @@ public class EmptyLocationException extends InvalidCommandException { */ @Override public String getMessage() { - return "Please input a valid location."; + return "Please do not leave the location input empty."; } } diff --git a/src/main/java/exception/InvalidEventIndexException.java b/src/main/java/exception/InvalidEventIndexException.java new file mode 100644 index 0000000000..716b3a3875 --- /dev/null +++ b/src/main/java/exception/InvalidEventIndexException.java @@ -0,0 +1,16 @@ +package exception; + +/** + * Represents exception when event index is out of list. + */ +public class InvalidEventIndexException extends NuScheduleException { + /** + * Prepare the message to be printed when this exception is experienced. + * + * @return the message + */ + @Override + public String getMessage() { + return "Please input an event number that is within the event list."; + } +} diff --git a/src/main/java/exception/InvalidLocationException.java b/src/main/java/exception/InvalidLocationException.java new file mode 100644 index 0000000000..9ce92387bc --- /dev/null +++ b/src/main/java/exception/InvalidLocationException.java @@ -0,0 +1,8 @@ +package exception; + +public class InvalidLocationException extends NuScheduleException { + @Override + public String getMessage() { + return "Please input a valid location or event number."; + } +} diff --git a/src/main/java/locationlist/LocationList.java b/src/main/java/locationlist/LocationList.java index 808c3d4e47..80305d3841 100644 --- a/src/main/java/locationlist/LocationList.java +++ b/src/main/java/locationlist/LocationList.java @@ -50,4 +50,19 @@ public Location findLocation(String name) { } return locationReturned; } + + /** + * Method to check if string can be converted to an integer. + * + * @param input String to be converted + * @return flag if string can be converted + */ + public boolean checkIfInteger(String input) { + try { + Integer.parseInt(input); + return true; + } catch (NumberFormatException e) { + return false; + } + } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index b91d1fade6..20ee8c13c3 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -40,6 +40,8 @@ import exception.EmptyStudyTimeDateException; import exception.InvalidEditLocationException; import exception.InvalidEditTypeException; +import exception.InvalidEventIndexException; +import exception.InvalidLocationException; import exception.InvalidNumWeekException; import exception.InvalidSortCriteriaException; import exception.NoEndTimeClassException; @@ -150,6 +152,22 @@ public static Command parse(String fullCommand, LocationList locations, int size } //this block deals with locate command + if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { + if (words.length == 1) { + throw new EmptyLocationException(); + } else if (locations.checkIfInteger(words[1])) { + int eventNum = Integer.parseInt(words[1]); + if (eventNum >= size || eventNum < 0) { + throw new InvalidEventIndexException(); + } else { + return new LocateCommand(words[1]); + } + } else if (!locations.checkValidLocation(words[1])) { + throw new InvalidLocationException(); + } else { + return new LocateCommand(words[1]); + } + } if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length > 1) { return new LocateCommand(words[1]); } else if (words[0].equalsIgnoreCase(LOCATE_EVENT) && words.length == 1) { diff --git a/src/test/java/command/LocateCommandTest.java b/src/test/java/command/LocateCommandTest.java new file mode 100644 index 0000000000..22c9401089 --- /dev/null +++ b/src/test/java/command/LocateCommandTest.java @@ -0,0 +1,34 @@ +package command; + +import exception.EmptyLocationException; +import exception.InvalidEventIndexException; +import exception.InvalidLocationException; +import locationlist.LocationList; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import parser.Parser; + +public class LocateCommandTest { + private LocationList locations = new LocationList(); + + @Test + void execute_EmptyLocation_EmptyLocationException() { + Assertions.assertThrows(EmptyLocationException.class, () -> { + Command d = Parser.parse("locate", null, 0); + }); + } + + @Test + void execute_InvalidEventIndex_InvalidEventIndexException() { + Assertions.assertThrows(InvalidEventIndexException.class, () -> { + Command d = Parser.parse("locate -1", locations, 0); + }); + } + + @Test + void execute_LocationNotFound_InvalidLocationException() { + Assertions.assertThrows(InvalidLocationException.class, () -> { + Command d = Parser.parse("locate home", locations, 0); + }); + } +} From 3368ab232c67b9a0db801ac2600cbe2e7c42a992 Mon Sep 17 00:00:00 2001 From: xuche123 Date: Mon, 9 Nov 2020 13:19:27 +0800 Subject: [PATCH 193/299] Update DG --- docs/DeveloperGuide.md | 106 +++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 36 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 804efb6e35..b1d85564af 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -11,33 +11,37 @@ Wan Shi Jie Brendan


    ## Table of Contents -1. [Introduction](#intro) -2. [Getting Started](#getting_started)
    -2.1 [Prerequisites](#prerequisites)
    -2.2 [Setting Up](#setting_up)
    -3. [Design](#design)
    -3.1 [Architecture](#architecture)
    -3.2 [UI](#ui)
    -3.3 [Storage](#storage)
    -3.4 [Logic](#logic)
    -3.5 [Model](#model)
    -    3.5.1 [Event](#event)
    -    3.5.2 [Location](#location)
    -4. [Implementation](#implementation)
    -4.1 [Add events](#add_events)
    -4.2 [Clear events](#clear)
    -4.3 [Edit events](#edit)
    -4.4 [Locate](#locate)
    -4.5 [Reminders](#reminder)
    -4.6 [Sort events](#sort)
    -4.7 [View events](#view)
    -4.8 [Help](#help)
    -5. [Documentation](#documentation)
    -5.1 [Product scope](#product_scope)
    -5.2 [Value Proposition](#value_proposition)
    -5.3 [User Stories](#stories)
    +* [1. Introduction](#intro) +* [2. Getting Started](#getting_started)
    + * [2.1. Prerequisites](#prerequisites)
    + * [2.2. Setting Up](#setting_up)
    +* [3. Design](#design)
    + * [3.1 Architecture](#architecture)
    + * [3.2 UI](#ui)
    + * [3.3 Storage](#storage)
    + * [3.4 Logic](#logic)
    + * [3.5 Model](#model)
    + * [3.5.1. Event](#event)
    + * [3.5.2. Location](#location)
    +* [4. Implementation](#implementation)
    + * [4.1. Add events](#add_events)
    + * [4.2. Clear events](#clear)
    + * [4.3. Edit events](#edit)
    + * [4.4. Locate](#locate)
    + * [4.5. Reminders](#reminder)
    + * [4.6. Sort events](#sort)
    + * [4.7. View events](#view)
    + * [4.8. Help](#help)
    +* [5. Documentation](#documentation)
    +* [6. Testing](#6-testing)
    +* [Appendix A. Product scope](#appendix-a-product-scopea-idproduct_scopea)
    +* [Appendix B.User stories](#appendix-b-user-storiesa-idstoriesa)
    +* [Appendix C. Non-functional requirements](#appendix-c-non-functional-requirements)
    +* [Appendix D. Glossary](#appendix-d-glossary)
    +* [Appendix E. Instructions for manual testing](#appendix-e-instructions-for-manual-testing) ## 1. Introduction
    + NUSchedule is a Command-Line based application that manages all of your commitments. Built with a clean and intuitive interface, NUSchedule will help you manage your commitments without any hassle. If you are a proficient in typing, NUSchedule will prove itself to be the most efficient way to manage your commitments. @@ -46,14 +50,17 @@ This developer guide provides information on the architecture and design of the provides information that will not only help you get started as a NUSchedule contributor, but that you will find useful to refer to even if you are already a contributor. -## 2. Getting Started +## 2. Getting Started + This section provides information to help you get NUSchedule up and running on your own computers. ### 2.1 Prerequisites + 1. JDK 11 2. Intellij IDEA ### 2.2 Setting Up + 1. Fork [this repo](https://github.com/AY2021S1-CS2113T-F14-4/tp), and clone the fork onto your computer. 2. Open IntelliJ (if you are not in the welcome screen, click File > Close Project to close the existing project dialog @@ -68,6 +75,7 @@ first). being used for the project. ## 3. Design + This section describes the different components of the application and how each component interact with each other to run the program. @@ -135,9 +143,12 @@ and not edited in any part of the program. * checks if a location is being saved in the list and returns the location when asked ## 4. Implementation + + This section describes the implementation of some noteworthy features. ### 4.1 Add events + This feature allows users to add events and relevant information about them (description, time and location) to the list . There are three possible types of events that can be added: classes, assignments, and personal events. @@ -158,6 +169,7 @@ The sequence diagram below shows the process of adding a new event. ### 4.2 Clear events + This feature allows users to completely delete the existing event information that is previously typed in by users. Given below is an example usage scenario: @@ -172,6 +184,7 @@ The sequence diagram below shows the process of clearing all events. *Figure 4.2 Sequence Diagram for clear function* ### 4.3 Edit events + This feature allows users to edit the information of events that was previously added. Given below is an example usage scenario: @@ -186,6 +199,7 @@ Step 3. `editCommand()` function replaces the original event with the edited one *Figure 4.3 Sequence Diagram for EditCommand()* ### 4.4 Locate + This feature allows users to add locations as part of the event information. If the place is located within the school, additional information about the location will be provided such as nearest bus stops or buildings. If the place is a bus stop, the buses available will be provided instead. The user will add location name as the last piece of information @@ -217,6 +231,7 @@ The sequence diagram below shows exactly which methods, from which classes, are *Figure 4.4 Sequence diagram for locate function* ### 4.5 Reminder + This feature allows users to get a reminder of the events that will occur today. Given below is an example usage scenario: @@ -232,6 +247,7 @@ The sequence diagram belows shows the process of executing the reminder command. *Figure 4.5 Sequence Diagram for reminder function* ### 4.6 Sort events + This feature allows users to sort the available task by a sorting criteria. Currently, the sorting criteria available are sorting by time, description and location. @@ -244,6 +260,7 @@ Step 2. The user enters `sort time`, which will call the `sortCommand()` functio *Figure 4.6 Sequence diagram for SortCommand()* ### 4.7 View events + This feature allows users to view a numbered list of all the events/tasks they have added so far, in the order which they were added. @@ -258,6 +275,7 @@ The sequence diagram below shows what happens when the list command is executed *Figure 4.7 Sequence Diagram for list function* ### 4.8 Help + This feature allows users to view a summary of all the features available for the current version of NUSchedule. When the user inputs `help`, all available commands and a simple description for each of them will be printed. @@ -267,9 +285,23 @@ The sequence diagram below shows what happens when user enters `help`: *Figure 4.8 Sequence Diagram for help function* ## 5. Documentation -This section provides other relevant information about the application. + +All documentation are found in the `docs/` folder. +* [Jekyll](https://jekyllrb.com/) is used to manage documentation. +* [Markdown](https://guides.github.com/features/mastering-markdown/) style is used for the documentation. +* [PlantUML](https://plantuml.com/) is used to create the diagrams. + + +## 6. Testing + +JUnit is used to write tests for the project. Learn more about JUnit [here](https://se-education.org/guides/tutorials/gradle.html). +If you are using IntelliJ, you can run all test by right-clicking on the `test/java` folder and selecting `Run 'Tests'` or press `CRTL` + `SHIFT` + `F10` +on your keyboard. Alternatively, you can open a console and run the command `gradelw clean test` (Mac/linus: `.gradlew clean test`). -### 5.1 Product scope +## Appendix A Product scope + +### User profile + __Target user profile:__ * NUS student or staff * able to type quickly @@ -278,13 +310,14 @@ __Target user profile:__ * prefers using Command Line Interface (CLI) apps * prefers typing instead of mouse interactions -### 5.2 Value proposition +### Value proposition + NUSchedule aims to assist the target audience with: * managing all their events in one application (personal or work) * easily finding out about the location of their events -### 5.3 User stories - +## Appendix B User stories + |Version| As a ... | I want to ... | So that I can ...| |--------|----------|---------------|------------------| |1.0|busy individual|keep track of both personal and school activities|avoid clashing events @@ -296,16 +329,17 @@ NUSchedule aims to assist the target audience with: |2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list| |2.0|professor|Know whether my students have another lesson after mine and the expected time of travelling|Pace my lesson appropriately |2.0|student using zoom for lessons|record the virtual locations|store the links and passwords of the meetings -## Non-Functional Requirements +## Appendix C: Non-Functional Requirements + {Give non-functional requirements} -## Glossary - +## Appendix D: Glossary + * *glossary item* - Definition -## Instructions for manual testing - +## Appendix E: Instructions for manual testing + Try different inputs with variations of the format, to check whether the exceptions are being correctly thrown. Also edit the stored data of events.txt to see whether the reaction is correct. Do not touch bus_stops.txt and locations.txt for test purposes as they form the data base. From 64d2f347c3c59d2038240ba57d5e0b2b72a69417 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 13:44:15 +0800 Subject: [PATCH 194/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b1d85564af..ee34e2be43 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -189,12 +189,11 @@ This feature allows users to edit the information of events that was previously Given below is an example usage scenario: -Step 1. The user launches the application and inputs a command to add one event. - +Step 1. The user launches the application and inputs `assignment homework \t 2020-02-02 20:00 \l home` command to add an event. Step 2. The user realises that there was a mistake in the event added and decides to edit the task information by -entering `edit 1 class ` to edit the one existing event. - -Step 3. `editCommand()` function replaces the original event with the edited one. +entering `edit 1`, which will be parsed by `Parser` and calls an `EditCommand` object. +Step 3. The user follows the instructions on screen and enters the desired changes. +Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the event. ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    *Figure 4.3 Sequence Diagram for EditCommand()* From cf2d58becf1e2a8f23dea291505b15313991e618 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 13:59:33 +0800 Subject: [PATCH 195/299] Update DeveloperGuide.md --- docs/DeveloperGuide.md | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ee34e2be43..60e62a0637 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -189,11 +189,15 @@ This feature allows users to edit the information of events that was previously Given below is an example usage scenario: -Step 1. The user launches the application and inputs `assignment homework \t 2020-02-02 20:00 \l home` command to add an event. +Step 1. The user launches the application and inputs `assignment homework \t 2020-02-02 20:00 \l home` command to add an event. + Step 2. The user realises that there was a mistake in the event added and decides to edit the task information by entering `edit 1`, which will be parsed by `Parser` and calls an `EditCommand` object. + Step 3. The user follows the instructions on screen and enters the desired changes. + Step 4. `EditCommand#execute()` will call `EventList#editEvents` to edit the event. + ![EditCommand Sequence Diagram](diagrams/EditCommand.png)
    *Figure 4.3 Sequence Diagram for EditCommand()* @@ -331,7 +335,9 @@ NUSchedule aims to assist the target audience with: ## Appendix C: Non-Functional Requirements -{Give non-functional requirements} +1. This application will work on any computers running either Windows, macOS or Unix that has Java 11 or a higher version installed. + +2. A user that is proficient in typing will find this application to be faster and more convenient to use than applications that requires mouse clicks. ## Appendix D: Glossary @@ -339,7 +345,20 @@ NUSchedule aims to assist the target audience with: ## Appendix E: Instructions for manual testing -Try different inputs with variations of the format, to check whether the exceptions are being correctly thrown. -Also edit the stored data of events.txt to see whether the reaction is correct. Do not touch bus_stops.txt and -locations.txt for test purposes as they form the data base. -{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing} +1. Initial launch + * Download the jar file [here](https://github.com/AY2021S1-CS2113T-F14-4/tp/releases) and place it in an empty folder. + * Open the command prompt and enter the command `java -jar NuSchedule.jar`. + * Expected: The application shows the NuSchedule logo. + +2. Adding events + * Test case: `assignment homework /t 2020-02-02 20:00 /l home` + * Expected: Confirmation message to indicate that the assignment has been added successfully. + * Test case: `class cs2113 /t 2020-02-02 20:00 /e 2020-02-02 21:00 /o zoom.com /p 123` + * Expected: Confirmation message to indicate that the class has been added successfully. + * Test case: `personalEvent shopping /t 2020-02-02 21:00 /e 2020-02-02 22:00 /l supermarket` + * Expected: Confirmation message to indicate that the personal event has been added successfully. + +3. Editing events + * Test case: `edit NUMBER` where `NUMBER` is the index of the event to be editted. + * Expected: Confirmation message asking for the desired changes. + From 5deda4180a987056605c74fa2873d428f71cbc19 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:15:16 +0800 Subject: [PATCH 196/299] Update xuche123.md --- docs/team/xuche123.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 97594eafd6..2333046d46 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -19,15 +19,15 @@ Given below are my contributions to the project. * **Project management**: * Managed releases `v1.0` - `v2.1` (3 releases) on GitHub - * **Documentation**: * User Guide: - * Added documentation for the features `edit` and `sort` [\#72]() - * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\#74]() + * Added documentation for the features `edit` and `sort` [\#72]() + * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78/files) * Developer Guide: - * Added implementation details of the `edit` and `sort` feature. + * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) + * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) * **Community**: - * PRs reviewed (with non-trivial review comments): [\#33](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+) + * Revied developer guide for team [Study It](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+). * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/177), [2](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/175), [3](https://github.com/AY2021S1-CS2113T-W12-3/tp/issues/174)) From d1adb443ae3b2232359c7ed22e5889b57964830e Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:15:37 +0800 Subject: [PATCH 197/299] Update xuche123.md --- docs/team/xuche123.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 2333046d46..5a1b790b9f 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -21,11 +21,11 @@ Given below are my contributions to the project. * **Documentation**: * User Guide: - * Added documentation for the features `edit` and `sort` [\#72]() - * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78/files) + * Added documentation for the features `edit` and `sort` [\#72]() + * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78/files) * Developer Guide: - * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) - * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) + * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) + * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) * **Community**: * Revied developer guide for team [Study It](https://github.com/nus-cs2113-AY2021S1/tp/pulls?q=is%3Aopen+is%3Apr+CS2113T-T12-1+). From b36de764cdd9e4dd2d2d6b600eabf1a9a360bd41 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:16:14 +0800 Subject: [PATCH 198/299] Update xuche123.md --- docs/team/xuche123.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 5a1b790b9f..802d117060 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -21,8 +21,8 @@ Given below are my contributions to the project. * **Documentation**: * User Guide: - * Added documentation for the features `edit` and `sort` [\#72]() - * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78/files) + * Added documentation for the features `edit` and `sort` [\#72](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/72) + * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78) * Developer Guide: * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) From 4db0b91df3f1668fd3e179a8cf92796eccdff2f0 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:18:47 +0800 Subject: [PATCH 199/299] Update xuche123.md --- docs/team/xuche123.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index 802d117060..ff966225f9 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -21,10 +21,10 @@ Given below are my contributions to the project. * **Documentation**: * User Guide: - * Added documentation for the features `edit` and `sort` [\#72](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/72) + * Added documentation for the features `edit` and `sort` [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) * Added sections on Introduction, quick start and command summary [\#78](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/78) * Developer Guide: - * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#167](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/167) + * Added implementation details and sequence diagrams of the `edit` and `sort` feature. [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) * Added sections on Introduction, Architecture, Documentation and Appendix [\#74](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/74), [\#171](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/171) * **Community**: From acd29213f8cf4b0e8cf1a874a60a243eaa1b2471 Mon Sep 17 00:00:00 2001 From: xuche123 <60433267+xuche123@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:24:05 +0800 Subject: [PATCH 200/299] Update xuche123.md --- docs/team/xuche123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team/xuche123.md b/docs/team/xuche123.md index ff966225f9..6bc2bba0eb 100644 --- a/docs/team/xuche123.md +++ b/docs/team/xuche123.md @@ -1,4 +1,4 @@ -# Project: NuSchedule +# Project: NUSchedule NuSchedule is a task management application written in Java. It is operated on the command line interface. From 3e3bedf9be43a05c4c329f4cf4ed5e04fed6098c Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 16:16:45 +0800 Subject: [PATCH 201/299] add ppp --- docs/team/jiaaaqi.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/team/jiaaaqi.md diff --git a/docs/team/jiaaaqi.md b/docs/team/jiaaaqi.md new file mode 100644 index 0000000000..d785f02ff0 --- /dev/null +++ b/docs/team/jiaaaqi.md @@ -0,0 +1,36 @@ +# Yang Jiaqi - Project Portfolio Page + +## Project: NUSchedule + +NuSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it +using a Command Line Interface (CLI). It is written in Java and has around 5 kLoC. + +Given below are my contributions to the project: +* __Main Frame:__ Added the Location classes to an event + * What it does: a location element will allow the user to save the location of their events. The location element + will also include additional information about the location. + * Justification: This feature will users to note down the location which the event is occurring at. + If the place is located within NUS, the additional information would include the nearest buildings and bus stops, + which allows our target audience to be able to easily find the exact place. + +* __Main Frame:__ Added Location List classes + * What it does: record all the pre-saved location data of places within NUS. It also includes a separate bus stops + list, which saves bus stop data. Users are able to view the entire list by keying in the command `locations` or + `busstops`. + +* __New Feature:__ Added a `locate` command to find a location using location name or event index + * Justification: This feature will allow user to receive location information. It allows users to find more + information using a location name, or an event index based on the event list. + +* __Code Contributed:__ [RepoSense Link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=jiaaaqi&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=jiaaaqi&tabRepo=AY2021S1-CS2113T-F14-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~other) + +* __Project Management:__ + * Managed + +* __Documentation:__ + * User guide: + * Added documentation for `locate` command + * Developer guide: + * Added design details for Location, under Model ([#69](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/69/files), [#75](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/75)) + * Added implementation details for `locate` feature ([#69](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/69/files), [#75](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/75)) + * Added target user profile and value proposition ([#67](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/67/files)) \ No newline at end of file From 4f4d9c26c31d13eabde0cb6d0ed68859e8b66580 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 16:18:36 +0800 Subject: [PATCH 202/299] Includes some locations in UI for printing --- src/main/java/NuSchedule.java | 2 - src/main/java/eventlist/EventList.java | 2 - src/main/java/ui/UI.java | 71 +++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/src/main/java/NuSchedule.java b/src/main/java/NuSchedule.java index 32be711ad0..e359e56874 100644 --- a/src/main/java/NuSchedule.java +++ b/src/main/java/NuSchedule.java @@ -1,8 +1,6 @@ -import command.AutoClearCommand; import command.Command; import eventlist.EventList; import exception.CreatingFileException; -import exception.DataFileNotFoundException; import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; diff --git a/src/main/java/eventlist/EventList.java b/src/main/java/eventlist/EventList.java index dea37c6173..ffe5ef762c 100644 --- a/src/main/java/eventlist/EventList.java +++ b/src/main/java/eventlist/EventList.java @@ -19,10 +19,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.TemporalAdjusters; -import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.Comparator; -import java.util.Locale; import static java.util.stream.Collectors.toList; diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 44710042a3..2080656ae4 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -392,7 +392,6 @@ public void printRepeatEvent(int numWeeks) { /** * Print the success message after the user input auto clear. - * */ public void printAutoClearOn() { System.out.println("Great! All events happened one month ago are cleared :)"); @@ -400,11 +399,79 @@ public void printAutoClearOn() { /** * Print the success message after the user successfully clear all events before a certain date. - * */ public void printClearBefore(LocalDate clearDate) { System.out.println("Great! You have cleared all events before " + clearDate.toString()); } + public void printFASSLocations() { + System.out.println("Locations available at FASS are: \n" + + "BLK/AS1~8 \n" + + "L/LT8~15" + ); + } + + public void printSDELocations() { + System.out.println("Locations available at SDE are: \n" + + "BLK/SDE1~4 \n" + + "BLK/CELC" + ); + } + + public void printFOSLocations() { + System.out.println("Locations available at FOS are: \n" + + "BLK/S1~17 \n" + + "BLK/MD1~11 \n" + + "L/LT20~34" + ); + } + + public void printFOELocations() { + System.out.println("Locations available at FOE are: \n" + + "BLK/E1~E6 \n" + + "BLK/EA \n" + + "BLK/E1A \n" + + "BLK/E2A \n" + + "BLK/E3A \n" + + "BLK/E4A \n" + + "BLK/EW1 \n" + + "BLK/EW2 \n" + + "BLK/IT \n" + + "L/LT1~7 \n" + + "L/LT7A" + ); + } + + public void printHostelLocations() { + System.out.println("Hostels in NUS are: \n" + + "H/Raffles Hall \n" + + "H/Kent Ridge Hall \n" + + "H/King Edward VII Hall \n" + + "H/Sheares Hall \n" + + "H/Temasek Hall \n" + + "H/Eusoff Hall \n" + + "H/Cinnamon College \n" + + "H/College of Alice & Peter Tan \n" + + "H/Residential College 4 \n" + + "H/Ridge View Residential College \n" + + "H/Tembusu College \n" + + "H/Kuok Foundation House \n" + + "H/Prince George’s Park \n" + + "H/UTown Residence" + ); + } + + public void printSOCAndBizLocations() { + System.out.println("Locations available at SOC or BIZ are: \n" + + "L/LT16~LT19 \n" + + "BLK/COM1 \n" + + "BLK/COM2 \n" + + "BLK/BIZ1 \n" + + "BLK/BIZ2 \n" + + "BLK/Shaw Foundation Alumni House \n" + + "BLK/I Cube"); + + } + } From aac64de7ce2cf0e8722f07d2763c42af63b19cb6 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 16:29:30 +0800 Subject: [PATCH 203/299] Better Coding Style --- docs/team/Lee-Juntong.md | 1 + src/main/java/ui/UI.java | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 7fb2168eda..563c3e9fc8 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -60,5 +60,6 @@ Given below are my contributions to the project. * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) * **Community**: + *PRs reviewed (with non-trivial review comments):[\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172#discussion_r519625561) * Contributed to forum discussions (examples: [1](https://github.com/nus-cs2113-AY2021S1/forum/issues/48#issuecomment-709282848)) * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/Lee-Juntong/ped/issues/9), [2](https://github.com/Lee-Juntong/ped/issues/13), [3](https://github.com/Lee-Juntong/ped/issues/14)) diff --git a/src/main/java/ui/UI.java b/src/main/java/ui/UI.java index 2080656ae4..81578d1adb 100644 --- a/src/main/java/ui/UI.java +++ b/src/main/java/ui/UI.java @@ -404,21 +404,21 @@ public void printClearBefore(LocalDate clearDate) { System.out.println("Great! You have cleared all events before " + clearDate.toString()); } - public void printFASSLocations() { + public void printFassLocations() { System.out.println("Locations available at FASS are: \n" + "BLK/AS1~8 \n" + "L/LT8~15" ); } - public void printSDELocations() { + public void printSdeLocations() { System.out.println("Locations available at SDE are: \n" + "BLK/SDE1~4 \n" + "BLK/CELC" ); } - public void printFOSLocations() { + public void printFosLocations() { System.out.println("Locations available at FOS are: \n" + "BLK/S1~17 \n" + "BLK/MD1~11 \n" @@ -426,7 +426,7 @@ public void printFOSLocations() { ); } - public void printFOELocations() { + public void printFoeLocations() { System.out.println("Locations available at FOE are: \n" + "BLK/E1~E6 \n" + "BLK/EA \n" @@ -461,7 +461,7 @@ public void printHostelLocations() { ); } - public void printSOCAndBizLocations() { + public void printSocAndBizLocations() { System.out.println("Locations available at SOC or BIZ are: \n" + "L/LT16~LT19 \n" + "BLK/COM1 \n" From 36fdba3edce1db26fcfc78648bb47018d61414fd Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 16:47:09 +0800 Subject: [PATCH 204/299] Added the Command to print the locations available at the selected area --- docs/team/Lee-Juntong.md | 2 +- .../command/PrintAreaLocationsCommand.java | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/main/java/command/PrintAreaLocationsCommand.java diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 563c3e9fc8..2fb04967b6 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -60,6 +60,6 @@ Given below are my contributions to the project. * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) * **Community**: - *PRs reviewed (with non-trivial review comments):[\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172#discussion_r519625561) + *PRs reviewed (with non-trivial review comments):[\#162](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/162), [\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172) * Contributed to forum discussions (examples: [1](https://github.com/nus-cs2113-AY2021S1/forum/issues/48#issuecomment-709282848)) * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/Lee-Juntong/ped/issues/9), [2](https://github.com/Lee-Juntong/ped/issues/13), [3](https://github.com/Lee-Juntong/ped/issues/14)) diff --git a/src/main/java/command/PrintAreaLocationsCommand.java b/src/main/java/command/PrintAreaLocationsCommand.java new file mode 100644 index 0000000000..af694e581d --- /dev/null +++ b/src/main/java/command/PrintAreaLocationsCommand.java @@ -0,0 +1,45 @@ +package command; + +import eventlist.EventList; +import exception.NuScheduleException; +import locationlist.BusStopList; +import locationlist.LocationList; +import storage.Storage; +import ui.UI; + +/** + * Represents the command for printing locations available at some areas in NUS. + */ +public class PrintAreaLocationsCommand extends Command { + String area; + + public PrintAreaLocationsCommand(String area) { + this.area = area; + } + + /** + * Purely print the available locations at the area selected by the user. + * + * @param events the list of Events. + * @param locations the list of Locations. + * @param busStops the list of BusStops. + * @param ui do outputs. + * @param storage store the data. + */ + @Override + public void execute(EventList events, LocationList locations, BusStopList busStops, UI ui, Storage storage) { + switch (area.toUpperCase()) { + case "FOS": + ui.printFosLocations(); + case "FOE": + ui.printFoeLocations(); + case "FASS": + ui.printFassLocations(); + case "SDE": + ui.printSdeLocations(); + case "SOC": + case "BIZ": + ui.printSocAndBizLocations(); + } + } +} From e57a68aee6e3a228bd4e84ad391689da17171e65 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 17:02:11 +0800 Subject: [PATCH 205/299] resolving conflicts --- docs/DeveloperGuide.md | 9 +++++---- docs/diagrams/AutoClearCommand.png | Bin 0 -> 23270 bytes docs/diagrams/ClearBeforeCommand.png | Bin 0 -> 24257 bytes docs/diagrams/ClearCommand.png | Bin 22505 -> 22372 bytes 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 docs/diagrams/AutoClearCommand.png create mode 100644 docs/diagrams/ClearBeforeCommand.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b1d85564af..2ee8ef69f8 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -170,14 +170,15 @@ The sequence diagram below shows the process of adding a new event. ### 4.2 Clear events -This feature allows users to completely delete the existing event information that is previously typed in by users. +This feature allows users to completely delete the existing event information that is previously typed in by users. +Users may choose to delete all events, events happened one month ago, or events happened before a certain date. Given below is an example usage scenario: -Step 1. The user launches the application and wants to delete everything previously stored by using `clear` command. +Step 1. The user launches the application and wants to clear some events that happened a long time ago as there is no +need to refer to these events anymore. The user types `clearBefore 2020-06-01` to clear all events before 1st June, 2020. -Step 2. If there is no information stored before the user input the `clear` command, the user will be reminded about -that the list is already empty. +Step 2. The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    diff --git a/docs/diagrams/AutoClearCommand.png b/docs/diagrams/AutoClearCommand.png new file mode 100644 index 0000000000000000000000000000000000000000..829908a8d9f4c03f48e76df5280e5eed3480e6c7 GIT binary patch literal 23270 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%0A4`22tdQD~Lc%7^brwLDeN~oRr z>i1byW1N>7k#Zo-m8U0vA1(bh80x8>vB%DghOxMZk!K zq6S0+1@!?-u>mGhm6mv1K>|h)frvEe79a-@K_H1jq7qb;h=`O?Ah6U35|fbj?gaF) z=j?fZP0F3goqOiars z&&Y9&k#Qp7;M5ovJaM#5XKKpJ*W24)?dTW?Xz%ilITnT5DSP0kb&eJ?c)41jg0vA| zUoVdgk2TyBd@AxA&WaNJZBm>w(^2XyH;;T?_#t#BvEthn+8xh}%kD{? zX@882Xk8r6+UP@!don$^tz(kg0u8^C8;N7wRttz-Tv#v+8f{QD- z)Z2&eRRsr|XH1#_>A<}uLCyG~%iPg!-1vKwfL*OR#z2Vx#hSIeB!o?#`4~-k;uCMM zHAHw~x!gJgO063Ak`?RWqC)K|W&g?*%WP=jRPaCJ5TfLCa;{FmR8pIeL@Bl&4_>Bbz1h=*(}CN(8}0uN>@a6dGE;SyKqS@bCA zBR(&B>_ShSiBX0jioNFZnQ*1i2RK~H$B&loZp<0|FRjbjhh2Qy(kONE!4&ArOrVL# z954HnY!Z$Cuoar!a@vm{n7^;+3aDl*rM%zD`T!d#hAJCF^O<=TK{@7G5{n(o+5Zh& zx34Fn-GhCsiDuJ!5}T=su}1cn;WZhL)6#$EO#E#1bT!X6wDj=EYgmfc>ElffLS7nh zFW}UCk*f*iD;1dZbipI(ydjUS_n4=}kDPurbGi~IYqF&af~wn>Q41(FTZV^*fXS@m z?c>En_+3aNOI7C>D2_5UK;It-mUz9PVW1T^5CD+$vs#Q+18N(mvJM3~d10z6oA(4T z6I%1$rZhbS&?TTi$M|!=Ww!3>BAy!AHk1959HS5Awv)G3X$1Aq4aL-4c}9-6LYf!7 zgR)eTAY?V4*L^pLRvtp%3!`A^&-;Pr!76gOlsdr}$W;q^Uk)^IW@a~0z>y?eHJ!Xb zkk4E6LmFua;CzWd0?fY(AlkL^hso*F-IaEmB{Q11byTdn!~MtG-1V(Gv!XjY{WGPxu`o>3#$CKNe+ z2AO$KdD$@vk0sMYIRROq$*5Wf-yMjxG#7VWUVcQ6(`LH|{XmE|0N2NY69K{46mM!7 z$JjYf-P$9N#QLDacN0jS9arz0T>z@%qXAG2Tv>dGVI}O!O5@YD{cE|U!eQd0NcmUV zo|U<(N=mFtsJd1lCL6m2y`wGorV`*C)u*!oT*!9$bf!06H}s~E4Ln=U?!r(>=_WK4 zs+Uaqp6mt-x@dV1CmpnbFjyr#XD+wfG1KJrYkv2LmJwd$Bhvnu}IcHW44 z?huEleBm4rP<(4u`_&+jrHAXS$aff{30JAA9KAfl^87$e>;<#;p|fkRTc88A zYy8fR;#0+h;>@v^#Dcm)2kL_6jOqZ}=BnJ#cPrngArfnYFP>x5MA=VyiR@Srmm=S? z`zU>G%(w;rLMXot;t+?z+*6>$Z6s?_?SzI6R$}liLtuXr1ZwG^CCE1ef};sc4trd{ z>7B5L54JHDZU;4&V!5&rK{peqB2~fi_t@ofCX1y;z$Em-jg*As=BgBB5~LALq+bLu zOiX$VQK1uzCBZV#OfDKEA9wEb4~fS%@n~`cC>f3u)LSKByL0tj6n;veWhm6`l;L&t ze!PDPOZ#?teMKT%OQX_BS?SOoFMvv3;?992)N7EAH#0Tu;Bc_}UrvRDF=0U=Ua}eG zkm{so+?v{$0*74`u@?}{fnUNX(D%&~5K3N>mk&!#7X@klq2b~qfE*Icn=jtn$>=cpL+dzhUeJMgr{>8cZlE4m^&ix{kx4^&sq(M6Tf_doeZO<||9q7?x zyKx+f+peYPWDpW+u;f@@`?VLgmrpgMfMkgQjz@RI&a2-8RD1JR~y7NUj$ zBrh}EHZ?Uhq&LB_qiB5$kJP;Z_6I6-rwt26zu!n!<_4boUAYDr3}%}zenQJ9!=tO7 z9=ny0qGyz}w*>A){2Y1CT!@oTU%>UzPnbp(v7HYbVABEeKh;ZnMq^CWOs%07j~_%O zwX9o^sV2T*imxk$!13C(xs8m!i}=`iCw%e@Ob;Rg zY;vLL2zFoJoY(A2^C7VY18=~X&4Q=$|s_jIsIsV4z`H=%)_*sE3 zw+sgY^A)JjB8`%%M;Cg_1bM2&Polvd#$JVWRzkQLc9>Cm62CV6pQU&3wO}PJ-7sFZ zYLbT;r2!DyCw!zXRQHTHsc^fBnJGF#o;*||YxONla}&A(=tzKVrOS1$jNE-^by+5 z-r_08V@nItn*x{N47H|e_wD|EpWq0b=2>Kvid;a%?XwjD)$WU20v-f&DCRe2j_>nT z!t<3M*koS!eD6=l(<r z)xvOIbB!aL>uc(_r%Rl^mh+#y+s&tGSVjB#J+b4h+b3p&iY_70((Im(5mKW^k{1Xw z0?zAFJG@#RQNLDcr0dei!PDfdbs}JJDr;ZMRO;55az?^gi#f%%&6i(=b`@(RJ#p%7 zf@Ef@2x1N4>16?C5~M>C;cTRXOWBy<&u$M#myo+gzYOhoRZ5Or+qnC&z(p^UdGXsq zjFxmM`4;CsyUpS@Z~M9~`h1<0eZ36j($EB@r)pVlEr^vZ2=lj3)6Bnl$kx79sf znpmL)I*k==}>(SOXq;n{kQq z$UVYaCCWX`oKr&t1P|S1B<`p^>z$1{^-$e#aPtU7P6wei>(M*ZVVBquQ8(F?>+YVl zu4hbNDi~xd*zGeaNnqA0|C+)xg?)Sy?ZH%R&SJ!5<|mhWk|FLYx;Qq2W&NNotSQpN zWnS{ZeEIXrn3ZAMdE1zk$O+;4h35+;6Az!d9f!#A82S_oQAt2xMUQ{&KM5}%d;2F< zRF+d~EqN|xH~V>4I&a>>oPmE7v|`Y@&0^g4U$iI>q$4U#Lf0&I5}Uj~yRKZ!Jc~b| z29tI9o^qy%YoAB;Rm-`Znc{(CQknKn3Nrnx$+0EW#wI3k*e5q+Db|iRX}JB`ZS8WR z7~g=;t~(wMb$-NslN3w~-wRfy0^qPJ+`#1bU~_AB7w_#^YSF^Y@0D`ifw}#~g~o4& z(u0hnx<8&VZXWynoBZO%wn_Ma{%f?Iem~_kk)?`n#NL5vQn=3e%??S=uy^s(>1iwUQtm8A*$|M{M z?P<)^{IHCLoq0j-YyH_pmP1*S$_ff3ndjgrjS&=cUZ~H^WoOGcZ*)G-q&wq5Zc%cU zR)K75d`1Qv2MsJxkKp3gz|=D}_9X7hsorSpX18^am_ap>TnL*t1~X7%YpkVpDbycM zS0&rew3TON9YuHJ9#<>IVbw)^nUh9DfQ{|x*76tvi57mgsPEvwPXosibp1kwaV?Dq z3hnChwPG~N2De;m$9VRyqZ1wq%HF%zfWyTd!=Lj~|K#}EZZL^X{Is*4T%UoOUsH{g z50xa}95ppHGn$-~G{>wn4MxD|$&(g*KG7#eGtBPHBpV2q5&5@K#*ZKlbT>AugwVVu z57pEg8HwAB$5~+f+FWsf;en ztGtK}iO#vWhaxOHW4&X?%=v`{emA*C+An%mD#@7+DuWsViZx5*P zQKB)AstkE3h^wtVKl)%}`iEl{g7}#>?__#*#kTRO+~u`yJx;v}VSfIQ13vs3>RLd( ze*LHce;!uma2h2`15@rz#c-BR zNa7L>qvzVd+Zp_ocp%iN#+HL@?l5g_v~=MwEeef&|K4`^>+6PwhSk+om81D^E^GQN z)|nZ1#oQwa=b2?s|5mWTe=+7Tzx>x9pUjYLFD5$RC<5eH%>Ubue`PHKBz`(lP{>jz z5%>6R-w{+_X@%R)IQwA$nq?!r&oUC0a~dSD?flrKLleTm1>G1DzcUn!KKAp$InVZF z-(=rUyctC7m_^&UG`PRj?aj!*$VhSVB6sz|r76j^@XNmYHp69mcBKMHQO_{%Q`PRa zCoc(>Wf39;X^K=cq#bNombIOjNnj}7^E&O*Xq&aH^>Kc4To`0WGk8z7iZo%cm5rj6 z^g%T(L1cn`+x@jFf&;7Hjc@XBz1Y;tyYp=_YoQav!N~Z7clP?uEx}QQx*x~G;&)+T zCG)R~7)5$hCz?LkkD!9y(hiLFzoRX8-68Oe9eemZVXY)E(XMpruY0RB^7Lxe8G4Tx zGm7*!pW+nS94^pjl%$A9MF17e)A<%=H$)$~zc-L-(ZG*x0yz%BXYm ztkLx(NyU42Ur-Pd$Cp*eA<3wHHfR_nEw|g10vXo&c-8%0J!ZVD@Dnk*J4d_()tn|8~=WCOX2o7Xiiuuw|oj>UIO~LQdV!_fempUy+7{ zTU-0Fy)o^7-#ZeWu>1HOWJaisdutmTdge9K)>pCO5@2Bd(!v8fJw$ z@nU7R8||)&bX)5#tF>ekUKosgL9i|5&R0x^P=k8cVp*u++VpwK(2L_r7kD0?xVWmHr9Ojxst3;{@|T8eeoHd6o4Z?Zt4=F)y9TWU5AW6ljmp7%uHX{ zNvy8L619+v2)Z)Z%SX65%DPNFUQ@Xc>OXIYjugo29N3FJLpdU!W5kzu$8($PEirLa zadG9|R>n^1M7p6QtAblEZSy^TPer_9Aq@ zw91fHzDXKGSGs1AMc*6A(R-=U>+DfM<|PQ`dd|wHX036lxzRynLi)EAZzL04LRM7j zRnAYRypz9schKJ2^pUwaD`$IK7vXVx%dUpj!HU5PiqA6dFNL*saj4%_e^v797ncgF z>PSYcZ1}THL!v>LHJJZ9mAkogjfOXiOh>OB)82Pm>twJ{mn#U4Jv~F0yU$UvyG$Rp z+2%RdS2R$r9qwA1oSfb;lN>YuA-W>#ZjW8ByfF?D-d(KRSQ_}e%c6Jn$Xvni{(cFW zK)bzDx@f)7awc_t*-(U{pKfEW*9=PF2e(AP=_cLXg3mGB+T-})#*;d?|!W~?FfF?p3*f>AqO^W=E!K}#h$cx zh$*ZeA{EV$bMHZDVQnUH&tmk4z4Zpf|XOhuvWQ}R=S^y&(ukKm3Gn=SJ#(EuPAl;zfk@8~No_-IdgnU>q-Bd2cO=Dw2 z_B%Tx`vFgK|G*S^ihJ#L+4&L(K=$_OZ|4qr6J+9zqn+-$_9QpAQ{a-?(OyZPn?8TX znC+Ifp5YXxkBhH(nES*lfr_TjYrA*S(adYad(Az0T}Y8-A=&R<<+`n7cjO1eHvQ;$ zqr30Ijq6?!^Qd&qH@Ae4)Vz}qmRP)-R9=QB%Y~A(w(4QaviEjE4;-IG^<9sV#M%pF z?=F5*nd{LKm1UVB^X>G=nk~AEPEh4WGXzfl`cg|PB3PeV{%;60)~KYwnn=R&O8 zfX2LQYHnt1M1^GDbVts6$xj6Z!FCUn2W@PeZ|{snk$r@06ctoL**93B8^ON_e`dRzL|8`5 zh9OBYCRxuZF@PEK5j{Ei^S-wBgHWuEW3uYU{i`zzcU>k_dqV%$tSaC6qDyTb78XHq zB*@ zi#k1jP8%b3Flr;$RkEI?Dxxa;9fRZ87#jKos~orOIJ8%fO}1!n?-p6SEe^|$_>scP zV&)BlnZrfr!e;YTsq)Uv9MWj#>71WGmFB9t+=deeWRq|2iSxTsZcL(*&LQ|-FLX2r zlQUfRDl+fZ(%4@lLasUZo|d=bOGFO{_C|25#{2L`V|zcbyhJ4{1U&8G){DqBZ4X@z zj5q3+uGcw(iIWOeA-5IRdD36GEKA2{J=rqxhImEH)wzCcrVIelG~}U28+;p$?w~bJ$lrho99?t@!N1= zP$#&E|LJB~tP8(=nz3wMv2su1V=2z9mXL^u57_+K0Czhic}=wYKJzK2w&*ryJ-4mE zYD)ZYps_KP8+A7hcx|4v1k!VHvyH6`ea9Ry?VPPtV3Zf$wW(B9wY<%rL#mN^I`9jd zxE9UNUPNL+Sv#}R!8`e(8j;dK@3|!TR#=6B0_|IEXcddJE^$-S$d_1o_b|A1nMa14Os!)}kpM7#JAIx%J3?9je@4 z^JaGBl)=spmghYu2tH~kxg!^JhEgHW1}8d`t}1dt?mI@7eP@HyedH9UsiJ^pW7N)z z*!PidvukraJ;E0#iX=M2auQsJxG+K}`8 z`S#`Z-qYC`s;z}<3|Q$2V3rDd|Q=9FG}v5Olr5Lzu5m)Nl9*?_WSqm)e`#X^DnLG z``;c%UL*g7s_MT&*gjQEdIl}QRE2Sq+ufRo@qGC*oX_0I((<7Cf}#WpmFCoy@nB_h zG@v_MZ|K{%$J?t@NXtRBB4T1-0)TwP&^SNi>LN$aZ#`)hmq zQA;Cj@Oh&-)>`02dQF^w*vqF!}oGR8v!v z<>w_Ytjl-L#7xSH+1+5MXUmqW;$vC@9gDUEv>Cwyu4~Mc2-s`X+g?8NBiHxSLNK~I)cnSi=6IAZ7&*fOPBBY z>}0#MK36|3Y&}wa?40n&jGfI*w)>w5kZC?8fnwudrJ5=ASxqMs?72e`}&9(#F;{Tdz{oeg8QrGovfqw1R>{ zZly0JC$4Nc7l>i8a$*DVMb(R}w)8XR&rk4NxPZL2A0ggSyfajzTVNJkR8;i%luoG~ zXiMrty`LV57oi6(U%ng}6}7Xm;674)YAti2VkgUGV}2uaxANixQjxEi`9Oqbw%#VX zGWRKo4i&I3AWQVu3FW$TvASQcWzZ99KS_>g!Sk={Xo+2<@5e{ax@&#L0zZ5xc9`oO zgLyvjO?pR~RYuzoM5HOBzQaS$ADHu-V9Ow}FW-8$_>l_z^l8Sb$t~=ge82pF{Gfbw z4ULOY=)%7l=m}4+Se;Q+h?JIA?>VvEE3V9G2;#A;?DTW=nG6=eQBm^A5f+Cdd3!he z%g0A1-N6eeP&1xvYA}x!w)tKw@%HxaYxJmz7ac?!N!S0mAW#TfraF79Da@YRA{q)D za5uTU5BP4$vWl2|&~*|o%X*IV$=^Ejtw=U-|3Z1NKhQX7o@3)(F4r0x-h~9N2WkWr zvaqoww5R8dvUF^Y^M5d(!{Qg1xfNE!x#ed0vX=t}aYRJn#}W2(`XceGgRB96|LK7k zM%@l*x3;^?ehvhb0E9KCgM}w;@~B4$5h|5WJ=%B^FSz|*9YX*)!vC%J#GjM;shFn; zH!mLh=PR&7$fHT;Tdebi3F68B>#rTl{V8`hZuk7`_~~f_qY@n*&3FHZ?PylSON1Od zxuAat(I=d;*;1vij;C2$fq8dlx+c$&hFDIxnuf_&CNvX|BZdIZShU8~yt^vS&BL>X zH0>|8e)Q-n{h`$INdc*%;p6L@mzz82x-kGNJML&PDab@yrLBz-$Qz2$v(wW6Ip6o> z8Hd`3PqimQ6!x~ZT35d%Eh#CHbv84b_Be7ZGBWZKNL~={v$Id_zqPa|QBqQBYxm_& ztfgya^P9BXPJV(QUe5jWX)(%i&{X+lMoRa4*|{1eMhtC|!q&<}v!kOU1ibrdtJDQD zvaesi3X6!)T)zCdygYzLNF(;CphbcHm!n7|lJQ{p+neCkxVSjrZF0+UnH8HOXYk_C zukPv3lrG=>s4FTeegx1}KHpj{wjPx&QI?jLZjKgFjJ$PqfrL)<`R?YDtn(WZnvv1b zm6a7qNBG1_uX%PVVtuX;$;z6Z@icKU$XwGz4VXryO%2F{JC}Y%a{Z3(>haIVC0}FwIOfMcLZg zvTEN|Q1JKl^(`H)dw-)~%*5KxPT1!6Tl__Vws6aNH6@oL_-T8Re2EKJV$c|VB#oOQ zmAfD>|4w`xwXIUVYG}Y8Rmg&@R1?=uFLR)$l`d48yro53#Uho;xK|PA=_!8a&Wo$a zpbLc>=-Js>>}o&#`&PkyAYjwjkA8h zH#W`>|CM8fsMOHwM(w8QHY=fN6ljUrV_LM3KQ)lctE(L)=ne=fKR>@*?E=&G>%zjj zQ0X9sf-0|1e}#bUNT>Ib-zxf!#SxV|hOG}H&#MH>hh||irlao^?#JlUxy0x{n>^795 z-U4&YY+VseP0hNGwiTMzHa4fvo)vc6Eq1HxB|Clk^ml(y$)v8cP9xp$|ribo#Z-chR>IAlW&#*h{L?SO0Xv!Chb zK6mG@>U91Mu z^6n3jsTcYFRCy?Oup+dMXuNkn=j0^wKVd|A|NM&^Y}@WFMLzhnm(!A z-dmYwVX{;wpVEh=qh=XxWwjV5=}SgNW}=9nmnx zp3L``XcwUqWg4lISRjE1$76?TykzM)SDyEZX@t1Mo&;stqxTq^km3YhV}_LR?;n%2 z!~Ej?Cy}`)KcwXgd#L-X@a*Y4MNyz%As#r39c4e~*QTZI)PK^7ew)<92|kSkK;iZz ztqlT&6irz01M||;^Vrd&SbKN(g9mv=t=9L{4_5&-Q~>e*l}y4!wWhKG_-%%K^LE(a~|_*a>Na(eId@wVBYU zsLb(mf8)F0P)Im4KXc+eJv}2L`o6wCDACn=_)yq&d$lW5TS!pQpNi`m5~(Qz30Vwc z*I~ib)D(bC?80Gy@z~IdiB+~U*5W!+RfAVaXauW&{Fs=S&?|SgZ}`BKUA`V3UTHa0 z@!-J&T)jr7R!wy^_pcB)Tv26KxM^`u6VIfXFNE&YW zHgPd&5%mbltA7&i=zy9*${*`OapT5~A2l_Sjqc08W!5s^(78Pu{OnY@yX?zf85*i7 zE9;Z%Hs3D*6~b`f%afT z(&-X+D@gALAyT_BPbACH40zWkltZV~ekNo$_^H``?rUH6Oufnq!}<_hJzy&+2iQg^ zgdb~sDa}=(z>m@OXJeC_aIo602*SNa8~wFwfac=|gs)uD@5wb>rBMwIA;Nn# zH|dco(WB`T0lA5jJ~rHG%*l%`qa9;LF@nlzj0V-YKk_kkK6r*`!eY|h zaN*Gi>Ao9@OGRQUmC4sC%YEym@s`z{f>Kho0NR@VjRxn9kDdM^C4PkP_7U_eTGtEe zHfz!$1z9iB!&iTElM&o*EIW)Iw(-1-r;GR0Xcme?_Q3^0hKJ?oh@5A5p=>rDJVEW2 z@*Fu*sw^K^U}UT|z;Tchx2^LyLZm23ec^ZW*E3DJyosYGw{1V%A@FOvlr0RG7g*pO z$kdA4iSD6T-S261Vd=2WziLeLCl}QERM*ber3eo8LPDA=22ddBdy$cWp(Q%f-b2|3 z(fZK?@!)39sW%3fwnNI5Bz{2_)&ZY|3xnMqt%)K(v6i*;^^cpdsB?;~p4wk-(3( zw~9&ex0GVk|F-WeP)i8Smkc*$*^8Eiznz0j2S*e9LgDc+9wnj)jb>0bsDs^=<_M(a z{O{kq&a0CUrHmqceD+lyM}mF=1asTlHZ(R)-x3!W*LnExsfESZSfNFqpu_AWjMDgc zq1CW^R?g zMAKEy`=4%;DAl=dE;Ns%C#+s}UbxFV`A&82MtS!&D`N9o_hZWDAHW!CSe*|c@ zB|76O0B)B#F6d_6gUtA?yL)4EX*72ZMg%L7!`O2(kFduI7Q30@(W6Hh@+LK{tgPZu zn4`yzwYRqihYpn5rz`PCiIbc@4X*UNT|jv&OG{jPRzNa5!tLnMJk^-_CX7F=$ac(C zyWi3g{1&+Jy1F_5Bg!i=!cHo#Ghn$z1G(p{+>HZJF%}#Y6qgYr zE2sQac(Q@Wc$O3^1A5HmV1>kib5>DN0cdrZhQ>lRMK#$!`~U#;^f++UbEi+6_2#Dn zPyUWU1WV))A&4Cu9Arz$vj#LvxMLet(Q$=AiLy6W+p3=mzIljtQzaon=6<9mtYXSs z!i}QzInW8ZyYDF0g8VXGy?LWoYBvR?YPtKJG1J@sn`4v8TWp}#*!YtDNNcf=m$jq6 zaPC3G(B$whRHQwuqyCd@%@`0Z68kL~Sf?|EuLU6uhjN8CIdrK}%li5s5Xo zctFqh!g*6!`fIDjHT1%5{#sG6kXG#DBf3`%njvb#Vwd7cuPn}BJC3jhI-d}Rh8eDwyVz~=< zLNS!$Ff|a|q`P(X4n?#9CnMv6tD%{lXY%8D_v^ib#s%$pV?KYU3;o9ApQd#3+uJo< ztUAuVWRkri%*fVCfs(Cf@-&fwqYEHq$#EORa0sK53&g-EDLtY1RN<6C6Q_FqpBF_PMWYW|sCA-+3fo{eTD$ ziiuCFPohp2Sq{n)>r||9(zgHsVOOL-)CBq`D}NhB%0yjwFzuN0;-^&ov754)U4N>E zu?^eN|6tt{coO`P`wQj}*H-qd#NqSwcRB)>LX2EM+L?wtf70y6xa zIV*YuVm^g+faD86sUt^Z6}NVFn#1{g*M~EX;d8$SqEiKlYizU!JRm2h>OB23=W$~= zUww0PviGeSC=hT%{YGyQQ^l?L#GR}_v!z{PL_e_!FiS{4pr^0Tak|5F3>OS`u$RN5 z2l(bCQYxyHsI>k4eSjkRYMM6)We)MemKt&A1gfT{25=Zam6gTCcWXGCc<7jcS!swC z*#R61s~5;Q%}xE=5adl9Z1sQR0K5;T(ehDX0S53RhV8{|_uyl$WQd2Wn>qDoUl>UT$7q zC-Fa(ZO!pfiiXP9-K~|H<8yO!bgrwduU--6oL5v-BqAdErwA#CP_o^J(wFpG?D^)W zAYC=J)h=yI8Mo9<7_Hbs&)G?+6p8uS@)7)gX81a9R)ulinBQwe4l#AJJkc4#;F1)h zg?pNtIrCo450oi}aZAdCw!1q!msTKNzk0Pg+p|*beF5JkA^Ln1&h_7cdg-H~3Re(* z{N}$ZWhT7x@E{;1UHbHoo*{b`SC1Yjg`%k-0@#?Fo15Vv-?aVt^XFK*siUc#5dXni zsdE6{JwJaIw%9WimwEDMoCnYh6FWd~D9FicOLv3qxq?rZ1ipFmqcvVCcWW+TpMy;_Tx$23?xRH$ETi?@-v#3uLFiyvDlRwhB09 zyL-O3sYyXbQC4=kHU15Bz6I$*Xxe{+%AP(pISZq3mIk}eb;&tZwHdEv1g{GffEo5c zNWHzSO=5wnv-3Z|?9H?l{n%Y)6v`{y2Cv0(2dx`?2a&AvLWxawKr1URB=iUY+oTEv zh#U%Kjugxc|I$9Zu#(1AoGZgRd$4G5^#+ zB^ortjbEa!+gRMx!a{arvg`BbN%9fk^{{>=hm{juD;W)HNarrV5VeKbsn+-(AlhM9 zVV!_D?d9bq>-^}^aE0p*PBfX{xao3_hAb-!3kWAMC(hAkB-DFB5zJMG0D5XzD`4jU zVH`Yzy56PgD&VyI8;C*_$DOofS1-M}lZkXdbK#udQ^x-!1EowftifauN_d*-~^1q1~pC7?)P z8UHSD$frMBKtFWqu5P?6Rt8~1e4(*X zAmq+FLcqM-C-MBVI8d@mEtA}Bcabj8VUT-v)Kx0VXSWMmFP$%Zp045ZA4ps!l4DtI zN4*|FOS5c|tob;~MST@$$Ol9*=`R#PaJ*D*hW*rqg&m`(D--uBfwvTs-mgUDeCk+c zgvK+Bu4mlzvmXVkVwI08TX!WWV6_*c3H8+uNcVxW@EmA1MijBo)?PkRT?9q69OAc{9;pI1J7})Fq2ZnH@JM#`WSKR zoOo&y#SJOl_aeKjwDd<2IE*Ct2ULnUx?v6wRPvYi(T1GlT!tQ-9tcvaFdjl@1HH`u zNGNZak5vO9@u-iy+HzsX(u?81&`^xK{@G&E^OM%}9=$?_;E@2whSh})1(ahB-jti0=pM|FZTR|s1n-&KI5`BdAjSFqfdP;zve>V( zvu8q9UKLvUVuQB_&=O)VkKYRei!55iCHj{2$nsb{Bse-Tx6ce0DJVo%8hDhIl^t>3 ze%LkW38liZ{h0_)7=yRnvf<@SXh{(rVrBq z23ObNG*END`qwlNocX|QJKg|Nx}1Un$3LlO*SxMs6VU7sbjxOB>y#A&O~ai#6CAPC z9Yklky0#{-sMtMd`FnJf$D)^)c^b;vix)4_5Parc_hehLtFjrJ7dNKbrL;ReJUl>a zX8EiU5@c|TE|&eg{gDVl_k_o$QWz{j zkK2l3cZn6L^Ry;8@req*aP@IFSq^(?VR?q7-J?bw|Ap!tMg1%ALC8$^JGaZhe}3}F z2W~ucehDE-ScL@;h(8Ab{>?*Wg+LXK#iKy{g`l61-c)C|!}WiTcDI>ILTF}zyY)OJ z4!3ev>=$a4{{DAt2^Jg4JDms02}l-H6!70tAYvYf)&Tu3)p2M;A3b6k?dy^%ajzj;2hxAx-QCvDbq~-_x~>^`#Hxl6;9=uKipBG2RzHGXaFwMGyx~DhOc4OlH z3Ct-a;=@V*5Q<=CJ#Nf7?_#Lcus1+1(o4N~&_WM6)e6$hBw4v2sn0T zb2jt@BjW0sFx8+3L+$v_jNykKfkS_RB!izmRSM+MKQV;= zggPldKi|5QqJcqNa-s|Y-MDUt&Lj!)Ug6jOBs;VlOOTT{q?)ZLy&1ElZ*xNJej z&@^|zTtW+<+v5lyC}-aY?)8n8EiEg8=V>`bBy6Olm(|z4g2gqz;-^mR3F}F^&#w- ziw1W3DWUOdnXfJZ2w$v*{B>A8(7*qO=rq?Iv||B-31&s=!(o$w(t^l`#D*FQ=>`Z~ zDV2xw2%CMWD@4acW5foutx}~uf%ynFSEv+<+SP!oHvdcAI^+h0m)Suml=8pa%K1Rs z{oJ{Lc&PxE85NneuQI9SR4lkJU+&DH)Lj!2xrd6a@zOf#442@|`2h^ruUd+c9*7r` ztMnft5Op#N=4TJpsLD$BCr=VGGVbRX{QUH2J4`N0qcb$IZDV1Gj-0$B-&9pmu^EqX zGZRiq;62mFH}g0Ci&gIAi=M1GvTHe{t;qD-poHu8wUmkM$BdVQ(113$80&Z?@FxHZil45(S?XYvE zvxpX$Y~{h;!g5w?gBJ*h;e78K%t|AbBsrgGA6gQhp6>tprLU(q1crsp!dI?*$JUHP z2jgy!6$rseRNuh&kffB@xhIwdgOj#_SetBp+?F6SHeaKp4D26>wsM|&bKv;cn0I#t zkn!G$jbG3qbnc8O(I1PfSmJZm1^4uiDH=6+ z01b?`|76vb5mY*j%e<4RO;gTUtz&=kvFsTOsVCN`=l!wUa4KD8cQHPOE3nQZ96EC*J{LsXjRVQu?UiW<8x_wT0}KUiqx zO!IgA+u?nf{t^MLDu8c~c4Mlx1r{CN8VFdk?>dSeG>xx+>nfO!_+#%TovqiR=>LOQ zsxTil-nM=hBiYaD{;4kSJpaewrMMIVh?ert{Cy(xzo$cGanOO=7R3`1;@N+Sauw!e z@gH^R#qsx1Rw?~wBsDJo+`?Cy!`g>c1Ui@Rp24eA2YH`gX{fzT6vNve4}i3~&qNSCkzo za;N@60skMxUrT=qf2s0f-va0S%`0iTlxsuJuUBkx84&Uz@Hcdn17EB=J|HqvW@t=z z%G_VjS}eSW%}cPo&`_r&^rd|ltK-1rHDwV&!ELB|#jOKX#L-~C;E@|ln9=8zFV`wb zmCtQvIWg&v?KMlwg3t9csTto1z!jTzii9MDYQOF;$@8wWgv2X}HE@M{&-cS7ItZ>6 zoA`rgk4GwJ`1k>>g=>`4&$ZB}kbtblyRjiHYiF1LYV{ZqNu;Q2DL?N~yg=yj zptRMJhY2~_5OATw&widlz1yYWJ)JY5y6oM%U%Q6rnGGa?eqTcg2nZYkPo;0@1go9# zOyJ;A&EFkNJg%R8`I+$0{x1 z`wwvw5S;(^tLGRVK>in?1mE|UDq4k^-+E}E`q=n=b+rU!^Gg{X4`@_8#Td{~leqgcmZ341O2pq=5WxYrXSqiM@Fz!2c_%J%F)WtCKsn*J`{m^m`yL3ozicUw21}Qcy0{xSz13v%{!1nU?XL!H^P>f!hmT2 z3p%lEI}U^I{P?R?#F~b&9L8;1oecJ4-UO4cN4E0G+;y9Tq|3#zacT^Cw|Zcka2g0s zDc<=mY(=n9vJ~2+KYsiO0scW5OJ>4$QW?XjniC`HXY zPEj0N?6l-br16_?9T?bymD5G50GiCnkV97dml9dPhHP^y6a}?q3g2_$vQZ)&OE|Ur+}Yr#Blh%j*S&mL;86>jm-x&QhW1BJ z8*-8cN2FA$=H#r+bQeACQMr+WJw6>kWN!$B4=njTU>)~nQxEb7Z|EJy2A|zPZ3`_C zG$lP-GB|8Xg62}Qo5f3b0fFG+FBGr~ASCsTjUq5!`uh4M=vevL&h${5%D@a0%d*sW zcman^K;XfSscw@mXfelpW8Ms11 zj`I)KH!#q23ruHXY)l<&B(Tb%xruoSCeoxkO9$56LmeGP&!#MO=&b#nkuCb=Ny-z8 zQ_xn5Z)1p7eNVCGo2dd^tOGtdHkr_x5Cy`ZQ~<5(R2$>oI;HRSAAI|S^-s>z$uW4H z?}zONKX`NVS(L<_G8N4^)WGB*KKK%Q4mR8mH2rl@zmj9zSg2PwK7@u&%+5xJho^nM zCnGZqd+G7`lEvvnr|yADQ_RN3V`vJ37u8TV&co(&BouWhgg_k`}ZFO z;?q+w{2kY4d*0trgx8gWy~+c}?yN%%){mVrMvSxwK*h)K~uCmcRi}_C_G^ zN$K|KQ4WJM!rPfoe_Cu*ojMfcBh#E9WxlN?0eqkqLM7QbN2XKcyM9+$vRU?D;1>^z zs82WP4T?<0e?1e*`WyE6He4YHhP~P=4qH})-^*+1|YIuZe`y}l}&@YX+03ZjxCUf%r@?(ET&r983?gJWnlxkqUl5wuff zff|0~fd(gzEPd(ie@o=j2;Zq<^7q&!$s2Ck(nI zSZw7QBzzW{i_ZSzg;E&ZE6C`YxnhiVo&j&v+(cQB0NII5+%_GBiS(1A6$cLR~uiwT5PUYFo8s}y`e;!(yk=IljYaef$ z78ip&9ON|5mn)&6Vw;io-ci_>^>4Wxw9CzvhjuK)RnJq{mxm4%HKO zWq6Rnzb1Li03w5Uij-gp@h#qb(Bz zH_YFmqb8#lPjSxQsR=N>?Gb()--ZiKSnvV_7G4gm+{FxwmQlOQ_ac}{6)~k zBfI5_=XErPtq|7ny+1Il-AxNWEu(!`iyw4OeD9pGbC$P{WX4!Fd6qaRP+z~kRCz+m zRGpCc0&8|2>|x@9ia^Z+Jcy0=vK39IEZ$Q2%egizR{P2+hSN6M~ zw%jZ=7eVIckK=(%!TH|oTjMi#31Nr?s_>c6z zEqP?Y!|rTW3$5e;_V-~ILhak;rlzF-@;rhK^eVKa5*#dB@YOVLQms=ZPyU&mB-*In4&k-)0dMF^% z51&TC?rcDII^&87)xg?7S>UFUv~(>T2-OrSO*e2FMpr0MG=g^TD#33ZQG`-;nuJ87 zXl}542V7vPnFdT+gemETmz12kZ1@K>FkHWme<00&dF+D=(ySvz*~rMK=PW2rGBPsL za&_$h&h7i?+;;ATBdA^LHqPeIGO>{;%C;*9KA^ee;42zs{tGB{nsKgSxI;qXA-WOEr|hdhP7& z&Jq)=lYys}pY}wpuo9`$)2nkuLuRV{mV^Dk=W+#L6UtK6v2#o_ zfR8|fuEL~Qprz9t=65GEwGXl;A0&L#x3pUPAVs@WydX*>_2awi&Ng~rTM_@T5S>^z zR~InDye~+NkIm(fAaTt@LKeLduzj-yw)77*FVq#7PiT}PdQ7aWK5Z;MGnxH)l@j!a z(%9eq1*{o15egIVyn>rt4#RUS3j7A8kZl=(A7G&u#u7<4{^=*Y@gD~p#D zzkbC!Li2+YS28fQneOanu)-u{WrhkZBH$S(vkUO}pyjO3vjb&Fv|6I=Xkw@{=lz>G zaRy7v^+!C3HUypRf~DKGR{H4a#TL5env3xdDPbvwt(Y5YbI|U>sr3R;H!Qr?@t7V( zNGm|5dcSyKc`ORSzY8XDGE2X7`t`cHbUpX-N@?#_;0dBuprAhLOjCzF9{!AWfPVP-HC)Z1`2rvyXns}>4)a5m2Y?VeiYj*I%b;6k z$o*iC_!93sidNt-vJ>CKc(exw=t`}w4w9Q|s9xet;e7G4rN!HKr!VGUS8D6Z%yh5K z@K@&PLb=crj-!~mSaVl0xA;At`McHMnMQgP!|b3 z(xgKKMOjKB7>FT2R0IqV0S!$-g%Fw)1?eTLSZPwj20{@C#fY@fOYRBo?(N>*-skS! zy|_2zLl`DAnaO0H=l}nG?<;Z?6rODoSF4Y30M- zreg(^l(ZD~H`VPx+bhfqK}Z1e!}JX zS7iXHfrt3XrtrxMT0VrdJ4!~?tQwu(x8+mV6YHMxd4mjHB=Y7;+^nkSFr`u}W#g>4 z9dXwII5_Lv>_Hs@1&Ti029>i}uw^d3;t%ow3Lfw=^zs>OdxCL%LyQ#lLbn+TvWjdp zJMpY(q8(f+-ZVbo?d&^iA_DIrTNjA=_@kBGn~Mg{Nu*f@1cGrfwEmIQINOszQNEfe%%N-e<6Jq3A<^r+$B39PcvL z3-ZYmtW^FX=%Jg*eD75G@=WiJ*T?j9F1~N-eRgdsbNZNhRUObwviU`J7R_!*%KM}zB?&o=ax~I-lnPEeCf6x(K`u5mf$t9JU3MNs3~$>C zI-8{ToIqG#YLH$Xeh~7-^(Ig{!UhagHF~N1w>`sF%`|xie1+%JZf{c$fRg$gECK`cU^`ls!spTeH_1CI@-jkj6sY3 zY*?9#=|1U)90K%|G_ykk{(o2DU$_dN5jJ8O`F=tRrePZ;!mElW3I_ef_Y^bO8c?6M zM`6R4l3lLYbhBd2e=eV)dZd{M9D}f1>cE#+DfY*wOAK(i2D21B0CoxyoOSa8ML%BF zeC|65Nfn3bdTWWbwb_ERCglXfw2Sj!QjCKuQfqSEiH7`dM++qLau9GRT!BN8?Z#VU zpFQyrI<7F1Q-1a2QS4pGsT~^rSDxbh(XD{OnYBZwF!BZAccC!MheMC5KC(OP#Zt|w z%a4K>1Yq`Lhzm)IqX>gJBF3ctE<%Y3X7i%_fg83udlG_vs%iHbi*iZ%h3Yt1;*c$+ zJ0kwXE5Con7&^GTc5b;3+upH$ zgvQmbeY>+yo)^I+dlCi+HHvr!UbN!MoFmBkgN*g26reV|Axi^AZKD?YA|JMNye+kN zLW>n6ogMIeP5cJVw`TtVt){xVmobU!ZUPu*$bk|PV;E7oHG+a^JF?&Q!gGnFXD)YD zmR^j22`xOB4g+yokhA9AUSGRyVj{>EMMK>3`k-tyN3;D^KrVVQcL=3D@5!uA(+9yF_NUrA?kaZPXkD`4jGZ-H=d{P+9C( z@sh@>eH7^7s_jqLL{95REu4RU7Yh1C!9*6t=*rmdw}J$L5_cY9uc^C4kY*Qx`{m!$ zvD_gr@d<_y7*^R7C?*3mQ6%7Z7=s|ZE{c@ki(9A$uP|W0Y`peI{L-~~5Wxo}*0)Es ztfi5&sI)gQ?W=+50lhy5-V7;t#O>R*#U34?_f$n$S(>}!K13n4h<40Q5rSTIr{GOj#! zR+TUQ8Lk}S;|y66a8Ro)Sa}uO1bG5P8R#+#$bJ(-Yq9~*sN6_&F(d&9hI zpVl|x`=n~))F^Wz;nRE~!JKFqiG+9miV}vLu5Hfu{!;zqA1o)0-f;C#Dkrbk(Aanx zq>a*HdVbW@6X|a0LFsYndAVSp%`$DWejOH{Z$A2*V|0a@oV-VYTiNJf6Ew+;I4QbK z$-X7He|kPdHsO2AJcB@k?XtnkQ@z_u;~0|VVARYKTel;qYnTg~Jzl?##6<-~f%&i* z4oC;e4{`O5O5a4&XCTq1skKICH4VbcqT6NHE*sF^WsT+?KaW5lWPZ~s;`~HZggP z7GAayDwNo_uLe|H0Kuy0Dwnj_%%9S*<^T#6*cG4ga4VL9hysX?9XxojaI+mLGO{h0 z7XBCHXB;8rq8sRU4}8lPc^QKUkYEI4Z)yv)7e^_J1-Gqxsh2$x3X^Cin*5jfzLk8& zO>q^KWRQgA|8AQO@#z795Ri`9N_BL$II;!G+t(!no&f1f;HQ42C6gXLbT+!~AN5cH zEk|?2iC}p!ZMXhk;Dl%vH49@Bs}N&zh>0 zcNU;Py90yHb3gLc0&V#ZOwU#pSk3uWG*%OxX&d{l84$^Aa0?7B*{ws1IIrx}ofx`E zUp1k$ELJW}pT8`de~+b+;R0`YOjW5de?9s#R2Wn&IL_A`TB#`kU!v>|@s&^h+hAMt ztGv09TkHA4C_)hdl4T^JN>|==VO3?_cxcd+7Sy~&R)&xN<~Ebt56$5g$mKyZi~{H` zvehvoBoc_4^ZDLd)_88*3D30^i-4{V5&L|`_=hvMk$fg>AV{CY_2OHZ=_ul|n&}SN zkG4YLl5=m=Pbz7^=|_>hcSQn=)*;^Ebq8}43Hmy!8fNGoXcdds1}%@5Q|l|QBU6YX)4c9-VnWVK_3O1E4(iWKx8&#F(A_>1f8<90w`D@7b+?HQ z>_4B6mUwQcp4AVF*mf(@_1mkJqKCE%#4M{V>C9){yS51Q6MZ){{?uBv>lA^H Q)e9KvAm{5;)xA|fJk1*i;+ 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 literal 22505 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 JGSu;u{{ZlUsXPDx From ae86b208e46efb3ec8e19e1a60e1b07dece144ab Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 17:03:00 +0800 Subject: [PATCH 206/299] Complete the print area locations method --- docs/team/Lee-Juntong.md | 4 +++- .../command/PrintAreaLocationsCommand.java | 11 +++++++++- src/main/java/parser/Parser.java | 20 +++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index 2fb04967b6..d565d0a105 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -42,7 +42,9 @@ Given below are my contributions to the project. * **New Feature**: Added the ability to exit the application. -* **New Feature**: Added the ability to print the list of events. +* **New Feature**: Added the ability to print the list of events. + +* **New Feature**: Added the ability to print the list of locations at the selected area in NUS. * **Code contributed**: [RepoSense link](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=Lee-Juntong&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&tabAuthor=Lee-Juntong&tabRepo=AY2021S1-CS2113T-F14-4%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code~other) diff --git a/src/main/java/command/PrintAreaLocationsCommand.java b/src/main/java/command/PrintAreaLocationsCommand.java index af694e581d..efe0643235 100644 --- a/src/main/java/command/PrintAreaLocationsCommand.java +++ b/src/main/java/command/PrintAreaLocationsCommand.java @@ -1,7 +1,6 @@ package command; import eventlist.EventList; -import exception.NuScheduleException; import locationlist.BusStopList; import locationlist.LocationList; import storage.Storage; @@ -31,15 +30,25 @@ public void execute(EventList events, LocationList locations, BusStopList busSto switch (area.toUpperCase()) { case "FOS": ui.printFosLocations(); + break; case "FOE": ui.printFoeLocations(); + break; case "FASS": ui.printFassLocations(); + break; case "SDE": ui.printSdeLocations(); + break; case "SOC": case "BIZ": ui.printSocAndBizLocations(); + break; + case "HOSTEL": + ui.printHostelLocations(); + break; + default: + break; } } } diff --git a/src/main/java/parser/Parser.java b/src/main/java/parser/Parser.java index 20ee8c13c3..3d1ed8696c 100644 --- a/src/main/java/parser/Parser.java +++ b/src/main/java/parser/Parser.java @@ -11,6 +11,7 @@ import command.FindDateCommand; import command.HelpCommand; import command.LocateCommand; +import command.PrintAreaLocationsCommand; import command.PrintFullListCommand; import command.PrintLocationCommand; import command.ReminderCommand; @@ -106,6 +107,13 @@ public abstract class Parser { public static final String ALL = "all"; public static final String AUTO_CLEAR = "autoClear"; public static final String CLEAR_BEFORE = "clearBefore"; + public static final String FOS = "FOS"; + public static final String FOE = "FOE"; + public static final String SDE = "SDE"; + public static final String SOC = "SOC"; + public static final String BIZ = "BIZ"; + public static final String HOSTEL = "HOSTEL"; + public static final String FASS = "FASS"; /** @@ -151,6 +159,14 @@ public static Command parse(String fullCommand, LocationList locations, int size break; } + //this block deals with print locations in the area command + if (fullCommand.equalsIgnoreCase(FOS) || fullCommand.equalsIgnoreCase(FOE) + || fullCommand.equalsIgnoreCase(SDE) || fullCommand.equalsIgnoreCase(SOC) + || fullCommand.equalsIgnoreCase(BIZ) || fullCommand.equalsIgnoreCase(HOSTEL) + || fullCommand.equalsIgnoreCase(FASS)) { + return new PrintAreaLocationsCommand(fullCommand); + } + //this block deals with locate command if (words[0].equalsIgnoreCase(LOCATE_EVENT)) { if (words.length == 1) { @@ -406,8 +422,8 @@ public static Command parse(String fullCommand, LocationList locations, int size //we shall check that the user input is not meant for any other command beforehand //because the default block will throw an exception. // i.e. when this block is entered, the parser will not go to any other blocks - if (words[0].equalsIgnoreCase(ASSIGNMENT) || words[0].equalsIgnoreCase(CLASS) - || words[0].equalsIgnoreCase(PERSONAL_EVENT) || words[0].equalsIgnoreCase(SELF_STUDY)) { + if (words[0].equals(ASSIGNMENT) || words[0].equals(CLASS) + || words[0].equals(PERSONAL_EVENT) || words[0].equals(SELF_STUDY)) { if (fullCommand.substring(words[0].length()).isBlank()) { throw new EmptyEventException(); } From c8ec015e48343f1758f4e7a0c7419f3a4b7bdbc6 Mon Sep 17 00:00:00 2001 From: Lee-Juntong <2310266421@qq.com> Date: Mon, 9 Nov 2020 17:07:36 +0800 Subject: [PATCH 207/299] Updated PPP --- docs/team/Lee-Juntong.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/team/Lee-Juntong.md b/docs/team/Lee-Juntong.md index d565d0a105..75bcb2e62a 100644 --- a/docs/team/Lee-Juntong.md +++ b/docs/team/Lee-Juntong.md @@ -1,9 +1,4 @@ ---- -layout: page -title: Zhuang Mengjin's Project Portfolio Page ---- - -## Project: NUSchedule +# Project: NUSchedule NuSchedule is a desktop task management application used for keeping track of user's events. The user interacts with it using a CLI. It is written in Java and has around 5 kLoC. @@ -62,6 +57,6 @@ Given below are my contributions to the project. * Make the hyperlinks work properly [\#92](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/92) * **Community**: - *PRs reviewed (with non-trivial review comments):[\#162](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/162), [\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172) + * PRs reviewed (with non-trivial review comments):[\#162](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/162), [\#172](https://github.com/AY2021S1-CS2113T-F14-4/tp/pull/172) * Contributed to forum discussions (examples: [1](https://github.com/nus-cs2113-AY2021S1/forum/issues/48#issuecomment-709282848)) * Reported bugs and suggestions for other teams in the class (examples: [1](https://github.com/Lee-Juntong/ped/issues/9), [2](https://github.com/Lee-Juntong/ped/issues/13), [3](https://github.com/Lee-Juntong/ped/issues/14)) From 840be8757e09ee928e8bc2d9c96d0e6dd577a105 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 9 Nov 2020 17:26:00 +0800 Subject: [PATCH 208/299] -update dg/ug for clear function -update clear function sequence diagram -update help function sequence diagram --- docs/DeveloperGuide.md | 21 +++++++++++++++++++-- docs/UserGuide.md | 4 ++-- docs/diagrams/HelpCommand.png | Bin 17849 -> 18068 bytes 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 75a36be2ff..557a2b5c38 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -178,12 +178,29 @@ Given below is an example usage scenario: Step 1. The user launches the application and wants to clear some events that happened a long time ago as there is no need to refer to these events anymore. The user types `clearBefore 2020-06-01` to clear all events before 1st June, 2020. -Step 2. +Step 2. The Parser class parses the input and identifies the full command to be a ClearBeforeCommand class, and so +`clearBeforeCommand()` will be called to create a `clearBeforeCommand` object with parameter `2020-06-01`. + +Step 3. After that, the `execute()` function of `clearBeforeCommand` will be called and as a result `EventList#clearBefore(clearDate)` will +also be called, where `2020-06-01` will be passed as the parameter `clearDate`. + +Step 4. The user wants to clear all the extra information of events but does not want to do it manually, hence the user +types in `autoClear` to turn on the autoClear function, which will clear all events happened one month ago automatically. + +Note that the other two clear commands `clear` and `autoClear` do not require any paramater input. + +The sequence diagram below shows the process of clearing events before a certain date. +![ClearBeforeCommand Sequence Diagram](diagrams/ClearBeforeCommand.png)
    +*Figure 4.2.1 Sequence Diagram for clearBefore function* The sequence diagram below shows the process of clearing all events. ![ClearCommand Sequence Diagram](diagrams/ClearCommand.png)
    -*Figure 4.2 Sequence Diagram for clear function* +*Figure 4.2.2 Sequence Diagram for clear function* +The sequence diagram below shows the process of switching on autoClear function. +![AutoClearCommand Sequence Diagram](diagrams/AutoClearCommand.png)
    +*Figure 4.2.3 Sequence Diagram for autoClear function* + ### 4.3 Edit events
    This feature allows users to edit the information of events that was previously added. diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 4f64721d1f..886b630af6 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -168,9 +168,9 @@ Delete events existing in the list, you can choose to delete all, auto delete or * Clear all events Format: `clear` -* Clear events happened one month ago +* Switch the autoClear function on so that events happened one month ago will be automatically cleared Format: `autoClear` - Note that this command will clear all events which happened one month ago no matter they are done or not. + Note that this function will clear all events which happened one month ago no matter they are done or not. * Clear events happened before a certain date Format: `clearBefore CLEAR_DATE` diff --git a/docs/diagrams/HelpCommand.png b/docs/diagrams/HelpCommand.png index 5aab838ef09f81f022e3f7cff275c3166c56014e..35349d4374991c0d827f910781ef851a7cedb923 100644 GIT binary patch literal 18068 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 J7m2>``Cqio^)vtg literal 17849 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 From 3391adcdb31740524842d251c317929464b0c5ee Mon Sep 17 00:00:00 2001 From: jiaaaqi Date: Mon, 9 Nov 2020 17:27:39 +0800 Subject: [PATCH 209/299] added code fragments into user guide --- docs/UserGuide.md | 33 ++++++++++++++++++++++++------- docs/diagrams/locate1.png | Bin 0 -> 53589 bytes docs/diagrams/locate2.png | Bin 0 -> 51936 bytes docs/diagrams/locate3.png | Bin 0 -> 139762 bytes docs/diagrams/locations.png | Bin 0 -> 196207 bytes src/main/java/parser/Parser.java | 2 +- 6 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 docs/diagrams/locate1.png create mode 100644 docs/diagrams/locate2.png create mode 100644 docs/diagrams/locate3.png create mode 100644 docs/diagrams/locations.png diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 4f64721d1f..ee53825297 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -25,8 +25,9 @@ This gives the application both simplicity and speed, setting it apart from othe * [View available commands](#view-available-commands) * [Add an event](#add-an-event) * [Edit an event](#edit-an-event) - * [Sort Events](#sort-events) - * [Find location](#find-a-location) + * [Sort events](#sort-events) + * [Find a location](#find-a-location) + * [List all locations](#list-all-locations) * [List all events](#list-all-events) * [Clear events](#clear-events) * [Mark event as done](#mark-event-as-done) @@ -150,11 +151,29 @@ Sort by location: ![sort4](diagrams/sort4.png) ### Find a location -Shows you the location of the specified event/task. +With this command, you can find out about locations around NUS. Depending on the type of location, different additional +information will be shown together with the location (e.g. nearest building, nearest bus stops). -Format: `locate n/EVENTNAME` +Format: `locate LOCATIONNAME` or `locate EVENTINDEX` -Example: `locate n/CS2113t Tutorial` +Example: `locate lt1` + +Find lecture theatres using location name: +![locate1](diagrams/locate1.png) + +Find buildings using location name: +![locate2](diagrams/locate2.png) + +Find locations using event index: +![locate3](diagrams/locate3.png) + +### List all locations +Displays a list of all locations within NUS + +Format: `locations` + +Expected output: (list given here is incomplete) +![locations](diagrams/locations.png) ### List all events Shows you a list of all events. @@ -203,10 +222,10 @@ the data of your previous AddressBook home folder. |------|-------|-------| |add|`EVENTTYPE EVENTNAME /t DATE TIME` `/e DATE TIME`(optional personal event, compulsory for class, must not have for assignment) `/l LOCATION` OR `/o LINK` `/p PASSWORD`(optional)|`personalEvent Mom’s Birthday /t 2020-10-26 19:00 /l home`| |clear|`clear` OR `autoClear` OR `clearBefore CLEAR_DATE` |`clearBefore 2020-10-22`| +|delete|`delete INDEX`|`delete 1`| |done|`done INDEX` |`done 1` | |edit|`edit`, then fill in each fields when prompted and press `ENTER` to move on to the next field|`edit 1` `ENTER` `class` `ENTER` `cs2113t` `ENTER` `\l school` `ENTER` `2020-10-26 19:00` `ENTER` `2020-10-26 20:00`| |help|`help`|| |list|`list`|| -|locate|`locate n/EVENTNAME` |`locate n/CS2113t Tutorial`| +|locate|`locate LOCATION_NAME` OR `locate EVENT_INDEX`|`locate LT1`| |sort|`sort SORT_CRITERIA` |`sort description`| -|delete|`delete INDEX`|`delete 1`| diff --git a/docs/diagrams/locate1.png b/docs/diagrams/locate1.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1c5c355f9492efb130f5748ea59f0013d63eeb GIT binary patch literal 53589 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 afBZj*JGP>o7K(}h0000_;>yGYB~Y} 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 ccEU5n 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�^DV6IXGwR7i&?pVjz`v@=6Cq6%@wx&%-+? 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