From 7f2ecee0b2d38136c1d3a96dea319bcf441929b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Sep 2023 01:16:09 +0000 Subject: [PATCH] Rebuild pages at fc9395a81349f3dd7574b78f7bbf2ab7a6ac0a75 --- Angelyxx_ip_master/authorship.json | 2 +- Angelyxx_ip_master/commits.json | 2 +- Chen-Kuei_ip_master/authorship.json | 2 +- Chen-Kuei_ip_master/commits.json | 2 +- LuoZYi_ip_master/authorship.json | 2 +- LuoZYi_ip_master/commits.json | 2 +- TyrusLye_ip_master/authorship.json | 2 +- TyrusLye_ip_master/commits.json | 2 +- andytoh1_ip_master/authorship.json | 2 +- andytoh1_ip_master/commits.json | 2 +- archive.zip | Bin 12860863 -> 12865729 bytes reposense-logs/reposense.log.0 | 13694 +++++++++++++------------- ryanongwx_ip_master/authorship.json | 2 +- ryanongwx_ip_master/commits.json | 2 +- summary.json | 2 +- 15 files changed, 6860 insertions(+), 6860 deletions(-) diff --git a/Angelyxx_ip_master/authorship.json b/Angelyxx_ip_master/authorship.json index 433e4ee2..4140a17a 100644 --- a/Angelyxx_ip_master/authorship.json +++ b/Angelyxx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"# Duke","lastModifiedDate":"2023-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"Duke is a friendly chatbot application for task management. You can interact with Duke through the use of a Graphical User Interface (GUI), and keep track of tasks such as your to-dos, deadlines, and events.","lastModifiedDate":"2023-09-21"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"* Setting up in Intellij","lastModifiedDate":"2023-09-21"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"* Features","lastModifiedDate":"2023-09-21"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" * Add a to-do: ```todo```","lastModifiedDate":"2023-09-21"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Add a deadline: ```deadline```","lastModifiedDate":"2023-09-21"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Add an event: ```event```","lastModifiedDate":"2023-09-21"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * List all tasks: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Mark a task as done: ```mark```","lastModifiedDate":"2023-09-21"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" * Unmark a task: ```unmark```","lastModifiedDate":"2023-09-21"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Find a task by keyword: ```find```","lastModifiedDate":"2023-09-21"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" * Delete a specific task: ```delete```","lastModifiedDate":"2023-09-21"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * Exiting the program: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":24,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2021-07-29"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"## Features","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"### Notes about command format","lastModifiedDate":"2023-09-21"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"1. Items in ```UPPER_CASE``` are parameters to be supplied by the user.","lastModifiedDate":"2023-09-21"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" e.g. in ```todo TASK_DESCRIPTION```, ```TASK_DESCRIPTION``` is a parameter which can be used as todo homework.","lastModifiedDate":"2023-09-21"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":"2. Items in square brackets are optional.","lastModifiedDate":"2023-09-21"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by 7/11/2023``` or ```deadline IS1108 Assignment /by 7/11/2023 1500```","lastModifiedDate":"2023-09-21"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"3. All ```DATE``` parameters can be put in multiple formats.","lastModifiedDate":"2023-09-21"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by 2023-09-08```, ```deadline IS1108 Assignment /by 8/9/2023``` or ```deadline IS1108 Assignment /by Mon```","lastModifiedDate":"2023-09-21"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"4. All weekday abbreviations in ```DATE``` parameters refers to the coming weekday","lastModifiedDate":"2023-09-21"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline IS1108 Assignment /by Mon``` refers to next Monday.","lastModifiedDate":"2023-09-21"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"5. All ```[TIME]``` parameters can be put as either in 12-Hour clock format or 24-Hour clock format.","lastModifiedDate":"2023-09-21"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by Mon 11.59pm```, ","lastModifiedDate":"2023-09-21"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" ```deadline IS1108 Assignment /by Mon 2359``` or ```deadline IS1108 Assignment /by Mon 23:59```","lastModifiedDate":"2023-09-21"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"6. Extraneous parameters for commands that do not take in parameters (such as ```list``` and ```clear```) will be ignored.","lastModifiedDate":"2023-09-21"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" e.g. if the command specifies ```list 123```, it will be interpreted as ```list```.","lastModifiedDate":"2023-09-21"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" ","lastModifiedDate":"2023-09-21"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"### Add a to-do: ```todo```","lastModifiedDate":"2023-09-21"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"Adds a to-do task to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"Format: ```todo TASK_DESCRIPTION```","lastModifiedDate":"2023-09-21"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"```todo update README```","lastModifiedDate":"2023-09-21"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":"```todo finish CS2100 Assignment```","lastModifiedDate":"2023-09-21"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"### Add a deadline: ```deadline```","lastModifiedDate":"2023-09-21"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":"Adds a deadline to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"Format: ```deadline TASK_DESCRIPTION /from DATE [TIME]```","lastModifiedDate":"2023-09-21"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"```deadline update README /from Mon 4pm```","lastModifiedDate":"2023-09-21"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":"```deadline return book /by 2/12/2023 1800```","lastModifiedDate":"2023-09-21"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"### Add an event: ```event```","lastModifiedDate":"2023-09-21"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":"Adds an event to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":"Format: ```event TASK_DESCRIPTION /from DATE [TIME] /to DATE [TIME]```","lastModifiedDate":"2023-09-21"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"```event Sleepover /from Thurs /to Fri```","lastModifiedDate":"2023-09-21"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":"```event Orientation Camp /from 8/10/2023 /to 11/10/2023```","lastModifiedDate":"2023-09-21"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"```event ST2334 Finals /from 27/11/2023 1600 /to 27/11/2023 1800```","lastModifiedDate":"2023-09-21"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":"### List all tasks: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":"List all tasks that have been added.","lastModifiedDate":"2023-09-21"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":"Format: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"### Mark a task as done: ```mark```","lastModifiedDate":"2023-09-21"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"Marks a task as done.","lastModifiedDate":"2023-09-21"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":"Format: ```mark INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"* Marks a task as done at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"```mark 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":"### Unmark a task: ```unmark```","lastModifiedDate":"2023-09-21"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"Unmarks a task that has been previously marked as done.","lastModifiedDate":"2023-09-21"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":"Format: ```mark INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":"* unmarks a task at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":"```unmark 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":"### Find a task by keyword: ```find```","lastModifiedDate":"2023-09-21"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":"Finds a task which contains the given keyword.","lastModifiedDate":"2023-09-21"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":"Format: ```find KEYWORD```","lastModifiedDate":"2023-09-21"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":"* Only the task description is searched","lastModifiedDate":"2023-09-21"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":"* Only full words will be matched e.g. meeting will not match meetings","lastModifiedDate":"2023-09-21"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":"```find meeting```","lastModifiedDate":"2023-09-21"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":"\u003cimg width\u003d\"383\" alt\u003d\"find command example\" src\u003d\"https://github.com/Angelyxx/ip/assets/73735276/6b280df6-140d-4b64-aba5-1e33dac4b4be\"\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":"### Delete a specific task: ```delete```","lastModifiedDate":"2023-09-21"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":"Deletes an existing task.","lastModifiedDate":"2023-09-21"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":"Format: ```delete INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":"* Deletes a task at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":"```delete 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":"### Exiting the program: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":"Exits the duke chatbot.","lastModifiedDate":"2023-09-21"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"Format: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"}],"authorContributionMap":{"Angelyxx":95,"-":14}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" mainClass.set(\"duke.main.Duke\") //set to main class","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Angelyxx":17,"-":38}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a base class for different commands for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the command with the given parameters.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":30}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String deadlineBy;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @param deadlineBy The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" public DeadlineCommand(String description, String deadlineBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" this.deadlineBy \u003d deadlineBy;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * Executes the DeadlineCommand by adding a new Deadline task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" Deadline deadline \u003d new Deadline(description, deadlineBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(deadline, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DeleteCommand with the specified task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e 0 : \"Index must be a positive integer.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * Executes the DeleteCommand by removing the task from the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" * displaying a deletion message, and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e 0 : \"Index must be a positive integer.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" Task removedTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" tasks.delete(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" ui.printDeleteMessage(removedTask, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to delete.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":46}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String startDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String endDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs an EventCommand with the given event details.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @param startDateTimeStr The start date and time of the event as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * @param endDateTimeStr The end date and time of the event as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" public EventCommand(String description, String startDateTimeStr, String endDateTimeStr) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" this.startDateTimeStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" this.endDateTimeStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * Executes the EventCommand by adding a new Event task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" Event event \u003d new Event(description, startDateTimeStr, endDateTimeStr);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(event, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to exit the chatBot.","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the ExitCommand by printing an exit message to the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" ui.printExit();","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" * @return True if this an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to find all tasks containing a keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs an FindCommand with the specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param keyword The keyword to search for in the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * Executes the FindCommand by finding all tasks containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.find(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" ui.printTaskList(filteredTasks, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Angelyxx":38}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the ListCommand by printing the list of all tasks to the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" ui.printTaskList(tasks.getAllTasks(), \"Here are your entries:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":23}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the MarkCommand by marking a task as done, displaying a completion message,","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task markTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ui.printMessage(\"Nice! I\u0027ve marked this task as done:\\n\\t\", markTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to mark.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add a \"Todo\" task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a ToDoCommand with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the \"To-Do\" task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public ToDoCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the ToDoCommand by adding a new \"To-Do\" task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(todo, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":41}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to mark a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs an UnMarkCommand with the specified task index.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the UnMarkCommand by marking a task as not done,","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task unmarkTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ui.printMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\\t\", unmarkTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to be unmarked.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * An exception class for representing exceptions to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":16}},{"path":"src/main/java/duke/main/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.Priority;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" // Inside your DialogBox constructor","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" HBox.setHgrow(this, Priority.ALWAYS); // Allow horizontal growth if needed","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" VBox.setVgrow(dialog, Priority.ALWAYS); // Allow vertical growth for the Label","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" private void flip() {","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" db.loadCss(\"/styles/user-dialog-box.css\");","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" db.getStyleClass().add(\"user-dialog-box\");","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" db.flip();","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" db.loadCss(\"/styles/duke-dialog-box.css\");","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" db.getStyleClass().add(\"duke-dialog-box\");","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" private void loadCss(String cssFilePath) {","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" if (cssFilePath !\u003d null \u0026\u0026 !cssFilePath.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" this.getStylesheets().add(getClass().getResource(cssFilePath).toExternalForm());","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" System.out.println(\"CSS Stylesheet not found.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":79}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" * The main class that initializes and runs the Duke Chat Bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Duke instance with the specified data file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" Duke() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" storage \u003d new Storage(DATA_FILE_PATH);","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" if (isExit) {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" return \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/main/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":12}},{"path":"src/main/java/duke/main/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-21"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-21"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":31}},{"path":"src/main/java/duke/main/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Duke.png\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * Initialises the GUI for Duke.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" showGreetingMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" private void showGreetingMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getDukeDialog(\"Welcome to Duke! What can I do for you today?\", dukeImage)","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":62}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Handles the parsing of user input commands to create corresponding Command objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * Parses the user input to create a corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param userInput The user\u0027s input as a String.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @return A Command object representing the parsed user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" if (userInput.startsWith(\"bye\") || userInput.startsWith(\"exit\")) {","lastModifiedDate":"2023-09-21"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"list\")) {","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(5));","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(7));","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" String toDoDescription \u003d validateToDo(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" return new ToDoCommand(toDoDescription);","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" String[] info \u003d validateDeadline(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" return new DeadlineCommand(info[0], info[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" String[] info \u003d validateEvent(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return new EventCommand(info[0], info[1], info[2]);","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(7));","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" String keyword \u003d validateFind(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts the task index from the user input for mark and delete commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input containing the task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" * @return The validated task index as an integer.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the task index is not valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" private static int validateMarkAndDelete(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" if (input.isEmpty() || !isNumeric(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! The index cannot be blank or not an integer.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" return Integer.parseInt(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" private static String validateFind(String input) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"find\".length();","lastModifiedDate":"2023-09-21"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" String keyWord \u003d input.trim().substring(commandLength).trim();","lastModifiedDate":"2023-09-21"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" if (keyWord.isEmpty()) {","lastModifiedDate":"2023-09-21"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please enter a keyword to find.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" return keyWord;","lastModifiedDate":"2023-09-21"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" * Checks if a given String can be converted to an integer.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" * @param str The String to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" * @return True if the String can be converted to an integer, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" private static boolean isNumeric(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" if (str \u003d\u003d null || str.equals(\"\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" Integer.parseInt(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" * Validates a toDo description to ensure it is not empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" * @param input The toDo description to be validated.","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the toDo description is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" private static String validateToDo(String input) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"todo\".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":" String description \u003d input.trim().substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Angelyxx"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"Angelyxx"},"content":" return description;","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts information from user input for creating a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input for creating a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Angelyxx"},"content":" * @return A String array containing the task description and deadline information.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the input format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Angelyxx"},"content":" private static String[] validateDeadline(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Angelyxx"},"content":" // Split the input string into words","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Angelyxx"},"content":" String[] splitInput \u003d input.split(\" /by \");","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Angelyxx"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"Angelyxx"},"content":" \"☹ OOPS!!! Invalid deadline format. Please use: deadline \u003cdescription\u003e /by \u003cdate and time\u003e\");","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"deadline\".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Angelyxx"},"content":" String description \u003d splitInput[0].substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"Angelyxx"},"content":" String dateTime \u003d splitInput[1].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"Angelyxx"},"content":" if (dateTime.isEmpty() || description.isBlank()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Deadline description or date and time cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"Angelyxx"},"content":" return new String[] { description, dateTime };","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts information from user input for creating an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input for creating an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Angelyxx"},"content":" * @return An array containing the event description and timing information.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the input format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Angelyxx"},"content":" private static String[] validateEvent(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Angelyxx"},"content":" String[] splitInput \u003d input.split(\" /from | /to \");","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Angelyxx"},"content":" if (splitInput.length !\u003d 3) {","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"Angelyxx"},"content":" \"Invalid event format. Please use: event [description] /from [start date/time] /to [end date/time]\");","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"event \".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"Angelyxx"},"content":" String description \u003d splitInput[0].substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"Angelyxx"},"content":" String startDateAndTime \u003d splitInput[1].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"Angelyxx"},"content":" String endDateAndTime \u003d splitInput[2].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Angelyxx"},"content":" if (description.isBlank() || startDateAndTime.isBlank() || endDateAndTime.isBlank()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Description and date/time cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"Angelyxx"},"content":" String[] eventInfo \u003d new String[3];","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"Angelyxx"},"content":" eventInfo[0] \u003d description;","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"Angelyxx"},"content":" eventInfo[1] \u003d startDateAndTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"Angelyxx"},"content":" eventInfo[2] \u003d endDateAndTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Angelyxx"},"content":" return eventInfo;","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":174}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Handles the loading and saving of tasks to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" private String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param filePath The file path where task data will be stored and loaded from.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Loads tasks from the data file and returns them as a list.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there is an error during the loading process.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" String data \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" String[] taskData \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" Task task;","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" //taskData[0] \u003d task type","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" //taskData[1] \u003d Done status","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" //taskData[2] \u003d description","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" boolean isDone \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" case \"T\":","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" task \u003d new ToDo(taskData[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" case \"D\":","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" task \u003d new Deadline(taskData[2], taskData[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" case \"E\":","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" String[] eventData \u003d taskData[3].split(\" to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" task \u003d new Event(taskData[2], eventData[0], eventData[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" System.out.println(\"error: unknown task type found in file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" continue; // Skip to the next line","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" // Set done status","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" task.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" task.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Error loading file: IOException occurred.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" * Saves tasks to the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The TaskList containing the tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there is an error during the saving process.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" public void saveTasksToFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" for (Task task: tasks.getAllTasks()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" fileWriter.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Error saving file: IOException occurred.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":107}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a list of tasks and provides methods for managing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * Constructs a TaskList with an existing list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param tasks An ArrayList of tasks to populate the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * Retrieves all tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @return An ArrayList containing all tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" * Retrieves a task at a specific index in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"Invalid index\";","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" * Retrieves the total number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" * @return The total number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" public void markDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" public void markNotDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" * Returns list of task containing a keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" * @param keyword Keyword to find in the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" filteredTasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" return filteredTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":109}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Handles interactions with the user interface, displaying messages","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * and receiving user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" output \u003d new StringBuilder();","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" void resetOutput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" String getOutput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" return output.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private void addToOutput(String str) {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" output.append(str);","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" * Displays a completion message after adding a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" * @param size The total number of tasks after adding the new task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" public void displayCompletionMessage(Task task , int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\tGot it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\\t\\t\" + task);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\\tNow you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * Displays a message along with a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" * @param task The task to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" public void printMessage(String message, Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\t\" + message + task.toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" * Displays the exit message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" public void printExit() {","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" public void printTaskList(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\" + (i + 1) + \". \" + tasks.get(i).toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" * Displays a message after removing a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" * @param removedTask The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" * @param size The total number of tasks after removing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" public void printDeleteMessage(Task removedTask, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"Noted. I\u0027ve removed this task:\\n\\t\" + removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\nNow you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":91}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.util.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private String deadlineBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Deadline object with the task description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param deadlineBy Deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public Deadline(String description, String deadlineBy) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" this.deadlineDate \u003d DateParser.parseDate(deadlineBy);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" this.deadlineDateTime \u003d DateParser.parseDateTime(deadlineBy);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" this.deadlineBy \u003d deadlineBy;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of deadline object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the deadline object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + this.description + \" | \" + this.deadlineBy;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" * The string representation of deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" if (deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" String formattedDate \u003d deadlineDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), formattedDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" } else if (deadlineDate !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), formattedDate);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadlineBy);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Angelyxx":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.util.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a starting and ending date.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private String startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * Constructs an Event object with the task description,","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * starting date (and time) of event and ending date (and time) of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @param startDateTimeStr Start date (and time) of the event","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param endDateTimeStr End date (and time) of the event","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public Event(String description, String startDateTimeStr, String endDateTimeStr) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" this.startDate \u003d DateParser.parseDate(startDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" this.endDate \u003d DateParser.parseDate(endDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" this.startDateTime \u003d DateParser.parseDateTime(startDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" this.endDateTime \u003d DateParser.parseDateTime(endDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" this.startDateTimeStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" this.endDateTimeStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of event object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the event object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" + this.startDateTimeStr + \" to \" + this.endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" * The string representation of event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" String startStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" String endStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" if (startDateTime !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" startStr \u003d startDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" } else if (startDate !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" startStr \u003d startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" if (endDateTime !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" endStr \u003d endDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" } else if (endDate !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" endStr \u003d endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[E]%s (from: %s to %s)\", super.toString(), startStr, endStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":76}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * Represents a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" protected String description;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Task object with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" assert description !\u003d null : \"Description cannot be null\";","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * Returns an X icon based on whether a task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @return \"X\" if a task is done, \" \" otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Returns a description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @return Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" return description;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" * Returns whether a task has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @return True is task is done, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" public void markDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of the Task object to write to the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the Task object to be written to the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"T\"; // Default type for base Task","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":79}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Constructs a ToDo object with the task description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of the ToDo object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the ToDo object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * The string representation of ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":37}},{"path":"src/main/java/duke/util/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.util;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Class to parse strings to either LocalDate or LocalDateTime Format","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"public class DateParser {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e dateFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e dateTimeFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e timeFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" private static final LocalDate today \u003d LocalDate.now();","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" // Initialize date and date-time formatters","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" static {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * Parses a String to a LocalDate object.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" * @param date String representation of a potential date.","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDate object if the string can be parsed, null otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : dateFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" return LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" //returns null if it fails","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" return parseNaturalDate(date);","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" * Parses a String to a LocalDateTime object.","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" * @param dateTime String representation of a potential date and time.","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDateTime object if the string can be parsed, null otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" public static LocalDateTime parseDateTime(String dateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : dateTimeFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" return LocalDateTime.parse(dateTime.toUpperCase(), formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" //returns null if it fails","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" return parseNaturalDateTime(dateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : timeFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" return LocalTime.parse(time, formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" // Ignore parsing errors and continue with the next formatter","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" return null; // Parsing failed with all formatters","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" * Parses a String as a natural language date, e.g., \"Mon\" for the next Monday.","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" * @param input String representation of a natural language date.","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDate object representing the parsed date or null if parsing fails.","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" private static LocalDate parseNaturalDate(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" Pattern todayPattern \u003d Pattern.compile(\"\\\\b(today)\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" Pattern tomorrowPattern \u003d Pattern.compile(\"\\\\b(tomorrow)\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" Pattern dayOfWeekPattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" \"(\\\\bMon|Tue(s)?|Wed(s)|Wed(nes)?|Thu(rs)?|Fri|Sat(ur)?|Sun)(day)?\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" Matcher todayMatcher \u003d todayPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":" if (todayMatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":" return today;","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"Angelyxx"},"content":" Matcher tomorrowMatcher \u003d tomorrowPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"Angelyxx"},"content":" if (tomorrowMatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"Angelyxx"},"content":" return today.plusDays(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"Angelyxx"},"content":" Matcher dayOfWeekmatcher \u003d dayOfWeekPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"Angelyxx"},"content":" if (dayOfWeekmatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"Angelyxx"},"content":" //get instance that matches pattern","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"Angelyxx"},"content":" String dayOfWeekStr \u003d dayOfWeekmatcher.group(1).toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"Angelyxx"},"content":" DayOfWeek dayOfWeek \u003d getDayOfWeekFromAbbreviation(dayOfWeekStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"Angelyxx"},"content":" int daysUntilNext \u003d calculateNoOfDays(dayOfWeek);","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"Angelyxx"},"content":" return today.plusDays(daysUntilNext);","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Angelyxx"},"content":" return null; // Return null if no natural language date match is found","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"Angelyxx"},"content":" * Parses a String as a natural language date and time, e.g., \"Mon 4pm\".","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"Angelyxx"},"content":" * @param input String representation of a natural language date and time.","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDateTime object representing the parsed date and time or null if parsing fails.","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"Angelyxx"},"content":" public static LocalDateTime parseNaturalDateTime(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"Angelyxx"},"content":" // Extract day of the week and time using regex","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"Angelyxx"},"content":" Pattern pattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"Angelyxx"},"content":" \"\\\\b(Today|Tomorrow|Mon|Tue(s)?|Wed(s)|Wed(nes)?|Thu(rs)?|Fri|Sat(ur)?|Sun)(day)?\\\\s+\\\\b\",","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"Angelyxx"},"content":" Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"Angelyxx"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"Angelyxx"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"Angelyxx"},"content":" String naturalDateStr \u003d matcher.group(0).toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"Angelyxx"},"content":" int dayOfWeekStrLength \u003d naturalDateStr.length();","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"Angelyxx"},"content":" String potentialTimeStr \u003d input.substring(dayOfWeekStrLength).trim().toUpperCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"Angelyxx"},"content":" LocalDate date \u003d parseNaturalDate(naturalDateStr.trim());","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"Angelyxx"},"content":" LocalTime time \u003d parseTime(potentialTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"Angelyxx"},"content":" if (date !\u003d null \u0026\u0026 time !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"Angelyxx"},"content":" LocalDateTime dateTime \u003d date.atTime(time);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"Angelyxx"},"content":" return dateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"Angelyxx"},"content":" return null;","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"Angelyxx"},"content":" private static DayOfWeek getDayOfWeekFromAbbreviation(String abbreviation) {","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"Angelyxx"},"content":" //Map to store the mappings from abbreviations to DayOfWeek enum constants","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"Angelyxx"},"content":" Map\u003cString, DayOfWeek\u003e abbreviationMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"mon\", DayOfWeek.MONDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"tue\", DayOfWeek.TUESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"tues\", DayOfWeek.TUESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"wed\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"weds\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"wednes\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thu\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thur\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thurs\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"fri\", DayOfWeek.FRIDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"sat\", DayOfWeek.SATURDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"satur\", DayOfWeek.SATURDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"sun\", DayOfWeek.SUNDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"Angelyxx"},"content":" return abbreviationMap.get(abbreviation.toLowerCase());","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"Angelyxx"},"content":" private static int calculateNoOfDays(DayOfWeek dayOfWeek) {","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"Angelyxx"},"content":" int daysUntilNext \u003d dayOfWeek.getValue() - today.getDayOfWeek().getValue();","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"Angelyxx"},"content":" if (daysUntilNext \u003c\u003d 0) { //check if weekday has passed","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"Angelyxx"},"content":" daysUntilNext +\u003d 7; // Move to the next week","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"Angelyxx"},"content":" return daysUntilNext;","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":182}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Angelyxx":7}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" styleClass\u003d\"unique\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.main.MainWindow\" style\u003d\"-fx-background-color: #ffffff;\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" promptText\u003d\"Type a message\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" \u003cfx:define\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" \u003cImage fx:id\u003d\"btnImage\" url\u003d\"@/images/SendButton.png\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" \u003c/fx:define\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" \u003cButton fx:id\u003d\"sendButton\" opacity\u003d\"0.5\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" \u003cgraphic\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" \u003cImageView image \u003d\"$btnImage\" fitHeight\u003d\"33.0\" fitWidth\u003d\"33.0\" layoutX\u003d\"362.0\" layoutY\u003d\"562.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" \u003c/graphic\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" vbarPolicy\u003d\"AS_NEEDED\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":29}},{"path":"src/test/java/duke/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void parseByeCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" public void parseListCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" public void parseToDoCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"todo Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" public void parseDeadlineCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"deadline Submit report /by 2023-09-15\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public void parseEventCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"event Party /from 2023-09-20 1400 /to 2023-09-20 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" public void parseMarkCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" public void parseUnmarkCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"unmark 3\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" public void parseDeleteCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"delete 4\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" public void parseInvalidCommandTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"invalid command\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":71}},{"path":"src/test/java/duke/main/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" public void loadTasksFromFileTest() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" // Prepare a temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" File tempFile \u003d File.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" String tempFilePath \u003d tempFile.getAbsolutePath();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" // Create a sample task list","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e expectedTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new ToDo(\"Sample ToDo Task\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new Deadline(\"Sample Deadline Task\", \"31/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" // Save the sample task list to the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" TaskList taskListToSave \u003d new TaskList(expectedTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(taskListToSave);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" // Load tasks from the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e loadedTaskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" // Clean up the temporary file","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" tempFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" // Verify the loaded task list matches the expected task list","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.size(), loadedTaskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c expectedTaskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.get(i).getDescription(), loadedTaskList.get(i).getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.get(i).isDone(), loadedTaskList.get(i).isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" public void saveTasksToFileTest() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" // Prepare a temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" File tempFile \u003d File.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" String tempFilePath \u003d tempFile.getAbsolutePath();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" // Create a sample task list","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e taskListToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new ToDo(\"Sample ToDo Task\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new Deadline(\"Sample Deadline Task\", \"31/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" // Save the sample task list to the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(new TaskList(taskListToSave));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" // Load tasks from the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e loadedTaskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" // Clean up the temporary file","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" tempFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" // Verify the loaded task list matches the originally saved task list","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.size(), loadedTaskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c taskListToSave.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.get(i).getDescription(), loadedTaskList.get(i).getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.get(i).isDone(), loadedTaskList.get(i).isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":81}},{"path":"src/test/java/duke/main/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" public void addTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" //create tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" Task toDo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" Task deadline \u003d new Deadline(\"Sample Deadline Task\", \"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" Task event \u003d new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" taskList.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" assertEquals(3, taskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" assertEquals(toDo, taskList.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" assertEquals(deadline, taskList.get(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" assertEquals(event, taskList.get(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void deleteTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task task1 \u003d new ToDo(\"Complete assignment\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" Task task2 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" taskList.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" assertEquals(task2, taskList.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" public void markTaskDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" Task task \u003d new ToDo(\"Go for a run\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" taskList.markDone(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" public void unmarkTaskNotDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" Task task \u003d new ToDo(\"Write code\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" task.markDone(); // Mark the task as done initially","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" taskList.markNotDone(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":63}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"# Duke","lastModifiedDate":"2023-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"Duke is a friendly chatbot application for task management. You can interact with Duke through the use of a Graphical User Interface (GUI), and keep track of tasks such as your to-dos, deadlines, and events.","lastModifiedDate":"2023-09-21"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"* Setting up in Intellij","lastModifiedDate":"2023-09-21"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"* Features","lastModifiedDate":"2023-09-21"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" * Add a to-do: ```todo```","lastModifiedDate":"2023-09-21"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Add a deadline: ```deadline```","lastModifiedDate":"2023-09-21"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Add an event: ```event```","lastModifiedDate":"2023-09-21"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * List all tasks: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Mark a task as done: ```mark```","lastModifiedDate":"2023-09-21"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" * Unmark a task: ```unmark```","lastModifiedDate":"2023-09-21"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Find a task by keyword: ```find```","lastModifiedDate":"2023-09-21"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" * Delete a specific task: ```delete```","lastModifiedDate":"2023-09-21"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * Exiting the program: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":24,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":27,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2021-07-29"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"## Features","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"### Notes about command format","lastModifiedDate":"2023-09-21"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"1. Items in ```UPPER_CASE``` are parameters to be supplied by the user.","lastModifiedDate":"2023-09-21"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" e.g. in ```todo TASK_DESCRIPTION```, ```TASK_DESCRIPTION``` is a parameter which can be used as todo homework.","lastModifiedDate":"2023-09-21"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":"2. Items in square brackets are optional.","lastModifiedDate":"2023-09-21"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by 7/11/2023``` or ```deadline IS1108 Assignment /by 7/11/2023 1500```","lastModifiedDate":"2023-09-21"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"3. All ```DATE``` parameters can be put in multiple formats.","lastModifiedDate":"2023-09-21"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by 2023-09-08```, ```deadline IS1108 Assignment /by 8/9/2023``` or ```deadline IS1108 Assignment /by Mon```","lastModifiedDate":"2023-09-21"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"4. All weekday abbreviations in ```DATE``` parameters refers to the coming weekday","lastModifiedDate":"2023-09-21"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline IS1108 Assignment /by Mon``` refers to next Monday.","lastModifiedDate":"2023-09-21"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"5. All ```[TIME]``` parameters can be put as either in 12-Hour clock format or 24-Hour clock format.","lastModifiedDate":"2023-09-21"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" e.g. ```deadline TASK_DESCRIPTION /by DATE [TIME]``` can be used as ```deadline IS1108 Assignment /by Mon 11.59pm```, ","lastModifiedDate":"2023-09-21"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" ```deadline IS1108 Assignment /by Mon 2359``` or ```deadline IS1108 Assignment /by Mon 23:59```","lastModifiedDate":"2023-09-21"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"6. Extraneous parameters for commands that do not take in parameters (such as ```list``` and ```clear```) will be ignored.","lastModifiedDate":"2023-09-21"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" e.g. if the command specifies ```list 123```, it will be interpreted as ```list```.","lastModifiedDate":"2023-09-21"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" ","lastModifiedDate":"2023-09-21"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"### Add a to-do: ```todo```","lastModifiedDate":"2023-09-21"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"Adds a to-do task to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"Format: ```todo TASK_DESCRIPTION```","lastModifiedDate":"2023-09-21"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"```todo update README```","lastModifiedDate":"2023-09-21"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":"```todo finish CS2100 Assignment```","lastModifiedDate":"2023-09-21"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"### Add a deadline: ```deadline```","lastModifiedDate":"2023-09-21"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":"Adds a deadline to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"Format: ```deadline TASK_DESCRIPTION /from DATE [TIME]```","lastModifiedDate":"2023-09-21"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"```deadline update README /from Mon 4pm```","lastModifiedDate":"2023-09-21"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":"```deadline return book /by 2/12/2023 1800```","lastModifiedDate":"2023-09-21"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"### Add an event: ```event```","lastModifiedDate":"2023-09-21"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":"Adds an event to your task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":"Format: ```event TASK_DESCRIPTION /from DATE [TIME] /to DATE [TIME]```","lastModifiedDate":"2023-09-21"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"```event Sleepover /from Thurs /to Fri```","lastModifiedDate":"2023-09-21"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":"```event Orientation Camp /from 8/10/2023 /to 11/10/2023```","lastModifiedDate":"2023-09-21"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"```event ST2334 Finals /from 27/11/2023 1600 /to 27/11/2023 1800```","lastModifiedDate":"2023-09-21"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":"### List all tasks: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":"List all tasks that have been added.","lastModifiedDate":"2023-09-21"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":"Format: ```list```","lastModifiedDate":"2023-09-21"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"### Mark a task as done: ```mark```","lastModifiedDate":"2023-09-21"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"Marks a task as done.","lastModifiedDate":"2023-09-21"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":"Format: ```mark INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"* Marks a task as done at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"```mark 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":"### Unmark a task: ```unmark```","lastModifiedDate":"2023-09-21"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"Unmarks a task that has been previously marked as done.","lastModifiedDate":"2023-09-21"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":"Format: ```mark INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":"* unmarks a task at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":"```unmark 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":"### Find a task by keyword: ```find```","lastModifiedDate":"2023-09-21"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":"Finds a task which contains the given keyword.","lastModifiedDate":"2023-09-21"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":"Format: ```find KEYWORD```","lastModifiedDate":"2023-09-21"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":"* Only the task description is searched","lastModifiedDate":"2023-09-21"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":"* Only full words will be matched e.g. meeting will not match meetings","lastModifiedDate":"2023-09-21"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":"```find meeting```","lastModifiedDate":"2023-09-21"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":"\u003cimg width\u003d\"383\" alt\u003d\"find command example\" src\u003d\"https://github.com/Angelyxx/ip/assets/73735276/6b280df6-140d-4b64-aba5-1e33dac4b4be\"\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":"### Delete a specific task: ```delete```","lastModifiedDate":"2023-09-21"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":"Deletes an existing task.","lastModifiedDate":"2023-09-21"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":"Format: ```delete INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":"* Deletes a task at the specified ```INDEX```","lastModifiedDate":"2023-09-21"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":"* The index refers to index number shown in the displayed task list.","lastModifiedDate":"2023-09-21"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":"Examples:","lastModifiedDate":"2023-09-21"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":"```delete 3```","lastModifiedDate":"2023-09-21"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-21"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":"### Exiting the program: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":"Exits the duke chatbot.","lastModifiedDate":"2023-09-21"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"Format: ```exit``` or ```bye```","lastModifiedDate":"2023-09-21"}],"authorContributionMap":{"Angelyxx":95,"-":14}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" mainClass.set(\"duke.main.Launcher\") //set to main class","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" archiveFileName \u003d \"duke.jar\"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Angelyxx":17,"-":38}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a base class for different commands for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the command with the given parameters.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @return True if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":30}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String deadlineBy;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DeadlineCommand with the given description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @param deadlineBy The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" public DeadlineCommand(String description, String deadlineBy) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" this.deadlineBy \u003d deadlineBy;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * Executes the DeadlineCommand by adding a new Deadline task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" Deadline deadline \u003d new Deadline(description, deadlineBy);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(deadline, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to be deleted","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DeleteCommand with the specified task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e 0 : \"Index must be a positive integer.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * Executes the DeleteCommand by removing the task from the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" * displaying a deletion message, and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e 0 : \"Index must be a positive integer.\";","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" Task removedTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" tasks.delete(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" ui.printDeleteMessage(removedTask, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to delete.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":46}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String startDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String endDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs an EventCommand with the given event details.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @param startDateTimeStr The start date and time of the event as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * @param endDateTimeStr The end date and time of the event as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" public EventCommand(String description, String startDateTimeStr, String endDateTimeStr) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" this.startDateTimeStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" this.endDateTimeStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * Executes the EventCommand by adding a new Event task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" Event event \u003d new Event(description, startDateTimeStr, endDateTimeStr);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(event, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":46}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to exit the chatBot.","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the ExitCommand by printing an exit message to the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" ui.printExit();","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Checks if the command is an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" * @return True if this an exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to find all tasks containing a keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Constructs an FindCommand with the specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" * @param keyword The keyword to search for in the list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * Executes the FindCommand by finding all tasks containing the keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d tasks.find(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" ui.printTaskList(filteredTasks, \"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Angelyxx":38}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * Executes the ListCommand by printing the list of all tasks to the user interface.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" ui.printTaskList(tasks.getAllTasks(), \"Here are your entries:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":23}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to mark a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a MarkCommand with the specified task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the MarkCommand by marking a task as done, displaying a completion message,","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task markTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" tasks.markDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ui.printMessage(\"Nice! I\u0027ve marked this task as done:\\n\\t\", markTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to mark.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/command/ToDoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to add a \"Todo\" task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class ToDoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a ToDoCommand with the given description.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param description The description of the \"To-Do\" task.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public ToDoCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the ToDoCommand by adding a new \"To-Do\" task to the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the tasks to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there\u0027s an error during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" ui.displayCompletionMessage(todo, tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":41}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.command;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.main.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.main.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" * Represents a command to mark a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private int index; //index of task to mark","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs an UnMarkCommand with the specified task index.","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" this.index \u003d index - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * Executes the UnMarkCommand by marking a task as not done,","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" * displaying a completion message, and saving the updated task list to storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to operate on.","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * @param storage The storage for saving tasks to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the provided task index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task unmarkTask \u003d tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" tasks.markNotDone(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ui.printMessage(\"OK, I\u0027ve marked this task as not done yet:\\n\\t\", unmarkTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please provide a valid task index to be unmarked.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * An exception class for representing exceptions to the Duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Constructs a DukeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * @param message The error message associated with the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" super(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":16}},{"path":"src/main/java/duke/main/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.Priority;","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private Label dialog;","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" // Inside your DialogBox constructor","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" HBox.setHgrow(this, Priority.ALWAYS); // Allow horizontal growth if needed","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" VBox.setVgrow(dialog, Priority.ALWAYS); // Allow vertical growth for the Label","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" private void flip() {","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" db.loadCss(\"/styles/user-dialog-box.css\");","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" db.getStyleClass().add(\"user-dialog-box\");","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" db.flip();","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" db.loadCss(\"/styles/duke-dialog-box.css\");","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" db.getStyleClass().add(\"duke-dialog-box\");","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" return db;","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" private void loadCss(String cssFilePath) {","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" if (cssFilePath !\u003d null \u0026\u0026 !cssFilePath.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" this.getStylesheets().add(getClass().getResource(cssFilePath).toExternalForm());","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" System.out.println(\"CSS Stylesheet not found.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":79}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" * The main class that initializes and runs the Duke Chat Bot.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" private static final String DATA_FILE_PATH \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private boolean isExit \u003d false;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Duke instance with the specified data file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" Duke() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" storage \u003d new Storage(DATA_FILE_PATH);","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" tasks \u003d new TaskList(storage.loadTasksFromFile());","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" String getResponse(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" if (isExit) {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" return \"\";","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" ui.resetOutput();","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" Command c \u003d Parser.parse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" return ui.getOutput();","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" return e.getMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":44}},{"path":"src/main/java/duke/main/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"public class Launcher {","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":12}},{"path":"src/main/java/duke/main/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * A GUI for Duke.","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-21"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-21"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" stage.show();","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":31}},{"path":"src/main/java/duke/main/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" private Duke duke;","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.png\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/Duke.png\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * Initialises the GUI for Duke.","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" public void initialize() {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" showGreetingMessage();","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" userInput.clear();","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" @FXML","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" private void showGreetingMessage() {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" DialogBox.getDukeDialog(\"Welcome to Duke! What can I do for you today?\", dukeImage)","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" );","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":62}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" * Handles the parsing of user input commands to create corresponding Command objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * Parses the user input to create a corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param userInput The user\u0027s input as a String.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @return A Command object representing the parsed user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the user input is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" static Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" if (userInput.startsWith(\"bye\") || userInput.startsWith(\"exit\")) {","lastModifiedDate":"2023-09-21"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"list\")) {","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(5));","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(7));","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" String toDoDescription \u003d validateToDo(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" return new ToDoCommand(toDoDescription);","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" String[] info \u003d validateDeadline(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" return new DeadlineCommand(info[0], info[1]);","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"event\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" String[] info \u003d validateEvent(userInput);","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return new EventCommand(info[0], info[1], info[2]);","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" int taskIndex \u003d validateMarkAndDelete(userInput.substring(7));","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" } else if (userInput.startsWith(\"find\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" String keyword \u003d validateFind(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts the task index from the user input for mark and delete commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input containing the task index.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" * @return The validated task index as an integer.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the task index is not valid.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" private static int validateMarkAndDelete(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" if (input.isEmpty() || !isNumeric(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! The index cannot be blank or not an integer.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" return Integer.parseInt(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" private static String validateFind(String input) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"find\".length();","lastModifiedDate":"2023-09-21"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" String keyWord \u003d input.trim().substring(commandLength).trim();","lastModifiedDate":"2023-09-21"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" if (keyWord.isEmpty()) {","lastModifiedDate":"2023-09-21"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Please enter a keyword to find.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" return keyWord;","lastModifiedDate":"2023-09-21"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" * Checks if a given String can be converted to an integer.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" * @param str The String to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" * @return True if the String can be converted to an integer, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" private static boolean isNumeric(String str) {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" if (str \u003d\u003d null || str.equals(\"\")) {","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" Integer.parseInt(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" * Validates a toDo description to ensure it is not empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" * @param input The toDo description to be validated.","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the toDo description is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" private static String validateToDo(String input) throws DukeException {","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"todo\".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":" String description \u003d input.trim().substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Angelyxx"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"Angelyxx"},"content":" return description;","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts information from user input for creating a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input for creating a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Angelyxx"},"content":" * @return A String array containing the task description and deadline information.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the input format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Angelyxx"},"content":" private static String[] validateDeadline(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"Angelyxx"},"content":" // Split the input string into words","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Angelyxx"},"content":" String[] splitInput \u003d input.split(\" /by \");","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Angelyxx"},"content":" if (splitInput.length !\u003d 2) {","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"Angelyxx"},"content":" \"☹ OOPS!!! Invalid deadline format. Please use: deadline \u003cdescription\u003e /by \u003cdate and time\u003e\");","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"deadline\".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Angelyxx"},"content":" String description \u003d splitInput[0].substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"Angelyxx"},"content":" String dateTime \u003d splitInput[1].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"Angelyxx"},"content":" if (dateTime.isEmpty() || description.isBlank()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"☹ OOPS!!! Deadline description or date and time cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"Angelyxx"},"content":" return new String[] { description, dateTime };","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Angelyxx"},"content":" * Validates and extracts information from user input for creating an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Angelyxx"},"content":" * @param input The user input for creating an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Angelyxx"},"content":" * @return An array containing the event description and timing information.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If the input format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"Angelyxx"},"content":" private static String[] validateEvent(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"Angelyxx"},"content":" String[] splitInput \u003d input.split(\" /from | /to \");","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"Angelyxx"},"content":" if (splitInput.length !\u003d 3) {","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"Angelyxx"},"content":" \"Invalid event format. Please use: event [description] /from [start date/time] /to [end date/time]\");","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Angelyxx"},"content":" int commandLength \u003d \"event \".length(); //get length of string to remove","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"Angelyxx"},"content":" String description \u003d splitInput[0].substring(commandLength).trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"Angelyxx"},"content":" String startDateAndTime \u003d splitInput[1].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"Angelyxx"},"content":" String endDateAndTime \u003d splitInput[2].trim();","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"Angelyxx"},"content":" if (description.isBlank() || startDateAndTime.isBlank() || endDateAndTime.isBlank()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Description and date/time cannot be empty.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"Angelyxx"},"content":" String[] eventInfo \u003d new String[3];","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"Angelyxx"},"content":" eventInfo[0] \u003d description;","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"Angelyxx"},"content":" eventInfo[1] \u003d startDateAndTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"Angelyxx"},"content":" eventInfo[2] \u003d endDateAndTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Angelyxx"},"content":" return eventInfo;","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":174}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Handles the loading and saving of tasks to a data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" private String filePath;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param filePath The file path where task data will be stored and loaded from.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" Storage(String filePath) {","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Loads tasks from the data file and returns them as a list.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @return An ArrayList containing the loaded tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there is an error during the loading process.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e loadTasksFromFile() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" String data \u003d scanner.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" String[] taskData \u003d data.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" Task task;","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" //taskData[0] \u003d task type","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" //taskData[1] \u003d Done status","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" //taskData[2] \u003d description","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" boolean isDone \u003d taskData[1].equals(\"1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" switch (taskData[0]) {","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" case \"T\":","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" task \u003d new ToDo(taskData[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" case \"D\":","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" task \u003d new Deadline(taskData[2], taskData[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" case \"E\":","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" String[] eventData \u003d taskData[3].split(\" to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" task \u003d new Event(taskData[2], eventData[0], eventData[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" break;","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" default:","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" System.out.println(\"error: unknown task type found in file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" continue; // Skip to the next line","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" // Set done status","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" if (isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" task.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" task.markNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Error loading file: IOException occurred.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" * Saves tasks to the data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The TaskList containing the tasks to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" * @throws DukeException If there is an error during the saving process.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" public void saveTasksToFile(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" for (Task task: tasks.getAllTasks()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" fileWriter.write(task.toFileString() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" throw new DukeException(\"Error saving file: IOException occurred.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":107}},{"path":"src/main/java/duke/main/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Represents a list of tasks and provides methods for managing tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" TaskList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * Constructs a TaskList with an existing list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param tasks An ArrayList of tasks to populate the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" * Retrieves all tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" * @return An ArrayList containing all tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" return tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" * Retrieves a task at a specific index in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to retrieve.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public Task get(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" assert index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size() : \"Invalid index\";","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" public void delete(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" * Retrieves the total number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" * @return The total number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" public int size() {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" return tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" public void markDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" * @param index The index of the task to be marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" public void markNotDone(int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":" * Returns list of task containing a keyword","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" * @param keyword Keyword to find in the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" public ArrayList\u003cTask\u003e find(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e filteredTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" filteredTasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" return filteredTasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":109}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" * Handles interactions with the user interface, displaying messages","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * and receiving user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private StringBuilder output;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" Ui() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" output \u003d new StringBuilder();","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" void resetOutput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" output.setLength(0);","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" String getOutput() {","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" return output.toString();","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" private void addToOutput(String str) {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" output.append(str);","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" * Displays a completion message after adding a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @param task The task that was added.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" * @param size The total number of tasks after adding the new task.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" public void displayCompletionMessage(Task task , int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\tGot it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\\t\\t\" + task);","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\\tNow you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * Displays a message along with a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" * @param task The task to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" public void printMessage(String message, Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\t\" + message + task.toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" * Displays the exit message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" public void printExit() {","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" * Displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" * @param tasks The list of tasks to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" public void printTaskList(ArrayList\u003cTask\u003e tasks, String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" addToOutput(message);","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\n\" + (i + 1) + \". \" + tasks.get(i).toString());","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" * Displays a message after removing a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" * @param removedTask The task that was removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":" * @param size The total number of tasks after removing the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" public void printDeleteMessage(Task removedTask, int size) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"Noted. I\u0027ve removed this task:\\n\\t\" + removedTask);","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" addToOutput(\"\\nNow you have \" + size + \" tasks in the list.\");","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":91}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.util.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private String deadlineBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime deadlineDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Deadline object with the task description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param deadlineBy Deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public Deadline(String description, String deadlineBy) {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" this.deadlineDate \u003d DateParser.parseDate(deadlineBy);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" this.deadlineDateTime \u003d DateParser.parseDateTime(deadlineBy);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" this.deadlineBy \u003d deadlineBy;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of deadline object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the deadline object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"D\";","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + this.description + \" | \" + this.deadlineBy;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" * The string representation of deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the deadline object.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" if (deadlineDateTime !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" String formattedDate \u003d deadlineDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), formattedDate);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" } else if (deadlineDate !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" String formattedDate \u003d deadlineDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), formattedDate);","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), deadlineBy);","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Angelyxx":64}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.util.DateParser;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a starting and ending date.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" private String startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" private String endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime startDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" private LocalDateTime endDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * Constructs an Event object with the task description,","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" * starting date (and time) of event and ending date (and time) of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @param startDateTimeStr Start date (and time) of the event","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" * @param endDateTimeStr End date (and time) of the event","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" public Event(String description, String startDateTimeStr, String endDateTimeStr) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" this.startDate \u003d DateParser.parseDate(startDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" this.endDate \u003d DateParser.parseDate(endDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" this.startDateTime \u003d DateParser.parseDateTime(startDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" this.endDateTime \u003d DateParser.parseDateTime(endDateTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" this.startDateTimeStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" this.endDateTimeStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of event object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the event object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"E\";","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + this.description + \" | \"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" + this.startDateTimeStr + \" to \" + this.endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" * The string representation of event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the event object.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" String startStr \u003d startDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" String endStr \u003d endDateTimeStr;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" if (startDateTime !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" startStr \u003d startDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" } else if (startDate !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" startStr \u003d startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" if (endDateTime !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" endStr \u003d endDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" } else if (endDate !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" endStr \u003d endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" return String.format(\"[E]%s (from: %s to %s)\", super.toString(), startStr, endStr);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":76}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * Represents a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":" protected String description;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * Constructs a Task object with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" assert description !\u003d null : \"Description cannot be null\";","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" * Returns an X icon based on whether a task is done.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" * @return \"X\" if a task is done, \" \" otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * Returns a description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" * @return Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" return description;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" * Returns whether a task has been completed.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" * @return True is task is done, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" public void markDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of the Task object to write to the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the Task object to be written to the file.","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"T\"; // Default type for base Task","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.getDescription();","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":79}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.task;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" * Represents a task with a description.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" * Constructs a ToDo object with the task description and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" super(description);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" * Formats the string representation of the ToDo object to write to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the ToDo object to be written to the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" String type \u003d \"T\";","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" return type + \" | \" + (isDone() ? \"1\" : \"0\") + \" | \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" * The string representation of ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" * @return String representation of the ToDo object.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Angelyxx":37}},{"path":"src/main/java/duke/util/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.util;","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import java.util.List;","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"/**","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" * Class to parse strings to either LocalDate or LocalDateTime Format","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":"public class DateParser {","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e dateFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e dateTimeFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" private static final List\u003cDateTimeFormatter\u003e timeFormatters \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" private static final LocalDate today \u003d LocalDate.now();","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" // Initialize date and date-time formatters","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" static {","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" dateFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"MM/dd/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" dateTimeFormatters.add(DateTimeFormatter.ofPattern(\"d/M/yyyy HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"h[.mm]a\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" timeFormatters.add(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-13"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" * Parses a String to a LocalDate object.","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" * @param date String representation of a potential date.","lastModifiedDate":"2023-09-13"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDate object if the string can be parsed, null otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" public static LocalDate parseDate(String date) {","lastModifiedDate":"2023-09-13"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : dateFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" return LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" //returns null if it fails","lastModifiedDate":"2023-09-13"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" return parseNaturalDate(date);","lastModifiedDate":"2023-09-13"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" * Parses a String to a LocalDateTime object.","lastModifiedDate":"2023-09-13"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" * @param dateTime String representation of a potential date and time.","lastModifiedDate":"2023-09-13"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDateTime object if the string can be parsed, null otherwise.","lastModifiedDate":"2023-09-13"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" public static LocalDateTime parseDateTime(String dateTime) {","lastModifiedDate":"2023-09-13"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : dateTimeFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" return LocalDateTime.parse(dateTime.toUpperCase(), formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" //returns null if it fails","lastModifiedDate":"2023-09-13"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":82,"author":{"gitId":"Angelyxx"},"content":" return parseNaturalDateTime(dateTime);","lastModifiedDate":"2023-09-13"},{"lineNumber":83,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":84,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":85,"author":{"gitId":"Angelyxx"},"content":" public static LocalTime parseTime(String time) {","lastModifiedDate":"2023-09-13"},{"lineNumber":86,"author":{"gitId":"Angelyxx"},"content":" for (DateTimeFormatter formatter : timeFormatters) {","lastModifiedDate":"2023-09-13"},{"lineNumber":87,"author":{"gitId":"Angelyxx"},"content":" try {","lastModifiedDate":"2023-09-13"},{"lineNumber":88,"author":{"gitId":"Angelyxx"},"content":" return LocalTime.parse(time, formatter);","lastModifiedDate":"2023-09-13"},{"lineNumber":89,"author":{"gitId":"Angelyxx"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-13"},{"lineNumber":90,"author":{"gitId":"Angelyxx"},"content":" // Ignore parsing errors and continue with the next formatter","lastModifiedDate":"2023-09-13"},{"lineNumber":91,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":92,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":93,"author":{"gitId":"Angelyxx"},"content":" return null; // Parsing failed with all formatters","lastModifiedDate":"2023-09-13"},{"lineNumber":94,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":95,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":96,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":97,"author":{"gitId":"Angelyxx"},"content":" * Parses a String as a natural language date, e.g., \"Mon\" for the next Monday.","lastModifiedDate":"2023-09-13"},{"lineNumber":98,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":99,"author":{"gitId":"Angelyxx"},"content":" * @param input String representation of a natural language date.","lastModifiedDate":"2023-09-13"},{"lineNumber":100,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDate object representing the parsed date or null if parsing fails.","lastModifiedDate":"2023-09-13"},{"lineNumber":101,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":102,"author":{"gitId":"Angelyxx"},"content":" private static LocalDate parseNaturalDate(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":103,"author":{"gitId":"Angelyxx"},"content":" Pattern todayPattern \u003d Pattern.compile(\"\\\\b(today)\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":104,"author":{"gitId":"Angelyxx"},"content":" Pattern tomorrowPattern \u003d Pattern.compile(\"\\\\b(tomorrow)\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":105,"author":{"gitId":"Angelyxx"},"content":" Pattern dayOfWeekPattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-13"},{"lineNumber":106,"author":{"gitId":"Angelyxx"},"content":" \"(\\\\bMon|Tue(s)?|Wed(s)|Wed(nes)?|Thu(rs)?|Fri|Sat(ur)?|Sun)(day)?\\\\b\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":107,"author":{"gitId":"Angelyxx"},"content":" Matcher todayMatcher \u003d todayPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":108,"author":{"gitId":"Angelyxx"},"content":" if (todayMatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":109,"author":{"gitId":"Angelyxx"},"content":" return today;","lastModifiedDate":"2023-09-13"},{"lineNumber":110,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":111,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":112,"author":{"gitId":"Angelyxx"},"content":" Matcher tomorrowMatcher \u003d tomorrowPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":113,"author":{"gitId":"Angelyxx"},"content":" if (tomorrowMatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":114,"author":{"gitId":"Angelyxx"},"content":" return today.plusDays(1);","lastModifiedDate":"2023-09-13"},{"lineNumber":115,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":116,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":117,"author":{"gitId":"Angelyxx"},"content":" Matcher dayOfWeekmatcher \u003d dayOfWeekPattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":118,"author":{"gitId":"Angelyxx"},"content":" if (dayOfWeekmatcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":119,"author":{"gitId":"Angelyxx"},"content":" //get instance that matches pattern","lastModifiedDate":"2023-09-13"},{"lineNumber":120,"author":{"gitId":"Angelyxx"},"content":" String dayOfWeekStr \u003d dayOfWeekmatcher.group(1).toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":121,"author":{"gitId":"Angelyxx"},"content":" DayOfWeek dayOfWeek \u003d getDayOfWeekFromAbbreviation(dayOfWeekStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":122,"author":{"gitId":"Angelyxx"},"content":" int daysUntilNext \u003d calculateNoOfDays(dayOfWeek);","lastModifiedDate":"2023-09-13"},{"lineNumber":123,"author":{"gitId":"Angelyxx"},"content":" return today.plusDays(daysUntilNext);","lastModifiedDate":"2023-09-13"},{"lineNumber":124,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":125,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":126,"author":{"gitId":"Angelyxx"},"content":" return null; // Return null if no natural language date match is found","lastModifiedDate":"2023-09-13"},{"lineNumber":127,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":128,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":129,"author":{"gitId":"Angelyxx"},"content":" /**","lastModifiedDate":"2023-09-13"},{"lineNumber":130,"author":{"gitId":"Angelyxx"},"content":" * Parses a String as a natural language date and time, e.g., \"Mon 4pm\".","lastModifiedDate":"2023-09-13"},{"lineNumber":131,"author":{"gitId":"Angelyxx"},"content":" *","lastModifiedDate":"2023-09-13"},{"lineNumber":132,"author":{"gitId":"Angelyxx"},"content":" * @param input String representation of a natural language date and time.","lastModifiedDate":"2023-09-13"},{"lineNumber":133,"author":{"gitId":"Angelyxx"},"content":" * @return A LocalDateTime object representing the parsed date and time or null if parsing fails.","lastModifiedDate":"2023-09-13"},{"lineNumber":134,"author":{"gitId":"Angelyxx"},"content":" */","lastModifiedDate":"2023-09-13"},{"lineNumber":135,"author":{"gitId":"Angelyxx"},"content":" public static LocalDateTime parseNaturalDateTime(String input) {","lastModifiedDate":"2023-09-13"},{"lineNumber":136,"author":{"gitId":"Angelyxx"},"content":" // Extract day of the week and time using regex","lastModifiedDate":"2023-09-13"},{"lineNumber":137,"author":{"gitId":"Angelyxx"},"content":" Pattern pattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-13"},{"lineNumber":138,"author":{"gitId":"Angelyxx"},"content":" \"\\\\b(Today|Tomorrow|Mon|Tue(s)?|Wed(s)|Wed(nes)?|Thu(rs)?|Fri|Sat(ur)?|Sun)(day)?\\\\s+\\\\b\",","lastModifiedDate":"2023-09-13"},{"lineNumber":139,"author":{"gitId":"Angelyxx"},"content":" Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-09-13"},{"lineNumber":140,"author":{"gitId":"Angelyxx"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-09-13"},{"lineNumber":141,"author":{"gitId":"Angelyxx"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-09-13"},{"lineNumber":142,"author":{"gitId":"Angelyxx"},"content":" String naturalDateStr \u003d matcher.group(0).toLowerCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":143,"author":{"gitId":"Angelyxx"},"content":" int dayOfWeekStrLength \u003d naturalDateStr.length();","lastModifiedDate":"2023-09-13"},{"lineNumber":144,"author":{"gitId":"Angelyxx"},"content":" String potentialTimeStr \u003d input.substring(dayOfWeekStrLength).trim().toUpperCase();","lastModifiedDate":"2023-09-13"},{"lineNumber":145,"author":{"gitId":"Angelyxx"},"content":" LocalDate date \u003d parseNaturalDate(naturalDateStr.trim());","lastModifiedDate":"2023-09-13"},{"lineNumber":146,"author":{"gitId":"Angelyxx"},"content":" LocalTime time \u003d parseTime(potentialTimeStr);","lastModifiedDate":"2023-09-13"},{"lineNumber":147,"author":{"gitId":"Angelyxx"},"content":" if (date !\u003d null \u0026\u0026 time !\u003d null) {","lastModifiedDate":"2023-09-13"},{"lineNumber":148,"author":{"gitId":"Angelyxx"},"content":" LocalDateTime dateTime \u003d date.atTime(time);","lastModifiedDate":"2023-09-13"},{"lineNumber":149,"author":{"gitId":"Angelyxx"},"content":" return dateTime;","lastModifiedDate":"2023-09-13"},{"lineNumber":150,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":151,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":152,"author":{"gitId":"Angelyxx"},"content":" return null;","lastModifiedDate":"2023-09-13"},{"lineNumber":153,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":154,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":155,"author":{"gitId":"Angelyxx"},"content":" private static DayOfWeek getDayOfWeekFromAbbreviation(String abbreviation) {","lastModifiedDate":"2023-09-13"},{"lineNumber":156,"author":{"gitId":"Angelyxx"},"content":" //Map to store the mappings from abbreviations to DayOfWeek enum constants","lastModifiedDate":"2023-09-13"},{"lineNumber":157,"author":{"gitId":"Angelyxx"},"content":" Map\u003cString, DayOfWeek\u003e abbreviationMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-13"},{"lineNumber":158,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"mon\", DayOfWeek.MONDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":159,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"tue\", DayOfWeek.TUESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":160,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"tues\", DayOfWeek.TUESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":161,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"wed\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":162,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"weds\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":163,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"wednes\", DayOfWeek.WEDNESDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":164,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thu\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":165,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thur\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":166,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"thurs\", DayOfWeek.THURSDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":167,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"fri\", DayOfWeek.FRIDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":168,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"sat\", DayOfWeek.SATURDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":169,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"satur\", DayOfWeek.SATURDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":170,"author":{"gitId":"Angelyxx"},"content":" abbreviationMap.put(\"sun\", DayOfWeek.SUNDAY);","lastModifiedDate":"2023-09-13"},{"lineNumber":171,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":172,"author":{"gitId":"Angelyxx"},"content":" return abbreviationMap.get(abbreviation.toLowerCase());","lastModifiedDate":"2023-09-13"},{"lineNumber":173,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":174,"author":{"gitId":"Angelyxx"},"content":" private static int calculateNoOfDays(DayOfWeek dayOfWeek) {","lastModifiedDate":"2023-09-13"},{"lineNumber":175,"author":{"gitId":"Angelyxx"},"content":" int daysUntilNext \u003d dayOfWeek.getValue() - today.getDayOfWeek().getValue();","lastModifiedDate":"2023-09-13"},{"lineNumber":176,"author":{"gitId":"Angelyxx"},"content":" if (daysUntilNext \u003c\u003d 0) { //check if weekday has passed","lastModifiedDate":"2023-09-13"},{"lineNumber":177,"author":{"gitId":"Angelyxx"},"content":" daysUntilNext +\u003d 7; // Move to the next week","lastModifiedDate":"2023-09-13"},{"lineNumber":178,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":179,"author":{"gitId":"Angelyxx"},"content":" return daysUntilNext;","lastModifiedDate":"2023-09-13"},{"lineNumber":180,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-13"},{"lineNumber":181,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":182,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":182}},{"path":"src/main/java/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Angelyxx":7}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" styleClass\u003d\"unique\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":17}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.main.MainWindow\" style\u003d\"-fx-background-color: #ffffff;\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" promptText\u003d\"Type a message\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" \u003cfx:define\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" \u003cImage fx:id\u003d\"btnImage\" url\u003d\"@/images/SendButton.png\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":" \u003c/fx:define\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" \u003cButton fx:id\u003d\"sendButton\" opacity\u003d\"0.5\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" \u003cgraphic\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" \u003cImageView image \u003d\"$btnImage\" fitHeight\u003d\"33.0\" fitWidth\u003d\"33.0\" layoutX\u003d\"362.0\" layoutY\u003d\"562.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\"\u003e\u003c/ImageView\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" \u003c/graphic\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" vbarPolicy\u003d\"AS_NEEDED\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" /\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-13"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-13"}],"authorContributionMap":{"Angelyxx":29}},{"path":"src/test/java/duke/main/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ToDoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" public void parseByeCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" public void parseListCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":" public void parseToDoCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"todo Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof ToDoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" public void parseDeadlineCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"deadline Submit report /by 2023-09-15\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" public void parseEventCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"event Party /from 2023-09-20 1400 /to 2023-09-20 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" public void parseMarkCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"mark 2\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" public void parseUnmarkCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"unmark 3\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof UnmarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" public void parseDeleteCommandTest() throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" Command command \u003d Parser.parse(\"delete 4\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":" assertTrue(command instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" public void parseInvalidCommandTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" assertThrows(DukeException.class, () -\u003e Parser.parse(\"invalid command\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":71}},{"path":"src/test/java/duke/main/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" public void loadTasksFromFileTest() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" // Prepare a temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" File tempFile \u003d File.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":" String tempFilePath \u003d tempFile.getAbsolutePath();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" // Create a sample task list","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e expectedTaskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new ToDo(\"Sample ToDo Task\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new Deadline(\"Sample Deadline Task\", \"31/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" expectedTaskList.add(new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" // Save the sample task list to the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" TaskList taskListToSave \u003d new TaskList(expectedTaskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(taskListToSave);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" // Load tasks from the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e loadedTaskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" // Clean up the temporary file","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" tempFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" // Verify the loaded task list matches the expected task list","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.size(), loadedTaskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c expectedTaskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.get(i).getDescription(), loadedTaskList.get(i).getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" assertEquals(expectedTaskList.get(i).isDone(), loadedTaskList.get(i).isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" public void saveTasksToFileTest() throws DukeException, IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":" // Prepare a temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" File tempFile \u003d File.createTempFile(\"test\", \".txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" String tempFilePath \u003d tempFile.getAbsolutePath();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" Storage storage \u003d new Storage(tempFilePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" // Create a sample task list","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e taskListToSave \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new ToDo(\"Sample ToDo Task\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new Deadline(\"Sample Deadline Task\", \"31/08/2023\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" taskListToSave.add(new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Angelyxx"},"content":" // Save the sample task list to the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Angelyxx"},"content":" storage.saveTasksToFile(new TaskList(taskListToSave));","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Angelyxx"},"content":" // Load tasks from the temporary test file","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Angelyxx"},"content":" ArrayList\u003cTask\u003e loadedTaskList \u003d storage.loadTasksFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Angelyxx"},"content":" // Clean up the temporary file","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Angelyxx"},"content":" tempFile.delete();","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Angelyxx"},"content":" // Verify the loaded task list matches the originally saved task list","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.size(), loadedTaskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Angelyxx"},"content":" for (int i \u003d 0; i \u003c taskListToSave.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.get(i).getDescription(), loadedTaskList.get(i).getDescription());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Angelyxx"},"content":" assertEquals(taskListToSave.get(i).isDone(), loadedTaskList.get(i).isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":81}},{"path":"src/test/java/duke/main/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Angelyxx"},"content":"package duke.main;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Angelyxx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Angelyxx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Angelyxx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Angelyxx"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Angelyxx"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Angelyxx"},"content":" public void addTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Angelyxx"},"content":" //create tasks","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Angelyxx"},"content":" Task toDo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Angelyxx"},"content":" Task deadline \u003d new Deadline(\"Sample Deadline Task\", \"31/08/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Angelyxx"},"content":" Task event \u003d new Event(\"Sample Event Task\",","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Angelyxx"},"content":" \"31/08/2023 1600\",\"31/08/2023 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Angelyxx"},"content":" taskList.add(toDo);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Angelyxx"},"content":" taskList.add(deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Angelyxx"},"content":" taskList.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Angelyxx"},"content":" assertEquals(3, taskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Angelyxx"},"content":" assertEquals(toDo, taskList.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Angelyxx"},"content":" assertEquals(deadline, taskList.get(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Angelyxx"},"content":" assertEquals(event, taskList.get(2));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Angelyxx"},"content":" public void deleteTaskTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Angelyxx"},"content":" Task task1 \u003d new ToDo(\"Complete assignment\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Angelyxx"},"content":" Task task2 \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task1);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task2);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Angelyxx"},"content":" taskList.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Angelyxx"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Angelyxx"},"content":" assertEquals(task2, taskList.get(0));","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Angelyxx"},"content":" public void markTaskDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Angelyxx"},"content":" Task task \u003d new ToDo(\"Go for a run\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Angelyxx"},"content":" taskList.markDone(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Angelyxx"},"content":" assertTrue(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Angelyxx"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Angelyxx"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Angelyxx"},"content":" public void unmarkTaskNotDoneTest() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Angelyxx"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Angelyxx"},"content":" Task task \u003d new ToDo(\"Write code\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Angelyxx"},"content":" task.markDone(); // Mark the task as done initially","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Angelyxx"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Angelyxx"},"content":" taskList.markNotDone(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Angelyxx"},"content":" assertFalse(task.isDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Angelyxx"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Angelyxx"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Angelyxx":63}}] diff --git a/Angelyxx_ip_master/commits.json b/Angelyxx_ip_master/commits.json index 526fa985..20e6e749 100644 --- a/Angelyxx_ip_master/commits.json +++ b/Angelyxx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Angelyxx":[{"date":"2023-08-25","commitResults":[{"hash":"d9ed55fcb492a1611dafa452a0d3848248dca85f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"991e7cc8a052668976d9f46c1071523e22d1565d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":5}}},{"hash":"71660de8c4a794069dd4a94c5a9a7c3dd8c78485","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":11}}},{"hash":"814a57986ab9f3dd5b39d00bf5c8c85a0aa2acdd","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":46}}},{"hash":"fe2cf03da54a6e5aa12b1ad441cb497d244a053d","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b3e783fa53bb8fabd94a5d1d7e3e6700055075dd","isMergeCommit":false,"messageTitle":"Add classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ff0b12fcd36f8c7078a738b2659b3e29a67299a8","isMergeCommit":false,"messageTitle":"complete level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":0}}},{"hash":"c4abb3cc2be855b1c561ee553093893cfac2bcf0","isMergeCommit":false,"messageTitle":"allow duke to read date/dateTime object for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":27}}},{"hash":"f448a58d123f061f1a4e33f24ef632745950cc67","isMergeCommit":false,"messageTitle":"allow datetime objects for event class","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":21}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30a723dd5d9e11dd63d42f07ffcf89187f16ca3a","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":582,"deletions":29}}},{"hash":"d6eb3665b1d59c9fa74c6b7239e12e6ed056b356","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"819c1c8f612e5e736e479c9364fa41dc3afd4b29","isMergeCommit":false,"messageTitle":"remove duplicate files","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":0,"deletions":240}}},{"hash":"f51c78a8dde7f0d4b0a26cfa17dc7c170893892f","isMergeCommit":false,"messageTitle":"Add JUnit Tests for ParserTest, StorageTest, TaskListTest","messageBody":"","tags":["Level-9","A-JavaDoc","A-Jar","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":225,"deletions":23}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a109990c80bcdfd48bc6efeaadabf1d280a578b5","isMergeCommit":false,"messageTitle":"Added JavaDocs to all classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":466,"deletions":12}}},{"hash":"401f8513c890b21808408e7232a7220366c42f0c","isMergeCommit":false,"messageTitle":"Edit code to follow coding conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":65}}},{"hash":"b3e15c74c0690bc9d2142e2a900996b656ddc13a","isMergeCommit":false,"messageTitle":"Complete find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":13}}},{"hash":"4d6562f9e5432c8d40dfa765c5f191b5e2a7489b","isMergeCommit":false,"messageTitle":"Add DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d90719839729f68260e78cb2ced2a6ca2d0f91aa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2e6a844dcae2c39c46f63f5b8457ea39c978a79d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/main/Parser.java\n#\tsrc/main/java/duke/main/Storage.java\n#\tsrc/main/java/duke/main/TaskList.java\n#\tsrc/main/java/duke/main/Ui.java\n#\tsrc/main/java/duke/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"7512f1b0223da727784590d7f437d84716672a4e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/command/ListCommand.java\n#\tsrc/main/java/duke/main/Parser.java\n#\tsrc/main/java/duke/main/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"9fec172b02dfaa769fceee8c1a410917bd596163","isMergeCommit":false,"messageTitle":"Fix TaskList typo error","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"82fa592802ef651bdb47cfed8d722542e25024d9","isMergeCommit":false,"messageTitle":"add GUI to Duke","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":46,"deletions":0},"java":{"insertions":259,"deletions":126}}},{"hash":"038e15c2cccb9fdcf8688c93d2dc183bd4d9406a","isMergeCommit":false,"messageTitle":"add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"82bb846c1baed4a5a8bd608556c29d9331a26237","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Angelyxx/A-Assertions","messageBody":"add assertions","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"786e8fb6e563502e18a881df9a74bd1fb39373b7","isMergeCommit":false,"messageTitle":"Improve code quality by following java coding conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":42}}},{"hash":"e5fc2dcdcbcecefb45287d5291ac911494cd1037","isMergeCommit":false,"messageTitle":"Debug validate methods for todo, deadline and event commands","messageBody":"Previous implementation did not allow for users to include the words \"todo\", \"deadline\" and \"event\" in their description as method used to replace those words for their respective commands.\n\nAdjusting the validation to allow for those words to be included in the description results in better code quality and flexibility.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":58}}},{"hash":"5d3adf76d7af01627fd5b181c227830b9aeda30d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Angelyxx/A-CodeQuality","messageBody":"A-code quality","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"3d982d7eb0e4e2e8c827d53cfb86cdc08a6c08d8","isMergeCommit":false,"messageTitle":"Allow for more natural formats of date inputs","messageBody":"This will allow for users to be more flexible in their datetime inputs for their deadline and todo tasks.\n\nLet\u0027s put all date and time parsing methods and dateTime formatters into the dateParser class.\n\nHaving a dateParser utility class allows us to use its methods across different classes, for example date parsing can be done in both Event and Deadline classes.\n","tags":["C-NaturalDates"],"fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":133}}},{"hash":"1ed0d08568798c2b3f476f3cf92666ea1b0af3a6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Angelyxx/BCD-Extension","messageBody":"Allow for more natural formats of date inputs","fileTypesAndContributionMap":{}}]},{"date":"2023-09-21","commitResults":[{"hash":"cd892d75a4d4b50973193e89e44850d5bbf203d5","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":7}}},{"hash":"a845ce5fc4685ff94a3794804cda4a9712944950","isMergeCommit":false,"messageTitle":"debugged validation of find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"70dda3641a93b81dad61d9c3bbbad1c1f6f5a235","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":94,"deletions":10}}},{"hash":"4ce1d690d121ce3e37bc9f1ea4d653017aac2ddd","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}},{"hash":"20ce3dfd27e68203ee3c60de03c7f4c393d43ac3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":2}}},{"hash":"65f9ac0d6446f7cbcb3de7cfcee2c4ae7a6a714a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"22d8c1e4bda766d97c28a734c7d2097084f626a6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"0c590967cc3f123b911d81b262a25cc058c92b05","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"3d58f22b3457e3dbc393ca73d075d06babb23617","isMergeCommit":false,"messageTitle":"Edit parser commands","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Angelyxx":{"java":1773,"md":95,"fxml":46,"sh":0,"bat":0,"gradle":17,"txt":0}},"authorContributionVariance":{"Angelyxx":74855.88},"authorDisplayNameMap":{"Angelyxx":"CS2103-F13-1 ANGE..XUAN"}} +{"authorDailyContributionsMap":{"Angelyxx":[{"date":"2023-08-25","commitResults":[{"hash":"d9ed55fcb492a1611dafa452a0d3848248dca85f","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}}]},{"date":"2023-08-26","commitResults":[{"hash":"991e7cc8a052668976d9f46c1071523e22d1565d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":5}}},{"hash":"71660de8c4a794069dd4a94c5a9a7c3dd8c78485","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":11}}},{"hash":"814a57986ab9f3dd5b39d00bf5c8c85a0aa2acdd","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":46}}},{"hash":"fe2cf03da54a6e5aa12b1ad441cb497d244a053d","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b3e783fa53bb8fabd94a5d1d7e3e6700055075dd","isMergeCommit":false,"messageTitle":"Add classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":17}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ff0b12fcd36f8c7078a738b2659b3e29a67299a8","isMergeCommit":false,"messageTitle":"complete level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":104,"deletions":0}}},{"hash":"c4abb3cc2be855b1c561ee553093893cfac2bcf0","isMergeCommit":false,"messageTitle":"allow duke to read date/dateTime object for deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":27}}},{"hash":"f448a58d123f061f1a4e33f24ef632745950cc67","isMergeCommit":false,"messageTitle":"allow datetime objects for event class","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":21}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30a723dd5d9e11dd63d42f07ffcf89187f16ca3a","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":582,"deletions":29}}},{"hash":"d6eb3665b1d59c9fa74c6b7239e12e6ed056b356","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"819c1c8f612e5e736e479c9364fa41dc3afd4b29","isMergeCommit":false,"messageTitle":"remove duplicate files","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":0,"deletions":240}}},{"hash":"f51c78a8dde7f0d4b0a26cfa17dc7c170893892f","isMergeCommit":false,"messageTitle":"Add JUnit Tests for ParserTest, StorageTest, TaskListTest","messageBody":"","tags":["Level-9","A-JavaDoc","A-Jar","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":225,"deletions":23}}}]},{"date":"2023-09-01","commitResults":[{"hash":"a109990c80bcdfd48bc6efeaadabf1d280a578b5","isMergeCommit":false,"messageTitle":"Added JavaDocs to all classes","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":466,"deletions":12}}},{"hash":"401f8513c890b21808408e7232a7220366c42f0c","isMergeCommit":false,"messageTitle":"Edit code to follow coding conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":65}}},{"hash":"b3e15c74c0690bc9d2142e2a900996b656ddc13a","isMergeCommit":false,"messageTitle":"Complete find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":13}}},{"hash":"4d6562f9e5432c8d40dfa765c5f191b5e2a7489b","isMergeCommit":false,"messageTitle":"Add DukeException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d90719839729f68260e78cb2ced2a6ca2d0f91aa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2e6a844dcae2c39c46f63f5b8457ea39c978a79d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/main/Parser.java\n#\tsrc/main/java/duke/main/Storage.java\n#\tsrc/main/java/duke/main/TaskList.java\n#\tsrc/main/java/duke/main/Ui.java\n#\tsrc/main/java/duke/task/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"7512f1b0223da727784590d7f437d84716672a4e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/command/ListCommand.java\n#\tsrc/main/java/duke/main/Parser.java\n#\tsrc/main/java/duke/main/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"9fec172b02dfaa769fceee8c1a410917bd596163","isMergeCommit":false,"messageTitle":"Fix TaskList typo error","messageBody":"","tags":["Level-10","A-CheckStyle"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-13","commitResults":[{"hash":"82fa592802ef651bdb47cfed8d722542e25024d9","isMergeCommit":false,"messageTitle":"add GUI to Duke","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"fxml":{"insertions":46,"deletions":0},"java":{"insertions":259,"deletions":126}}},{"hash":"038e15c2cccb9fdcf8688c93d2dc183bd4d9406a","isMergeCommit":false,"messageTitle":"add assertions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"82bb846c1baed4a5a8bd608556c29d9331a26237","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Angelyxx/A-Assertions","messageBody":"add assertions","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{}},{"hash":"786e8fb6e563502e18a881df9a74bd1fb39373b7","isMergeCommit":false,"messageTitle":"Improve code quality by following java coding conventions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":42}}},{"hash":"e5fc2dcdcbcecefb45287d5291ac911494cd1037","isMergeCommit":false,"messageTitle":"Debug validate methods for todo, deadline and event commands","messageBody":"Previous implementation did not allow for users to include the words \"todo\", \"deadline\" and \"event\" in their description as method used to replace those words for their respective commands.\n\nAdjusting the validation to allow for those words to be included in the description results in better code quality and flexibility.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":58}}},{"hash":"5d3adf76d7af01627fd5b181c227830b9aeda30d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Angelyxx/A-CodeQuality","messageBody":"A-code quality","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}},{"hash":"3d982d7eb0e4e2e8c827d53cfb86cdc08a6c08d8","isMergeCommit":false,"messageTitle":"Allow for more natural formats of date inputs","messageBody":"This will allow for users to be more flexible in their datetime inputs for their deadline and todo tasks.\n\nLet\u0027s put all date and time parsing methods and dateTime formatters into the dateParser class.\n\nHaving a dateParser utility class allows us to use its methods across different classes, for example date parsing can be done in both Event and Deadline classes.\n","tags":["C-NaturalDates"],"fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":133}}},{"hash":"1ed0d08568798c2b3f476f3cf92666ea1b0af3a6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Angelyxx/BCD-Extension","messageBody":"Allow for more natural formats of date inputs","fileTypesAndContributionMap":{}}]},{"date":"2023-09-21","commitResults":[{"hash":"cd892d75a4d4b50973193e89e44850d5bbf203d5","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":7}}},{"hash":"a845ce5fc4685ff94a3794804cda4a9712944950","isMergeCommit":false,"messageTitle":"debugged validation of find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"70dda3641a93b81dad61d9c3bbbad1c1f6f5a235","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":94,"deletions":10}}},{"hash":"4ce1d690d121ce3e37bc9f1ea4d653017aac2ddd","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":2,"deletions":2}}},{"hash":"20ce3dfd27e68203ee3c60de03c7f4c393d43ac3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":2}}},{"hash":"65f9ac0d6446f7cbcb3de7cfcee2c4ae7a6a714a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"22d8c1e4bda766d97c28a734c7d2097084f626a6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"0c590967cc3f123b911d81b262a25cc058c92b05","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"3d58f22b3457e3dbc393ca73d075d06babb23617","isMergeCommit":false,"messageTitle":"Edit parser commands","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-26","commitResults":[{"hash":"b2e73bcbc79a56725ab3fad01504ffe2008374ed","isMergeCommit":false,"messageTitle":"debug gradle file to pass smoke test","messageBody":"","tags":["A-Release-old"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Angelyxx":{"java":1773,"md":95,"fxml":46,"sh":0,"bat":0,"gradle":17,"txt":0}},"authorContributionVariance":{"Angelyxx":66721.586},"authorDisplayNameMap":{"Angelyxx":"CS2103-F13-1 ANGE..XUAN"}} diff --git a/Chen-Kuei_ip_master/authorship.json b/Chen-Kuei_ip_master/authorship.json index 7aca817a..9afdbd0f 100644 --- a/Chen-Kuei_ip_master/authorship.json +++ b/Chen-Kuei_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"shadowJar {","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" archiveFileName \u003d \u0027BiuBiu.jar\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"checkstyle {","lastModifiedDate":"2023-09-13"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-13"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"//application {","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":"// mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-23"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":"//}","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":"//shadowJar {","lastModifiedDate":"2023-09-23"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"// archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-23"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":"// archiveClassifier \u003d null","lastModifiedDate":"2023-09-23"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"// dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-23"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":"//}","lastModifiedDate":"2023-09-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":34,"-":34}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"# BiuBiu","lastModifiedDate":"2023-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003e meooow :eyes: :heart_on_fire:","lastModifiedDate":"2023-09-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"### BiuBiu is here to help you remember your schedule! It\u0027s:","lastModifiedDate":"2023-09-21"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" - text-based","lastModifiedDate":"2023-09-21"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" - easy to learn","lastModifiedDate":"2023-09-21"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" - ~~fast~~ **SUPER SUPER FAST** to use","lastModifiedDate":"2023-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"### Features:","lastModifiedDate":"2023-09-21"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"- [x] Memorise tasks","lastModifiedDate":"2023-09-21"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"- [x] Update tasks","lastModifiedDate":"2023-09-21"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"- [ ] Reminders (coming soon!)","lastModifiedDate":"2023-09-21"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"### `Keyword` Reference:","lastModifiedDate":"2023-09-21"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"- `todo \u003ctask_descr\u003e`: add a Todo task","lastModifiedDate":"2023-09-21"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" eg: `todo get a cup of coffee`","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"- `deadline \u003ctask_descr\u003e /by \u003ctime\u003e`: add a Deadline task(time format eg: 2023-09-21)","lastModifiedDate":"2023-09-21"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" eg: `deadline get a haircut /by 2023-09-22`","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"- `event \u003ctask_descr\u003e /from \u003cstart_time /to \u003cend_time\u003e\u003e`: add an Event task(time format eg: 2023-09-21 1400)","lastModifiedDate":"2023-09-21"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" eg: `event hang out with friends /from 2023-09-22 1400 /to 2023-09-22 2000`","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"- `mark \u003ctask_index\u003e`: mark the (task_index)th task as done(task_index is in integer!)","lastModifiedDate":"2023-09-21"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" eg: `mark 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"- `unmark \u003ctask_index\u003e`: mark the (task_index)th task as not done yet","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" eg: `unmark 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":"- `find \u003ctask_keyword\u003e`: find and list all the tasks that contain the keyword","lastModifiedDate":"2023-09-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" eg: `find haircut`","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"- `delete \u003ctask_index\u003e`: delete the (task_index)th task in the list","lastModifiedDate":"2023-09-21"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" eg: `delete 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"- `update \u003ctask_index\u003e \u003c/parts\u003e \u003c/new_info\u003e`: update the certain part of the (task_index)th task (/parts: /decsr, /time, /start_time, /end_time)","lastModifiedDate":"2023-09-21"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" eg: `update 3 /descr /hang out with doggy \u003c3`","lastModifiedDate":"2023-09-23"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":"- `list`: list out all the tasks in your TaskList.","lastModifiedDate":"2023-09-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" eg: `list`","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"### All you need to do is,","lastModifiedDate":"2023-09-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"1. download it from [here](https://github.com/Chen-Kuei/ip/tree/master).","lastModifiedDate":"2023-09-21"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"2. double-click it.","lastModifiedDate":"2023-09-21"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-21"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"4. let it manage your tasks for u :kissing_cat:","lastModifiedDate":"2023-09-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"*If you have the JAR file, you can simply type the command below at the folder containing the file:*","lastModifiedDate":"2023-09-21"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"```ruby","lastModifiedDate":"2023-09-21"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"java -jar BiuBiu.jar","lastModifiedDate":"2023-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"Chen-Kuei":41,"-":15}},{"path":"docs/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"TODO | wash","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"Chen-Kuei":2}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" // protected String by;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString The deadline date string in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" this.deadline \u003d parseDeadline(deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the time of a Deadline.","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString A new time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void updateTime(String deadlineString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" this.deadline \u003d parseDeadline(deadlineString);","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" * Parses the deadline date from string.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString The deadline date string in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" * @return The parsed deadline date as a LocalDate object, or null if parsing fails.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate parseDeadline(String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineString.isEmpty()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDate.parse(deadlineString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date: \" + deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid date.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task for saving.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" return \"DEADLINE | \" + super.toDataString() + \" | \" + saveFormatDeadline(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation fo the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDeadline(deadline) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":90}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" private Label dialog;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" private void flip() {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" db.flip();","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" return db;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":56}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" final private static TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" final private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" final private static Storage storage \u003d new Storage(DATA_FILE_PATH);","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" final private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" final private Image biubiu \u003d new Image(this.getClass().getResourceAsStream(\"/images/BiuBiu.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" * The main entry point of the Duke program.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" public static void main (String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" while(!isExit) {","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" isExit \u003d ui.handleCommand(userCommand, tasks, storage).equals(ui.showExit());","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" public void start (Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" // Step 1","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" Button sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-23"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" Scene scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" // Step 2","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" // Step 3","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" sendButton.setOnMouseClicked(event -\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" handleUserInput();","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" });","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" userInput.setOnAction((event -\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" handleUserInput();","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" }));","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" // Scroll down to the end automatically","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.heightProperty().addListener((observable -\u003e scrollPane.setVvalue(1.0)));","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getDukeDialog(dukeText, biubiu)","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" * Gets s response based on the user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" * @return A response generated based on the user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" public String getResponse (String input) {","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" return ui.handleCommand(input, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" * Retrieves the current TaskList instance.","lastModifiedDate":"2023-09-23"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" * @return The TaskList instance containing tasks.","lastModifiedDate":"2023-09-23"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-23"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-23"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":131}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * Initializes a new Event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * @param startDateTimeString The start date and time of the event in the format of \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * @param endDateTimeString The end date and time of the event in the format of \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" public Event(String description, String startDateTimeString, String endDateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" this.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the start time of an Event.","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" * @param startDateTimeString A new start time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" public void updateStartTime(String startDateTimeString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" this.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the end time of an Event.","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" * @param endDateTimeString A new end time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" public void updateEndTime(String endDateTimeString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime parseDateTime (String dateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTimeString.isEmpty()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date and time: \" + dateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid Date and Time!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a formatted string.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" return \"EVENT | \" + super.toDataString() + \" | \" + saveFormatDateTime(startTime) + \" | \" + saveFormatDateTime(endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a string representation for displaying.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDateTime(startTime) + \" to: \" + formatDateTime(endTime) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":91}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"public class Launcher {","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" public static void main (String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":9}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" final private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d duke.getTaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" tasks.loadTasksFromFile(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" stage.setTitle(\"--BiuBiu--\");","lastModifiedDate":"2023-09-21"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":36}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" private Label welcomeLabel;","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" private Duke duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" final private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" final private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/BiuBiu.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void initialize() {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" String welcomeMessage \u003d \"Hi, I\u0027m BiuBiu.\\nI\u0027m ready to help u!\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" \"\\n(u can save your task as todo/deadline/event)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" \"(can mark/unmark/find/delete/list/update your tasks)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" \"(type these keyword to find out more!)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" \"type \u0027woof\u0027 for surprise\u003e\u003c\";","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(welcomeMessage, dukeImage));","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":61}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Parser {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" * Parses a user command and creates a task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand The user command.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" * @return A Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public static Task parse (String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d new Task(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" String[] commandParts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" String taskType \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseTodoCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseDeadlineCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseEventCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Sorry, I don\u0027t understand the command.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" return task;","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" private static Todo parseTodoCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-17"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" return new Todo(commandParts[1]);","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" private static Deadline parseDeadlineCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your deadline:)\");","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" String[] deadlineParts \u003d commandParts[1].split(\" /by \");","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Tell me what and when your deadline is!\");","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return new Deadline(deadlineParts[0], deadlineParts[1]);","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" private static Event parseEventCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your event.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" String[] eventParts \u003d commandParts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" if (eventParts.length \u003c 3) {","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Tell me what your event is and when it starts/ends!\");","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" return new Event(eventParts[0], eventParts[1], eventParts[2]);","lastModifiedDate":"2023-09-17"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":68}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class Storage {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" final private String filePath;","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The file path where the task data will be saved.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" * Enum representing the task types.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * Saves the tasks from the TaskList to the file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The taskList containing tasks to be saved.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" writer.write(task.toDataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" writer.newLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error saving tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":46}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" protected String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the description of Task.","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" * @param description A string of new description.","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" public void updateDescription(String description) {","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" * Marks the tasks as not dome yet.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task\u0027s description for data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task\u0027s description.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" return description;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" return (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":58}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.List;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"public class TaskList {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" public void addTask (Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" public void deleteTask (int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" public int size() {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" * Gets a task from the TaskList at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" * Finds the tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keywords used to search matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" * @return Tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList findTasksByKeyword (String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" if (task.description.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" * Loads tasks from a specified file path.","lastModifiedDate":"2023-09-23"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The path to the file from which tasks will be loaded.","lastModifiedDate":"2023-09-23"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" public void loadTasksFromFile(String filePath) {","lastModifiedDate":"2023-09-23"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-23"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" ui.loadTasks(filePath);","lastModifiedDate":"2023-09-23"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":100}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the Todo task for the data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" return \"TODO | \" + super.toDataString();","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the Todo task for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":32}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" final private Scanner scanner;","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" final private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" * Reads a user command.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" * @return The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" * Loads tasks from the file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d duke.getTaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Data file does not exist.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" if (taskData.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" storeTasksToTaskList(taskData, tasks);","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks from the file.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-23"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" public void storeTasksToTaskList(String[] taskData, TaskList tasks) {","lastModifiedDate":"2023-09-23"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" Storage.TaskType taskType \u003d Storage.TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" * Handles user commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The storage object to save tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" * @return True if the program should exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" public String handleCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" String output;","lastModifiedDate":"2023-09-23"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" String commandType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleByeCommand(tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showTaskList(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleMarkCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleUnmarkCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleTodoCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleDeadlineCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleEventCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" case \"delete\":","lastModifiedDate":"2023-09-17"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleDeleteCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" case \"find\":","lastModifiedDate":"2023-09-17"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleFindCommand(parts, tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" case \"update\":","lastModifiedDate":"2023-09-20"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleUpdateCommand(parts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" case \"woof\":","lastModifiedDate":"2023-09-20"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d \"meow\";","lastModifiedDate":"2023-09-20"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-17"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showError(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-17"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":" return showError(\"I don\u0027t know this...\");","lastModifiedDate":"2023-09-20"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027bye\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":" public String handleByeCommand(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":" return showExit();","lastModifiedDate":"2023-09-17"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027mark\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":158,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":159,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":160,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":161,"author":{"gitId":"Chen-Kuei"},"content":" public String handleMarkCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":162,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":163,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: mark \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":164,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":165,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":166,"author":{"gitId":"Chen-Kuei"},"content":" int doneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-17"},{"lineNumber":167,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsDone(doneTaskIndex);","lastModifiedDate":"2023-09-17"},{"lineNumber":168,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":169,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskMarkedAsDone(tasks.getTask(doneTaskIndex));","lastModifiedDate":"2023-09-17"},{"lineNumber":170,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":171,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":172,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":173,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027unmark\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":174,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":175,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":176,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":177,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":178,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":179,"author":{"gitId":"Chen-Kuei"},"content":" public String handleUnmarkCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":180,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":181,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: unmark \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":182,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":183,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":184,"author":{"gitId":"Chen-Kuei"},"content":" int notDoneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-17"},{"lineNumber":185,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsNotDone(notDoneTaskIndex);","lastModifiedDate":"2023-09-17"},{"lineNumber":186,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":187,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskMarkedAsNotDone(tasks.getTask(notDoneTaskIndex));","lastModifiedDate":"2023-09-17"},{"lineNumber":188,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":190,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":191,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027todo\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":192,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":193,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":194,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":195,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":196,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":197,"author":{"gitId":"Chen-Kuei"},"content":" public String handleTodoCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":198,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Chen-Kuei"},"content":" return \"What you want to do?? \\n(format: todo \u003ctask\u003e)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":201,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":205,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":206,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":207,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":208,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027deadline\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":209,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":210,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":211,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":212,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":214,"author":{"gitId":"Chen-Kuei"},"content":" public String handleDeadlineCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":215,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":216,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":217,"author":{"gitId":"Chen-Kuei"},"content":" return \"Please describe your deadline! \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":218,"author":{"gitId":"Chen-Kuei"},"content":" \"(format: deadline \u003ctask\u003e /by \u003ctime\u003e) \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":219,"author":{"gitId":"Chen-Kuei"},"content":" \"(indicate your time like: 2023-05-20)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":220,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":224,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":226,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":227,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027event\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":229,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":230,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":232,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":233,"author":{"gitId":"Chen-Kuei"},"content":" public String handleEventCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":234,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"Chen-Kuei"},"content":" return \"Please describe your event! \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":237,"author":{"gitId":"Chen-Kuei"},"content":" \"(format: event \u003ctask\u003e /from \u003ctime\u003e /to \u003ctime\u003e \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":238,"author":{"gitId":"Chen-Kuei"},"content":" \"(indicate both your time like: 2023-06-12 1400)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":239,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":242,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":243,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":245,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":246,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027delete\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":247,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":248,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":249,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":250,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":251,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":252,"author":{"gitId":"Chen-Kuei"},"content":" public String handleDeleteCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":253,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":254,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: delete \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":255,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":256,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":257,"author":{"gitId":"Chen-Kuei"},"content":" int deletedTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"Chen-Kuei"},"content":" tasks.deleteTask(deletedTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":259,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":260,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskDeleted(tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":261,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":262,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":263,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":264,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027find\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":265,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":266,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":267,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":268,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":269,"author":{"gitId":"Chen-Kuei"},"content":" public String handleFindCommand(String[] parts, TaskList tasks) {","lastModifiedDate":"2023-09-17"},{"lineNumber":270,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":271,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: find \u003ckeyword\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":272,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":273,"author":{"gitId":"Chen-Kuei"},"content":" return showFindCommand(parts[1], tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":274,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":276,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":277,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027update\u0027 command.","lastModifiedDate":"2023-09-20"},{"lineNumber":278,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":279,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-20"},{"lineNumber":280,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":281,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":282,"author":{"gitId":"Chen-Kuei"},"content":" public String handleUpdateCommand(String[] parts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":283,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":284,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: update \u003cindex\u003e \u003c/parts\u003e \u003c/new_info\u003e\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":285,"author":{"gitId":"Chen-Kuei"},"content":" \"(eg: update 2 /descr /have dinner)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":286,"author":{"gitId":"Chen-Kuei"},"content":" \"\\nRef. for \u003c/parts\u003e:\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":287,"author":{"gitId":"Chen-Kuei"},"content":" \"1./descr: for all types of task.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":288,"author":{"gitId":"Chen-Kuei"},"content":" \"2./time: for \u0027Deadline\u0027 only.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":289,"author":{"gitId":"Chen-Kuei"},"content":" \"3./start_time, /end_time: for \u0027Event\u0027 only.\";","lastModifiedDate":"2023-09-20"},{"lineNumber":290,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":291,"author":{"gitId":"Chen-Kuei"},"content":" String[] updateParts \u003d parts[1].split(\" /\");","lastModifiedDate":"2023-09-20"},{"lineNumber":292,"author":{"gitId":"Chen-Kuei"},"content":" String updateType \u003d updateParts[1].toLowerCase();","lastModifiedDate":"2023-09-20"},{"lineNumber":293,"author":{"gitId":"Chen-Kuei"},"content":" String output;","lastModifiedDate":"2023-09-23"},{"lineNumber":294,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":295,"author":{"gitId":"Chen-Kuei"},"content":" switch(updateType) {","lastModifiedDate":"2023-09-20"},{"lineNumber":296,"author":{"gitId":"Chen-Kuei"},"content":" case \"descr\":","lastModifiedDate":"2023-09-20"},{"lineNumber":297,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateDescr(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":298,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":299,"author":{"gitId":"Chen-Kuei"},"content":" case \"time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":300,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":301,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":302,"author":{"gitId":"Chen-Kuei"},"content":" case \"start_time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":303,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateStartTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":304,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":305,"author":{"gitId":"Chen-Kuei"},"content":" case \"end_time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":306,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateEndTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":307,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":308,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-20"},{"lineNumber":309,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showError(\"sry... idk what u want to update.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":310,"author":{"gitId":"Chen-Kuei"},"content":" \"u can type \u0027update\u0027 for more info!\");","lastModifiedDate":"2023-09-20"},{"lineNumber":311,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":312,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-20"},{"lineNumber":313,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":314,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":315,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":316,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the description of the task.","lastModifiedDate":"2023-09-20"},{"lineNumber":317,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":318,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":319,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":320,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":321,"author":{"gitId":"Chen-Kuei"},"content":" public String updateDescr(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":322,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3 ) {","lastModifiedDate":"2023-09-20"},{"lineNumber":323,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and description!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":324,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":325,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":326,"author":{"gitId":"Chen-Kuei"},"content":" String description \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":327,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":328,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":329,"author":{"gitId":"Chen-Kuei"},"content":" task.updateDescription(description);","lastModifiedDate":"2023-09-20"},{"lineNumber":330,"author":{"gitId":"Chen-Kuei"},"content":" return \"Great, I\u0027ve updated task \" + (index + 1) + \" !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":331,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":332,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":333,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":334,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the time of a Deadline.","lastModifiedDate":"2023-09-20"},{"lineNumber":335,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":336,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":337,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":338,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":339,"author":{"gitId":"Chen-Kuei"},"content":" public String updateTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":340,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3 ) {","lastModifiedDate":"2023-09-20"},{"lineNumber":341,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":342,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":343,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":344,"author":{"gitId":"Chen-Kuei"},"content":" String time \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":345,"author":{"gitId":"Chen-Kuei"},"content":" Deadline task \u003d (Deadline)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":346,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":347,"author":{"gitId":"Chen-Kuei"},"content":" task.updateTime(time);","lastModifiedDate":"2023-09-20"},{"lineNumber":348,"author":{"gitId":"Chen-Kuei"},"content":" return \"woohoo~~ the time of task \" + (index + 1) + \" has been updated!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":349,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":350,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":351,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":352,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the start time of an Event.","lastModifiedDate":"2023-09-23"},{"lineNumber":353,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":354,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing the update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":355,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":356,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":357,"author":{"gitId":"Chen-Kuei"},"content":" public String updateStartTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":358,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3) {","lastModifiedDate":"2023-09-20"},{"lineNumber":359,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":360,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":361,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":362,"author":{"gitId":"Chen-Kuei"},"content":" String startTime \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":363,"author":{"gitId":"Chen-Kuei"},"content":" Event task \u003d (Event)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":364,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":365,"author":{"gitId":"Chen-Kuei"},"content":" task.updateStartTime(startTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":366,"author":{"gitId":"Chen-Kuei"},"content":" return \"nice! task \" + (index + 1) + \" has new start time now!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":367,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":368,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":369,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":370,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the end time of an Event.","lastModifiedDate":"2023-09-23"},{"lineNumber":371,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":372,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing the update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":373,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":374,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":375,"author":{"gitId":"Chen-Kuei"},"content":" public String updateEndTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":376,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3) {","lastModifiedDate":"2023-09-20"},{"lineNumber":377,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":378,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":379,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":380,"author":{"gitId":"Chen-Kuei"},"content":" String endTime \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":381,"author":{"gitId":"Chen-Kuei"},"content":" Event task \u003d (Event)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":382,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":383,"author":{"gitId":"Chen-Kuei"},"content":" task.updateEndTime(endTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":384,"author":{"gitId":"Chen-Kuei"},"content":" return \"nice! task \" + (index + 1) + \" has new end time now!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":385,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":386,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":387,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":388,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":389,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":390,"author":{"gitId":"Chen-Kuei"},"content":" * @param errorCommand The error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":391,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":392,"author":{"gitId":"Chen-Kuei"},"content":" public String showError(String errorCommand) {","lastModifiedDate":"2023-09-17"},{"lineNumber":393,"author":{"gitId":"Chen-Kuei"},"content":" return errorCommand;","lastModifiedDate":"2023-09-17"},{"lineNumber":394,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":395,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":396,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":397,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":398,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":399,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that we added.","lastModifiedDate":"2023-09-09"},{"lineNumber":400,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":401,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":402,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskAdded (Task task, int taskCount) {","lastModifiedDate":"2023-09-17"},{"lineNumber":403,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"*ฅ^•ﻌ•^ฅ* ogei!! I\u0027ve added this task:\";","lastModifiedDate":"2023-09-20"},{"lineNumber":404,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":405,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nNow you have \" + taskCount + \" tasks in the list! meow--\";","lastModifiedDate":"2023-09-20"},{"lineNumber":406,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":407,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":408,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":409,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":410,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":411,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":412,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":413,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":414,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskDeleted (int taskCount) {","lastModifiedDate":"2023-09-17"},{"lineNumber":415,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"OK, I\u0027ve removed this task.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":416,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nNow you have \" + taskCount + \" tasks in the list.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":417,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":418,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":419,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":420,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":421,"author":{"gitId":"Chen-Kuei"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":422,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":423,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":424,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":425,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskList (TaskList taskList) {","lastModifiedDate":"2023-09-17"},{"lineNumber":426,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Here are the tasks in your list:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":427,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":428,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n\" + (i + 1) + \". \" + taskList.getTask(i);","lastModifiedDate":"2023-09-17"},{"lineNumber":429,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":430,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":431,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nପ(๑•ᴗ•๑)ଓ ♡\";","lastModifiedDate":"2023-09-20"},{"lineNumber":432,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":433,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":434,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":435,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":436,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":437,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":438,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":439,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":440,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskMarkedAsDone (Task task) {","lastModifiedDate":"2023-09-17"},{"lineNumber":441,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Nice! I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":442,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":443,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":444,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":445,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":446,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":447,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":448,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":449,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":450,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":451,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskMarkedAsNotDone (Task task) {","lastModifiedDate":"2023-09-17"},{"lineNumber":452,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Noted, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":453,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":454,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":455,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":456,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":457,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":458,"author":{"gitId":"Chen-Kuei"},"content":" * Displays tasks tha match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":459,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":460,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keyword to search for the matching task.","lastModifiedDate":"2023-09-09"},{"lineNumber":461,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks to search within.","lastModifiedDate":"2023-09-09"},{"lineNumber":462,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":463,"author":{"gitId":"Chen-Kuei"},"content":" public String showFindCommand (String keyword, TaskList tasks) {","lastModifiedDate":"2023-09-17"},{"lineNumber":464,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d tasks.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":465,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":466,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Here are the matching tasks: \";","lastModifiedDate":"2023-09-17"},{"lineNumber":467,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":468,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n\" + (i + 1) + \".\" + matchingTasks.getTask(i);","lastModifiedDate":"2023-09-17"},{"lineNumber":469,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":470,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":471,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":472,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":473,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":474,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":475,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":476,"author":{"gitId":"Chen-Kuei"},"content":" public String showExit() {","lastModifiedDate":"2023-09-17"},{"lineNumber":477,"author":{"gitId":"Chen-Kuei"},"content":" return \"Bye. Have a great day!\";","lastModifiedDate":"2023-09-17"},{"lineNumber":478,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":479,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":479}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-border-color: #53301b; -fx-border-radius: 15; -fx-border-width: 0.5;\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-background-color: pink; -fx-background-radius: 10;\" text\u003d\"Label\" textFill\u003d\"#53301b\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" \u003cLabel fx:id\u003d\"welcomeLabel\" style\u003d\"-fx-font-size: 14pt;\" /\u003e","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-background-color: #d8c3ab;\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#53301b\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: grey; -fx-background-radius: 20;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"558.0\" prefWidth\u003d\"386.0\" style\u003d\"-fx-background-color: #f1e3c1; -fx-region-border: red;\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":31}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public void testParseEvent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d \"event Project meeting /from 2023-09-10 1800 /to 2023-09-10 2100\";","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" assertTrue(task instanceof Event);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" Assertions.assertEquals(\"Project meeting\", ((Event) task).description);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":17}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" public void testToDataString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" Todo todo \u003d new Todo(\"Finish iP soon!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" String dataString \u003d todo.toDataString();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(\"TODO | Finish iP soon!\", dataString);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"todo Buy groceries","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"deadline Finish report /by 2023-12-15","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"event Team meeting /from 2023-12-20 14:00 /to 2023-12-20 15:30","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"list","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"mark 1","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"list","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"bye","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"Chen-Kuei":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"# duke.Duke project template","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-27"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"mainClassName \u003d \u0027duke.Launcher\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"shadowJar {","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" archiveFileName \u003d \u0027BiuBiu.jar\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"javafx {","lastModifiedDate":"2023-09-27"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" version \u003d \"11.0.2\"","lastModifiedDate":"2023-09-27"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" modules \u003d [ \u0027javafx.controls\u0027, \u0027javafx.fxml\u0027 ]","lastModifiedDate":"2023-09-27"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-27"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-27"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"java {","lastModifiedDate":"2023-09-27"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" // Use JDK 11","lastModifiedDate":"2023-09-27"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-27"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2023-09-27"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":"checkstyle {","lastModifiedDate":"2023-09-13"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-13"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-13"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":37,"-":32}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"# BiuBiu","lastModifiedDate":"2023-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003e meooow :eyes: :heart_on_fire:","lastModifiedDate":"2023-09-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"### BiuBiu is here to help you remember your schedule! It\u0027s:","lastModifiedDate":"2023-09-21"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" - text-based","lastModifiedDate":"2023-09-21"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" - easy to learn","lastModifiedDate":"2023-09-21"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" - ~~fast~~ **SUPER SUPER FAST** to use","lastModifiedDate":"2023-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"### Features:","lastModifiedDate":"2023-09-21"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"- [x] Memorise tasks","lastModifiedDate":"2023-09-21"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"- [x] Update tasks","lastModifiedDate":"2023-09-21"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"- [ ] Reminders (coming soon!)","lastModifiedDate":"2023-09-21"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"### `Keyword` Reference:","lastModifiedDate":"2023-09-21"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"- `todo \u003ctask_descr\u003e`: add a Todo task","lastModifiedDate":"2023-09-21"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" eg: `todo get a cup of coffee`","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"- `deadline \u003ctask_descr\u003e /by \u003ctime\u003e`: add a Deadline task(time format eg: 2023-09-21)","lastModifiedDate":"2023-09-21"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" eg: `deadline get a haircut /by 2023-09-22`","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"- `event \u003ctask_descr\u003e /from \u003cstart_time /to \u003cend_time\u003e\u003e`: add an Event task(time format eg: 2023-09-21 1400)","lastModifiedDate":"2023-09-21"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" eg: `event hang out with friends /from 2023-09-22 1400 /to 2023-09-22 2000`","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"- `mark \u003ctask_index\u003e`: mark the (task_index)th task as done(task_index is in integer!)","lastModifiedDate":"2023-09-21"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" eg: `mark 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"- `unmark \u003ctask_index\u003e`: mark the (task_index)th task as not done yet","lastModifiedDate":"2023-09-21"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" eg: `unmark 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":"- `find \u003ctask_keyword\u003e`: find and list all the tasks that contain the keyword","lastModifiedDate":"2023-09-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" eg: `find haircut`","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"- `delete \u003ctask_index\u003e`: delete the (task_index)th task in the list","lastModifiedDate":"2023-09-21"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" ","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" eg: `delete 1`","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"- `update \u003ctask_index\u003e \u003c/parts\u003e \u003c/new_info\u003e`: update the certain part of the (task_index)th task (/parts: /decsr, /time, /start_time, /end_time)","lastModifiedDate":"2023-09-21"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" eg: `update 3 /descr /hang out with doggy \u003c3`","lastModifiedDate":"2023-09-23"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":"- `list`: list out all the tasks in your TaskList.","lastModifiedDate":"2023-09-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" eg: `list`","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"### All you need to do is,","lastModifiedDate":"2023-09-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"1. download it from [here](https://github.com/Chen-Kuei/ip/tree/master).","lastModifiedDate":"2023-09-21"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":"2. double-click it.","lastModifiedDate":"2023-09-21"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"3. add your tasks.","lastModifiedDate":"2023-09-21"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"4. let it manage your tasks for u :kissing_cat:","lastModifiedDate":"2023-09-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"*If you have the JAR file, you can simply type the command below at the folder containing the file:*","lastModifiedDate":"2023-09-21"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"```ruby","lastModifiedDate":"2023-09-21"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"java -jar BiuBiu.jar","lastModifiedDate":"2023-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2021-07-17"}],"authorContributionMap":{"Chen-Kuei":41,"-":15}},{"path":"docs/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"TODO | read","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"TODO | wash","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"Chen-Kuei":2}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * Represents a task with a deadline.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" // protected String by;","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Deadline task.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString The deadline date string in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" public Deadline(String description, String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" this.deadline \u003d parseDeadline(deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the time of a Deadline.","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString A new time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void updateTime(String deadlineString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" this.deadline \u003d parseDeadline(deadlineString);","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" * Parses the deadline date from string.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" * @param deadlineString The deadline date string in \"yyyy-MM-dd\" format.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" * @return The parsed deadline date as a LocalDate object, or null if parsing fails.","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDate parseDeadline(String deadlineString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineString.isEmpty()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDate.parse(deadlineString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date: \" + deadlineString);","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid date.\";","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDeadline (LocalDate deadlineDate) {","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineDate \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" return deadlineDate.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task for saving.","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" return \"DEADLINE | \" + super.toDataString() + \" | \" + saveFormatDeadline(deadline);","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" * @return The formatted string representation fo the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDeadline(deadline) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":90}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" private Label dialog;","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-11"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" private void flip() {","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" db.flip();","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" return db;","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":56}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-13"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"public class Duke extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" private static final String DATA_FILE_PATH \u003d \"./docs/duke.txt\";","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" final private static TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" final private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" final private static Storage storage \u003d new Storage(DATA_FILE_PATH);","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" final private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" final private Image biubiu \u003d new Image(this.getClass().getResourceAsStream(\"/images/BiuBiu.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" * The main entry point of the Duke program.","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" * @param args Command-line arguments (not used).","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" public static void main (String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" while(!isExit) {","lastModifiedDate":"2023-09-11"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-11"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" isExit \u003d ui.handleCommand(userCommand, tasks, storage).equals(ui.showExit());","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" public void start (Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" // Step 1","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" Button sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-23"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" Scene scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" // Step 2","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" stage.setTitle(\"Duke\");","lastModifiedDate":"2023-09-11"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-11"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setPrefSize(385, 535);","lastModifiedDate":"2023-09-11"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-11"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-11"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-11"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-11"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-11"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" // Step 3","lastModifiedDate":"2023-09-11"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" sendButton.setOnMouseClicked(event -\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" handleUserInput();","lastModifiedDate":"2023-09-11"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" });","lastModifiedDate":"2023-09-11"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" userInput.setOnAction((event -\u003e {","lastModifiedDate":"2023-09-11"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" handleUserInput();","lastModifiedDate":"2023-09-11"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" }));","lastModifiedDate":"2023-09-11"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" // Scroll down to the end automatically","lastModifiedDate":"2023-09-11"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.heightProperty().addListener((observable -\u003e scrollPane.setVvalue(1.0)));","lastModifiedDate":"2023-09-11"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" String userText \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" String dukeText \u003d getResponse(userInput.getText());","lastModifiedDate":"2023-09-11"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getUserDialog(userText, user),","lastModifiedDate":"2023-09-11"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getDukeDialog(dukeText, biubiu)","lastModifiedDate":"2023-09-11"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" * Gets s response based on the user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" * @return A response generated based on the user input.","lastModifiedDate":"2023-09-17"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" public String getResponse (String input) {","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" return ui.handleCommand(input, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" * Retrieves the current TaskList instance.","lastModifiedDate":"2023-09-23"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" * @return The TaskList instance containing tasks.","lastModifiedDate":"2023-09-23"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-23"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-23"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":131}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * Initializes a new Event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * @param startDateTimeString The start date and time of the event in the format of \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * @param endDateTimeString The end date and time of the event in the format of \"yyyy-MM-dd HHmm\".","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" public Event(String description, String startDateTimeString, String endDateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" this.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the start time of an Event.","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" * @param startDateTimeString A new start time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" public void updateStartTime(String startDateTimeString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" this.startTime \u003d parseDateTime(startDateTimeString);","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the end time of an Event.","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" * @param endDateTimeString A new end time string.","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" public void updateEndTime(String endDateTimeString) {","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" this.endTime \u003d parseDateTime(endDateTimeString);","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" private LocalDateTime parseDateTime (String dateTimeString) {","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTimeString.isEmpty()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" return LocalDateTime.parse(dateTimeString, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error parsing date and time: \" + dateTimeString);","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-13"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" private String formatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" return \"Invalid Date and Time!\";","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" private String saveFormatDateTime (LocalDateTime dateTime) {","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" if (dateTime \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" return \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" return dateTime.format(formatter);","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a formatted string.","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" return \"EVENT | \" + super.toDataString() + \" | \" + saveFormatDateTime(startTime) + \" | \" + saveFormatDateTime(endTime);","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" * Converts the event task to a string representation for displaying.","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the event task.","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDateTime(startTime) + \" to: \" + formatDateTime(endTime) + \")\";","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":91}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"public class Launcher {","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" public static void main (String[] args) {","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":9}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" final private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d duke.getTaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" tasks.loadTasksFromFile(\"./docs/duke.txt\");","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-11"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-11"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" stage.setTitle(\"--BiuBiu--\");","lastModifiedDate":"2023-09-21"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" stage.show();","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":36}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"/**","lastModifiedDate":"2023-09-11"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-11"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-11"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-11"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" private Label welcomeLabel;","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" private Duke duke;","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" final private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/User.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" final private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/BiuBiu.jpg\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void initialize() {","lastModifiedDate":"2023-09-11"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-11"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" String welcomeMessage \u003d \"Hi, I\u0027m BiuBiu.\\nI\u0027m ready to help u!\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" \"\\n(u can save your task as todo/deadline/event)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" \"(can mark/unmark/find/delete/list/update your tasks)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" \"(type these keyword to find out more!)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" \"type \u0027woof\u0027 for surprise\u003e\u003c\";","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().add(DialogBox.getDukeDialog(welcomeMessage, dukeImage));","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-11"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-11"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-11"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-11"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-11"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-11"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" @FXML","lastModifiedDate":"2023-09-11"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-11"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-11"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-11"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-11"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-11"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-11"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" );","lastModifiedDate":"2023-09-11"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" userInput.clear();","lastModifiedDate":"2023-09-11"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-11"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-11"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":61}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Parser {","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" * Parses a user command and creates a task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand The user command.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" * @return A Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public static Task parse (String userCommand) {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d new Task(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" String[] commandParts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" String taskType \u003d commandParts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseTodoCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseDeadlineCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" task \u003d parseEventCommand(commandParts);","lastModifiedDate":"2023-09-17"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Sorry, I don\u0027t understand the command.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" return task;","lastModifiedDate":"2023-09-17"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" private static Todo parseTodoCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"What you want to do?\");","lastModifiedDate":"2023-09-17"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" return new Todo(commandParts[1]);","lastModifiedDate":"2023-09-17"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" private static Deadline parseDeadlineCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your deadline:)\");","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" String[] deadlineParts \u003d commandParts[1].split(\" /by \");","lastModifiedDate":"2023-09-17"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" if (deadlineParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Tell me what and when your deadline is!\");","lastModifiedDate":"2023-09-17"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return new Deadline(deadlineParts[0], deadlineParts[1]);","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" private static Event parseEventCommand(String[] commandParts) {","lastModifiedDate":"2023-09-17"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" if (commandParts.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Please describe your event.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" String[] eventParts \u003d commandParts[1].split(\" /from | /to \");","lastModifiedDate":"2023-09-17"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" if (eventParts.length \u003c 3) {","lastModifiedDate":"2023-09-17"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Tell me what your event is and when it starts/ends!\");","lastModifiedDate":"2023-09-17"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" return null;","lastModifiedDate":"2023-09-17"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" return new Event(eventParts[0], eventParts[1], eventParts[2]);","lastModifiedDate":"2023-09-17"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":68}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class Storage {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" final private String filePath;","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Storage object.","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The file path where the task data will be saved.","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" * Enum representing the task types.","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" TODO, DEADLINE, EVENT","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * Saves the tasks from the TaskList to the file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The taskList containing tasks to be saved.","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" public void saveTasks(TaskList tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.getTask(i);","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" writer.write(task.toDataString());","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" writer.newLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error saving tasks.\");","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":46}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" protected String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Task object.","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the description of Task.","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" * @param description A string of new description.","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" public void updateDescription(String description) {","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" * Marks the task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" * Marks the tasks as not dome yet.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task\u0027s description for data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task\u0027s description.","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" return description;","lastModifiedDate":"2023-09-08"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" return (isDone ? \"[X] \" : \"[ ] \") + description;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":58}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.List;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"public class TaskList {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList() {","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" public void addTask (Task task) {","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" * Deletes a task from the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskIndex The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" public void deleteTask (int taskIndex) {","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" if (taskIndex \u003e\u003d 0 \u0026\u0026 taskIndex \u003c tasks.size()) {","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" tasks.remove(taskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" * Gets the number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" public int size() {","lastModifiedDate":"2023-09-09"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.size();","lastModifiedDate":"2023-09-09"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" * Gets a task from the TaskList at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":" * Marks a task as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" public void markTaskAsNotDone(int index) {","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.get(index);","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" * Finds the tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keywords used to search matching tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" * @return Tasks that match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList findTasksByKeyword (String keyword) {","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d new TaskList();","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":" if (task.description.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" matchingTasks.addTask(task);","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" return matchingTasks;","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" * Loads tasks from a specified file path.","lastModifiedDate":"2023-09-23"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The path to the file from which tasks will be loaded.","lastModifiedDate":"2023-09-23"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" public void loadTasksFromFile(String filePath) {","lastModifiedDate":"2023-09-23"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-23"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":" ui.loadTasks(filePath);","lastModifiedDate":"2023-09-23"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":100}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" super(description);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the Todo task for the data storage.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" public String toDataString() {","lastModifiedDate":"2023-09-08"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" return \"TODO | \" + super.toDataString();","lastModifiedDate":"2023-09-08"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-08"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" * Returns a string representation of the Todo task.","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" * @return A string representation of the Todo task for display.","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" @Override","lastModifiedDate":"2023-09-08"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Chen-Kuei":32}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.File;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"public class Ui {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" final private Scanner scanner;","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" final private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" * Constructs a Ui object.","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" public Ui() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" * Reads a user command.","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" * @return The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-09"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-09-09"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":32,"author":{"gitId":"Chen-Kuei"},"content":" * Loads tasks from the file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":33,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":34,"author":{"gitId":"Chen-Kuei"},"content":" * @param filePath The file path.","lastModifiedDate":"2023-09-09"},{"lineNumber":35,"author":{"gitId":"Chen-Kuei"},"content":" * @return A TaskList containing the loaded tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":36,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":37,"author":{"gitId":"Chen-Kuei"},"content":" public TaskList loadTasks(String filePath) {","lastModifiedDate":"2023-09-09"},{"lineNumber":38,"author":{"gitId":"Chen-Kuei"},"content":" TaskList tasks \u003d duke.getTaskList();","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"Chen-Kuei"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-09"},{"lineNumber":40,"author":{"gitId":"Chen-Kuei"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-17"},{"lineNumber":41,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Data file does not exist.\");","lastModifiedDate":"2023-09-17"},{"lineNumber":42,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-17"},{"lineNumber":43,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":44,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"Chen-Kuei"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-09"},{"lineNumber":46,"author":{"gitId":"Chen-Kuei"},"content":" String line;","lastModifiedDate":"2023-09-09"},{"lineNumber":47,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":48,"author":{"gitId":"Chen-Kuei"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":49,"author":{"gitId":"Chen-Kuei"},"content":" String[] taskData \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-09"},{"lineNumber":50,"author":{"gitId":"Chen-Kuei"},"content":" if (taskData.length \u003c 2) {","lastModifiedDate":"2023-09-17"},{"lineNumber":51,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Skipping corrupted task data: \" + line);","lastModifiedDate":"2023-09-17"},{"lineNumber":52,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-17"},{"lineNumber":53,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":54,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":55,"author":{"gitId":"Chen-Kuei"},"content":" storeTasksToTaskList(taskData, tasks);","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":58,"author":{"gitId":"Chen-Kuei"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Error loading tasks from the file.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":60,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":61,"author":{"gitId":"Chen-Kuei"},"content":" return tasks;","lastModifiedDate":"2023-09-23"},{"lineNumber":62,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":63,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":64,"author":{"gitId":"Chen-Kuei"},"content":" public void storeTasksToTaskList(String[] taskData, TaskList tasks) {","lastModifiedDate":"2023-09-23"},{"lineNumber":65,"author":{"gitId":"Chen-Kuei"},"content":" Storage.TaskType taskType \u003d Storage.TaskType.valueOf(taskData[0]);","lastModifiedDate":"2023-09-09"},{"lineNumber":66,"author":{"gitId":"Chen-Kuei"},"content":" String taskDescription \u003d taskData[1];","lastModifiedDate":"2023-09-09"},{"lineNumber":67,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime1 \u003d (taskData.length \u003e 2) ? taskData[2] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":68,"author":{"gitId":"Chen-Kuei"},"content":" String taskTime2 \u003d (taskData.length \u003e 3) ? taskData[3] : \"\";","lastModifiedDate":"2023-09-09"},{"lineNumber":69,"author":{"gitId":"Chen-Kuei"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":70,"author":{"gitId":"Chen-Kuei"},"content":" case TODO:","lastModifiedDate":"2023-09-09"},{"lineNumber":71,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Todo(taskDescription));","lastModifiedDate":"2023-09-09"},{"lineNumber":72,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":73,"author":{"gitId":"Chen-Kuei"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-09"},{"lineNumber":74,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Deadline(taskDescription, taskTime1));","lastModifiedDate":"2023-09-09"},{"lineNumber":75,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":76,"author":{"gitId":"Chen-Kuei"},"content":" case EVENT:","lastModifiedDate":"2023-09-09"},{"lineNumber":77,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(new Event(taskDescription, taskTime1, taskTime2));","lastModifiedDate":"2023-09-09"},{"lineNumber":78,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":79,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-09"},{"lineNumber":80,"author":{"gitId":"Chen-Kuei"},"content":" System.out.println(\"Invalid task type: \" + taskType);","lastModifiedDate":"2023-09-09"},{"lineNumber":81,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":82,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":83,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":84,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":85,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":86,"author":{"gitId":"Chen-Kuei"},"content":" * Handles user commands.","lastModifiedDate":"2023-09-09"},{"lineNumber":87,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":88,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand The user\u0027s command.","lastModifiedDate":"2023-09-09"},{"lineNumber":89,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":90,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The storage object to save tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":91,"author":{"gitId":"Chen-Kuei"},"content":" * @return True if the program should exit.","lastModifiedDate":"2023-09-09"},{"lineNumber":92,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":93,"author":{"gitId":"Chen-Kuei"},"content":" public String handleCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":94,"author":{"gitId":"Chen-Kuei"},"content":" String output;","lastModifiedDate":"2023-09-23"},{"lineNumber":95,"author":{"gitId":"Chen-Kuei"},"content":" try {","lastModifiedDate":"2023-09-09"},{"lineNumber":96,"author":{"gitId":"Chen-Kuei"},"content":" String[] parts \u003d userCommand.split(\" \", 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":97,"author":{"gitId":"Chen-Kuei"},"content":" String commandType \u003d parts[0].toLowerCase();","lastModifiedDate":"2023-09-09"},{"lineNumber":98,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":99,"author":{"gitId":"Chen-Kuei"},"content":" switch (commandType) {","lastModifiedDate":"2023-09-09"},{"lineNumber":100,"author":{"gitId":"Chen-Kuei"},"content":" case \"bye\":","lastModifiedDate":"2023-09-09"},{"lineNumber":101,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleByeCommand(tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":102,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":103,"author":{"gitId":"Chen-Kuei"},"content":" case \"list\":","lastModifiedDate":"2023-09-09"},{"lineNumber":104,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showTaskList(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":105,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":106,"author":{"gitId":"Chen-Kuei"},"content":" case \"mark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":107,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleMarkCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":108,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":109,"author":{"gitId":"Chen-Kuei"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-09"},{"lineNumber":110,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleUnmarkCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":111,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":112,"author":{"gitId":"Chen-Kuei"},"content":" case \"todo\":","lastModifiedDate":"2023-09-09"},{"lineNumber":113,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleTodoCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":114,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":115,"author":{"gitId":"Chen-Kuei"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-09"},{"lineNumber":116,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleDeadlineCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":117,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":118,"author":{"gitId":"Chen-Kuei"},"content":" case \"event\":","lastModifiedDate":"2023-09-09"},{"lineNumber":119,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleEventCommand(userCommand, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":120,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":121,"author":{"gitId":"Chen-Kuei"},"content":" case \"delete\":","lastModifiedDate":"2023-09-17"},{"lineNumber":122,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleDeleteCommand(parts, tasks, storage);","lastModifiedDate":"2023-09-17"},{"lineNumber":123,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-09"},{"lineNumber":124,"author":{"gitId":"Chen-Kuei"},"content":" case \"find\":","lastModifiedDate":"2023-09-17"},{"lineNumber":125,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleFindCommand(parts, tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":126,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-17"},{"lineNumber":127,"author":{"gitId":"Chen-Kuei"},"content":" case \"update\":","lastModifiedDate":"2023-09-20"},{"lineNumber":128,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d handleUpdateCommand(parts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":129,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":130,"author":{"gitId":"Chen-Kuei"},"content":" case \"woof\":","lastModifiedDate":"2023-09-20"},{"lineNumber":131,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d \"meow\";","lastModifiedDate":"2023-09-20"},{"lineNumber":132,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":133,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-17"},{"lineNumber":134,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showError(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":135,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":136,"author":{"gitId":"Chen-Kuei"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-17"},{"lineNumber":137,"author":{"gitId":"Chen-Kuei"},"content":" return showError(\"I don\u0027t know this...\");","lastModifiedDate":"2023-09-20"},{"lineNumber":138,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":139,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":140,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":141,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":142,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":143,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027bye\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":144,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":145,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":146,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":147,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":148,"author":{"gitId":"Chen-Kuei"},"content":" public String handleByeCommand(TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":149,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":150,"author":{"gitId":"Chen-Kuei"},"content":" return showExit();","lastModifiedDate":"2023-09-17"},{"lineNumber":151,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":152,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":153,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":154,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":155,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027mark\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":156,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":157,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":158,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":159,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":160,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":161,"author":{"gitId":"Chen-Kuei"},"content":" public String handleMarkCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":162,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":163,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: mark \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":164,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":165,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":166,"author":{"gitId":"Chen-Kuei"},"content":" int doneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-17"},{"lineNumber":167,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsDone(doneTaskIndex);","lastModifiedDate":"2023-09-17"},{"lineNumber":168,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":169,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskMarkedAsDone(tasks.getTask(doneTaskIndex));","lastModifiedDate":"2023-09-17"},{"lineNumber":170,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":171,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":172,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":173,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027unmark\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":174,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":175,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":176,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":177,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":178,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":179,"author":{"gitId":"Chen-Kuei"},"content":" public String handleUnmarkCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":180,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":181,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: unmark \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":182,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":183,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":184,"author":{"gitId":"Chen-Kuei"},"content":" int notDoneTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-17"},{"lineNumber":185,"author":{"gitId":"Chen-Kuei"},"content":" tasks.markTaskAsNotDone(notDoneTaskIndex);","lastModifiedDate":"2023-09-17"},{"lineNumber":186,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":187,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskMarkedAsNotDone(tasks.getTask(notDoneTaskIndex));","lastModifiedDate":"2023-09-17"},{"lineNumber":188,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":189,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":190,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":191,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027todo\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":192,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":193,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":194,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":195,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":196,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":197,"author":{"gitId":"Chen-Kuei"},"content":" public String handleTodoCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":198,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":199,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-09"},{"lineNumber":200,"author":{"gitId":"Chen-Kuei"},"content":" return \"What you want to do?? \\n(format: todo \u003ctask\u003e)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":201,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":202,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-09"},{"lineNumber":203,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":204,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":205,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":206,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":207,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":208,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027deadline\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":209,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":210,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":211,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":212,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":213,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":214,"author":{"gitId":"Chen-Kuei"},"content":" public String handleDeadlineCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":215,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":216,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":217,"author":{"gitId":"Chen-Kuei"},"content":" return \"Please describe your deadline! \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":218,"author":{"gitId":"Chen-Kuei"},"content":" \"(format: deadline \u003ctask\u003e /by \u003ctime\u003e) \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":219,"author":{"gitId":"Chen-Kuei"},"content":" \"(indicate your time like: 2023-05-20)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":220,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":221,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-17"},{"lineNumber":222,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":223,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":224,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":225,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":226,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":227,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027event\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":228,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":229,"author":{"gitId":"Chen-Kuei"},"content":" * @param userCommand A string representing user command.","lastModifiedDate":"2023-09-17"},{"lineNumber":230,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":231,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":232,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":233,"author":{"gitId":"Chen-Kuei"},"content":" public String handleEventCommand(String userCommand, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":234,"author":{"gitId":"Chen-Kuei"},"content":" Task newTask \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-17"},{"lineNumber":235,"author":{"gitId":"Chen-Kuei"},"content":" if (newTask \u003d\u003d null) {","lastModifiedDate":"2023-09-17"},{"lineNumber":236,"author":{"gitId":"Chen-Kuei"},"content":" return \"Please describe your event! \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":237,"author":{"gitId":"Chen-Kuei"},"content":" \"(format: event \u003ctask\u003e /from \u003ctime\u003e /to \u003ctime\u003e \\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":238,"author":{"gitId":"Chen-Kuei"},"content":" \"(indicate both your time like: 2023-06-12 1400)\";","lastModifiedDate":"2023-09-20"},{"lineNumber":239,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":240,"author":{"gitId":"Chen-Kuei"},"content":" tasks.addTask(newTask);","lastModifiedDate":"2023-09-17"},{"lineNumber":241,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":242,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskAdded(newTask, tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":243,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":244,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":245,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":246,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027delete\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":247,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":248,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":249,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":250,"author":{"gitId":"Chen-Kuei"},"content":" * @param storage The Storage object for saving tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":251,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":252,"author":{"gitId":"Chen-Kuei"},"content":" public String handleDeleteCommand(String[] parts, TaskList tasks, Storage storage) {","lastModifiedDate":"2023-09-17"},{"lineNumber":253,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":254,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: delete \u003cindex\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":255,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":256,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":257,"author":{"gitId":"Chen-Kuei"},"content":" int deletedTaskIndex \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-09"},{"lineNumber":258,"author":{"gitId":"Chen-Kuei"},"content":" tasks.deleteTask(deletedTaskIndex);","lastModifiedDate":"2023-09-09"},{"lineNumber":259,"author":{"gitId":"Chen-Kuei"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-09-09"},{"lineNumber":260,"author":{"gitId":"Chen-Kuei"},"content":" return showTaskDeleted(tasks.size());","lastModifiedDate":"2023-09-17"},{"lineNumber":261,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-17"},{"lineNumber":262,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-17"},{"lineNumber":263,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-17"},{"lineNumber":264,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027find\u0027 command.","lastModifiedDate":"2023-09-17"},{"lineNumber":265,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-17"},{"lineNumber":266,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-17"},{"lineNumber":267,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-17"},{"lineNumber":268,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-17"},{"lineNumber":269,"author":{"gitId":"Chen-Kuei"},"content":" public String handleFindCommand(String[] parts, TaskList tasks) {","lastModifiedDate":"2023-09-17"},{"lineNumber":270,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-09"},{"lineNumber":271,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: find \u003ckeyword\u003e\";","lastModifiedDate":"2023-09-20"},{"lineNumber":272,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":273,"author":{"gitId":"Chen-Kuei"},"content":" return showFindCommand(parts[1], tasks);","lastModifiedDate":"2023-09-17"},{"lineNumber":274,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":275,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":276,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":277,"author":{"gitId":"Chen-Kuei"},"content":" * Handles the \u0027update\u0027 command.","lastModifiedDate":"2023-09-20"},{"lineNumber":278,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":279,"author":{"gitId":"Chen-Kuei"},"content":" * @param parts An array containing command parts.","lastModifiedDate":"2023-09-20"},{"lineNumber":280,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":281,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":282,"author":{"gitId":"Chen-Kuei"},"content":" public String handleUpdateCommand(String[] parts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":283,"author":{"gitId":"Chen-Kuei"},"content":" if (parts.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-20"},{"lineNumber":284,"author":{"gitId":"Chen-Kuei"},"content":" return \"pls enter: update \u003cindex\u003e \u003c/parts\u003e \u003c/new_info\u003e\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":285,"author":{"gitId":"Chen-Kuei"},"content":" \"(eg: update 2 /descr /have dinner)\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":286,"author":{"gitId":"Chen-Kuei"},"content":" \"\\nRef. for \u003c/parts\u003e:\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":287,"author":{"gitId":"Chen-Kuei"},"content":" \"1./descr: for all types of task.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":288,"author":{"gitId":"Chen-Kuei"},"content":" \"2./time: for \u0027Deadline\u0027 only.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":289,"author":{"gitId":"Chen-Kuei"},"content":" \"3./start_time, /end_time: for \u0027Event\u0027 only.\";","lastModifiedDate":"2023-09-20"},{"lineNumber":290,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":291,"author":{"gitId":"Chen-Kuei"},"content":" String[] updateParts \u003d parts[1].split(\" /\");","lastModifiedDate":"2023-09-20"},{"lineNumber":292,"author":{"gitId":"Chen-Kuei"},"content":" String updateType \u003d updateParts[1].toLowerCase();","lastModifiedDate":"2023-09-20"},{"lineNumber":293,"author":{"gitId":"Chen-Kuei"},"content":" String output;","lastModifiedDate":"2023-09-23"},{"lineNumber":294,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":295,"author":{"gitId":"Chen-Kuei"},"content":" switch(updateType) {","lastModifiedDate":"2023-09-20"},{"lineNumber":296,"author":{"gitId":"Chen-Kuei"},"content":" case \"descr\":","lastModifiedDate":"2023-09-20"},{"lineNumber":297,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateDescr(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":298,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":299,"author":{"gitId":"Chen-Kuei"},"content":" case \"time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":300,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":301,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":302,"author":{"gitId":"Chen-Kuei"},"content":" case \"start_time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":303,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateStartTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":304,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":305,"author":{"gitId":"Chen-Kuei"},"content":" case \"end_time\":","lastModifiedDate":"2023-09-20"},{"lineNumber":306,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d updateEndTime(updateParts, tasks);","lastModifiedDate":"2023-09-20"},{"lineNumber":307,"author":{"gitId":"Chen-Kuei"},"content":" break;","lastModifiedDate":"2023-09-20"},{"lineNumber":308,"author":{"gitId":"Chen-Kuei"},"content":" default:","lastModifiedDate":"2023-09-20"},{"lineNumber":309,"author":{"gitId":"Chen-Kuei"},"content":" output \u003d showError(\"sry... idk what u want to update.\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":310,"author":{"gitId":"Chen-Kuei"},"content":" \"u can type \u0027update\u0027 for more info!\");","lastModifiedDate":"2023-09-20"},{"lineNumber":311,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":312,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-20"},{"lineNumber":313,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":314,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":315,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":316,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the description of the task.","lastModifiedDate":"2023-09-20"},{"lineNumber":317,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":318,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":319,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":320,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":321,"author":{"gitId":"Chen-Kuei"},"content":" public String updateDescr(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":322,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3 ) {","lastModifiedDate":"2023-09-20"},{"lineNumber":323,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and description!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":324,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":325,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":326,"author":{"gitId":"Chen-Kuei"},"content":" String description \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":327,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":328,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":329,"author":{"gitId":"Chen-Kuei"},"content":" task.updateDescription(description);","lastModifiedDate":"2023-09-20"},{"lineNumber":330,"author":{"gitId":"Chen-Kuei"},"content":" return \"Great, I\u0027ve updated task \" + (index + 1) + \" !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":331,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":332,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":333,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":334,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the time of a Deadline.","lastModifiedDate":"2023-09-20"},{"lineNumber":335,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":336,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":337,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":338,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":339,"author":{"gitId":"Chen-Kuei"},"content":" public String updateTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":340,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3 ) {","lastModifiedDate":"2023-09-20"},{"lineNumber":341,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":342,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":343,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":344,"author":{"gitId":"Chen-Kuei"},"content":" String time \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":345,"author":{"gitId":"Chen-Kuei"},"content":" Deadline task \u003d (Deadline)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":346,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":347,"author":{"gitId":"Chen-Kuei"},"content":" task.updateTime(time);","lastModifiedDate":"2023-09-20"},{"lineNumber":348,"author":{"gitId":"Chen-Kuei"},"content":" return \"woohoo~~ the time of task \" + (index + 1) + \" has been updated!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":349,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":350,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":351,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":352,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the start time of an Event.","lastModifiedDate":"2023-09-23"},{"lineNumber":353,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":354,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing the update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":355,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":356,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":357,"author":{"gitId":"Chen-Kuei"},"content":" public String updateStartTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":358,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3) {","lastModifiedDate":"2023-09-20"},{"lineNumber":359,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":360,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":361,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":362,"author":{"gitId":"Chen-Kuei"},"content":" String startTime \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":363,"author":{"gitId":"Chen-Kuei"},"content":" Event task \u003d (Event)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":364,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":365,"author":{"gitId":"Chen-Kuei"},"content":" task.updateStartTime(startTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":366,"author":{"gitId":"Chen-Kuei"},"content":" return \"nice! task \" + (index + 1) + \" has new start time now!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":367,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":368,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":369,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-20"},{"lineNumber":370,"author":{"gitId":"Chen-Kuei"},"content":" * Updates the end time of an Event.","lastModifiedDate":"2023-09-23"},{"lineNumber":371,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-20"},{"lineNumber":372,"author":{"gitId":"Chen-Kuei"},"content":" * @param updateParts An array containing the update command.","lastModifiedDate":"2023-09-20"},{"lineNumber":373,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks A TaskList containing tasks.","lastModifiedDate":"2023-09-20"},{"lineNumber":374,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-20"},{"lineNumber":375,"author":{"gitId":"Chen-Kuei"},"content":" public String updateEndTime(String[] updateParts, TaskList tasks) {","lastModifiedDate":"2023-09-20"},{"lineNumber":376,"author":{"gitId":"Chen-Kuei"},"content":" if (updateParts.length \u003c 3) {","lastModifiedDate":"2023-09-20"},{"lineNumber":377,"author":{"gitId":"Chen-Kuei"},"content":" return \"Make sure you enter both index and time !!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":378,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":379,"author":{"gitId":"Chen-Kuei"},"content":" int index \u003d Integer.parseInt(updateParts[0]) - 1;","lastModifiedDate":"2023-09-20"},{"lineNumber":380,"author":{"gitId":"Chen-Kuei"},"content":" String endTime \u003d updateParts[2];","lastModifiedDate":"2023-09-20"},{"lineNumber":381,"author":{"gitId":"Chen-Kuei"},"content":" Event task \u003d (Event)tasks.getTask(index);","lastModifiedDate":"2023-09-20"},{"lineNumber":382,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":383,"author":{"gitId":"Chen-Kuei"},"content":" task.updateEndTime(endTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":384,"author":{"gitId":"Chen-Kuei"},"content":" return \"nice! task \" + (index + 1) + \" has new end time now!\";","lastModifiedDate":"2023-09-20"},{"lineNumber":385,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":386,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":387,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":388,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":389,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":390,"author":{"gitId":"Chen-Kuei"},"content":" * @param errorCommand The error message.","lastModifiedDate":"2023-09-09"},{"lineNumber":391,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":392,"author":{"gitId":"Chen-Kuei"},"content":" public String showError(String errorCommand) {","lastModifiedDate":"2023-09-17"},{"lineNumber":393,"author":{"gitId":"Chen-Kuei"},"content":" return errorCommand;","lastModifiedDate":"2023-09-17"},{"lineNumber":394,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":395,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":396,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":397,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the addition of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":398,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":399,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that we added.","lastModifiedDate":"2023-09-09"},{"lineNumber":400,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":401,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":402,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskAdded (Task task, int taskCount) {","lastModifiedDate":"2023-09-17"},{"lineNumber":403,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"*ฅ^•ﻌ•^ฅ* ogei!! I\u0027ve added this task:\";","lastModifiedDate":"2023-09-20"},{"lineNumber":404,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":405,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nNow you have \" + taskCount + \" tasks in the list! meow--\";","lastModifiedDate":"2023-09-20"},{"lineNumber":406,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":407,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":408,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":409,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":410,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming the deletion of a task.","lastModifiedDate":"2023-09-09"},{"lineNumber":411,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":412,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskCount The current number of tasks in the list.","lastModifiedDate":"2023-09-09"},{"lineNumber":413,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":414,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskDeleted (int taskCount) {","lastModifiedDate":"2023-09-17"},{"lineNumber":415,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"OK, I\u0027ve removed this task.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":416,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nNow you have \" + taskCount + \" tasks in the list.\";","lastModifiedDate":"2023-09-17"},{"lineNumber":417,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":418,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":419,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":420,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":421,"author":{"gitId":"Chen-Kuei"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-09"},{"lineNumber":422,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":423,"author":{"gitId":"Chen-Kuei"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-09-09"},{"lineNumber":424,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":425,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskList (TaskList taskList) {","lastModifiedDate":"2023-09-17"},{"lineNumber":426,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Here are the tasks in your list:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":427,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":428,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n\" + (i + 1) + \". \" + taskList.getTask(i);","lastModifiedDate":"2023-09-17"},{"lineNumber":429,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":430,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":431,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\nପ(๑•ᴗ•๑)ଓ ♡\";","lastModifiedDate":"2023-09-20"},{"lineNumber":432,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":433,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":434,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":435,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":436,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":437,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":438,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as done.","lastModifiedDate":"2023-09-09"},{"lineNumber":439,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":440,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskMarkedAsDone (Task task) {","lastModifiedDate":"2023-09-17"},{"lineNumber":441,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Nice! I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":442,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":443,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":444,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":445,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":446,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":447,"author":{"gitId":"Chen-Kuei"},"content":" * Displays a message confirming that a task has been marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":448,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":449,"author":{"gitId":"Chen-Kuei"},"content":" * @param task The task that was marked as not done.","lastModifiedDate":"2023-09-09"},{"lineNumber":450,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":451,"author":{"gitId":"Chen-Kuei"},"content":" public String showTaskMarkedAsNotDone (Task task) {","lastModifiedDate":"2023-09-17"},{"lineNumber":452,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Noted, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-09-17"},{"lineNumber":453,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n \" + task;","lastModifiedDate":"2023-09-17"},{"lineNumber":454,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":455,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":456,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":457,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":458,"author":{"gitId":"Chen-Kuei"},"content":" * Displays tasks tha match the keyword.","lastModifiedDate":"2023-09-09"},{"lineNumber":459,"author":{"gitId":"Chen-Kuei"},"content":" *","lastModifiedDate":"2023-09-09"},{"lineNumber":460,"author":{"gitId":"Chen-Kuei"},"content":" * @param keyword The keyword to search for the matching task.","lastModifiedDate":"2023-09-09"},{"lineNumber":461,"author":{"gitId":"Chen-Kuei"},"content":" * @param tasks The list of tasks to search within.","lastModifiedDate":"2023-09-09"},{"lineNumber":462,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":463,"author":{"gitId":"Chen-Kuei"},"content":" public String showFindCommand (String keyword, TaskList tasks) {","lastModifiedDate":"2023-09-17"},{"lineNumber":464,"author":{"gitId":"Chen-Kuei"},"content":" TaskList matchingTasks \u003d tasks.findTasksByKeyword(keyword);","lastModifiedDate":"2023-09-09"},{"lineNumber":465,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":466,"author":{"gitId":"Chen-Kuei"},"content":" String output \u003d \"Here are the matching tasks: \";","lastModifiedDate":"2023-09-17"},{"lineNumber":467,"author":{"gitId":"Chen-Kuei"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-09-09"},{"lineNumber":468,"author":{"gitId":"Chen-Kuei"},"content":" output +\u003d \"\\n\" + (i + 1) + \".\" + matchingTasks.getTask(i);","lastModifiedDate":"2023-09-17"},{"lineNumber":469,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":470,"author":{"gitId":"Chen-Kuei"},"content":" return output;","lastModifiedDate":"2023-09-17"},{"lineNumber":471,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":472,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":473,"author":{"gitId":"Chen-Kuei"},"content":" /**","lastModifiedDate":"2023-09-09"},{"lineNumber":474,"author":{"gitId":"Chen-Kuei"},"content":" * Displays an exit message.","lastModifiedDate":"2023-09-09"},{"lineNumber":475,"author":{"gitId":"Chen-Kuei"},"content":" */","lastModifiedDate":"2023-09-09"},{"lineNumber":476,"author":{"gitId":"Chen-Kuei"},"content":" public String showExit() {","lastModifiedDate":"2023-09-17"},{"lineNumber":477,"author":{"gitId":"Chen-Kuei"},"content":" return \"Bye. Have a great day!\";","lastModifiedDate":"2023-09-17"},{"lineNumber":478,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":479,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":479}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" style\u003d\"-fx-border-color: #53301b; -fx-border-radius: 15; -fx-border-width: 0.5;\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" \u003cLabel fx:id\u003d\"dialog\" style\u003d\"-fx-background-color: pink; -fx-background-radius: 10;\" text\u003d\"Label\" textFill\u003d\"#53301b\" wrapText\u003d\"true\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e\u003c/Label\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":20}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":"\u003c?import javafx.scene.text.Font?\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-11"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" \u003cLabel fx:id\u003d\"welcomeLabel\" style\u003d\"-fx-font-size: 14pt;\" /\u003e","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" style\u003d\"-fx-background-color: #d8c3ab;\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"12.0\" /\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#53301b\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" \u003cFont name\u003d\"HGSoeiKakupoptai\" size\u003d\"14.0\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/Button\u003e","lastModifiedDate":"2023-09-21"},{"lineNumber":25,"author":{"gitId":"Chen-Kuei"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" style\u003d\"-fx-background-color: grey; -fx-background-radius: 20;\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":26,"author":{"gitId":"Chen-Kuei"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":27,"author":{"gitId":"Chen-Kuei"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"558.0\" prefWidth\u003d\"386.0\" style\u003d\"-fx-background-color: #f1e3c1; -fx-region-border: red;\" /\u003e","lastModifiedDate":"2023-09-17"},{"lineNumber":28,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":29,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":30,"author":{"gitId":"Chen-Kuei"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-11"},{"lineNumber":31,"author":{"gitId":"Chen-Kuei"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-11"}],"authorContributionMap":{"Chen-Kuei":31}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" public void testParseEvent() {","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":" String userCommand \u003d \"event Project meeting /from 2023-09-10 1800 /to 2023-09-10 2100\";","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" Task task \u003d Parser.parse(userCommand);","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" assertTrue(task instanceof Event);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" Assertions.assertEquals(\"Project meeting\", ((Event) task).description);","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":17}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"package duke;","lastModifiedDate":"2023-09-09"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-09"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-09"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-09"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":8,"author":{"gitId":"Chen-Kuei"},"content":" public void dummyTest(){","lastModifiedDate":"2023-09-09"},{"lineNumber":9,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(2, 2);","lastModifiedDate":"2023-09-09"},{"lineNumber":10,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":11,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":12,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":13,"author":{"gitId":"Chen-Kuei"},"content":" public void anotherDummyTest(){","lastModifiedDate":"2023-09-09"},{"lineNumber":14,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(4, 4);","lastModifiedDate":"2023-09-09"},{"lineNumber":15,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":16,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":17,"author":{"gitId":"Chen-Kuei"},"content":" @Test","lastModifiedDate":"2023-09-09"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":" public void testToDataString() {","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"Chen-Kuei"},"content":" Todo todo \u003d new Todo(\"Finish iP soon!\");","lastModifiedDate":"2023-09-09"},{"lineNumber":20,"author":{"gitId":"Chen-Kuei"},"content":" String dataString \u003d todo.toDataString();","lastModifiedDate":"2023-09-09"},{"lineNumber":21,"author":{"gitId":"Chen-Kuei"},"content":"","lastModifiedDate":"2023-09-09"},{"lineNumber":22,"author":{"gitId":"Chen-Kuei"},"content":" assertEquals(\"TODO | Finish iP soon!\", dataString);","lastModifiedDate":"2023-09-09"},{"lineNumber":23,"author":{"gitId":"Chen-Kuei"},"content":" }","lastModifiedDate":"2023-09-09"},{"lineNumber":24,"author":{"gitId":"Chen-Kuei"},"content":"}","lastModifiedDate":"2023-09-09"}],"authorContributionMap":{"Chen-Kuei":24}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Chen-Kuei"},"content":"todo Buy groceries","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"Chen-Kuei"},"content":"deadline Finish report /by 2023-12-15","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"Chen-Kuei"},"content":"event Team meeting /from 2023-12-20 14:00 /to 2023-12-20 15:30","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"Chen-Kuei"},"content":"list","lastModifiedDate":"2023-09-07"},{"lineNumber":5,"author":{"gitId":"Chen-Kuei"},"content":"mark 1","lastModifiedDate":"2023-09-07"},{"lineNumber":6,"author":{"gitId":"Chen-Kuei"},"content":"list","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"Chen-Kuei"},"content":"bye","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"Chen-Kuei":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Chen-Kuei"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Chen-Kuei":1,"-":20}}] diff --git a/Chen-Kuei_ip_master/commits.json b/Chen-Kuei_ip_master/commits.json index d5071f04..8b3baa0f 100644 --- a/Chen-Kuei_ip_master/commits.json +++ b/Chen-Kuei_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Chen-Kuei":[{"date":"2023-09-03","commitResults":[{"hash":"827584cadd13fbb2a8bd4b71af278c540b954c35","isMergeCommit":false,"messageTitle":".gitignore: Fix ACTUAL.txt -\u003e ACTUAL.TXT (#73)","messageBody":"text-ui-test/runtest.bat|sh scripts generate a file ACTUAL.TXT.\nHowever, .gitignore uses ACTUAL.txt, which means the generated\nfile will not be ignored by Git on non-Windows OS.\n\nLet\u0027s update .gitignore as ACTUAL.txt -\u003e ACTUAL.TXT\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"a811c91cdb0a07f85ba12c565fff9720f0336950","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"1df1cc26d27ad7e4a1673d1dbbfd1a51e06afcef","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}},{"hash":"d8a0c189ca52ffcf8dcbb34b117bd947b5cf08b4","isMergeCommit":false,"messageTitle":"Mark As Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":6}}},{"hash":"5a6ac4c4271dc9ec192878e67868527c1c0e0bfd","isMergeCommit":false,"messageTitle":"Revert \"Mark As Done\"","messageBody":"This reverts commit d8a0c189ca52ffcf8dcbb34b117bd947b5cf08b4.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":60}}},{"hash":"9db4c919b029ca816cb79564da08d1b7b2be8c85","isMergeCommit":false,"messageTitle":"Mark As Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":6}}},{"hash":"f6309a6a39962d15323a1573eba36283e5aee158","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":3}}},{"hash":"59487b8d91bb9e6b12ff379adec6b7bc40fbab0e","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"965afecee03111ac72567184e4a3182a9588e7da","isMergeCommit":false,"messageTitle":"Revert \"Automated Text UI Testing\"","messageBody":"This reverts commit 59487b8d91bb9e6b12ff379adec6b7bc40fbab0e.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7}}},{"hash":"b3a31573fef4f9c597c6f763a8cbdad3b7d2b33a","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Automated Text UI Testing\"\"","messageBody":"This reverts commit 965afecee03111ac72567184e4a3182a9588e7da.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0}}},{"hash":"6754850f9a250ef34efd3d89a8900a789b268630","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}}]},{"date":"2023-09-08","commitResults":[{"hash":"c8d0f15ad225d8c8ca48ddf5c7b0b5d44e542c6a","isMergeCommit":true,"messageTitle":"Merge commit \u00276754850f9a250ef34efd3d89a8900a789b268630\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0f54ab152fee5155a53be65c2f1f1dec8eb8c452","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":13}}},{"hash":"1796d07c4ae15935bbd6729682efa1ca014152bd","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":88,"deletions":3}}},{"hash":"7722ebf4df2cc2fcd9aa2a8acbfcd2b2845a7d37","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"3f0376dd67a8ef6d75625d0e02a62cd00aa0cb0d","isMergeCommit":false,"messageTitle":"Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":90,"deletions":17}}},{"hash":"cefa3b102ed1ee60497e0446b88e3b8258691560","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"590c044924ae22069fd9a2c239c59ed9155190ab","isMergeCommit":false,"messageTitle":"OOP(Ui, TaskList, Parser, Storage)","messageBody":"","tags":["A-MoreOOP","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":522,"deletions":232}}},{"hash":"0947831e33f31aab0387c56c2f06ee35896e583d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3237bca2c6042962d8235b0dc52dc3c86be71904","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"25bcabb3e1f2b90c180fc4df25ce71d07f3faa54","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ef4a344e4a0eb710099a9b67a6fab9ce82e95bdd","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b71a7275477ec769068c5ba56687b50ee30805d4","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9f5214a624e727f02bdb5ad7ff2e53fb534dd0be","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":235,"deletions":0}}},{"hash":"83e9a4424bd23d8bb237dc191ededb1f11591fe0","isMergeCommit":false,"messageTitle":"Coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":29}}},{"hash":"eaea925be4909a13cac383715b94c8f16c791952","isMergeCommit":false,"messageTitle":"Revert \"Coding standard\"","messageBody":"This reverts commit 83e9a4424bd23d8bb237dc191ededb1f11591fe0.\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":37}}},{"hash":"38fdfbf1bb9962f79d95f8f81fad43922c6116d3","isMergeCommit":false,"messageTitle":"Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":32}}},{"hash":"c1aa9e66d158e09d5ce1111979206129c9c382f9","isMergeCommit":false,"messageTitle":"Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":39,"deletions":0}}},{"hash":"1c25a5cebfd30fff4a9287117505a04fb0224db7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 into branch-A-CodingStandard","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"bb976e0fff961694b104490bd338e2746cb8515c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/Todo.java\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"a9e9748744a81e053edafac59330852323d2939e","isMergeCommit":false,"messageTitle":"Merge all branches","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":151}}}]},{"date":"2023-09-11","commitResults":[{"hash":"0f748d0014436e18b0eb13e5ccb34a52d2173fa8","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":1,"deletions":4},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":367,"deletions":29}}},{"hash":"42b40d3fa79eb0f3724e83d8da30f8d3bc3cf794","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"b26692628f45aef028fdc965c1459028a0d1a8a9","isMergeCommit":false,"messageTitle":"use checkstyle with gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"61fb949ea4b2413f3681b5be8032c48f3a9007c2","isMergeCommit":false,"messageTitle":"user assert feature","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"4780351c17edf16b01ba88765b97b6cc5d4bc0b0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Removing redundant code in each java class and correcting the\nindentation for \u0027case\u0027 clauses improve the code quality.\n\nLet\u0027s remove the indentation of \u0027case\u0027 clauses.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":144,"deletions":392}}},{"hash":"46903c207b453e6411dc5a2737cbbd7954101ff7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Chen-Kuei/branch-assertions","messageBody":"use assert feature","fileTypesAndContributionMap":{}},{"hash":"28bf8f492f1cf0ebcaba420d83abfe5732c209d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29c8ec8cb9e155b519295484b2898b36ba72ebe6","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Chen-Kuei/branch-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"56c830fb8340c26790973a7591305ae810802a7a","isMergeCommit":false,"messageTitle":"improve code quality2.0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":258}}},{"hash":"1e1f26ea6b08ac2d0718cf5fc2c4453016582b89","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-assertions\u0027 of https://github.com/Chen-Kuei/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"50c2d235a6a84f13b370ff48fadc40eff6592cc4","isMergeCommit":false,"messageTitle":"improve code quality3.0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":58}}},{"hash":"e05baa0b3dd9ea0b790012fec40c1537c9e16c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Chen-Kuei/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-17","commitResults":[{"hash":"a3d776da88805d3f008a61365495d354c80bd6f8","isMergeCommit":false,"messageTitle":"update GUI design and improve code quality","messageBody":"","tags":["A-Personality","A-BetterGui"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"fxml":{"insertions":18,"deletions":8},"java":{"insertions":261,"deletions":222}}}]},{"date":"2023-09-20","commitResults":[{"hash":"130c3aad6fb136f69d792209afc29394800cc748","isMergeCommit":false,"messageTitle":"update GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"fxml":{"insertions":3,"deletions":0},"java":{"insertions":41,"deletions":8}}},{"hash":"7492a705d33b2f265e527e09377d95e2f1cd4f25","isMergeCommit":false,"messageTitle":"C-Update","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":153,"deletions":3}}},{"hash":"81d161997ca49950d898bf9f1e9767af732c5a8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-21","commitResults":[{"hash":"a847eb96d89c2f34a71568715d13f8e32159d842","isMergeCommit":false,"messageTitle":"add a user guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":2,"deletions":19},"md":{"insertions":28,"deletions":19}}},{"hash":"1a4ed7c6ebeb10c7195297f0bb892dee1e8029b6","isMergeCommit":false,"messageTitle":"update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"4c09fcd327df138b7ba181e8b17f843ac0c6e403","isMergeCommit":false,"messageTitle":"add title bar of the window, update Ui.png","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"fxml":{"insertions":5,"deletions":3},"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-23","commitResults":[{"hash":"82ec07f9db9ea41465b8c379e8891622980ce97d","isMergeCommit":false,"messageTitle":"update user guide, update main window","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"fxml":{"insertions":1,"deletions":1},"md":{"insertions":18,"deletions":0}}},{"hash":"d47e6b9d794ae6ce1e83f23d2fc916fb34d12f19","isMergeCommit":false,"messageTitle":"improve code quality(modify too-long methods)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":19}}},{"hash":"a555e2d8859a985e660f84f5503984fc20c0d872","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0913d026ebd2d1ea87ad8342cde40114172901a5","isMergeCommit":false,"messageTitle":"Correct the \u0027loadTasks\u0027 method, remove redundant code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":46,"deletions":61}}},{"hash":"1a1623aed603da10c959e958e103bd8a13197137","isMergeCommit":false,"messageTitle":"create a jar file","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":8}}}]}]},"authorFileTypeContributionMap":{"Chen-Kuei":{"java":1298,"md":43,"fxml":51,"sh":0,"bat":1,"gradle":34,"txt":9}},"authorContributionVariance":{"Chen-Kuei":99977.8},"authorDisplayNameMap":{"Chen-Kuei":"CS2103T-T14-1 CHEN..KUEI"}} +{"authorDailyContributionsMap":{"Chen-Kuei":[{"date":"2023-09-03","commitResults":[{"hash":"827584cadd13fbb2a8bd4b71af278c540b954c35","isMergeCommit":false,"messageTitle":".gitignore: Fix ACTUAL.txt -\u003e ACTUAL.TXT (#73)","messageBody":"text-ui-test/runtest.bat|sh scripts generate a file ACTUAL.TXT.\nHowever, .gitignore uses ACTUAL.txt, which means the generated\nfile will not be ignored by Git on non-Windows OS.\n\nLet\u0027s update .gitignore as ACTUAL.txt -\u003e ACTUAL.TXT\n","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":6}}},{"hash":"a811c91cdb0a07f85ba12c565fff9720f0336950","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"1df1cc26d27ad7e4a1673d1dbbfd1a51e06afcef","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":7}}},{"hash":"d8a0c189ca52ffcf8dcbb34b117bd947b5cf08b4","isMergeCommit":false,"messageTitle":"Mark As Done","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":6}}},{"hash":"5a6ac4c4271dc9ec192878e67868527c1c0e0bfd","isMergeCommit":false,"messageTitle":"Revert \"Mark As Done\"","messageBody":"This reverts commit d8a0c189ca52ffcf8dcbb34b117bd947b5cf08b4.\n","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":60}}},{"hash":"9db4c919b029ca816cb79564da08d1b7b2be8c85","isMergeCommit":false,"messageTitle":"Mark As Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":6}}},{"hash":"f6309a6a39962d15323a1573eba36283e5aee158","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":74,"deletions":3}}},{"hash":"59487b8d91bb9e6b12ff379adec6b7bc40fbab0e","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"965afecee03111ac72567184e4a3182a9588e7da","isMergeCommit":false,"messageTitle":"Revert \"Automated Text UI Testing\"","messageBody":"This reverts commit 59487b8d91bb9e6b12ff379adec6b7bc40fbab0e.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":7}}},{"hash":"b3a31573fef4f9c597c6f763a8cbdad3b7d2b33a","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Automated Text UI Testing\"\"","messageBody":"This reverts commit 965afecee03111ac72567184e4a3182a9588e7da.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0}}},{"hash":"6754850f9a250ef34efd3d89a8900a789b268630","isMergeCommit":false,"messageTitle":"Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":4}}}]},{"date":"2023-09-08","commitResults":[{"hash":"c8d0f15ad225d8c8ca48ddf5c7b0b5d44e542c6a","isMergeCommit":true,"messageTitle":"Merge commit \u00276754850f9a250ef34efd3d89a8900a789b268630\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0f54ab152fee5155a53be65c2f1f1dec8eb8c452","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":13}}},{"hash":"1796d07c4ae15935bbd6729682efa1ca014152bd","isMergeCommit":false,"messageTitle":"Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":88,"deletions":3}}},{"hash":"7722ebf4df2cc2fcd9aa2a8acbfcd2b2845a7d37","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-09","commitResults":[{"hash":"3f0376dd67a8ef6d75625d0e02a62cd00aa0cb0d","isMergeCommit":false,"messageTitle":"Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":90,"deletions":17}}},{"hash":"cefa3b102ed1ee60497e0446b88e3b8258691560","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"590c044924ae22069fd9a2c239c59ed9155190ab","isMergeCommit":false,"messageTitle":"OOP(Ui, TaskList, Parser, Storage)","messageBody":"","tags":["A-MoreOOP","A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"java":{"insertions":522,"deletions":232}}},{"hash":"0947831e33f31aab0387c56c2f06ee35896e583d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-gradle-support","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"3237bca2c6042962d8235b0dc52dc3c86be71904","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"25bcabb3e1f2b90c180fc4df25ce71d07f3faa54","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ef4a344e4a0eb710099a9b67a6fab9ce82e95bdd","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"b71a7275477ec769068c5ba56687b50ee30805d4","isMergeCommit":false,"messageTitle":"Package the App as a JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"9f5214a624e727f02bdb5ad7ff2e53fb534dd0be","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":235,"deletions":0}}},{"hash":"83e9a4424bd23d8bb237dc191ededb1f11591fe0","isMergeCommit":false,"messageTitle":"Coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":29}}},{"hash":"eaea925be4909a13cac383715b94c8f16c791952","isMergeCommit":false,"messageTitle":"Revert \"Coding standard\"","messageBody":"This reverts commit 83e9a4424bd23d8bb237dc191ededb1f11591fe0.\n","fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":37}}},{"hash":"38fdfbf1bb9962f79d95f8f81fad43922c6116d3","isMergeCommit":false,"messageTitle":"Coding Standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":32}}},{"hash":"c1aa9e66d158e09d5ce1111979206129c9c382f9","isMergeCommit":false,"messageTitle":"Find","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":39,"deletions":0}}},{"hash":"1c25a5cebfd30fff4a9287117505a04fb0224db7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027 into branch-A-CodingStandard","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"bb976e0fff961694b104490bd338e2746cb8515c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Duke.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Parser.java\n#\tsrc/main/java/duke/Storage.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/TaskList.java\n#\tsrc/main/java/duke/Todo.java\n#\tsrc/main/java/duke/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"a9e9748744a81e053edafac59330852323d2939e","isMergeCommit":false,"messageTitle":"Merge all branches","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":151}}}]},{"date":"2023-09-11","commitResults":[{"hash":"0f748d0014436e18b0eb13e5ccb34a52d2173fa8","isMergeCommit":false,"messageTitle":"Add a GUI to the chatbot","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":15,"deletions":0},"txt":{"insertions":1,"deletions":4},"fxml":{"insertions":36,"deletions":0},"java":{"insertions":367,"deletions":29}}},{"hash":"42b40d3fa79eb0f3724e83d8da30f8d3bc3cf794","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-13","commitResults":[{"hash":"b26692628f45aef028fdc965c1459028a0d1a8a9","isMergeCommit":false,"messageTitle":"use checkstyle with gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"61fb949ea4b2413f3681b5be8032c48f3a9007c2","isMergeCommit":false,"messageTitle":"user assert feature","messageBody":"","tags":["A-Assertions"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"4780351c17edf16b01ba88765b97b6cc5d4bc0b0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Removing redundant code in each java class and correcting the\nindentation for \u0027case\u0027 clauses improve the code quality.\n\nLet\u0027s remove the indentation of \u0027case\u0027 clauses.\n","tags":["A-FullCommitMessage","A-CodeQuality"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":144,"deletions":392}}},{"hash":"46903c207b453e6411dc5a2737cbbd7954101ff7","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Chen-Kuei/branch-assertions","messageBody":"use assert feature","fileTypesAndContributionMap":{}},{"hash":"28bf8f492f1cf0ebcaba420d83abfe5732c209d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-CodeQuality","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29c8ec8cb9e155b519295484b2898b36ba72ebe6","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Chen-Kuei/branch-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"56c830fb8340c26790973a7591305ae810802a7a","isMergeCommit":false,"messageTitle":"improve code quality2.0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":258}}},{"hash":"1e1f26ea6b08ac2d0718cf5fc2c4453016582b89","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-assertions\u0027 of https://github.com/Chen-Kuei/ip","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"50c2d235a6a84f13b370ff48fadc40eff6592cc4","isMergeCommit":false,"messageTitle":"improve code quality3.0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":58}}},{"hash":"e05baa0b3dd9ea0b790012fec40c1537c9e16c7c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Chen-Kuei/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Duke.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-17","commitResults":[{"hash":"a3d776da88805d3f008a61365495d354c80bd6f8","isMergeCommit":false,"messageTitle":"update GUI design and improve code quality","messageBody":"","tags":["A-Personality","A-BetterGui"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":3},"fxml":{"insertions":18,"deletions":8},"java":{"insertions":261,"deletions":222}}}]},{"date":"2023-09-20","commitResults":[{"hash":"130c3aad6fb136f69d792209afc29394800cc748","isMergeCommit":false,"messageTitle":"update GUI","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"fxml":{"insertions":3,"deletions":0},"java":{"insertions":41,"deletions":8}}},{"hash":"7492a705d33b2f265e527e09377d95e2f1cd4f25","isMergeCommit":false,"messageTitle":"C-Update","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":153,"deletions":3}}},{"hash":"81d161997ca49950d898bf9f1e9767af732c5a8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-C-Update\u0027","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-21","commitResults":[{"hash":"a847eb96d89c2f34a71568715d13f8e32159d842","isMergeCommit":false,"messageTitle":"add a user guide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":2,"deletions":19},"md":{"insertions":28,"deletions":19}}},{"hash":"1a4ed7c6ebeb10c7195297f0bb892dee1e8029b6","isMergeCommit":false,"messageTitle":"update user guide","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"4c09fcd327df138b7ba181e8b17f843ac0c6e403","isMergeCommit":false,"messageTitle":"add title bar of the window, update Ui.png","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"fxml":{"insertions":5,"deletions":3},"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-23","commitResults":[{"hash":"82ec07f9db9ea41465b8c379e8891622980ce97d","isMergeCommit":false,"messageTitle":"update user guide, update main window","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"fxml":{"insertions":1,"deletions":1},"md":{"insertions":18,"deletions":0}}},{"hash":"d47e6b9d794ae6ce1e83f23d2fc916fb34d12f19","isMergeCommit":false,"messageTitle":"improve code quality(modify too-long methods)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":19}}},{"hash":"a555e2d8859a985e660f84f5503984fc20c0d872","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodeQuality\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0913d026ebd2d1ea87ad8342cde40114172901a5","isMergeCommit":false,"messageTitle":"Correct the \u0027loadTasks\u0027 method, remove redundant code","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":46,"deletions":61}}},{"hash":"1a1623aed603da10c959e958e103bd8a13197137","isMergeCommit":false,"messageTitle":"create a jar file","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"gradle":{"insertions":14,"deletions":8}}}]},{"date":"2023-09-27","commitResults":[{"hash":"af798d0f8d9a5ce4497d7cda9018a7eb57b8f534","isMergeCommit":false,"messageTitle":"Compile with Java 11 JDK","messageBody":"","tags":["A-Release2.0"],"fileTypesAndContributionMap":{"gradle":{"insertions":11,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"Chen-Kuei":{"java":1298,"md":43,"fxml":51,"sh":0,"bat":1,"gradle":37,"txt":9}},"authorContributionVariance":{"Chen-Kuei":91466.11},"authorDisplayNameMap":{"Chen-Kuei":"CS2103T-T14-1 CHEN..KUEI"}} diff --git a/LuoZYi_ip_master/authorship.json b/LuoZYi_ip_master/authorship.json index 83226159..c4be5bf9 100644 --- a/LuoZYi_ip_master/authorship.json +++ b/LuoZYi_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"# Duke Chatbot User Guide","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"Duke is a command-line chatbot that allows you to manage your tasks easily. You can interact with Duke by typing various commands to add, list, mark, unmark, delete, and save tasks. Duke also stores your tasks in a file for persistence across sessions.","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"## Table of Contents","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"1. [Getting Started](#getting-started)","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"2. [Available Commands](#available-commands)","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"3. [Task Types](#task-types)","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"4. [Exiting Duke](#exiting-duke)","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"5. [Graphical User Interface (GUI)](#graphical-user-interface-gui)","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"6. [Troubleshooting](#troubleshooting)","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"7. [Additional Help](#additional-help)","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"### Getting Started","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":"To start using Duke, follow these steps:","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"1. Launch Duke by running the application.","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"2. Duke will greet you with a welcome message and a list of available commands.","lastModifiedDate":"2023-09-25"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":"3. You can type commands in the chat and press \"Send\" to interact with Duke.","lastModifiedDate":"2023-09-25"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":"### Available Commands","lastModifiedDate":"2023-09-25"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":"Duke supports the following commands:","lastModifiedDate":"2023-09-25"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":"- `bye`: Exits the chatbot and saves the task list to a file.","lastModifiedDate":"2023-09-25"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":"User: bye","lastModifiedDate":"2023-09-25"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":"Duke: Goodbye! Your tasks have been saved. See you next time.","lastModifiedDate":"2023-09-25"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":"- `list`: Lists all tasks in the current task list.","lastModifiedDate":"2023-09-25"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":"User: list","lastModifiedDate":"2023-09-25"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":"1. [T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"2. [E][X] Attend webinar (from: 2023-09-25 14:00, to: 2023-09-25 16:00)","lastModifiedDate":"2023-09-25"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"- `mark \u003ctask_id\u003e`: Marks a task as done by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"User: mark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"Duke: Great job! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-25"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":"[T][X] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":60,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":61,"author":{"gitId":"LuoZYi"},"content":"- `unmark \u003ctask_id\u003e`: Unmarks a previously marked task.","lastModifiedDate":"2023-09-25"},{"lineNumber":62,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":63,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":64,"author":{"gitId":"LuoZYi"},"content":"User: unmark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":65,"author":{"gitId":"LuoZYi"},"content":"Duke: Task unmarked:","lastModifiedDate":"2023-09-25"},{"lineNumber":66,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":67,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":68,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":69,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":70,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":71,"author":{"gitId":"LuoZYi"},"content":"- `todo \u003cdescription\u003e`: Adds a to-do task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":72,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":73,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":74,"author":{"gitId":"LuoZYi"},"content":"User: todo Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":75,"author":{"gitId":"LuoZYi"},"content":"Duke: Got it! I\u0027ve added this task:","lastModifiedDate":"2023-09-25"},{"lineNumber":76,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":77,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":78,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":79,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":80,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":81,"author":{"gitId":"LuoZYi"},"content":"- `event \u003cdescription\u003e /from \u003cdatetime\u003e /to \u003cdatetime\u003e`: Adds an event task with a description, start date, and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":82,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":83,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":84,"author":{"gitId":"LuoZYi"},"content":"User: event Team meeting /from 2023-09-27 15:00 /to 2023-09-27 16:30","lastModifiedDate":"2023-09-25"},{"lineNumber":85,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":86,"author":{"gitId":"LuoZYi"},"content":"[E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":87,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":88,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":89,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":90,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":91,"author":{"gitId":"LuoZYi"},"content":"- `deadline \u003cdescription\u003e /by \u003cdatetime\u003e`: Adds a deadline task with a description and due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":92,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":93,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":94,"author":{"gitId":"LuoZYi"},"content":"User: deadline Submit report /by 2023-09-30 23:59","lastModifiedDate":"2023-09-25"},{"lineNumber":95,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":96,"author":{"gitId":"LuoZYi"},"content":"[D][ ] Submit report (by: 2023-09-30 23:59)","lastModifiedDate":"2023-09-25"},{"lineNumber":97,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":98,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":99,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":100,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":101,"author":{"gitId":"LuoZYi"},"content":"- `delete \u003ctask_id\u003e`: Deletes a task by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":102,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":103,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":104,"author":{"gitId":"LuoZYi"},"content":"User: delete 1","lastModifiedDate":"2023-09-25"},{"lineNumber":105,"author":{"gitId":"LuoZYi"},"content":"Duke: Task removed:","lastModifiedDate":"2023-09-25"},{"lineNumber":106,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":107,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":108,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":109,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":110,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":111,"author":{"gitId":"LuoZYi"},"content":"- `find \u003ckeyword\u003e`: Searches for tasks containing the specified keyword.","lastModifiedDate":"2023-09-25"},{"lineNumber":112,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":113,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":114,"author":{"gitId":"LuoZYi"},"content":"User: find meeting","lastModifiedDate":"2023-09-25"},{"lineNumber":115,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the matching tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":116,"author":{"gitId":"LuoZYi"},"content":"1. [E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":117,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":118,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":119,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":120,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":121,"author":{"gitId":"LuoZYi"},"content":"For example:","lastModifiedDate":"2023-09-25"},{"lineNumber":122,"author":{"gitId":"LuoZYi"},"content":"- To add a to-do task: `todo Buy groceries`","lastModifiedDate":"2023-09-25"},{"lineNumber":123,"author":{"gitId":"LuoZYi"},"content":"- To mark a task as done: `mark 1`","lastModifiedDate":"2023-09-25"},{"lineNumber":124,"author":{"gitId":"LuoZYi"},"content":"- To list all tasks: `list`","lastModifiedDate":"2023-09-25"},{"lineNumber":125,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":126,"author":{"gitId":"LuoZYi"},"content":"### Task Types","lastModifiedDate":"2023-09-25"},{"lineNumber":127,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":128,"author":{"gitId":"LuoZYi"},"content":"Duke supports different types of tasks:","lastModifiedDate":"2023-09-25"},{"lineNumber":129,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":130,"author":{"gitId":"LuoZYi"},"content":"- **To-Do**: A simple task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":131,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":132,"author":{"gitId":"LuoZYi"},"content":"- **Event**: A task with a description and a start date and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":133,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":134,"author":{"gitId":"LuoZYi"},"content":"- **Deadline**: A task with a description and a due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":135,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":136,"author":{"gitId":"LuoZYi"},"content":"### Exiting Duke","lastModifiedDate":"2023-09-25"},{"lineNumber":137,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":138,"author":{"gitId":"LuoZYi"},"content":"To exit Duke, simply type `bye` in the chat and press \"Send.\" Duke will save your task list to a file before closing.","lastModifiedDate":"2023-09-25"},{"lineNumber":139,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":140,"author":{"gitId":"LuoZYi"},"content":"### Graphical User Interface (GUI)","lastModifiedDate":"2023-09-25"},{"lineNumber":141,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":142,"author":{"gitId":"LuoZYi"},"content":"Duke also provides a graphical user interface (GUI) for a more interactive experience. The GUI allows you to type commands in a text field and displays Duke\u0027s responses in a chat-like interface.","lastModifiedDate":"2023-09-25"},{"lineNumber":143,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":144,"author":{"gitId":"LuoZYi"},"content":"### Troubleshooting","lastModifiedDate":"2023-09-25"},{"lineNumber":145,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":146,"author":{"gitId":"LuoZYi"},"content":"If you encounter any issues while using Duke, consider the following:","lastModifiedDate":"2023-09-25"},{"lineNumber":147,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":148,"author":{"gitId":"LuoZYi"},"content":"- Ensure you\u0027re using valid commands and following the correct syntax.","lastModifiedDate":"2023-09-25"},{"lineNumber":149,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":150,"author":{"gitId":"LuoZYi"},"content":"- If Duke encounters an error, it will provide an error message with details.","lastModifiedDate":"2023-09-25"},{"lineNumber":151,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":152,"author":{"gitId":"LuoZYi"},"content":"- If you need help with a specific command, type `help` to get a list of available commands and their usage.","lastModifiedDate":"2023-09-25"},{"lineNumber":153,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":154,"author":{"gitId":"LuoZYi"},"content":"### Additional Help","lastModifiedDate":"2023-09-25"},{"lineNumber":155,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":156,"author":{"gitId":"LuoZYi"},"content":"For additional help or questions, please refer to the chatbot\u0027s responses or type `help` for a list of available commands and their descriptions.","lastModifiedDate":"2023-09-25"},{"lineNumber":157,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":158,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":159,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":160,"author":{"gitId":"LuoZYi"},"content":"Enjoy using Duke to manage your tasks efficiently!","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":160}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"javafx {","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-09-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-20"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":62,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-09-20"},{"lineNumber":64,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-20"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":24,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"# Duke Chatbot User Guide","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"Duke is a command-line chatbot that allows you to manage your tasks easily. You can interact with Duke by typing various commands to add, list, mark, unmark, delete, and save tasks. Duke also stores your tasks in a file for persistence across sessions.","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"## Table of Contents","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"1. [Getting Started](#getting-started)","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"2. [Available Commands](#available-commands)","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"3. [Task Types](#task-types)","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"4. [Exiting Duke](#exiting-duke)","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"5. [Graphical User Interface (GUI)](#graphical-user-interface-gui)","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"6. [Troubleshooting](#troubleshooting)","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"7. [Additional Help](#additional-help)","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"### Getting Started","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":"To start using Duke, follow these steps:","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"1. Launch Duke by running the application.","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"2. Duke will greet you with a welcome message and a list of available commands.","lastModifiedDate":"2023-09-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":"3. You can type commands in the chat and press \"Send\" to interact with Duke.","lastModifiedDate":"2023-09-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":"### Available Commands","lastModifiedDate":"2023-09-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":"Duke supports the following commands:","lastModifiedDate":"2023-09-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":"- `bye`: Exits the chatbot and saves the task list to a file.","lastModifiedDate":"2023-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":"User: bye","lastModifiedDate":"2023-09-25"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":"Duke: Goodbye! Your tasks have been saved. See you next time.","lastModifiedDate":"2023-09-25"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":"- `list`: Lists all tasks in the current task list.","lastModifiedDate":"2023-09-25"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":"User: list","lastModifiedDate":"2023-09-25"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":"1. [T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"2. [E][X] Attend webinar (from: 2023-09-25 14:00, to: 2023-09-25 16:00)","lastModifiedDate":"2023-09-25"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"- `mark \u003ctask_id\u003e`: Marks a task as done by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"User: mark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"Duke: Great job! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-25"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":"[T][X] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":60,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":61,"author":{"gitId":"LuoZYi"},"content":"- `unmark \u003ctask_id\u003e`: Unmarks a previously marked task.","lastModifiedDate":"2023-09-25"},{"lineNumber":62,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":63,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":64,"author":{"gitId":"LuoZYi"},"content":"User: unmark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":65,"author":{"gitId":"LuoZYi"},"content":"Duke: Task unmarked:","lastModifiedDate":"2023-09-25"},{"lineNumber":66,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":67,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":68,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":69,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":70,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":71,"author":{"gitId":"LuoZYi"},"content":"- `todo \u003cdescription\u003e`: Adds a to-do task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":72,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":73,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":74,"author":{"gitId":"LuoZYi"},"content":"User: todo Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":75,"author":{"gitId":"LuoZYi"},"content":"Duke: Got it! I\u0027ve added this task:","lastModifiedDate":"2023-09-25"},{"lineNumber":76,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":77,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":78,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":79,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":80,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":81,"author":{"gitId":"LuoZYi"},"content":"- `event \u003cdescription\u003e /from \u003cdatetime\u003e /to \u003cdatetime\u003e`: Adds an event task with a description, start date, and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":82,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":83,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":84,"author":{"gitId":"LuoZYi"},"content":"User: event Team meeting /from 2023-09-27 15:00 /to 2023-09-27 16:30","lastModifiedDate":"2023-09-25"},{"lineNumber":85,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":86,"author":{"gitId":"LuoZYi"},"content":"[E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":87,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":88,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":89,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":90,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":91,"author":{"gitId":"LuoZYi"},"content":"- `deadline \u003cdescription\u003e /by \u003cdatetime\u003e`: Adds a deadline task with a description and due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":92,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":93,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":94,"author":{"gitId":"LuoZYi"},"content":"User: deadline Submit report /by 2023-09-30 23:59","lastModifiedDate":"2023-09-25"},{"lineNumber":95,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":96,"author":{"gitId":"LuoZYi"},"content":"[D][ ] Submit report (by: 2023-09-30 23:59)","lastModifiedDate":"2023-09-25"},{"lineNumber":97,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":98,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":99,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":100,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":101,"author":{"gitId":"LuoZYi"},"content":"- `delete \u003ctask_id\u003e`: Deletes a task by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":102,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":103,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":104,"author":{"gitId":"LuoZYi"},"content":"User: delete 1","lastModifiedDate":"2023-09-25"},{"lineNumber":105,"author":{"gitId":"LuoZYi"},"content":"Duke: Task removed:","lastModifiedDate":"2023-09-25"},{"lineNumber":106,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":107,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":108,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":109,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":110,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":111,"author":{"gitId":"LuoZYi"},"content":"- `find \u003ckeyword\u003e`: Searches for tasks containing the specified keyword.","lastModifiedDate":"2023-09-25"},{"lineNumber":112,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":113,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":114,"author":{"gitId":"LuoZYi"},"content":"User: find meeting","lastModifiedDate":"2023-09-25"},{"lineNumber":115,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the matching tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":116,"author":{"gitId":"LuoZYi"},"content":"1. [E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":117,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":118,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":119,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":120,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":121,"author":{"gitId":"LuoZYi"},"content":"For example:","lastModifiedDate":"2023-09-25"},{"lineNumber":122,"author":{"gitId":"LuoZYi"},"content":"- To add a to-do task: `todo Buy groceries`","lastModifiedDate":"2023-09-25"},{"lineNumber":123,"author":{"gitId":"LuoZYi"},"content":"- To mark a task as done: `mark 1`","lastModifiedDate":"2023-09-25"},{"lineNumber":124,"author":{"gitId":"LuoZYi"},"content":"- To list all tasks: `list`","lastModifiedDate":"2023-09-25"},{"lineNumber":125,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":126,"author":{"gitId":"LuoZYi"},"content":"### Task Types","lastModifiedDate":"2023-09-25"},{"lineNumber":127,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":128,"author":{"gitId":"LuoZYi"},"content":"Duke supports different types of tasks:","lastModifiedDate":"2023-09-25"},{"lineNumber":129,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":130,"author":{"gitId":"LuoZYi"},"content":"- **To-Do**: A simple task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":131,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":132,"author":{"gitId":"LuoZYi"},"content":"- **Event**: A task with a description and a start date and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":133,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":134,"author":{"gitId":"LuoZYi"},"content":"- **Deadline**: A task with a description and a due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":135,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":136,"author":{"gitId":"LuoZYi"},"content":"### Exiting Duke","lastModifiedDate":"2023-09-25"},{"lineNumber":137,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":138,"author":{"gitId":"LuoZYi"},"content":"To exit Duke, simply type `bye` in the chat and press \"Send.\" Duke will save your task list to a file before closing.","lastModifiedDate":"2023-09-25"},{"lineNumber":139,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":140,"author":{"gitId":"LuoZYi"},"content":"### Graphical User Interface (GUI)","lastModifiedDate":"2023-09-25"},{"lineNumber":141,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":142,"author":{"gitId":"LuoZYi"},"content":"Duke also provides a graphical user interface (GUI) for a more interactive experience. The GUI allows you to type commands in a text field and displays Duke\u0027s responses in a chat-like interface.","lastModifiedDate":"2023-09-25"},{"lineNumber":143,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":144,"author":{"gitId":"LuoZYi"},"content":"### Troubleshooting","lastModifiedDate":"2023-09-25"},{"lineNumber":145,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":146,"author":{"gitId":"LuoZYi"},"content":"If you encounter any issues while using Duke, consider the following:","lastModifiedDate":"2023-09-25"},{"lineNumber":147,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":148,"author":{"gitId":"LuoZYi"},"content":"- Ensure you\u0027re using valid commands and following the correct syntax.","lastModifiedDate":"2023-09-25"},{"lineNumber":149,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":150,"author":{"gitId":"LuoZYi"},"content":"- If Duke encounters an error, it will provide an error message with details.","lastModifiedDate":"2023-09-25"},{"lineNumber":151,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":152,"author":{"gitId":"LuoZYi"},"content":"- If you need help with a specific command, type `help` to get a list of available commands and their usage.","lastModifiedDate":"2023-09-25"},{"lineNumber":153,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":154,"author":{"gitId":"LuoZYi"},"content":"### Additional Help","lastModifiedDate":"2023-09-25"},{"lineNumber":155,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":156,"author":{"gitId":"LuoZYi"},"content":"For additional help or questions, please refer to the chatbot\u0027s responses or type `help` for a list of available commands and their descriptions.","lastModifiedDate":"2023-09-25"},{"lineNumber":157,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":158,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":159,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":160,"author":{"gitId":"LuoZYi"},"content":"Enjoy using Duke to manage your tasks efficiently!","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":147,"-":13}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"\u003cchildren\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" \u003cScrollPane minHeight\u003d\"50.0\" prefHeight\u003d\"100.0\" maxHeight\u003d\"1.7976931348623157E308\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"\u003c/children\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"\u003cpadding\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"\u003c/padding\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.effect.Glow?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"GUI.MainWindow\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" opacity\u003d\"0.5\" prefHeight\u003d\"43.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Start converse!\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" \u003cGlow /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" \u003c/effect\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" \u003cButton fx:id\u003d\"sendButton\" defaultButton\u003d\"true\" layoutX\u003d\"324.0\" layoutY\u003d\"557.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"43.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#2849bf\" textOverrun\u003d\"CENTER_ELLIPSIS\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"413.0\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":23}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"package duke;","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" private final InputStream originalSystemIn \u003d System.in;","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" private final PrintStream originalSystemOut \u003d System.out;","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" private ByteArrayInputStream testInput;","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" private ByteArrayOutputStream testOutput;","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" @BeforeEach","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" // Redirect System.in and System.out to capture input and output","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" testOutput \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":" System.setOut(new PrintStream(testOutput));","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" // Prepare test input","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" String userInput \u003d \"todo badminton\\n\"; // Replace with your test input","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" testInput \u003d new ByteArrayInputStream(userInput.getBytes());","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" System.setIn(testInput);","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" @AfterEach","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" System.setIn(originalSystemIn);","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":" System.setOut(originalSystemOut);","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":" public void testDuke() {","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":" duke.run();","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":" String actualOutput \u003d testOutput.toString().trim();","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":" String expectedOutput \u003d \"Hello! I\u0027m Lakinta\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":" \"[T][ ] badminton\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":" \"Now you have 1 tasks in the list.\";","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":" String normalizedExpected \u003d normalizeString(expectedOutput);","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":" String normalizedActual \u003d normalizeString(actualOutput);","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":" assertEquals(normalizedExpected, normalizedActual);","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":" private String normalizeString(String input) {","lastModifiedDate":"2023-09-20"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":" return input.replaceAll(\"\\\\s+\", \" \").replaceAll(\"\\r\\n\", \"\\n\").trim();","lastModifiedDate":"2023-09-20"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":59}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"package duke;","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" public void testToDoToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" public void testEventToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 9, 15, 10, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 9, 15, 12, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [E][ ] Meeting (from: Sep 15 2023 10:00 to: Sep 15 2023 12:00)\", event.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" public void testDeadlineToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.of(2023, 9, 30, 23, 59);","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", deadlineTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [D][ ] Submit report (by: Sep 30 2023 23:59)\", deadline.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" public void testToDoMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [T][X] Read a book\", todo.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":" public void testEventMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 9, 15, 10, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 9, 15, 12, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [E][X] Meeting (from: Sep 15 2023 10:00 to: Sep 15 2023 12:00)\", event.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":" public void testDeadlineMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.of(2023, 9, 30, 23, 59);","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", deadlineTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [D][X] Submit report (by: Sep 30 2023 23:59)\", deadline.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":55}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"todo eat breakfast","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"deadline assignment /by tonight","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"todo meet with friends","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"event play badminton /from Sunday 4pm /to 6pm","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"todo study hard","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"mark 5","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"unmark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LuoZYi":14}},{"path":"data/duke.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"LuoZYi":0}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"# Duke Chatbot User Guide","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"Duke is a command-line chatbot that allows you to manage your tasks easily. You can interact with Duke by typing various commands to add, list, mark, unmark, delete, and save tasks. Duke also stores your tasks in a file for persistence across sessions.","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"## Table of Contents","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"1. [Getting Started](#getting-started)","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"2. [Available Commands](#available-commands)","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"3. [Task Types](#task-types)","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"4. [Exiting Duke](#exiting-duke)","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"5. [Graphical User Interface (GUI)](#graphical-user-interface-gui)","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"6. [Troubleshooting](#troubleshooting)","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"7. [Additional Help](#additional-help)","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"### Getting Started","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":"To start using Duke, follow these steps:","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"1. Launch Duke by running the application.","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"2. Duke will greet you with a welcome message and a list of available commands.","lastModifiedDate":"2023-09-25"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":"3. You can type commands in the chat and press \"Send\" to interact with Duke.","lastModifiedDate":"2023-09-25"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":"### Available Commands","lastModifiedDate":"2023-09-25"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":"Duke supports the following commands:","lastModifiedDate":"2023-09-25"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":"- `bye`: Exits the chatbot and saves the task list to a file.","lastModifiedDate":"2023-09-25"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":"User: bye","lastModifiedDate":"2023-09-25"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":"Duke: Goodbye! Your tasks have been saved. See you next time.","lastModifiedDate":"2023-09-25"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":"- `list`: Lists all tasks in the current task list.","lastModifiedDate":"2023-09-25"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":"User: list","lastModifiedDate":"2023-09-25"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":"1. [T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"2. [E][X] Attend webinar (from: 2023-09-25 14:00, to: 2023-09-25 16:00)","lastModifiedDate":"2023-09-25"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"- `mark \u003ctask_id\u003e`: Marks a task as done by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"User: mark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"Duke: Great job! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-25"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":"[T][X] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":60,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":61,"author":{"gitId":"LuoZYi"},"content":"- `unmark \u003ctask_id\u003e`: Unmarks a previously marked task.","lastModifiedDate":"2023-09-25"},{"lineNumber":62,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":63,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":64,"author":{"gitId":"LuoZYi"},"content":"User: unmark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":65,"author":{"gitId":"LuoZYi"},"content":"Duke: Task unmarked:","lastModifiedDate":"2023-09-25"},{"lineNumber":66,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":67,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":68,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":69,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":70,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":71,"author":{"gitId":"LuoZYi"},"content":"- `todo \u003cdescription\u003e`: Adds a to-do task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":72,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":73,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":74,"author":{"gitId":"LuoZYi"},"content":"User: todo Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":75,"author":{"gitId":"LuoZYi"},"content":"Duke: Got it! I\u0027ve added this task:","lastModifiedDate":"2023-09-25"},{"lineNumber":76,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":77,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":78,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":79,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":80,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":81,"author":{"gitId":"LuoZYi"},"content":"- `event \u003cdescription\u003e /from \u003cdatetime\u003e /to \u003cdatetime\u003e`: Adds an event task with a description, start date, and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":82,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":83,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":84,"author":{"gitId":"LuoZYi"},"content":"User: event Team meeting /from 2023-09-27 15:00 /to 2023-09-27 16:30","lastModifiedDate":"2023-09-25"},{"lineNumber":85,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":86,"author":{"gitId":"LuoZYi"},"content":"[E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":87,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":88,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":89,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":90,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":91,"author":{"gitId":"LuoZYi"},"content":"- `deadline \u003cdescription\u003e /by \u003cdatetime\u003e`: Adds a deadline task with a description and due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":92,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":93,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":94,"author":{"gitId":"LuoZYi"},"content":"User: deadline Submit report /by 2023-09-30 23:59","lastModifiedDate":"2023-09-25"},{"lineNumber":95,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":96,"author":{"gitId":"LuoZYi"},"content":"[D][ ] Submit report (by: 2023-09-30 23:59)","lastModifiedDate":"2023-09-25"},{"lineNumber":97,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":98,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":99,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":100,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":101,"author":{"gitId":"LuoZYi"},"content":"- `delete \u003ctask_id\u003e`: Deletes a task by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":102,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":103,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":104,"author":{"gitId":"LuoZYi"},"content":"User: delete 1","lastModifiedDate":"2023-09-25"},{"lineNumber":105,"author":{"gitId":"LuoZYi"},"content":"Duke: Task removed:","lastModifiedDate":"2023-09-25"},{"lineNumber":106,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":107,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":108,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":109,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":110,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":111,"author":{"gitId":"LuoZYi"},"content":"- `find \u003ckeyword\u003e`: Searches for tasks containing the specified keyword.","lastModifiedDate":"2023-09-25"},{"lineNumber":112,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":113,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":114,"author":{"gitId":"LuoZYi"},"content":"User: find meeting","lastModifiedDate":"2023-09-25"},{"lineNumber":115,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the matching tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":116,"author":{"gitId":"LuoZYi"},"content":"1. [E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":117,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":118,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":119,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":120,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":121,"author":{"gitId":"LuoZYi"},"content":"For example:","lastModifiedDate":"2023-09-25"},{"lineNumber":122,"author":{"gitId":"LuoZYi"},"content":"- To add a to-do task: `todo Buy groceries`","lastModifiedDate":"2023-09-25"},{"lineNumber":123,"author":{"gitId":"LuoZYi"},"content":"- To mark a task as done: `mark 1`","lastModifiedDate":"2023-09-25"},{"lineNumber":124,"author":{"gitId":"LuoZYi"},"content":"- To list all tasks: `list`","lastModifiedDate":"2023-09-25"},{"lineNumber":125,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":126,"author":{"gitId":"LuoZYi"},"content":"### Task Types","lastModifiedDate":"2023-09-25"},{"lineNumber":127,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":128,"author":{"gitId":"LuoZYi"},"content":"Duke supports different types of tasks:","lastModifiedDate":"2023-09-25"},{"lineNumber":129,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":130,"author":{"gitId":"LuoZYi"},"content":"- **To-Do**: A simple task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":131,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":132,"author":{"gitId":"LuoZYi"},"content":"- **Event**: A task with a description and a start date and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":133,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":134,"author":{"gitId":"LuoZYi"},"content":"- **Deadline**: A task with a description and a due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":135,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":136,"author":{"gitId":"LuoZYi"},"content":"### Exiting Duke","lastModifiedDate":"2023-09-25"},{"lineNumber":137,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":138,"author":{"gitId":"LuoZYi"},"content":"To exit Duke, simply type `bye` in the chat and press \"Send.\" Duke will save your task list to a file before closing.","lastModifiedDate":"2023-09-25"},{"lineNumber":139,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":140,"author":{"gitId":"LuoZYi"},"content":"### Graphical User Interface (GUI)","lastModifiedDate":"2023-09-25"},{"lineNumber":141,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":142,"author":{"gitId":"LuoZYi"},"content":"Duke also provides a graphical user interface (GUI) for a more interactive experience. The GUI allows you to type commands in a text field and displays Duke\u0027s responses in a chat-like interface.","lastModifiedDate":"2023-09-25"},{"lineNumber":143,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":144,"author":{"gitId":"LuoZYi"},"content":"### Troubleshooting","lastModifiedDate":"2023-09-25"},{"lineNumber":145,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":146,"author":{"gitId":"LuoZYi"},"content":"If you encounter any issues while using Duke, consider the following:","lastModifiedDate":"2023-09-25"},{"lineNumber":147,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":148,"author":{"gitId":"LuoZYi"},"content":"- Ensure you\u0027re using valid commands and following the correct syntax.","lastModifiedDate":"2023-09-25"},{"lineNumber":149,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":150,"author":{"gitId":"LuoZYi"},"content":"- If Duke encounters an error, it will provide an error message with details.","lastModifiedDate":"2023-09-25"},{"lineNumber":151,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":152,"author":{"gitId":"LuoZYi"},"content":"- If you need help with a specific command, type `help` to get a list of available commands and their usage.","lastModifiedDate":"2023-09-25"},{"lineNumber":153,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":154,"author":{"gitId":"LuoZYi"},"content":"### Additional Help","lastModifiedDate":"2023-09-25"},{"lineNumber":155,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":156,"author":{"gitId":"LuoZYi"},"content":"For additional help or questions, please refer to the chatbot\u0027s responses or type `help` for a list of available commands and their descriptions.","lastModifiedDate":"2023-09-25"},{"lineNumber":157,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":158,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":159,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":160,"author":{"gitId":"LuoZYi"},"content":"Enjoy using Duke to manage your tasks efficiently!","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":160}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"javafx {","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2023-09-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-09-20"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2023-09-20"},{"lineNumber":62,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2023-09-20"},{"lineNumber":63,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":22,"-":41}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"# Duke Chatbot User Guide","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"Duke is a command-line chatbot that allows you to manage your tasks easily. You can interact with Duke by typing various commands to add, list, mark, unmark, delete, and save tasks. Duke also stores your tasks in a file for persistence across sessions.","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"## Table of Contents","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"1. [Getting Started](#getting-started)","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"2. [Available Commands](#available-commands)","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"3. [Task Types](#task-types)","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"4. [Exiting Duke](#exiting-duke)","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"5. [Graphical User Interface (GUI)](#graphical-user-interface-gui)","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"6. [Troubleshooting](#troubleshooting)","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"7. [Additional Help](#additional-help)","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"### Getting Started","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":"To start using Duke, follow these steps:","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"1. Launch Duke by running the application.","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"2. Duke will greet you with a welcome message and a list of available commands.","lastModifiedDate":"2023-09-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":"3. You can type commands in the chat and press \"Send\" to interact with Duke.","lastModifiedDate":"2023-09-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":"### Available Commands","lastModifiedDate":"2023-09-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":"Duke supports the following commands:","lastModifiedDate":"2023-09-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":"- `bye`: Exits the chatbot and saves the task list to a file.","lastModifiedDate":"2023-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":"User: bye","lastModifiedDate":"2023-09-25"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":"Duke: Goodbye! Your tasks have been saved. See you next time.","lastModifiedDate":"2023-09-25"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":"- `list`: Lists all tasks in the current task list.","lastModifiedDate":"2023-09-25"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":"User: list","lastModifiedDate":"2023-09-25"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":"1. [T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"2. [E][X] Attend webinar (from: 2023-09-25 14:00, to: 2023-09-25 16:00)","lastModifiedDate":"2023-09-25"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"- `mark \u003ctask_id\u003e`: Marks a task as done by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"User: mark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"Duke: Great job! I\u0027ve marked this task as done:","lastModifiedDate":"2023-09-25"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":"[T][X] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":60,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":61,"author":{"gitId":"LuoZYi"},"content":"- `unmark \u003ctask_id\u003e`: Unmarks a previously marked task.","lastModifiedDate":"2023-09-25"},{"lineNumber":62,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":63,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":64,"author":{"gitId":"LuoZYi"},"content":"User: unmark 1","lastModifiedDate":"2023-09-25"},{"lineNumber":65,"author":{"gitId":"LuoZYi"},"content":"Duke: Task unmarked:","lastModifiedDate":"2023-09-25"},{"lineNumber":66,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Buy groceries","lastModifiedDate":"2023-09-25"},{"lineNumber":67,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":68,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":69,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":70,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":71,"author":{"gitId":"LuoZYi"},"content":"- `todo \u003cdescription\u003e`: Adds a to-do task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":72,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":73,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":74,"author":{"gitId":"LuoZYi"},"content":"User: todo Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":75,"author":{"gitId":"LuoZYi"},"content":"Duke: Got it! I\u0027ve added this task:","lastModifiedDate":"2023-09-25"},{"lineNumber":76,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":77,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":78,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":79,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":80,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":81,"author":{"gitId":"LuoZYi"},"content":"- `event \u003cdescription\u003e /from \u003cdatetime\u003e /to \u003cdatetime\u003e`: Adds an event task with a description, start date, and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":82,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":83,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":84,"author":{"gitId":"LuoZYi"},"content":"User: event Team meeting /from 2023-09-27 15:00 /to 2023-09-27 16:30","lastModifiedDate":"2023-09-25"},{"lineNumber":85,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":86,"author":{"gitId":"LuoZYi"},"content":"[E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":87,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":88,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":89,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":90,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":91,"author":{"gitId":"LuoZYi"},"content":"- `deadline \u003cdescription\u003e /by \u003cdatetime\u003e`: Adds a deadline task with a description and due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":92,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":93,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":94,"author":{"gitId":"LuoZYi"},"content":"User: deadline Submit report /by 2023-09-30 23:59","lastModifiedDate":"2023-09-25"},{"lineNumber":95,"author":{"gitId":"LuoZYi"},"content":"Duke: Task added:","lastModifiedDate":"2023-09-25"},{"lineNumber":96,"author":{"gitId":"LuoZYi"},"content":"[D][ ] Submit report (by: 2023-09-30 23:59)","lastModifiedDate":"2023-09-25"},{"lineNumber":97,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":98,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":99,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":100,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":101,"author":{"gitId":"LuoZYi"},"content":"- `delete \u003ctask_id\u003e`: Deletes a task by its ID.","lastModifiedDate":"2023-09-25"},{"lineNumber":102,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":103,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":104,"author":{"gitId":"LuoZYi"},"content":"User: delete 1","lastModifiedDate":"2023-09-25"},{"lineNumber":105,"author":{"gitId":"LuoZYi"},"content":"Duke: Task removed:","lastModifiedDate":"2023-09-25"},{"lineNumber":106,"author":{"gitId":"LuoZYi"},"content":"[T][ ] Read a book","lastModifiedDate":"2023-09-25"},{"lineNumber":107,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":108,"author":{"gitId":"LuoZYi"},"content":"markdown","lastModifiedDate":"2023-09-25"},{"lineNumber":109,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":110,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":111,"author":{"gitId":"LuoZYi"},"content":"- `find \u003ckeyword\u003e`: Searches for tasks containing the specified keyword.","lastModifiedDate":"2023-09-25"},{"lineNumber":112,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":113,"author":{"gitId":"LuoZYi"},"content":"Example:","lastModifiedDate":"2023-09-25"},{"lineNumber":114,"author":{"gitId":"LuoZYi"},"content":"User: find meeting","lastModifiedDate":"2023-09-25"},{"lineNumber":115,"author":{"gitId":"LuoZYi"},"content":"Duke: Here are the matching tasks in your list:","lastModifiedDate":"2023-09-25"},{"lineNumber":116,"author":{"gitId":"LuoZYi"},"content":"1. [E][ ] Team meeting (from: 2023-09-27 15:00, to: 2023-09-27 16:30)","lastModifiedDate":"2023-09-25"},{"lineNumber":117,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":118,"author":{"gitId":"LuoZYi"},"content":"vbnet","lastModifiedDate":"2023-09-25"},{"lineNumber":119,"author":{"gitId":"LuoZYi"},"content":"Copy code","lastModifiedDate":"2023-09-25"},{"lineNumber":120,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":121,"author":{"gitId":"LuoZYi"},"content":"For example:","lastModifiedDate":"2023-09-25"},{"lineNumber":122,"author":{"gitId":"LuoZYi"},"content":"- To add a to-do task: `todo Buy groceries`","lastModifiedDate":"2023-09-25"},{"lineNumber":123,"author":{"gitId":"LuoZYi"},"content":"- To mark a task as done: `mark 1`","lastModifiedDate":"2023-09-25"},{"lineNumber":124,"author":{"gitId":"LuoZYi"},"content":"- To list all tasks: `list`","lastModifiedDate":"2023-09-25"},{"lineNumber":125,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":126,"author":{"gitId":"LuoZYi"},"content":"### Task Types","lastModifiedDate":"2023-09-25"},{"lineNumber":127,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":128,"author":{"gitId":"LuoZYi"},"content":"Duke supports different types of tasks:","lastModifiedDate":"2023-09-25"},{"lineNumber":129,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":130,"author":{"gitId":"LuoZYi"},"content":"- **To-Do**: A simple task with a description.","lastModifiedDate":"2023-09-25"},{"lineNumber":131,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":132,"author":{"gitId":"LuoZYi"},"content":"- **Event**: A task with a description and a start date and end date.","lastModifiedDate":"2023-09-25"},{"lineNumber":133,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":134,"author":{"gitId":"LuoZYi"},"content":"- **Deadline**: A task with a description and a due date.","lastModifiedDate":"2023-09-25"},{"lineNumber":135,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":136,"author":{"gitId":"LuoZYi"},"content":"### Exiting Duke","lastModifiedDate":"2023-09-25"},{"lineNumber":137,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":138,"author":{"gitId":"LuoZYi"},"content":"To exit Duke, simply type `bye` in the chat and press \"Send.\" Duke will save your task list to a file before closing.","lastModifiedDate":"2023-09-25"},{"lineNumber":139,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":140,"author":{"gitId":"LuoZYi"},"content":"### Graphical User Interface (GUI)","lastModifiedDate":"2023-09-25"},{"lineNumber":141,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":142,"author":{"gitId":"LuoZYi"},"content":"Duke also provides a graphical user interface (GUI) for a more interactive experience. The GUI allows you to type commands in a text field and displays Duke\u0027s responses in a chat-like interface.","lastModifiedDate":"2023-09-25"},{"lineNumber":143,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":144,"author":{"gitId":"LuoZYi"},"content":"### Troubleshooting","lastModifiedDate":"2023-09-25"},{"lineNumber":145,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":146,"author":{"gitId":"LuoZYi"},"content":"If you encounter any issues while using Duke, consider the following:","lastModifiedDate":"2023-09-25"},{"lineNumber":147,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":148,"author":{"gitId":"LuoZYi"},"content":"- Ensure you\u0027re using valid commands and following the correct syntax.","lastModifiedDate":"2023-09-25"},{"lineNumber":149,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":150,"author":{"gitId":"LuoZYi"},"content":"- If Duke encounters an error, it will provide an error message with details.","lastModifiedDate":"2023-09-25"},{"lineNumber":151,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":152,"author":{"gitId":"LuoZYi"},"content":"- If you need help with a specific command, type `help` to get a list of available commands and their usage.","lastModifiedDate":"2023-09-25"},{"lineNumber":153,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":154,"author":{"gitId":"LuoZYi"},"content":"### Additional Help","lastModifiedDate":"2023-09-25"},{"lineNumber":155,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":156,"author":{"gitId":"LuoZYi"},"content":"For additional help or questions, please refer to the chatbot\u0027s responses or type `help` for a list of available commands and their descriptions.","lastModifiedDate":"2023-09-25"},{"lineNumber":157,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":158,"author":{"gitId":"LuoZYi"},"content":"---","lastModifiedDate":"2023-09-25"},{"lineNumber":159,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":160,"author":{"gitId":"LuoZYi"},"content":"Enjoy using Duke to manage your tasks efficiently!","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":147,"-":13}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"\u003cchildren\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" \u003cScrollPane minHeight\u003d\"50.0\" prefHeight\u003d\"100.0\" maxHeight\u003d\"1.7976931348623157E308\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":"\u003c/children\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"\u003cpadding\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":"\u003c/padding\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":23}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.effect.Glow?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"GUI.MainWindow\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" opacity\u003d\"0.5\" prefHeight\u003d\"43.0\" prefWidth\u003d\"324.0\" promptText\u003d\"Start converse!\" AnchorPane.bottomAnchor\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" \u003ceffect\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" \u003cGlow /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" \u003c/effect\u003e\u003c/TextField\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" \u003cButton fx:id\u003d\"sendButton\" defaultButton\u003d\"true\" layoutX\u003d\"324.0\" layoutY\u003d\"557.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"43.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" textFill\u003d\"#2849bf\" textOverrun\u003d\"CENTER_ELLIPSIS\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"413.0\" /\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-25"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-25"}],"authorContributionMap":{"LuoZYi":23}},{"path":"src/test/java/duke/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"package duke;","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"public class DukeTest {","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" private final InputStream originalSystemIn \u003d System.in;","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":" private final PrintStream originalSystemOut \u003d System.out;","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" private ByteArrayInputStream testInput;","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" private ByteArrayOutputStream testOutput;","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" @BeforeEach","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" // Redirect System.in and System.out to capture input and output","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" testOutput \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":" System.setOut(new PrintStream(testOutput));","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" // Prepare test input","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" String userInput \u003d \"todo badminton\\n\"; // Replace with your test input","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" testInput \u003d new ByteArrayInputStream(userInput.getBytes());","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" System.setIn(testInput);","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" @AfterEach","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" System.setIn(originalSystemIn);","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":" System.setOut(originalSystemOut);","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":" public void testDuke() {","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":" duke.run();","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":" String actualOutput \u003d testOutput.toString().trim();","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":" String expectedOutput \u003d \"Hello! I\u0027m Lakinta\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":" \"[T][ ] badminton\\n\" +","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":" \"Now you have 1 tasks in the list.\";","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":" String normalizedExpected \u003d normalizeString(expectedOutput);","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":" String normalizedActual \u003d normalizeString(actualOutput);","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":" assertEquals(normalizedExpected, normalizedActual);","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":" private String normalizeString(String input) {","lastModifiedDate":"2023-09-20"},{"lineNumber":56,"author":{"gitId":"LuoZYi"},"content":" return input.replaceAll(\"\\\\s+\", \" \").replaceAll(\"\\r\\n\", \"\\n\").trim();","lastModifiedDate":"2023-09-20"},{"lineNumber":57,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":58,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":59,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":59}},{"path":"src/test/java/duke/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"package duke;","lastModifiedDate":"2023-09-20"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-20"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-20"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-20"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-20"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":" public void testToDoToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":" ToDo todo \u003d new ToDo(\"Buy groceries\");","lastModifiedDate":"2023-09-20"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [T][ ] Buy groceries\", todo.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":15,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":16,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":17,"author":{"gitId":"LuoZYi"},"content":" public void testEventToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":18,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 9, 15, 10, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":19,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 9, 15, 12, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":20,"author":{"gitId":"LuoZYi"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-09-20"},{"lineNumber":21,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [E][ ] Meeting (from: Sep 15 2023 10:00 to: Sep 15 2023 12:00)\", event.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":22,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":23,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":24,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":25,"author":{"gitId":"LuoZYi"},"content":" public void testDeadlineToString() {","lastModifiedDate":"2023-09-20"},{"lineNumber":26,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.of(2023, 9, 30, 23, 59);","lastModifiedDate":"2023-09-20"},{"lineNumber":27,"author":{"gitId":"LuoZYi"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", deadlineTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":28,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [D][ ] Submit report (by: Sep 30 2023 23:59)\", deadline.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":29,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":30,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":31,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":32,"author":{"gitId":"LuoZYi"},"content":" public void testToDoMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":33,"author":{"gitId":"LuoZYi"},"content":" ToDo todo \u003d new ToDo(\"Read a book\");","lastModifiedDate":"2023-09-20"},{"lineNumber":34,"author":{"gitId":"LuoZYi"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":35,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [T][X] Read a book\", todo.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":36,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":37,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":38,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":39,"author":{"gitId":"LuoZYi"},"content":" public void testEventMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":40,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 9, 15, 10, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":41,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 9, 15, 12, 0);","lastModifiedDate":"2023-09-20"},{"lineNumber":42,"author":{"gitId":"LuoZYi"},"content":" Event event \u003d new Event(\"Meeting\", from, to);","lastModifiedDate":"2023-09-20"},{"lineNumber":43,"author":{"gitId":"LuoZYi"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":44,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [E][X] Meeting (from: Sep 15 2023 10:00 to: Sep 15 2023 12:00)\", event.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":45,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":46,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"},{"lineNumber":47,"author":{"gitId":"LuoZYi"},"content":" @Test","lastModifiedDate":"2023-09-20"},{"lineNumber":48,"author":{"gitId":"LuoZYi"},"content":" public void testDeadlineMarkAsDone() {","lastModifiedDate":"2023-09-20"},{"lineNumber":49,"author":{"gitId":"LuoZYi"},"content":" LocalDateTime deadlineTime \u003d LocalDateTime.of(2023, 9, 30, 23, 59);","lastModifiedDate":"2023-09-20"},{"lineNumber":50,"author":{"gitId":"LuoZYi"},"content":" Deadline deadline \u003d new Deadline(\"Submit report\", deadlineTime);","lastModifiedDate":"2023-09-20"},{"lineNumber":51,"author":{"gitId":"LuoZYi"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-20"},{"lineNumber":52,"author":{"gitId":"LuoZYi"},"content":" assertEquals(\" [D][X] Submit report (by: Sep 30 2023 23:59)\", deadline.toString());","lastModifiedDate":"2023-09-20"},{"lineNumber":53,"author":{"gitId":"LuoZYi"},"content":" }","lastModifiedDate":"2023-09-20"},{"lineNumber":54,"author":{"gitId":"LuoZYi"},"content":"}","lastModifiedDate":"2023-09-20"},{"lineNumber":55,"author":{"gitId":"LuoZYi"},"content":"","lastModifiedDate":"2023-09-20"}],"authorContributionMap":{"LuoZYi":55}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"LuoZYi"},"content":"todo eat breakfast","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"LuoZYi"},"content":"deadline assignment /by tonight","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"LuoZYi"},"content":"todo meet with friends","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LuoZYi"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"LuoZYi"},"content":"event play badminton /from Sunday 4pm /to 6pm","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LuoZYi"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LuoZYi"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LuoZYi"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LuoZYi"},"content":"mark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LuoZYi"},"content":"todo study hard","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LuoZYi"},"content":"mark 5","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LuoZYi"},"content":"unmark 4","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LuoZYi"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LuoZYi"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LuoZYi":14}},{"path":"data/duke.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"LuoZYi":0}}] diff --git a/LuoZYi_ip_master/commits.json b/LuoZYi_ip_master/commits.json index a00ed45c..f5154d80 100644 --- a/LuoZYi_ip_master/commits.json +++ b/LuoZYi_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LuoZYi":[{"date":"2023-08-24","commitResults":[{"hash":"5caf096973d916840f1d12163f01c1ada50e888b","isMergeCommit":false,"messageTitle":"Add Duke.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"651b5f031f33a066eb63fcb69a3dc976792a5ad7","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"f3fa383e2ef8c57dd7708ad9b303e3cab2b0f018","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":9}}},{"hash":"994db45c4fd86e1d11ad9b42ad8fa5f711830d33","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":3}}},{"hash":"011d0bb9c447bff24b457b20348c13196acb8886","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":1}}},{"hash":"7fcb8a02faa92c86fdee40034cc105ed26498e27","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/LuoZYi/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-25","commitResults":[{"hash":"456d7266aabc7f0bbc6cf18b6b5e66bf16383a08","isMergeCommit":false,"messageTitle":"text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0},"md":{"insertions":62,"deletions":0}}},{"hash":"814035371d9155a0eea2d1d62202639ca0c01dfd","isMergeCommit":false,"messageTitle":"clear","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"181c4fc917caeed1e7884d3cecadc49edf525c14","isMergeCommit":false,"messageTitle":"Exception","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":21}}},{"hash":"3efad5959a789a9eebf6a0e5934396360e07b58b","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dc5eacc937e9364471b08f9529e6b0afd04c784d","isMergeCommit":false,"messageTitle":"Delete text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38},"md":{"insertions":0,"deletions":29}}}]},{"date":"2023-09-06","commitResults":[{"hash":"3d65d6e1c00bad2ccd34495d2f318283261d7fc0","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"db69b1cbf101cbcaa4da7ef9fcb66e76ad29780e","isMergeCommit":false,"messageTitle":"Delete some unnecessary lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":19}}}]},{"date":"2023-09-10","commitResults":[{"hash":"c85782ae0e66ffe00b7e2bbf74c9c0bd74649060","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":149}}}]},{"date":"2023-09-14","commitResults":[{"hash":"dab74f0603c6b84a3b69a0bdd28eb5f534761df2","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":249}}},{"hash":"d415f79659ab2e4f5e323262d89fb62e3ab595be","isMergeCommit":false,"messageTitle":"A-Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":12}}},{"hash":"05a8bd00964f9bd986d0b07e46508b65530db466","isMergeCommit":true,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-20","commitResults":[{"hash":"d80e8aa3cb36af64c35a0d7244972d9884889c91","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":69,"deletions":0},"java":{"insertions":114,"deletions":0}}},{"hash":"9510bb92e9e0b272056009dec55fe8e62eac9a27","isMergeCommit":false,"messageTitle":"gradle src java","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":10,"deletions":6}}},{"hash":"2b50f823b954c79a72d5a7a45ea24e78ab2b95f8","isMergeCommit":false,"messageTitle":"Add Java docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":294,"deletions":16}}},{"hash":"c97dcc3301a5138b04512a4189e8af4aa4591844","isMergeCommit":false,"messageTitle":"Follow coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":48}}}]},{"date":"2023-09-21","commitResults":[{"hash":"09687f2545e7d55339b6b68536b98abf2870c209","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}}]},{"date":"2023-09-25","commitResults":[{"hash":"11a30b96d01d170d5e92c69f2c458d7ae804fa67","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":434,"deletions":19}}},{"hash":"39a3e6767df4288eb6fce3f40466ecb13d30bd80","isMergeCommit":false,"messageTitle":"Add Assertions to Document Assumptions in Duke","messageBody":"Added assert statements in the Duke class to document and validate important assumptions at various points in the code.\nThe assertions cover conditions related to file paths, class initialization, method parameters, and exit procedures.\nThese assertions provide clarity about the expected behavior of the code and help ensure that assumptions hold true during program execution.\nAssertions are a useful tool for enhancing code robustness and catching potential issues during development and testing.\nAssertions are enabled during development and testing but should be disabled in production for improved performance.\nThis commit contributes to code quality and maintainability by explicitly documenting and verifying critical assumptions within the Duke class.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"907a215f44016e6c16809894eed4ebaea78cd067","isMergeCommit":true,"messageTitle":"Merge pull request #2 from LuoZYi/branch-A-Assertions","messageBody":"Branch-A-Assertions","fileTypesAndContributionMap":{}},{"hash":"f1e6e01007ce19b4cd8da549114b8b015f630f52","isMergeCommit":false,"messageTitle":"Improve Code Quality and Set Up Package GUI","messageBody":"In this commit, we have taken several steps to enhance the code quality and organization of the project:\n\n1. Refactored and cleaned up code to improve readability and maintainability.\n2. Reorganized classes and packages for better project structure.\n3. Moved relevant files related to the graphical user interface (GUI) into a new \u0027GUI\u0027 package.\n4. Updated import statements and references to reflect the new package structure.\n\nThese changes make the codebase more organized and lay the foundation for future enhancements and feature additions related to the GUI component of the application.\n\nChanges Made:\n- Refactored code for improved clarity and consistency.\n- Created a new \u0027GUI\u0027 package and moved relevant files into it.\n- Updated import statements and references accordingly.\n- Reviewed and tested code changes to ensure they do not introduce errors.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"978e718694aca6e16a93c7992072cd4167e41314","isMergeCommit":true,"messageTitle":"Merge pull request #3 from LuoZYi/branch-A-CodingQuality","messageBody":"Improve Code Quality and Set Up Package GUI","fileTypesAndContributionMap":{}},{"hash":"b49041e91dd7e16a0cba7f2dc4363feff0e66327","isMergeCommit":false,"messageTitle":"Add Help extension","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}},{"hash":"9276ea956e33a727ac747784ac1a94556541184d","isMergeCommit":true,"messageTitle":"Merge pull request #4 from LuoZYi/branch-BCD-Extension","messageBody":"Add Help extension","fileTypesAndContributionMap":{}},{"hash":"3b737d849024ea77c4e1c27ad1029aa044257533","isMergeCommit":false,"messageTitle":"A-UserGuide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":7},"fxml":{"insertions":46,"deletions":0},"md":{"insertions":147,"deletions":16}}},{"hash":"5a1bd1a4d2a7932352425d07615df23e77be8d81","isMergeCommit":false,"messageTitle":"Update MainWindow","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"13a34266d720e7b6c2a3d9d1983772e74826170c","isMergeCommit":true,"messageTitle":"Merge pull request #5 from LuoZYi/branch-BCD-Extension","messageBody":"Update MainWindow","fileTypesAndContributionMap":{}},{"hash":"a96e87a1f241b97665bbc40fe3d0b7dafb6c67f9","isMergeCommit":true,"messageTitle":"Resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f286b4d5eeb5b31d948fcc785a03f77c635c45d8","isMergeCommit":false,"messageTitle":"Delete docs directory","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":160}}},{"hash":"758742d8cf29b5a89219ee488eff30241d221840","isMergeCommit":false,"messageTitle":"Recover Accidentally deleted files","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":160,"deletions":0}}},{"hash":"26fc4f5dadf53a05eb7e1881bb4e955d36dfb461","isMergeCommit":false,"messageTitle":"Resolve conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1283}}},{"hash":"5b966001e268010b284743841015acfbdab3da0d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":160,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"LuoZYi":{"java":114,"md":307,"fxml":46,"sh":0,"bat":0,"gradle":24,"txt":14}},"authorContributionVariance":{"LuoZYi":179141.89},"authorDisplayNameMap":{"LuoZYi":"CS2103T-T10-1 LUO ..NGYI"}} +{"authorDailyContributionsMap":{"LuoZYi":[{"date":"2023-08-24","commitResults":[{"hash":"5caf096973d916840f1d12163f01c1ada50e888b","isMergeCommit":false,"messageTitle":"Add Duke.java","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"651b5f031f33a066eb63fcb69a3dc976792a5ad7","isMergeCommit":false,"messageTitle":"Level 1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"f3fa383e2ef8c57dd7708ad9b303e3cab2b0f018","isMergeCommit":false,"messageTitle":"Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":9}}},{"hash":"994db45c4fd86e1d11ad9b42ad8fa5f711830d33","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":3}}},{"hash":"011d0bb9c447bff24b457b20348c13196acb8886","isMergeCommit":false,"messageTitle":"Level 3","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":1}}},{"hash":"7fcb8a02faa92c86fdee40034cc105ed26498e27","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/LuoZYi/ip","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-25","commitResults":[{"hash":"456d7266aabc7f0bbc6cf18b6b5e66bf16383a08","isMergeCommit":false,"messageTitle":"text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"bat":{"insertions":21,"deletions":0},"sh":{"insertions":38,"deletions":0},"md":{"insertions":62,"deletions":0}}},{"hash":"814035371d9155a0eea2d1d62202639ca0c01dfd","isMergeCommit":false,"messageTitle":"clear","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":10}}},{"hash":"181c4fc917caeed1e7884d3cecadc49edf525c14","isMergeCommit":false,"messageTitle":"Exception","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":21}}},{"hash":"3efad5959a789a9eebf6a0e5934396360e07b58b","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}}]},{"date":"2023-09-05","commitResults":[{"hash":"dc5eacc937e9364471b08f9529e6b0afd04c784d","isMergeCommit":false,"messageTitle":"Delete text-ui-test","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"bat":{"insertions":0,"deletions":21},"sh":{"insertions":0,"deletions":38},"md":{"insertions":0,"deletions":29}}}]},{"date":"2023-09-06","commitResults":[{"hash":"3d65d6e1c00bad2ccd34495d2f318283261d7fc0","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":83,"deletions":1}}},{"hash":"db69b1cbf101cbcaa4da7ef9fcb66e76ad29780e","isMergeCommit":false,"messageTitle":"Delete some unnecessary lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":19}}}]},{"date":"2023-09-10","commitResults":[{"hash":"c85782ae0e66ffe00b7e2bbf74c9c0bd74649060","isMergeCommit":false,"messageTitle":"Level 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":149}}}]},{"date":"2023-09-14","commitResults":[{"hash":"dab74f0603c6b84a3b69a0bdd28eb5f534761df2","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":381,"deletions":249}}},{"hash":"d415f79659ab2e4f5e323262d89fb62e3ab595be","isMergeCommit":false,"messageTitle":"A-Package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":12}}},{"hash":"05a8bd00964f9bd986d0b07e46508b65530db466","isMergeCommit":true,"messageTitle":"A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-20","commitResults":[{"hash":"d80e8aa3cb36af64c35a0d7244972d9884889c91","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":69,"deletions":0},"java":{"insertions":114,"deletions":0}}},{"hash":"9510bb92e9e0b272056009dec55fe8e62eac9a27","isMergeCommit":false,"messageTitle":"gradle src java","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":10,"deletions":6}}},{"hash":"2b50f823b954c79a72d5a7a45ea24e78ab2b95f8","isMergeCommit":false,"messageTitle":"Add Java docs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":294,"deletions":16}}},{"hash":"c97dcc3301a5138b04512a4189e8af4aa4591844","isMergeCommit":false,"messageTitle":"Follow coding standards","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":48}}}]},{"date":"2023-09-21","commitResults":[{"hash":"09687f2545e7d55339b6b68536b98abf2870c209","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}}]},{"date":"2023-09-25","commitResults":[{"hash":"11a30b96d01d170d5e92c69f2c458d7ae804fa67","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":20,"deletions":0},"java":{"insertions":434,"deletions":19}}},{"hash":"39a3e6767df4288eb6fce3f40466ecb13d30bd80","isMergeCommit":false,"messageTitle":"Add Assertions to Document Assumptions in Duke","messageBody":"Added assert statements in the Duke class to document and validate important assumptions at various points in the code.\nThe assertions cover conditions related to file paths, class initialization, method parameters, and exit procedures.\nThese assertions provide clarity about the expected behavior of the code and help ensure that assumptions hold true during program execution.\nAssertions are a useful tool for enhancing code robustness and catching potential issues during development and testing.\nAssertions are enabled during development and testing but should be disabled in production for improved performance.\nThis commit contributes to code quality and maintainability by explicitly documenting and verifying critical assumptions within the Duke class.\n","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"907a215f44016e6c16809894eed4ebaea78cd067","isMergeCommit":true,"messageTitle":"Merge pull request #2 from LuoZYi/branch-A-Assertions","messageBody":"Branch-A-Assertions","fileTypesAndContributionMap":{}},{"hash":"f1e6e01007ce19b4cd8da549114b8b015f630f52","isMergeCommit":false,"messageTitle":"Improve Code Quality and Set Up Package GUI","messageBody":"In this commit, we have taken several steps to enhance the code quality and organization of the project:\n\n1. Refactored and cleaned up code to improve readability and maintainability.\n2. Reorganized classes and packages for better project structure.\n3. Moved relevant files related to the graphical user interface (GUI) into a new \u0027GUI\u0027 package.\n4. Updated import statements and references to reflect the new package structure.\n\nThese changes make the codebase more organized and lay the foundation for future enhancements and feature additions related to the GUI component of the application.\n\nChanges Made:\n- Refactored code for improved clarity and consistency.\n- Created a new \u0027GUI\u0027 package and moved relevant files into it.\n- Updated import statements and references accordingly.\n- Reviewed and tested code changes to ensure they do not introduce errors.\n","tags":["A-FullCommitMessage"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"978e718694aca6e16a93c7992072cd4167e41314","isMergeCommit":true,"messageTitle":"Merge pull request #3 from LuoZYi/branch-A-CodingQuality","messageBody":"Improve Code Quality and Set Up Package GUI","fileTypesAndContributionMap":{}},{"hash":"b49041e91dd7e16a0cba7f2dc4363feff0e66327","isMergeCommit":false,"messageTitle":"Add Help extension","messageBody":"","tags":["BCD-Extension"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":6}}},{"hash":"9276ea956e33a727ac747784ac1a94556541184d","isMergeCommit":true,"messageTitle":"Merge pull request #4 from LuoZYi/branch-BCD-Extension","messageBody":"Add Help extension","fileTypesAndContributionMap":{}},{"hash":"3b737d849024ea77c4e1c27ad1029aa044257533","isMergeCommit":false,"messageTitle":"A-UserGuide","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":7},"fxml":{"insertions":46,"deletions":0},"md":{"insertions":147,"deletions":16}}},{"hash":"5a1bd1a4d2a7932352425d07615df23e77be8d81","isMergeCommit":false,"messageTitle":"Update MainWindow","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"13a34266d720e7b6c2a3d9d1983772e74826170c","isMergeCommit":true,"messageTitle":"Merge pull request #5 from LuoZYi/branch-BCD-Extension","messageBody":"Update MainWindow","fileTypesAndContributionMap":{}},{"hash":"a96e87a1f241b97665bbc40fe3d0b7dafb6c67f9","isMergeCommit":true,"messageTitle":"Resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f286b4d5eeb5b31d948fcc785a03f77c635c45d8","isMergeCommit":false,"messageTitle":"Delete docs directory","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":0,"deletions":160}}},{"hash":"758742d8cf29b5a89219ee488eff30241d221840","isMergeCommit":false,"messageTitle":"Recover Accidentally deleted files","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":160,"deletions":0}}},{"hash":"26fc4f5dadf53a05eb7e1881bb4e955d36dfb461","isMergeCommit":false,"messageTitle":"Resolve conflict","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1283}}},{"hash":"5b966001e268010b284743841015acfbdab3da0d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":160,"deletions":24}}}]},{"date":"2023-09-27","commitResults":[{"hash":"7b703f3e47d96be7fece76992ee82f44ef9dc17f","isMergeCommit":false,"messageTitle":"Modify gradle location","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":4}}},{"hash":"cfecf240a80aa3816a85658db691db46824ffac3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/LuoZYi/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"LuoZYi":{"java":114,"md":307,"fxml":46,"sh":0,"bat":0,"gradle":22,"txt":14}},"authorContributionVariance":{"LuoZYi":171097.22},"authorDisplayNameMap":{"LuoZYi":"CS2103T-T10-1 LUO ..NGYI"}} diff --git a/TyrusLye_ip_master/authorship.json b/TyrusLye_ip_master/authorship.json index 80e8b1f1..54929976 100644 --- a/TyrusLye_ip_master/authorship.json +++ b/TyrusLye_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"# URBOI","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"Are you confused? Lost all the time? Don\u0027t know whats happening? **Well So Do I*. Introducing; _URBOI_. THE BEST THING REMEMBERER IN TOWN.","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"## It can:","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"- Help you remember things!","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"- Set deadlines for things!","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"- Makes finding the things you need to do easy!","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"Greetings from:","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":"UUUUUUUU UUUUUUUURRRRRRRRRRRRRRRRR BBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"U::::::U U::::::UR::::::::::::::::R B::::::::::::::::B OO:::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":"U::::::U U::::::UR::::::RRRRRR:::::R B::::::BBBBBB:::::B OO:::::::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":"UU:::::U U:::::UURR:::::R R:::::RBB:::::B B:::::BO:::::::OOO:::::::OII::::::II","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" U:::::U U:::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R:::::::::::::RR B:::::::::::::BB O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" U::::::U U::::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" U:::::::UUU:::::::U RR:::::R R:::::RBB:::::BBBBBB::::::BO:::::::OOO:::::::OII::::::II","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" UU:::::::::::::UU R::::::R R:::::RB:::::::::::::::::B OO:::::::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" UU:::::::::UU R::::::R R:::::RB::::::::::::::::B OO:::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" UUUUUUUUU RRRRRRRR RRRRRRRBBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":23,"-":4}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"TyrusLye"},"content":" mainClassName\u003d \"Duke\"","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TyrusLye":1,"-":42}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"import java.io.*;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":" private static final String FILE_PATH \u003d \"src/main/java/tasks.txt\";","lastModifiedDate":"2023-09-07"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":" * Main method to start the Duke application.","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-07"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" loadTasksFromFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" String logo \u003d \"UUUUUUUU UUUUUUUURRRRRRRRRRRRRRRRR BBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" +\"U::::::U U::::::UR::::::::::::::::R B::::::::::::::::B OO:::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" +\"U::::::U U::::::UR::::::RRRRRR:::::R B::::::BBBBBB:::::B OO:::::::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" +\"UU:::::U U:::::UURR:::::R R:::::RBB:::::B B:::::BO:::::::OOO:::::::OII::::::II\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::U U:::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R:::::::::::::RR B:::::::::::::BB O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":" +\" U::::::U U::::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":31,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::::UUU:::::::U RR:::::R R:::::RBB:::::BBBBBB::::::BO:::::::OOO:::::::OII::::::II\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"TyrusLye"},"content":" +\" UU:::::::::::::UU R::::::R R:::::RB:::::::::::::::::B OO:::::::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"TyrusLye"},"content":" +\" UU:::::::::UU R::::::R R:::::RB::::::::::::::::B OO:::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":34,"author":{"gitId":"TyrusLye"},"content":" +\" UUUUUUUUU RRRRRRRR RRRRRRRBBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII\\n\";","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Wazzup! It\u0027s\\n\" + logo);","lastModifiedDate":"2023-09-23"},{"lineNumber":37,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"What can I do for you mah man?\");","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"TyrusLye"},"content":" while (true) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"TyrusLye"},"content":" String command \u003d scanner.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"TyrusLye"},"content":" try{","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"TyrusLye"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"TyrusLye"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"TyrusLye"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"TyrusLye"},"content":" System.out.println((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"TyrusLye"},"content":" String description \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"TyrusLye"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"TyrusLye"},"content":" // Parse the date and time in the format d/M/yyyy HHmm","lastModifiedDate":"2023-09-07"},{"lineNumber":62,"author":{"gitId":"TyrusLye"},"content":" String[] parts \u003d command.split(\" /by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":63,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":64,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"Deadline command must include a date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":65,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":66,"author":{"gitId":"TyrusLye"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-09-07"},{"lineNumber":67,"author":{"gitId":"TyrusLye"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(parts[1], DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":68,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":69,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Deadline(description, dateTime));","lastModifiedDate":"2023-09-07"},{"lineNumber":70,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"TyrusLye"},"content":" String description \u003d command.substring(6, command.indexOf(\"/from\")).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"TyrusLye"},"content":" String from \u003d command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\")).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"TyrusLye"},"content":" String to \u003d command.substring(command.indexOf(\"/to\") + 4).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"TyrusLye"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n \" + tasks.get(index));","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"TyrusLye"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n \" + tasks.get(index));","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"TyrusLye"},"content":" Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n \" + removedTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-23"},{"lineNumber":105,"author":{"gitId":"TyrusLye"},"content":" String keyword \u003d command.substring(5).trim();","lastModifiedDate":"2023-09-23"},{"lineNumber":106,"author":{"gitId":"TyrusLye"},"content":" findTasks(tasks, keyword);","lastModifiedDate":"2023-09-23"},{"lineNumber":107,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"TyrusLye"},"content":" saveTasksToFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":111,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"TyrusLye"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"TyrusLye"},"content":" scanner.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":122,"author":{"gitId":"TyrusLye"},"content":" private static String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":123,"author":{"gitId":"TyrusLye"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":124,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":125,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":126,"author":{"gitId":"TyrusLye"},"content":" * Loads tasks from a file into the task list.","lastModifiedDate":"2023-09-23"},{"lineNumber":127,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":128,"author":{"gitId":"TyrusLye"},"content":" * @param tasks The ArrayList to store the loaded tasks.","lastModifiedDate":"2023-09-23"},{"lineNumber":129,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":130,"author":{"gitId":"TyrusLye"},"content":" private static void loadTasksFromFile(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":131,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":132,"author":{"gitId":"TyrusLye"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":133,"author":{"gitId":"TyrusLye"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":134,"author":{"gitId":"TyrusLye"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-07"},{"lineNumber":135,"author":{"gitId":"TyrusLye"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"TyrusLye"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d createTaskFromLine(line);","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"TyrusLye"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"TyrusLye"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"TyrusLye"},"content":" fileScanner.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"TyrusLye"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":145,"author":{"gitId":"TyrusLye"},"content":" // Handle file not found exception","lastModifiedDate":"2023-09-07"},{"lineNumber":146,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"File not found: \" + FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":151,"author":{"gitId":"TyrusLye"},"content":" * Creates a Task object from a line of text in the specified format.","lastModifiedDate":"2023-09-23"},{"lineNumber":152,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":153,"author":{"gitId":"TyrusLye"},"content":" * @param line The line of text containing task details.","lastModifiedDate":"2023-09-23"},{"lineNumber":154,"author":{"gitId":"TyrusLye"},"content":" * @return A Task object representing the task described in the line, or null if parsing fails.","lastModifiedDate":"2023-09-23"},{"lineNumber":155,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":156,"author":{"gitId":"TyrusLye"},"content":" private static Task createTaskFromLine(String line) {","lastModifiedDate":"2023-09-07"},{"lineNumber":157,"author":{"gitId":"TyrusLye"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-07"},{"lineNumber":158,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-07"},{"lineNumber":159,"author":{"gitId":"TyrusLye"},"content":" return null;","lastModifiedDate":"2023-09-07"},{"lineNumber":160,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":161,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"TyrusLye"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":163,"author":{"gitId":"TyrusLye"},"content":" String status \u003d parts[1];","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"TyrusLye"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-07"},{"lineNumber":165,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":167,"author":{"gitId":"TyrusLye"},"content":" switch (type) {","lastModifiedDate":"2023-09-07"},{"lineNumber":168,"author":{"gitId":"TyrusLye"},"content":" case \"T\":","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"TyrusLye"},"content":" case \"D\":","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"TyrusLye"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-07"},{"lineNumber":174,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Deadline(description, LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\")));","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":176,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"TyrusLye"},"content":" case \"E\":","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003e\u003d 5) {","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"TyrusLye"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"TyrusLye"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-07"},{"lineNumber":181,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":184,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"TyrusLye"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"TyrusLye"},"content":" if (status.equals(\"1\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":188,"author":{"gitId":"TyrusLye"},"content":" task.markDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"TyrusLye"},"content":" task.markNotDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"TyrusLye"},"content":" return task;","lastModifiedDate":"2023-09-07"},{"lineNumber":195,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"TyrusLye"},"content":" private static void findTasks(ArrayList\u003cTask\u003e tasks, String keyword) {","lastModifiedDate":"2023-09-23"},{"lineNumber":198,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-23"},{"lineNumber":199,"author":{"gitId":"TyrusLye"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-23"},{"lineNumber":200,"author":{"gitId":"TyrusLye"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-23"},{"lineNumber":201,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-23"},{"lineNumber":202,"author":{"gitId":"TyrusLye"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-23"},{"lineNumber":203,"author":{"gitId":"TyrusLye"},"content":" System.out.println((count + 1) + \". \" + task);","lastModifiedDate":"2023-09-23"},{"lineNumber":204,"author":{"gitId":"TyrusLye"},"content":" count++;","lastModifiedDate":"2023-09-23"},{"lineNumber":205,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":206,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":207,"author":{"gitId":"TyrusLye"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-23"},{"lineNumber":208,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"No matching tasks found.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":209,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":210,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":211,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":212,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":213,"author":{"gitId":"TyrusLye"},"content":" * Save tasks to a file.","lastModifiedDate":"2023-09-23"},{"lineNumber":214,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":215,"author":{"gitId":"TyrusLye"},"content":" * @param tasks The ArrayList of tasks to save.","lastModifiedDate":"2023-09-23"},{"lineNumber":216,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":217,"author":{"gitId":"TyrusLye"},"content":" private static void saveTasksToFile(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":218,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":219,"author":{"gitId":"TyrusLye"},"content":" FileWriter fileWriter \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":220,"author":{"gitId":"TyrusLye"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":221,"author":{"gitId":"TyrusLye"},"content":" fileWriter.write(task.toFileString() + System.lineSeparator());","lastModifiedDate":"2023-09-07"},{"lineNumber":222,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":223,"author":{"gitId":"TyrusLye"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":224,"author":{"gitId":"TyrusLye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":225,"author":{"gitId":"TyrusLye"},"content":" // Handle IO exception","lastModifiedDate":"2023-09-07"},{"lineNumber":226,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":227,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":228,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":229,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":230,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":232,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":233,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":234,"author":{"gitId":"TyrusLye"},"content":" * Represents a task that can be added to the task list.","lastModifiedDate":"2023-09-23"},{"lineNumber":235,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":236,"author":{"gitId":"TyrusLye"},"content":"class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"TyrusLye"},"content":" protected String description;","lastModifiedDate":"2023-09-07"},{"lineNumber":238,"author":{"gitId":"TyrusLye"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-07"},{"lineNumber":239,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"TyrusLye"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-07"},{"lineNumber":241,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":242,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"TyrusLye"},"content":" return \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":244,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":245,"author":{"gitId":"TyrusLye"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-07"},{"lineNumber":246,"author":{"gitId":"TyrusLye"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":247,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":248,"author":{"gitId":"TyrusLye"},"content":" public Task(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":249,"author":{"gitId":"TyrusLye"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"TyrusLye"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":251,"author":{"gitId":"TyrusLye"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-07"},{"lineNumber":252,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":253,"author":{"gitId":"TyrusLye"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":254,"author":{"gitId":"TyrusLye"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // Return a tick or cross symbol cuz im lazy like that, or its easier. idk","lastModifiedDate":"2023-08-24"},{"lineNumber":255,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":256,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":257,"author":{"gitId":"TyrusLye"},"content":" * Get the description of the task.","lastModifiedDate":"2023-09-23"},{"lineNumber":258,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":259,"author":{"gitId":"TyrusLye"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-23"},{"lineNumber":260,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":261,"author":{"gitId":"TyrusLye"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-23"},{"lineNumber":262,"author":{"gitId":"TyrusLye"},"content":" return description;","lastModifiedDate":"2023-09-23"},{"lineNumber":263,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":264,"author":{"gitId":"TyrusLye"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":265,"author":{"gitId":"TyrusLye"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":266,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":267,"author":{"gitId":"TyrusLye"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":268,"author":{"gitId":"TyrusLye"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":269,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":270,"author":{"gitId":"TyrusLye"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":271,"author":{"gitId":"TyrusLye"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":272,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":273,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":274,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":275,"author":{"gitId":"TyrusLye"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":276,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":277,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":278,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":279,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":280,"author":{"gitId":"TyrusLye"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-09-23"},{"lineNumber":281,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":282,"author":{"gitId":"TyrusLye"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":283,"author":{"gitId":"TyrusLye"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":284,"author":{"gitId":"TyrusLye"},"content":" super(description,null);","lastModifiedDate":"2023-09-07"},{"lineNumber":285,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":286,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":287,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":288,"author":{"gitId":"TyrusLye"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-07"},{"lineNumber":289,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":290,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":291,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":292,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":293,"author":{"gitId":"TyrusLye"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":294,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":295,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":297,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":298,"author":{"gitId":"TyrusLye"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-23"},{"lineNumber":299,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":300,"author":{"gitId":"TyrusLye"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":301,"author":{"gitId":"TyrusLye"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":302,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":303,"author":{"gitId":"TyrusLye"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":304,"author":{"gitId":"TyrusLye"},"content":" super(description, date);","lastModifiedDate":"2023-09-07"},{"lineNumber":305,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":306,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":307,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":308,"author":{"gitId":"TyrusLye"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + date;","lastModifiedDate":"2023-09-07"},{"lineNumber":309,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":310,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":311,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":312,"author":{"gitId":"TyrusLye"},"content":" return \"[D]\" + super.toString() + \" (by: \" + date + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":313,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":314,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":315,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":316,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":317,"author":{"gitId":"TyrusLye"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-23"},{"lineNumber":318,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":319,"author":{"gitId":"TyrusLye"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":320,"author":{"gitId":"TyrusLye"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":321,"author":{"gitId":"TyrusLye"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":322,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":323,"author":{"gitId":"TyrusLye"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":324,"author":{"gitId":"TyrusLye"},"content":" super(description,null);","lastModifiedDate":"2023-09-07"},{"lineNumber":325,"author":{"gitId":"TyrusLye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":326,"author":{"gitId":"TyrusLye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":327,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":328,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":329,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":330,"author":{"gitId":"TyrusLye"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-09-07"},{"lineNumber":331,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":332,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":333,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":334,"author":{"gitId":"TyrusLye"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":335,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":336,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":337,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":338,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":339,"author":{"gitId":"TyrusLye"},"content":" * Custom exception class for Duke-specific exceptions.","lastModifiedDate":"2023-09-23"},{"lineNumber":340,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":341,"author":{"gitId":"TyrusLye"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":342,"author":{"gitId":"TyrusLye"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":343,"author":{"gitId":"TyrusLye"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":344,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":345,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":339,"-":6}},{"path":"src/main/java/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"T | 0 | thing","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"E | 0 | thing2 | now | later","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"TyrusLye":2}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"SET \"JAVA_HOME\u003dC:\\Program Files\\Java\\jdk-11.0.16\"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"SET \"PATH\u003d%JAVA_HOME%\\bin;%PATH%\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"javac -cp ..\\src\\main\\java -encoding UTF-8 -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":6,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" rm ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":"dos2unix ACTUAL.TXT.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":"diff ACTUAL.TXT.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TyrusLye":5,"-":33}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"TyrusLye":0}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"# URBOI","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"Are you confused? Lost all the time? Don\u0027t know whats happening? **Well So Do I*. Introducing; _URBOI_. THE BEST THING REMEMBERER IN TOWN.","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"## It can:","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"- Help you remember things!","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"- Set deadlines for things!","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"- Makes finding the things you need to do easy!","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"Greetings from:","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":"UUUUUUUU UUUUUUUURRRRRRRRRRRRRRRRR BBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"U::::::U U::::::UR::::::::::::::::R B::::::::::::::::B OO:::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":"U::::::U U::::::UR::::::RRRRRR:::::R B::::::BBBBBB:::::B OO:::::::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":"UU:::::U U:::::UURR:::::R R:::::RBB:::::B B:::::BO:::::::OOO:::::::OII::::::II","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" U:::::U U:::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R:::::::::::::RR B:::::::::::::BB O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" U::::::U U::::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I ","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" U:::::::UUU:::::::U RR:::::R R:::::RBB:::::BBBBBB::::::BO:::::::OOO:::::::OII::::::II","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" UU:::::::::::::UU R::::::R R:::::RB:::::::::::::::::B OO:::::::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" UU:::::::::UU R::::::R R:::::RB::::::::::::::::B OO:::::::::OO I::::::::I","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" UUUUUUUUU RRRRRRRR RRRRRRRBBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":23,"-":4}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":47,"author":{"gitId":"TyrusLye"},"content":" mainClassName\u003d \"Launcher\"","lastModifiedDate":"2023-09-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"TyrusLye"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-09-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TyrusLye":17,"-":42}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-23"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" * This control represents a dialog box consisting of an ImageView to represent the speaker\u0027s face and a label","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" private Label dialog;","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"TyrusLye"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-23"},{"lineNumber":31,"author":{"gitId":"TyrusLye"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"TyrusLye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"TyrusLye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-23"},{"lineNumber":34,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"TyrusLye"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-23"},{"lineNumber":37,"author":{"gitId":"TyrusLye"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":39,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":40,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":41,"author":{"gitId":"TyrusLye"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-23"},{"lineNumber":42,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":43,"author":{"gitId":"TyrusLye"},"content":" private void flip() {","lastModifiedDate":"2023-09-23"},{"lineNumber":44,"author":{"gitId":"TyrusLye"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"TyrusLye"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-23"},{"lineNumber":46,"author":{"gitId":"TyrusLye"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-23"},{"lineNumber":47,"author":{"gitId":"TyrusLye"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-23"},{"lineNumber":48,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":49,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":50,"author":{"gitId":"TyrusLye"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-23"},{"lineNumber":51,"author":{"gitId":"TyrusLye"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-23"},{"lineNumber":52,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":53,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":54,"author":{"gitId":"TyrusLye"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-23"},{"lineNumber":55,"author":{"gitId":"TyrusLye"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"TyrusLye"},"content":" db.flip();","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"TyrusLye"},"content":" return db;","lastModifiedDate":"2023-09-23"},{"lineNumber":58,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":59}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-07"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-07"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"import java.io.*;","lastModifiedDate":"2023-09-07"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":" //private static final String FILE_PATH \u003d \"src/main/java/tasks.txt\";","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":" private static final String FILE_PATH \u003d \"tasks.txt/\";","lastModifiedDate":"2023-09-27"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":" private static String response\u003d \"\";","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":" * Main method to start the Duke application.","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":" * @param args Command-line arguments.","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" //Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" String logo \u003d \"UUUUUUUU UUUUUUUURRRRRRRRRRRRRRRRR BBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" +\"U::::::U U::::::UR::::::::::::::::R B::::::::::::::::B OO:::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" +\"U::::::U U::::::UR::::::RRRRRR:::::R B::::::BBBBBB:::::B OO:::::::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" +\"UU:::::U U:::::UURR:::::R R:::::RBB:::::B B:::::BO:::::::OOO:::::::OII::::::II\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::U U:::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R:::::::::::::RR B:::::::::::::BB O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::RRRRRR:::::R B::::BBBBBB:::::B O:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::D D:::::U R::::R R:::::R B::::B B:::::BO:::::O O:::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":" +\" U::::::U U::::::U R::::R R:::::R B::::B B:::::BO::::::O O::::::O I::::I \\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":31,"author":{"gitId":"TyrusLye"},"content":" +\" U:::::::UUU:::::::U RR:::::R R:::::RBB:::::BBBBBB::::::BO:::::::OOO:::::::OII::::::II\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"TyrusLye"},"content":" +\" UU:::::::::::::UU R::::::R R:::::RB:::::::::::::::::B OO:::::::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"TyrusLye"},"content":" +\" UU:::::::::UU R::::::R R:::::RB::::::::::::::::B OO:::::::::OO I::::::::I\\n\"","lastModifiedDate":"2023-09-23"},{"lineNumber":34,"author":{"gitId":"TyrusLye"},"content":" +\" UUUUUUUUU RRRRRRRR RRRRRRRBBBBBBBBBBBBBBBBB OOOOOOOOO IIIIIIIIII\\n\";","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Wazzup! It\u0027s\\n\" + logo);","lastModifiedDate":"2023-09-23"},{"lineNumber":37,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"What can I do for you mah man?\");","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":41,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":42,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":43,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":44,"author":{"gitId":"TyrusLye"},"content":" * Process user input and generate a response.","lastModifiedDate":"2023-09-23"},{"lineNumber":45,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":46,"author":{"gitId":"TyrusLye"},"content":" * @param command The user\u0027s input command.","lastModifiedDate":"2023-09-23"},{"lineNumber":47,"author":{"gitId":"TyrusLye"},"content":" * @return A response generated by URBOI.","lastModifiedDate":"2023-09-23"},{"lineNumber":48,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":49,"author":{"gitId":"TyrusLye"},"content":" public String getResponse(String command) {","lastModifiedDate":"2023-09-23"},{"lineNumber":50,"author":{"gitId":"TyrusLye"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-23"},{"lineNumber":51,"author":{"gitId":"TyrusLye"},"content":" loadTasksFromFile(tasks);","lastModifiedDate":"2023-09-23"},{"lineNumber":52,"author":{"gitId":"TyrusLye"},"content":" StringBuilder response \u003d new StringBuilder();","lastModifiedDate":"2023-09-23"},{"lineNumber":53,"author":{"gitId":"TyrusLye"},"content":" try{","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"TyrusLye"},"content":" if (command.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"TyrusLye"},"content":" } else if (command.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"TyrusLye"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"TyrusLye"},"content":" response.append((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-23"},{"lineNumber":61,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"TyrusLye"},"content":" String description \u003d command.substring(5).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"TyrusLye"},"content":" if (description.isEmpty()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-23"},{"lineNumber":69,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":70,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"TyrusLye"},"content":" // Parse the date and time in the format d/M/yyyy HHmm","lastModifiedDate":"2023-09-07"},{"lineNumber":72,"author":{"gitId":"TyrusLye"},"content":" String[] parts \u003d command.split(\" /by \");","lastModifiedDate":"2023-09-07"},{"lineNumber":73,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003c 2) {","lastModifiedDate":"2023-09-07"},{"lineNumber":74,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"Deadline command must include a date.\");","lastModifiedDate":"2023-09-07"},{"lineNumber":75,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":76,"author":{"gitId":"TyrusLye"},"content":" String description \u003d parts[0].substring(9).trim();","lastModifiedDate":"2023-09-07"},{"lineNumber":77,"author":{"gitId":"TyrusLye"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(parts[1], DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":78,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":79,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Deadline(description, dateTime));","lastModifiedDate":"2023-09-07"},{"lineNumber":80,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-23"},{"lineNumber":81,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":82,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"TyrusLye"},"content":" String description \u003d command.substring(6, command.indexOf(\"/from\")).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"TyrusLye"},"content":" String from \u003d command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\")).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"TyrusLye"},"content":" String to \u003d command.substring(command.indexOf(\"/to\") + 4).trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"TyrusLye"},"content":" tasks.add(new Event(description, from, to));","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Got it. I\u0027ve added this task:\\n \" + tasks.get(tasks.size() - 1));","lastModifiedDate":"2023-09-23"},{"lineNumber":88,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":89,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"TyrusLye"},"content":" tasks.get(index).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Nice! I\u0027ve marked this task as done:\\n \" + tasks.get(index));","lastModifiedDate":"2023-09-23"},{"lineNumber":94,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Invalid task index.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":96,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"TyrusLye"},"content":" tasks.get(index).markNotDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"TyrusLye"},"content":" response.append(\"OK, I\u0027ve marked this task as not done yet:\\n \" + tasks.get(index));","lastModifiedDate":"2023-09-23"},{"lineNumber":102,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Invalid task index.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":104,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"TyrusLye"},"content":" int index \u003d Integer.parseInt(command.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"TyrusLye"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c tasks.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"TyrusLye"},"content":" Task removedTask \u003d tasks.remove(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Noted. I\u0027ve removed this task:\\n \" + removedTask);","lastModifiedDate":"2023-09-23"},{"lineNumber":110,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Now you have \" + tasks.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":111,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"TyrusLye"},"content":" response.append(\"Invalid task index.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":113,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"TyrusLye"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-09-23"},{"lineNumber":115,"author":{"gitId":"TyrusLye"},"content":" String keyword \u003d command.substring(5).trim();","lastModifiedDate":"2023-09-23"},{"lineNumber":116,"author":{"gitId":"TyrusLye"},"content":" findTasks(tasks, keyword);","lastModifiedDate":"2023-09-23"},{"lineNumber":117,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"TyrusLye"},"content":" throw new DukeException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"TyrusLye"},"content":" saveTasksToFile(tasks);","lastModifiedDate":"2023-09-07"},{"lineNumber":121,"author":{"gitId":"TyrusLye"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-23"},{"lineNumber":122,"author":{"gitId":"TyrusLye"},"content":" response.append(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-09-23"},{"lineNumber":123,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"TyrusLye"},"content":" return response.toString();","lastModifiedDate":"2023-09-23"},{"lineNumber":125,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"TyrusLye"},"content":" private static String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":128,"author":{"gitId":"TyrusLye"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":129,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":130,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":131,"author":{"gitId":"TyrusLye"},"content":" * Loads tasks from a file into the task list.","lastModifiedDate":"2023-09-23"},{"lineNumber":132,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":133,"author":{"gitId":"TyrusLye"},"content":" * @param tasks The ArrayList to store the loaded tasks.","lastModifiedDate":"2023-09-23"},{"lineNumber":134,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":135,"author":{"gitId":"TyrusLye"},"content":" private static void loadTasksFromFile(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":136,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":137,"author":{"gitId":"TyrusLye"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":138,"author":{"gitId":"TyrusLye"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":139,"author":{"gitId":"TyrusLye"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-07"},{"lineNumber":140,"author":{"gitId":"TyrusLye"},"content":" while (fileScanner.hasNextLine()) {","lastModifiedDate":"2023-09-07"},{"lineNumber":141,"author":{"gitId":"TyrusLye"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-07"},{"lineNumber":142,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d createTaskFromLine(line);","lastModifiedDate":"2023-09-07"},{"lineNumber":143,"author":{"gitId":"TyrusLye"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":144,"author":{"gitId":"TyrusLye"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-07"},{"lineNumber":145,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":146,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":147,"author":{"gitId":"TyrusLye"},"content":" fileScanner.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":148,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":149,"author":{"gitId":"TyrusLye"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":150,"author":{"gitId":"TyrusLye"},"content":" // Handle file not found exception","lastModifiedDate":"2023-09-07"},{"lineNumber":151,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"File not found: \" + FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":152,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":153,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":154,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":155,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":156,"author":{"gitId":"TyrusLye"},"content":" * Creates a Task object from a line of text in the specified format.","lastModifiedDate":"2023-09-23"},{"lineNumber":157,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":158,"author":{"gitId":"TyrusLye"},"content":" * @param line The line of text containing task details.","lastModifiedDate":"2023-09-23"},{"lineNumber":159,"author":{"gitId":"TyrusLye"},"content":" * @return A Task object representing the task described in the line, or null if parsing fails.","lastModifiedDate":"2023-09-23"},{"lineNumber":160,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":161,"author":{"gitId":"TyrusLye"},"content":" private static Task createTaskFromLine(String line) {","lastModifiedDate":"2023-09-07"},{"lineNumber":162,"author":{"gitId":"TyrusLye"},"content":" String[] parts \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-07"},{"lineNumber":163,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003c 3) {","lastModifiedDate":"2023-09-07"},{"lineNumber":164,"author":{"gitId":"TyrusLye"},"content":" return null;","lastModifiedDate":"2023-09-07"},{"lineNumber":165,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":166,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":167,"author":{"gitId":"TyrusLye"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-07"},{"lineNumber":168,"author":{"gitId":"TyrusLye"},"content":" String status \u003d parts[1];","lastModifiedDate":"2023-09-07"},{"lineNumber":169,"author":{"gitId":"TyrusLye"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-07"},{"lineNumber":170,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":171,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-07"},{"lineNumber":172,"author":{"gitId":"TyrusLye"},"content":" switch (type) {","lastModifiedDate":"2023-09-07"},{"lineNumber":173,"author":{"gitId":"TyrusLye"},"content":" case \"T\":","lastModifiedDate":"2023-09-07"},{"lineNumber":174,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Todo(description);","lastModifiedDate":"2023-09-07"},{"lineNumber":175,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":176,"author":{"gitId":"TyrusLye"},"content":" case \"D\":","lastModifiedDate":"2023-09-07"},{"lineNumber":177,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003e\u003d 4) {","lastModifiedDate":"2023-09-07"},{"lineNumber":178,"author":{"gitId":"TyrusLye"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-07"},{"lineNumber":179,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Deadline(description, LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\")));","lastModifiedDate":"2023-09-07"},{"lineNumber":180,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":181,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":182,"author":{"gitId":"TyrusLye"},"content":" case \"E\":","lastModifiedDate":"2023-09-07"},{"lineNumber":183,"author":{"gitId":"TyrusLye"},"content":" if (parts.length \u003e\u003d 5) {","lastModifiedDate":"2023-09-07"},{"lineNumber":184,"author":{"gitId":"TyrusLye"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-07"},{"lineNumber":185,"author":{"gitId":"TyrusLye"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-07"},{"lineNumber":186,"author":{"gitId":"TyrusLye"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-07"},{"lineNumber":187,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":188,"author":{"gitId":"TyrusLye"},"content":" break;","lastModifiedDate":"2023-09-07"},{"lineNumber":189,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":190,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":191,"author":{"gitId":"TyrusLye"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-09-07"},{"lineNumber":192,"author":{"gitId":"TyrusLye"},"content":" if (status.equals(\"1\")) {","lastModifiedDate":"2023-09-07"},{"lineNumber":193,"author":{"gitId":"TyrusLye"},"content":" task.markDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":194,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-09-07"},{"lineNumber":195,"author":{"gitId":"TyrusLye"},"content":" task.markNotDone();","lastModifiedDate":"2023-09-07"},{"lineNumber":196,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":197,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":198,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":199,"author":{"gitId":"TyrusLye"},"content":" return task;","lastModifiedDate":"2023-09-07"},{"lineNumber":200,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":201,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":202,"author":{"gitId":"TyrusLye"},"content":" private static void findTasks(ArrayList\u003cTask\u003e tasks, String keyword) {","lastModifiedDate":"2023-09-23"},{"lineNumber":203,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-23"},{"lineNumber":204,"author":{"gitId":"TyrusLye"},"content":" int count \u003d 0;","lastModifiedDate":"2023-09-23"},{"lineNumber":205,"author":{"gitId":"TyrusLye"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-23"},{"lineNumber":206,"author":{"gitId":"TyrusLye"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-09-23"},{"lineNumber":207,"author":{"gitId":"TyrusLye"},"content":" if (task.getDescription().contains(keyword)) {","lastModifiedDate":"2023-09-23"},{"lineNumber":208,"author":{"gitId":"TyrusLye"},"content":" System.out.println((count + 1) + \". \" + task);","lastModifiedDate":"2023-09-23"},{"lineNumber":209,"author":{"gitId":"TyrusLye"},"content":" count++;","lastModifiedDate":"2023-09-23"},{"lineNumber":210,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":211,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":212,"author":{"gitId":"TyrusLye"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-23"},{"lineNumber":213,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"No matching tasks found.\");","lastModifiedDate":"2023-09-23"},{"lineNumber":214,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":215,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":216,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":217,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":218,"author":{"gitId":"TyrusLye"},"content":" * Save tasks to a file.","lastModifiedDate":"2023-09-23"},{"lineNumber":219,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":220,"author":{"gitId":"TyrusLye"},"content":" * @param tasks The ArrayList of tasks to save.","lastModifiedDate":"2023-09-23"},{"lineNumber":221,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":222,"author":{"gitId":"TyrusLye"},"content":" private static void saveTasksToFile(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":223,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-07"},{"lineNumber":224,"author":{"gitId":"TyrusLye"},"content":" FileWriter fileWriter \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-09-07"},{"lineNumber":225,"author":{"gitId":"TyrusLye"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-09-07"},{"lineNumber":226,"author":{"gitId":"TyrusLye"},"content":" fileWriter.write(task.toFileString() + System.lineSeparator());","lastModifiedDate":"2023-09-07"},{"lineNumber":227,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":228,"author":{"gitId":"TyrusLye"},"content":" fileWriter.close();","lastModifiedDate":"2023-09-07"},{"lineNumber":229,"author":{"gitId":"TyrusLye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-07"},{"lineNumber":230,"author":{"gitId":"TyrusLye"},"content":" // Handle IO exception","lastModifiedDate":"2023-09-07"},{"lineNumber":231,"author":{"gitId":"TyrusLye"},"content":" System.out.println(\"Error saving tasks to file: \" + e.getMessage());","lastModifiedDate":"2023-09-07"},{"lineNumber":232,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":235,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":237,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":238,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":239,"author":{"gitId":"TyrusLye"},"content":" * Represents a task that can be added to the task list.","lastModifiedDate":"2023-09-23"},{"lineNumber":240,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":241,"author":{"gitId":"TyrusLye"},"content":"class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"TyrusLye"},"content":" protected String description;","lastModifiedDate":"2023-09-07"},{"lineNumber":243,"author":{"gitId":"TyrusLye"},"content":" protected boolean isDone;","lastModifiedDate":"2023-09-07"},{"lineNumber":244,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":245,"author":{"gitId":"TyrusLye"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-07"},{"lineNumber":246,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":247,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":248,"author":{"gitId":"TyrusLye"},"content":" return \"\";","lastModifiedDate":"2023-09-07"},{"lineNumber":249,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":250,"author":{"gitId":"TyrusLye"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-07"},{"lineNumber":251,"author":{"gitId":"TyrusLye"},"content":" return date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));","lastModifiedDate":"2023-09-07"},{"lineNumber":252,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":253,"author":{"gitId":"TyrusLye"},"content":" public Task(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":254,"author":{"gitId":"TyrusLye"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":255,"author":{"gitId":"TyrusLye"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":256,"author":{"gitId":"TyrusLye"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-07"},{"lineNumber":257,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":258,"author":{"gitId":"TyrusLye"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":259,"author":{"gitId":"TyrusLye"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // Return a tick or cross symbol cuz im lazy like that, or its easier. idk","lastModifiedDate":"2023-08-24"},{"lineNumber":260,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":261,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":262,"author":{"gitId":"TyrusLye"},"content":" * Get the description of the task.","lastModifiedDate":"2023-09-23"},{"lineNumber":263,"author":{"gitId":"TyrusLye"},"content":" *","lastModifiedDate":"2023-09-23"},{"lineNumber":264,"author":{"gitId":"TyrusLye"},"content":" * @return The description of the task.","lastModifiedDate":"2023-09-23"},{"lineNumber":265,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":266,"author":{"gitId":"TyrusLye"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-23"},{"lineNumber":267,"author":{"gitId":"TyrusLye"},"content":" return description;","lastModifiedDate":"2023-09-23"},{"lineNumber":268,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":269,"author":{"gitId":"TyrusLye"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":270,"author":{"gitId":"TyrusLye"},"content":" return isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":271,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":272,"author":{"gitId":"TyrusLye"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":273,"author":{"gitId":"TyrusLye"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":274,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":275,"author":{"gitId":"TyrusLye"},"content":" public void markNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":276,"author":{"gitId":"TyrusLye"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":277,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":278,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":279,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":280,"author":{"gitId":"TyrusLye"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":281,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":282,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":283,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":284,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":285,"author":{"gitId":"TyrusLye"},"content":" * Represents a Todo task.","lastModifiedDate":"2023-09-23"},{"lineNumber":286,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":287,"author":{"gitId":"TyrusLye"},"content":"class Todo extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":288,"author":{"gitId":"TyrusLye"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":289,"author":{"gitId":"TyrusLye"},"content":" super(description,null);","lastModifiedDate":"2023-09-07"},{"lineNumber":290,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":291,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":292,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":293,"author":{"gitId":"TyrusLye"},"content":" return \"T | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-07"},{"lineNumber":294,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":295,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":297,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":298,"author":{"gitId":"TyrusLye"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":299,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":300,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":301,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":302,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":303,"author":{"gitId":"TyrusLye"},"content":" * Represents a Deadline task.","lastModifiedDate":"2023-09-23"},{"lineNumber":304,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":305,"author":{"gitId":"TyrusLye"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":306,"author":{"gitId":"TyrusLye"},"content":" protected String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":307,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":308,"author":{"gitId":"TyrusLye"},"content":" public Deadline(String description, LocalDateTime date) {","lastModifiedDate":"2023-09-07"},{"lineNumber":309,"author":{"gitId":"TyrusLye"},"content":" super(description, date);","lastModifiedDate":"2023-09-07"},{"lineNumber":310,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":311,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":312,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":313,"author":{"gitId":"TyrusLye"},"content":" return \"D | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + date;","lastModifiedDate":"2023-09-07"},{"lineNumber":314,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":315,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":316,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":317,"author":{"gitId":"TyrusLye"},"content":" return \"[D]\" + super.toString() + \" (by: \" + date + \")\";","lastModifiedDate":"2023-09-07"},{"lineNumber":318,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":319,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":320,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":321,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":322,"author":{"gitId":"TyrusLye"},"content":" * Represents an Event task.","lastModifiedDate":"2023-09-23"},{"lineNumber":323,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":324,"author":{"gitId":"TyrusLye"},"content":"class Event extends Task {","lastModifiedDate":"2023-09-07"},{"lineNumber":325,"author":{"gitId":"TyrusLye"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":326,"author":{"gitId":"TyrusLye"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":327,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-07"},{"lineNumber":328,"author":{"gitId":"TyrusLye"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":329,"author":{"gitId":"TyrusLye"},"content":" super(description,null);","lastModifiedDate":"2023-09-07"},{"lineNumber":330,"author":{"gitId":"TyrusLye"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":331,"author":{"gitId":"TyrusLye"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":332,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":333,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-07"},{"lineNumber":334,"author":{"gitId":"TyrusLye"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-07"},{"lineNumber":335,"author":{"gitId":"TyrusLye"},"content":" return \"E | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + from + \" | \" + to;","lastModifiedDate":"2023-09-07"},{"lineNumber":336,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-07"},{"lineNumber":337,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":338,"author":{"gitId":"TyrusLye"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":339,"author":{"gitId":"TyrusLye"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":340,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":341,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":342,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":343,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":344,"author":{"gitId":"TyrusLye"},"content":" * Custom exception class for Duke-specific exceptions.","lastModifiedDate":"2023-09-23"},{"lineNumber":345,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":346,"author":{"gitId":"TyrusLye"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":347,"author":{"gitId":"TyrusLye"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":348,"author":{"gitId":"TyrusLye"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":349,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":350,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":346,"-":4}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"public class Launcher {","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":10}},{"path":"src/main/java/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" @Override","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" try {","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" stage.show();","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":29}},{"path":"src/main/java/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"import javafx.animation.PauseTransition;","lastModifiedDate":"2023-09-27"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-27"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-27"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":"import javafx.util.Duration;","lastModifiedDate":"2023-09-27"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":"/**","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-23"},{"lineNumber":20,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":21,"author":{"gitId":"TyrusLye"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-23"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-23"},{"lineNumber":24,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-23"},{"lineNumber":26,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-23"},{"lineNumber":28,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":29,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-27"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":" private Duke duke;","lastModifiedDate":"2023-09-23"},{"lineNumber":31,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":32,"author":{"gitId":"TyrusLye"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/crying.png\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":33,"author":{"gitId":"TyrusLye"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/screaming.png\"));","lastModifiedDate":"2023-09-23"},{"lineNumber":34,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":35,"author":{"gitId":"TyrusLye"},"content":" public void initialize() {","lastModifiedDate":"2023-09-23"},{"lineNumber":36,"author":{"gitId":"TyrusLye"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-23"},{"lineNumber":37,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":38,"author":{"gitId":"TyrusLye"},"content":" String greetingMessage \u003d","lastModifiedDate":"2023-09-27"},{"lineNumber":39,"author":{"gitId":"TyrusLye"},"content":" \"Wazzup! It\u0027s\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":40,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__########_______########______#######_____#####_\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":41,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__##________##_____##________##__##_________##____##____\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":42,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__##________##_____##________##__##_________##____##____\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":43,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__########_______########____##__________##____##____\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":44,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__##______##_______##________##__##_________##____##____\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":45,"author":{"gitId":"TyrusLye"},"content":" + \"##__________##__##________##_____##________##__##_________##____##____\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":46,"author":{"gitId":"TyrusLye"},"content":" + \"__#######______##__________##___########______#######_____#####_\\n\"","lastModifiedDate":"2023-09-27"},{"lineNumber":47,"author":{"gitId":"TyrusLye"},"content":" + \"What can I do for you mah man?\";","lastModifiedDate":"2023-09-27"},{"lineNumber":48,"author":{"gitId":"TyrusLye"},"content":" dialogContainer.getChildren().addAll(DialogBox.getDukeDialog(greetingMessage, dukeImage));","lastModifiedDate":"2023-09-27"},{"lineNumber":49,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-27"},{"lineNumber":50,"author":{"gitId":"TyrusLye"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-23"},{"lineNumber":51,"author":{"gitId":"TyrusLye"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-23"},{"lineNumber":52,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":53,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":54,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-27"},{"lineNumber":55,"author":{"gitId":"TyrusLye"},"content":" /**","lastModifiedDate":"2023-09-23"},{"lineNumber":56,"author":{"gitId":"TyrusLye"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-23"},{"lineNumber":57,"author":{"gitId":"TyrusLye"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-23"},{"lineNumber":58,"author":{"gitId":"TyrusLye"},"content":" */","lastModifiedDate":"2023-09-23"},{"lineNumber":59,"author":{"gitId":"TyrusLye"},"content":" @FXML","lastModifiedDate":"2023-09-23"},{"lineNumber":60,"author":{"gitId":"TyrusLye"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-23"},{"lineNumber":61,"author":{"gitId":"TyrusLye"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-23"},{"lineNumber":62,"author":{"gitId":"TyrusLye"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-23"},{"lineNumber":63,"author":{"gitId":"TyrusLye"},"content":" if (input.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-27"},{"lineNumber":64,"author":{"gitId":"TyrusLye"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-23"},{"lineNumber":65,"author":{"gitId":"TyrusLye"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-23"},{"lineNumber":66,"author":{"gitId":"TyrusLye"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-23"},{"lineNumber":67,"author":{"gitId":"TyrusLye"},"content":" );","lastModifiedDate":"2023-09-23"},{"lineNumber":68,"author":{"gitId":"TyrusLye"},"content":" PauseTransition delay \u003d new PauseTransition(Duration.seconds(2));","lastModifiedDate":"2023-09-27"},{"lineNumber":69,"author":{"gitId":"TyrusLye"},"content":" delay.setOnFinished(event -\u003e Platform.exit());","lastModifiedDate":"2023-09-27"},{"lineNumber":70,"author":{"gitId":"TyrusLye"},"content":" delay.play();","lastModifiedDate":"2023-09-27"},{"lineNumber":71,"author":{"gitId":"TyrusLye"},"content":" } else {","lastModifiedDate":"2023-09-27"},{"lineNumber":72,"author":{"gitId":"TyrusLye"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-27"},{"lineNumber":73,"author":{"gitId":"TyrusLye"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-27"},{"lineNumber":74,"author":{"gitId":"TyrusLye"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-27"},{"lineNumber":75,"author":{"gitId":"TyrusLye"},"content":" );","lastModifiedDate":"2023-09-27"},{"lineNumber":76,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-27"},{"lineNumber":77,"author":{"gitId":"TyrusLye"},"content":" userInput.clear();","lastModifiedDate":"2023-09-23"},{"lineNumber":78,"author":{"gitId":"TyrusLye"},"content":" }","lastModifiedDate":"2023-09-23"},{"lineNumber":79,"author":{"gitId":"TyrusLye"},"content":"}","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":79}},{"path":"src/main/java/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"T | 0 | thing","lastModifiedDate":"2023-09-07"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"E | 0 | thing2 | now | later","lastModifiedDate":"2023-09-07"}],"authorContributionMap":{"TyrusLye":2}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"\u003cfx:root alignment\u003d\"TOP_RIGHT\" maxHeight\u003d\"1.7976931348623157E308\" maxWidth\u003d\"1.7976931348623157E308\" prefWidth\u003d\"400.0\" type\u003d\"javafx.scene.layout.HBox\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":16}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":2,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":6,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":7,"author":{"gitId":"TyrusLye"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":8,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-09-23"},{"lineNumber":9,"author":{"gitId":"TyrusLye"},"content":"\u003cAnchorPane maxHeight\u003d\"-Infinity\" maxWidth\u003d\"-Infinity\" minHeight\u003d\"-Infinity\" minWidth\u003d\"-Infinity\" prefHeight\u003d\"600.0\" prefWidth\u003d\"1000.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"MainWindow\"\u003e","lastModifiedDate":"2023-09-27"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":11,"author":{"gitId":"TyrusLye"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"924.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-27"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"924.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-27"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"1000.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-27"},{"lineNumber":14,"author":{"gitId":"TyrusLye"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":15,"author":{"gitId":"TyrusLye"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"988.0\" /\u003e","lastModifiedDate":"2023-09-27"},{"lineNumber":16,"author":{"gitId":"TyrusLye"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":17,"author":{"gitId":"TyrusLye"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":18,"author":{"gitId":"TyrusLye"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-23"},{"lineNumber":19,"author":{"gitId":"TyrusLye"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-23"}],"authorContributionMap":{"TyrusLye":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"TyrusLye"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"TyrusLye"},"content":"SET \"JAVA_HOME\u003dC:\\Program Files\\Java\\jdk-11.0.16\"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"TyrusLye"},"content":"SET \"PATH\u003d%JAVA_HOME%\\bin;%PATH%\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"TyrusLye"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"TyrusLye"},"content":"javac -cp ..\\src\\main\\java -encoding UTF-8 -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"TyrusLye"},"content":"","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"TyrusLye":6,"-":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"TyrusLye"},"content":" rm ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"TyrusLye"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"TyrusLye"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"TyrusLye"},"content":"dos2unix ACTUAL.TXT.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"TyrusLye"},"content":"diff ACTUAL.TXT.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"TyrusLye":5,"-":33}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"TyrusLye":0}}] diff --git a/TyrusLye_ip_master/commits.json b/TyrusLye_ip_master/commits.json index c077ec9e..60eae108 100644 --- a/TyrusLye_ip_master/commits.json +++ b/TyrusLye_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"TyrusLye":[{"date":"2023-08-23","commitResults":[{"hash":"86640144c11f7431c50fc0afc2b48f65f5767f70","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"892b284458060f9cb03faed33c75fc0098ef2501","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"3f2274998099033a5d4009c04e021d63904640b8","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"bfe5fea65309fe69ddf92ff458a5b4fa81e9d5f7","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":7}}},{"hash":"12b399ed10f1eee6a413e2f5684377d47194ada8","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":2}}},{"hash":"9a3f089d0b6a010f7d3aa6661b5b59a669600820","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Not gonna lie. it doesnt work and i dont know why\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":0,"deletions":1},"bat":{"insertions":6,"deletions":2},"sh":{"insertions":5,"deletions":5}}},{"hash":"3f9bc7323625312e4dadac7381e20aa37ceef999","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":43}}},{"hash":"c8920e933d5b6774e484f664133577477b5ec29e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"937f61cb3514fc5a3f853e83d9383188ae0808ef","isMergeCommit":false,"messageTitle":"it doesnt work and i hate my life","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":6}}},{"hash":"f0cc53b08e95f413341d68027053c9c82f81831e","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":92,"deletions":57}}},{"hash":"5310a442958b82095017fe26ab6dab93089571cf","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":12}}}]},{"date":"2023-09-10","commitResults":[{"hash":"1579d0c96f59dc2b120c8f87e42bd82db40aad3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"6ff52fa9cc66789cd02c5d58b9097879c7b3ffbe","isMergeCommit":false,"messageTitle":"Add-gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-23","commitResults":[{"hash":"22c309f69a5aeb5627567416ae95ae65a4d940d4","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"bc05937f3c27760ffe8b69f0a39afa0c4265de8a","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":47,"deletions":8}}},{"hash":"918f5c8379487269ef70848774c307b3c4f9c4b6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":23,"deletions":20}}},{"hash":"47a247e0445ebb3371f2464368bb914dfc59b9b8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"TyrusLye":{"java":339,"md":23,"fxml":0,"sh":5,"bat":6,"gradle":1,"txt":3}},"authorContributionVariance":{"TyrusLye":4300.5093},"authorDisplayNameMap":{"TyrusLye":"CS2103T-T13-4 TYRU.. QIN"}} +{"authorDailyContributionsMap":{"TyrusLye":[{"date":"2023-08-23","commitResults":[{"hash":"86640144c11f7431c50fc0afc2b48f65f5767f70","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"892b284458060f9cb03faed33c75fc0098ef2501","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"3f2274998099033a5d4009c04e021d63904640b8","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":5}}},{"hash":"bfe5fea65309fe69ddf92ff458a5b4fa81e9d5f7","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":7}}},{"hash":"12b399ed10f1eee6a413e2f5684377d47194ada8","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":2}}},{"hash":"9a3f089d0b6a010f7d3aa6661b5b59a669600820","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"Not gonna lie. it doesnt work and i dont know why\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":0,"deletions":1},"bat":{"insertions":6,"deletions":2},"sh":{"insertions":5,"deletions":5}}},{"hash":"3f9bc7323625312e4dadac7381e20aa37ceef999","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":43}}},{"hash":"c8920e933d5b6774e484f664133577477b5ec29e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-07","commitResults":[{"hash":"937f61cb3514fc5a3f853e83d9383188ae0808ef","isMergeCommit":false,"messageTitle":"it doesnt work and i hate my life","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":6}}},{"hash":"f0cc53b08e95f413341d68027053c9c82f81831e","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":92,"deletions":57}}},{"hash":"5310a442958b82095017fe26ab6dab93089571cf","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":31,"deletions":12}}}]},{"date":"2023-09-10","commitResults":[{"hash":"1579d0c96f59dc2b120c8f87e42bd82db40aad3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-11","commitResults":[{"hash":"6ff52fa9cc66789cd02c5d58b9097879c7b3ffbe","isMergeCommit":false,"messageTitle":"Add-gradle","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":5,"deletions":5}}}]},{"date":"2023-09-23","commitResults":[{"hash":"22c309f69a5aeb5627567416ae95ae65a4d940d4","isMergeCommit":false,"messageTitle":"A-JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":2}}},{"hash":"bc05937f3c27760ffe8b69f0a39afa0c4265de8a","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":47,"deletions":8}}},{"hash":"918f5c8379487269ef70848774c307b3c4f9c4b6","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":23,"deletions":20}}},{"hash":"47a247e0445ebb3371f2464368bb914dfc59b9b8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"md":{"insertions":1,"deletions":1}}},{"hash":"ccd2127a129100a7f042c32555d00c980f3f5edb","isMergeCommit":false,"messageTitle":"Just gonna commit this one before I start messing things up too much","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":233,"deletions":79}}},{"hash":"724286a8be2d63dc70e1595340761555a7e67158","isMergeCommit":false,"messageTitle":"Level-10","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":18}}}]},{"date":"2023-09-27","commitResults":[{"hash":"d9e7d80c5126ec87690fcee14859d2415f63dfc9","isMergeCommit":false,"messageTitle":"Just bug fixes honestly","messageBody":"","fileTypesAndContributionMap":{"fxml":{"insertions":5,"deletions":5},"java":{"insertions":33,"deletions":6}}},{"hash":"25866f1d66409d510b4d537edbd5c5c05cb1278c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/TyrusLye/ip","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"TyrusLye":{"java":523,"md":23,"fxml":35,"sh":5,"bat":6,"gradle":17,"txt":3}},"authorContributionVariance":{"TyrusLye":10133.71},"authorDisplayNameMap":{"TyrusLye":"CS2103T-T13-4 TYRU.. QIN"}} diff --git a/andytoh1_ip_master/authorship.json b/andytoh1_ip_master/authorship.json index c18a9e2d..af09ba9d 100644 --- a/andytoh1_ip_master/authorship.json +++ b/andytoh1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" implementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" testImplementation \u0027org.mockito:mockito-core:3.12.4\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" implementation \u0027org.openjfx:javafx-controls:17.0.8\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" mainClassName \u003d \"Launcher\"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" archiveFileName \u003d \"Chatbot.jar\"","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":20,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"Chatbot is a chatbot that helps to keep track of your tasks. ","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"### Adding a to-do: `todo `","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"Adds a task without any time constraints to the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":"Format: `todo TASK_DESCRIPTION`","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":"`todo read book`","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"### Adding a deadline task: `deadline`","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":"Adds a task with a specific time by which it has to be done.","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"Format: `deadline TASK_DESCRIPTION /by DD-MM-YYYY HH:MM`","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"- Time is given in 24-hour format.","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":"`deadline read book by 19-09-2023 18:00`","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":"### Adding an event: `event`","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":"Adds a task with specific start and end times.","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":"Format: `event TASK_DESCRIPTION /from DD-MM-YYYY HH:MM /to DD-MM-YYYY HH:MM`","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"- Time is given in 24-hour format.","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":"`event read book /from 20-12-2023 12:00 /to 20-12-2023 15:00`","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":"### Viewing list of tasks: `list`","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":"Displays the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":"Format: `list`","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":"### Deleting tasks from list: `delete`","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":"Deletes the task at the specified index in the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be greater than 0.","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be smaller than the last number in the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":"`delete 3`","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":"### Mark tasks: `mark`","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":"Marks a task at the given index in the list as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":"Format: `mark INDEX`","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be greater than 0.","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be smaller than the last number in the list .","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":"- Tasks are marked as done with an \"X\".","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":"`mark 1`","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":"### Locating a task: `find`","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":"Searches for a task by description.","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":"- Search is case-sensitive.","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":"- The order of search terms matter.","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":"- A match will happen if the search term matches any substring exactly.","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":"### Exit program: `bye`","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":"Closes the chatbot.","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":"Format: `bye`","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":59,"-":22}},{"path":"src/main/java/Chatbot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"import javafx.event.EventTarget;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":"public class Chatbot extends Application {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" private Scene scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" public Chatbot() {","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" Storage.load(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" Ui.startMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" String userMessage \u003d userInput.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" Parser.parse(userMessage, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" @Override","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" // Step 1. Setting up required components","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" Storage.load(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" initializeUI(stage);","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" setStage(stage);","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" setEventHandlers(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" private void initializeUI(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" stage.show();","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" private void setStage(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" stage.setTitle(\"Chatbot\");","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" scrollPane.setPrefSize(400, 570);","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" private void setEventHandlers(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":117,"author":{"gitId":"andytoh1"},"content":" handleUserInput(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":118,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":119,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":120,"author":{"gitId":"andytoh1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":121,"author":{"gitId":"andytoh1"},"content":" handleUserInput(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":122,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":123,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":124,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":125,"author":{"gitId":"andytoh1"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-26"},{"lineNumber":126,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":127,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":128,"author":{"gitId":"andytoh1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-26"},{"lineNumber":129,"author":{"gitId":"andytoh1"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-26"},{"lineNumber":130,"author":{"gitId":"andytoh1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-26"},{"lineNumber":131,"author":{"gitId":"andytoh1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":132,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":133,"author":{"gitId":"andytoh1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-26"},{"lineNumber":134,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":135,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":136,"author":{"gitId":"andytoh1"},"content":" private void handleUserInput(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":137,"author":{"gitId":"andytoh1"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-26"},{"lineNumber":138,"author":{"gitId":"andytoh1"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText(), taskList));","lastModifiedDate":"2023-09-26"},{"lineNumber":139,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-26"},{"lineNumber":140,"author":{"gitId":"andytoh1"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-26"},{"lineNumber":141,"author":{"gitId":"andytoh1"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-26"},{"lineNumber":142,"author":{"gitId":"andytoh1"},"content":" );","lastModifiedDate":"2023-09-26"},{"lineNumber":143,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":144,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":145,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":146,"author":{"gitId":"andytoh1"},"content":" private String getResponse(String input, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":147,"author":{"gitId":"andytoh1"},"content":" return Parser.parse(input, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":148,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":149,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andytoh1":149}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return super.getDescription() + \" (by: \" + deadline.format(formatter) + \")\";","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return deadline.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" public String getDescriptionWithoutTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" return super.getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":29}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" private Label text;","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" text \u003d l;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" private void flip() {","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" db.flip();","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" return db;","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":45}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for Event task.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public Event(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return super.getDescription() + \" (from: \" + startTime.format(formatter) + \" to: \"","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" + endTime.format(formatter) + \")\";","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" public String getStartTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" return startTime.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" public String getEndTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" return endTime.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" public String getDescriptionWithoutTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" return super.getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":38}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" Application.launch(Chatbot.class, args);","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":10}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for reading user input.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Parser {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" * Parses any user input.","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" * @param userMessage Input of the user.","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" * @param taskList TaskList with all the current tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public static String parse (String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" assert userMessage.length() \u003e 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" if (userMessage.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return Ui.endMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" if (userMessage.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" return Ui.listTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" if (userMessage.substring(0, 6).equalsIgnoreCase(\"delete\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" int removeTask \u003d Integer.parseInt(userMessage.substring(7)) - 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" return Ui.deleteMessage(removeTask, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 4).equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" return Ui.findMessage(userMessage.substring(5), taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" }else if (userMessage.substring(0, 4).equalsIgnoreCase(\"mark\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" int doneTask \u003d Integer.parseInt(userMessage.substring(5)) - 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" return Ui.markMessage(doneTask, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" return parseTodo(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" return parseDeadline(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 5).equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" return parseEvent(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" } else {","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" return Ui.inputErrorMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" return Ui.inputErrorMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" public static String parseEvent(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" int index \u003d userMessage.indexOf(\"/from\");","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" int index2 \u003d userMessage.indexOf(\"/to\");","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" String description \u003d userMessage.substring(6, index - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" String start \u003d userMessage.substring(index + 6, index2 - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" String end \u003d userMessage.substring(index2 + 4);","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(start, formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(end, formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" Event event \u003d new Event(description, startTime, endTime);","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" return Ui.eventMessage(event, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"event\");","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" public static String parseDeadline(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" int index \u003d userMessage.indexOf(\"/by\");","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" String description \u003d userMessage.substring(9, index - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" LocalDateTime taskDeadline \u003d LocalDateTime.parse(userMessage.substring(index + 4), formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" Deadline deadline \u003d new Deadline(description, taskDeadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" return Ui.deadlineMessage(deadline, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"deadline\");","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" public static String parseTodo(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" Todo todo \u003d new Todo(userMessage.substring(5));","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":" return Ui.todoMessage(todo, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"todo\");","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":87}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" * Class for saving and loading the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"public class Storage {","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" * Loads the list of tasks from file.","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object to be filled with data from file.","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public static void load(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003d\u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" File taskFile \u003d new File(\"./tasks.txt\");","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" Scanner taskReader \u003d new Scanner(taskFile);","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" while (taskReader.hasNextLine()) {","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" String taskFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" addTodo(taskFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" String deadlineFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" addDeadline(taskFromFile, deadlineFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" String startFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" String endFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" addEvent(taskFromFile, startFromFile, endFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" File taskFile \u003d new File(\"./tasks.txt\");","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" taskFile.createNewFile();","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" System.out.println(\"Error!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" public static void addTodo(String taskFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" Todo todo \u003d new Todo(taskFromFile.substring(3));","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" public static void addDeadline(String taskFromFile, String deadlineFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" LocalDateTime taskDeadline \u003d LocalDateTime.parse(deadlineFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" Deadline deadline \u003d new Deadline(taskFromFile.substring(3), taskDeadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" public static void addEvent(String taskFromFile, String startFromFile, String endFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" LocalDateTime start \u003d LocalDateTime.parse(startFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" LocalDateTime end \u003d LocalDateTime.parse(endFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" Event event \u003d new Event(taskFromFile.substring(3), start, end);","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":" * Saves the current tasks to file.","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object with the tasks to be saved to file.","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" FileWriter taskWriter \u003d new FileWriter(\"./tasks.txt\", false);","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" for (int taskNumber \u003d 0; taskNumber \u003c\u003d taskList.getCount(); taskNumber++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"T\");","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).getDescription() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(taskNumber) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"D\");","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Deadline)taskList.getTask(taskNumber)).getDescriptionWithoutTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(taskNumber) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"E\");","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event)taskList.getTask(taskNumber)).getDescriptionWithoutTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Deadline) taskList.getTask(taskNumber)).getDeadline() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event) taskList.getTask(taskNumber)).getStartTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event) taskList.getTask(taskNumber)).getEndTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":" taskWriter.flush();","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":" System.out.println(\"Error!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":116}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"public class Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" private String description;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" private boolean done;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" this.done \u003d true;","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return description;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return done;","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":25}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class representing a list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" private Task[] tasks;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" private int taskCount;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" tasks \u003d new Task[100];","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" taskCount \u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" * @param task The Task object to be added to the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" tasks[taskCount] \u003d task;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" taskCount++;","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" * Deletes a task from the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" * @param task The index of the task to be deleted from the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" public void deleteTask(int task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" Task[] newTasks \u003d new Task[100];","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskCount - 1; i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" int j \u003d i;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" if (i \u003e\u003d task) j \u003d i + 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" newTasks[i] \u003d tasks[j];","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" tasks \u003d newTasks;","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" taskCount--;","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" assert taskCount \u003e\u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" public void markTask(int task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" tasks[task].markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" assert tasks[task].isDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" public int getCount() {","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" return taskCount;","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" return tasks[i];","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":52}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class for Todo task.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":8}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class handling the output.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class Ui {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public static String startMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Hello! I\u0027m Chatbot!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"What can I do for you?\");","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public static String endMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public static String inputErrorMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means!\";","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" * Displays an error message arising from mistakes in format.","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" * @param type Type of command that is not properly formatted.","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" public static String formatErrorMessage(String type) {","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" switch(type) {","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"todo \u003ctask description\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"mark \u003ctask number\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"delete \u003ctask number\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"deadline \u003ctask description\u003e /by DD-MM-YYYY HH:MM\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" case \"event\":","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"event \u003ctask description\u003e /from DD-MM-YYYY HH:MM \" + \"/to DD-MM-YYYY HH:MM\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" public static String listTasks(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Here is the list of relevant tasks:\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskList.getCount(); i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" int listNumber \u003d i + 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(listNumber + \". \");","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(i) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(i) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(i) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(i).isDone()) stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" else stringBuilder.append(\"[ ] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(i).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" * Handles the output of a delete command.","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" * @param removeTask Index of the task to be removed from the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object from which the task is to be deleted.","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" public static String deleteMessage(int removeTask, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" assert removeTask \u003e\u003d 0 : \"Value must be non-negative\";","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003e removeTask : \"Value must be a number in the list\";","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"This task will be removed!\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(removeTask) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(removeTask) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(removeTask) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(removeTask).isDone()) stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" else stringBuilder.append(\"[ ] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(removeTask).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" taskList.deleteTask(removeTask);","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":" return formatErrorMessage(\"delete\");","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":" * Handles the output of a mark command.","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":117,"author":{"gitId":"andytoh1"},"content":" * @param doneTask Index of the task to be marked as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":118,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object in which the task is to be marked as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":119,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":120,"author":{"gitId":"andytoh1"},"content":" public static String markMessage(int doneTask, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":121,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":122,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":123,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":124,"author":{"gitId":"andytoh1"},"content":" assert doneTask \u003e\u003d 0 : \"Value must be non-negative\";","lastModifiedDate":"2023-09-26"},{"lineNumber":125,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003e doneTask : \"Value must be a number in the list\";","lastModifiedDate":"2023-09-26"},{"lineNumber":126,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Well done! This task has been marked as done.\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":127,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(doneTask) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":128,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":129,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(doneTask) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":130,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":131,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(doneTask) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":132,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":133,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":134,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":135,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(doneTask).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":136,"author":{"gitId":"andytoh1"},"content":" taskList.getTask(doneTask).markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":137,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":138,"author":{"gitId":"andytoh1"},"content":" return formatErrorMessage(\"mark\");","lastModifiedDate":"2023-09-26"},{"lineNumber":139,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":140,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":141,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":142,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":143,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":144,"author":{"gitId":"andytoh1"},"content":" public static String todoMessage(Todo todo, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":145,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":146,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":147,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-26"},{"lineNumber":148,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [T] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":149,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":150,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":151,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":152,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":153,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":154,"author":{"gitId":"andytoh1"},"content":" public static String deadlineMessage(Deadline deadline, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":155,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":156,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":157,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":158,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [D] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":159,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":160,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":161,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":162,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":163,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":164,"author":{"gitId":"andytoh1"},"content":" public static String eventMessage(Event event, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":165,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":166,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":167,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-26"},{"lineNumber":168,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [E] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":169,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":170,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":171,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":172,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":173,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":174,"author":{"gitId":"andytoh1"},"content":" public static String findMessage(String searchTerm, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":175,"author":{"gitId":"andytoh1"},"content":" assert searchTerm.length() \u003e 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":176,"author":{"gitId":"andytoh1"},"content":" TaskList resultList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":177,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskList.getCount(); i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":178,"author":{"gitId":"andytoh1"},"content":" String taskDescription \u003d taskList.getTask(i).getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":179,"author":{"gitId":"andytoh1"},"content":" for (int j \u003d 0; j \u003c\u003d taskDescription.length() - searchTerm.length(); j++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":180,"author":{"gitId":"andytoh1"},"content":" if (taskDescription.substring(j, j+ searchTerm.length()).equals(searchTerm)) {","lastModifiedDate":"2023-09-26"},{"lineNumber":181,"author":{"gitId":"andytoh1"},"content":" resultList.addTask(taskList.getTask(i));","lastModifiedDate":"2023-09-26"},{"lineNumber":182,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":183,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":184,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":185,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":186,"author":{"gitId":"andytoh1"},"content":" return listTasks(resultList);","lastModifiedDate":"2023-09-26"},{"lineNumber":187,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":188,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":188}},{"path":"src/test/java/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" public void testSaveTasks() {","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" TaskList originalList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" Storage.load(originalList);","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" Task task1 \u003d new Task(\"Task 1\");","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" Task task2 \u003d new Task(\"Task 2\");","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" testList.addTask(task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" testList.addTask(task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(testList);","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" TaskList verifyList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" Storage.load(verifyList);","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" assertEquals(verifyList.getTask(0), task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" assertEquals(verifyList.getTask(1), task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":22}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" @Test","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" Task task1 \u003d new Task(\"Task 1\");","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" Task task2 \u003d new Task(\"Task 2\");","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" assertEquals(1, taskList.getCount());","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" assertEquals(task2, taskList.getTask(0));","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"adkpqweqwdpaskda","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"todo abc","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"deadline abc by sunday","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"deadline abc /by sunday","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"andytoh1":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"java -classpath ..\\bin Chatbot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"java -classpath ../bin Chatbot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" implementation \u0027org.testng:testng:7.1.0\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" testImplementation \u0027org.mockito:mockito-core:3.12.4\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" String javaFxVersion \u003d \u002717.0.8\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" implementation \u0027org.openjfx:javafx-controls:17.0.8\u0027","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" mainClassName \u003d \"Launcher\"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" archiveFileName \u003d \"Chatbot.jar\"","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":20,"-":40}},{"path":"docs/README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"Chatbot is a chatbot that helps to keep track of your tasks. ","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"### Adding a to-do: `todo `","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"Adds a task without any time constraints to the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":"Format: `todo TASK_DESCRIPTION`","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":"`todo read book`","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"### Adding a deadline task: `deadline`","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":"Adds a task with a specific time by which it has to be done.","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"Format: `deadline TASK_DESCRIPTION /by DD-MM-YYYY HH:MM`","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"- Time is given in 24-hour format.","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":"`deadline read book by 19-09-2023 18:00`","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":"### Adding an event: `event`","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":"Adds a task with specific start and end times.","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":"Format: `event TASK_DESCRIPTION /from DD-MM-YYYY HH:MM /to DD-MM-YYYY HH:MM`","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"- Time is given in 24-hour format.","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":"`event read book /from 20-12-2023 12:00 /to 20-12-2023 15:00`","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":"### Viewing list of tasks: `list`","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":"Displays the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":"Format: `list`","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":"### Deleting tasks from list: `delete`","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":"Deletes the task at the specified index in the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be greater than 0.","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be smaller than the last number in the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2019-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":"`delete 3`","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":"### Mark tasks: `mark`","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":"Marks a task at the given index in the list as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":"Format: `mark INDEX`","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be greater than 0.","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":"- `INDEX` has to be smaller than the last number in the list .","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":"- Tasks are marked as done with an \"X\".","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":"Example of usage:","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":"`mark 1`","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":"### Locating a task: `find`","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":"Searches for a task by description.","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":"- Search is case-sensitive.","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":"- The order of search terms matter.","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":"- A match will happen if the search term matches any substring exactly.","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":"### Exit program: `bye`","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":"Closes the chatbot.","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-17"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":"Format: `bye`","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":59,"-":22}},{"path":"src/main/java/Chatbot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"import javafx.event.EventTarget;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":"public class Chatbot extends Application {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" private Scene scene;","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" private Image user \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" private Image duke \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" public Chatbot() {","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" Storage.load(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" Ui.startMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" Scanner userInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" String userMessage \u003d userInput.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" Parser.parse(userMessage, taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" @Override","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" // Step 1. Setting up required components","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" Storage.load(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" initializeUI(stage);","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" setStage(stage);","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" setEventHandlers(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" private void initializeUI(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" scrollPane \u003d new ScrollPane();","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" dialogContainer \u003d new VBox();","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" scrollPane.setContent(dialogContainer);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" userInput \u003d new TextField();","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" sendButton \u003d new Button(\"Send\");","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" AnchorPane mainLayout \u003d new AnchorPane();","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" mainLayout.setPrefSize(400.0, 600.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" scene \u003d new Scene(mainLayout);","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" stage.show();","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" private void setStage(Stage stage) {","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" stage.setTitle(\"Chatbot\");","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" stage.setMinHeight(600.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" stage.setMinWidth(400.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" scrollPane.setPrefSize(400, 570);","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":" scrollPane.setVvalue(1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" scrollPane.setFitToWidth(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" userInput.setPrefWidth(325.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" sendButton.setPrefWidth(55.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setTopAnchor(scrollPane, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setBottomAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setRightAnchor(sendButton, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setLeftAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" AnchorPane.setBottomAnchor(userInput, 1.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" private void setEventHandlers(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().add(getDialogLabel(userInput.getText()));","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":" dialogContainer.heightProperty().addListener((observable) -\u003e scrollPane.setVvalue(1.0));","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":" sendButton.setOnMouseClicked((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":117,"author":{"gitId":"andytoh1"},"content":" handleUserInput(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":118,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":119,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":120,"author":{"gitId":"andytoh1"},"content":" userInput.setOnAction((event) -\u003e {","lastModifiedDate":"2023-09-26"},{"lineNumber":121,"author":{"gitId":"andytoh1"},"content":" handleUserInput(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":122,"author":{"gitId":"andytoh1"},"content":" });","lastModifiedDate":"2023-09-26"},{"lineNumber":123,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":124,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":125,"author":{"gitId":"andytoh1"},"content":" // more code to be added here later","lastModifiedDate":"2023-09-26"},{"lineNumber":126,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":127,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":128,"author":{"gitId":"andytoh1"},"content":" private Label getDialogLabel(String text) {","lastModifiedDate":"2023-09-26"},{"lineNumber":129,"author":{"gitId":"andytoh1"},"content":" // You will need to import `javafx.scene.control.Label`.","lastModifiedDate":"2023-09-26"},{"lineNumber":130,"author":{"gitId":"andytoh1"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-26"},{"lineNumber":131,"author":{"gitId":"andytoh1"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":132,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":133,"author":{"gitId":"andytoh1"},"content":" return textToAdd;","lastModifiedDate":"2023-09-26"},{"lineNumber":134,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":135,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":136,"author":{"gitId":"andytoh1"},"content":" private void handleUserInput(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":137,"author":{"gitId":"andytoh1"},"content":" Label userText \u003d new Label(userInput.getText());","lastModifiedDate":"2023-09-26"},{"lineNumber":138,"author":{"gitId":"andytoh1"},"content":" Label dukeText \u003d new Label(getResponse(userInput.getText(), taskList));","lastModifiedDate":"2023-09-26"},{"lineNumber":139,"author":{"gitId":"andytoh1"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-26"},{"lineNumber":140,"author":{"gitId":"andytoh1"},"content":" DialogBox.getUserDialog(userText, new ImageView(user)),","lastModifiedDate":"2023-09-26"},{"lineNumber":141,"author":{"gitId":"andytoh1"},"content":" DialogBox.getDukeDialog(dukeText, new ImageView(duke))","lastModifiedDate":"2023-09-26"},{"lineNumber":142,"author":{"gitId":"andytoh1"},"content":" );","lastModifiedDate":"2023-09-26"},{"lineNumber":143,"author":{"gitId":"andytoh1"},"content":" userInput.clear();","lastModifiedDate":"2023-09-26"},{"lineNumber":144,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":145,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":146,"author":{"gitId":"andytoh1"},"content":" private String getResponse(String input, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":147,"author":{"gitId":"andytoh1"},"content":" return Parser.parse(input, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":148,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":149,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andytoh1":149}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for Deadline task.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" public Deadline(String description, LocalDateTime deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return super.getDescription() + \" (by: \" + deadline.format(formatter) + \")\";","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public String getDeadline() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return deadline.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" public String getDescriptionWithoutTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" return super.getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":29}},{"path":"src/main/java/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" private Label text;","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public DialogBox(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" text \u003d l;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" displayPicture \u003d iv;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" text.setWrapText(true);","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" displayPicture.setFitWidth(100.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" displayPicture.setFitHeight(100.0);","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" this.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" this.getChildren().addAll(text, displayPicture);","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" private void flip() {","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" this.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" FXCollections.reverse(tmp);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" this.getChildren().setAll(tmp);","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" public static DialogBox getUserDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" return new DialogBox(l, iv);","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" public static DialogBox getDukeDialog(Label l, ImageView iv) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" var db \u003d new DialogBox(l, iv);","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" db.flip();","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" return db;","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":45}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for Event task.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime startTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" private LocalDateTime endTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public Event(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return super.getDescription() + \" (from: \" + startTime.format(formatter) + \" to: \"","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" + endTime.format(formatter) + \")\";","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" public String getStartTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" return startTime.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" public String getEndTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" return endTime.format(formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" public String getDescriptionWithoutTime() {","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" return super.getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":38}},{"path":"src/main/java/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"public class Launcher {","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" Application.launch(Chatbot.class, args);","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":10}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" * Class for reading user input.","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"public class Parser {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" * Parses any user input.","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" * @param userMessage Input of the user.","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" * @param taskList TaskList with all the current tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public static String parse (String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" assert userMessage.length() \u003e 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" if (userMessage.equalsIgnoreCase(\"bye\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return Ui.endMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" if (userMessage.equalsIgnoreCase(\"list\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" return Ui.listTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" if (userMessage.substring(0, 6).equalsIgnoreCase(\"delete\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" int removeTask \u003d Integer.parseInt(userMessage.substring(7)) - 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" return Ui.deleteMessage(removeTask, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 4).equalsIgnoreCase(\"find\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" return Ui.findMessage(userMessage.substring(5), taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" }else if (userMessage.substring(0, 4).equalsIgnoreCase(\"mark\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" int doneTask \u003d Integer.parseInt(userMessage.substring(5)) - 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" return Ui.markMessage(doneTask, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 4).equalsIgnoreCase(\"todo\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" return parseTodo(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 8).equalsIgnoreCase(\"deadline\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" return parseDeadline(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" } else if (userMessage.substring(0, 5).equalsIgnoreCase(\"event\")) {","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" return parseEvent(userMessage, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" } else {","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" return Ui.inputErrorMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" return Ui.inputErrorMessage();","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" public static String parseEvent(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" int index \u003d userMessage.indexOf(\"/from\");","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" int index2 \u003d userMessage.indexOf(\"/to\");","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" String description \u003d userMessage.substring(6, index - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" String start \u003d userMessage.substring(index + 6, index2 - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" String end \u003d userMessage.substring(index2 + 4);","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(start, formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(end, formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" Event event \u003d new Event(description, startTime, endTime);","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" return Ui.eventMessage(event, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"event\");","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" public static String parseDeadline(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" String datePattern \u003d \"dd-MM-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(datePattern);","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" int index \u003d userMessage.indexOf(\"/by\");","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" String description \u003d userMessage.substring(9, index - 1);","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" LocalDateTime taskDeadline \u003d LocalDateTime.parse(userMessage.substring(index + 4), formatter);","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" Deadline deadline \u003d new Deadline(description, taskDeadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" return Ui.deadlineMessage(deadline, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"deadline\");","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" public static String parseTodo(String userMessage, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" Todo todo \u003d new Todo(userMessage.substring(5));","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":" return Ui.todoMessage(todo, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" return Ui.formatErrorMessage(\"todo\");","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":87}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" * Class for saving and loading the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"public class Storage {","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" * Loads the list of tasks from file.","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object to be filled with data from file.","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public static void load(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003d\u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" File taskFile \u003d new File(\"./tasks.txt\");","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" Scanner taskReader \u003d new Scanner(taskFile);","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" while (taskReader.hasNextLine()) {","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" String taskFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" addTodo(taskFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" String deadlineFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" addDeadline(taskFromFile, deadlineFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(0) \u003d\u003d \u0027E\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" String startFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" String endFromFile \u003d taskReader.nextLine();","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" addEvent(taskFromFile, startFromFile, endFromFile, taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" File taskFile \u003d new File(\"./tasks.txt\");","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" taskFile.createNewFile();","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" System.out.println(\"Error!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" public static void addTodo(String taskFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" Todo todo \u003d new Todo(taskFromFile.substring(3));","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" todo.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" public static void addDeadline(String taskFromFile, String deadlineFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" LocalDateTime taskDeadline \u003d LocalDateTime.parse(deadlineFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":" Deadline deadline \u003d new Deadline(taskFromFile.substring(3), taskDeadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" deadline.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" public static void addEvent(String taskFromFile, String startFromFile, String endFromFile, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" String datePattern2 \u003d \"MMM-dd-yyyy HH:mm\";","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(datePattern2);","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" LocalDateTime start \u003d LocalDateTime.parse(startFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" LocalDateTime end \u003d LocalDateTime.parse(endFromFile, formatter2);","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" Event event \u003d new Event(taskFromFile.substring(3), start, end);","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" if (taskFromFile.charAt(1) \u003d\u003d \u0027t\u0027) {","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" event.markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":" * Saves the current tasks to file.","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object with the tasks to be saved to file.","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" public static void saveTasks(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" FileWriter taskWriter \u003d new FileWriter(\"./tasks.txt\", false);","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" for (int taskNumber \u003d 0; taskNumber \u003c\u003d taskList.getCount(); taskNumber++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"T\");","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).getDescription() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(taskNumber) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"D\");","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Deadline)taskList.getTask(taskNumber)).getDescriptionWithoutTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(taskNumber) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(\"E\");","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(taskList.getTask(taskNumber).isDone() ? \"t \" : \"f \");","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event)taskList.getTask(taskNumber)).getDescriptionWithoutTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Deadline) taskList.getTask(taskNumber)).getDeadline() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(taskNumber) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event) taskList.getTask(taskNumber)).getStartTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":" taskWriter.write(((Event) taskList.getTask(taskNumber)).getEndTime() + \"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":" taskWriter.flush();","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":" System.out.println(\"Error!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":116}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"public class Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" private String description;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" private boolean done;","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public Task(String description) {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" public void markAsDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" this.done \u003d true;","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" this.done \u003d false;","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return description;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return done;","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":25}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class representing a list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" private Task[] tasks;","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" private int taskCount;","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" tasks \u003d new Task[100];","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" taskCount \u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" * Adds a task to the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" * @param task The Task object to be added to the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" tasks[taskCount] \u003d task;","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" taskCount++;","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" * Deletes a task from the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" * @param task The index of the task to be deleted from the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" public void deleteTask(int task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" Task[] newTasks \u003d new Task[100];","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskCount - 1; i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" int j \u003d i;","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" if (i \u003e\u003d task) j \u003d i + 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":" newTasks[i] \u003d tasks[j];","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" tasks \u003d newTasks;","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" taskCount--;","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" assert taskCount \u003e\u003d 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" public void markTask(int task) {","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" tasks[task].markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" assert tasks[task].isDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" public int getCount() {","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" return taskCount;","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" return tasks[i];","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":52}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class for Todo task.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public Todo(String description) {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" super(description);","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":8}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"/**","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":" * Class handling the output.","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class Ui {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":" public static String startMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Hello! I\u0027m Chatbot!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"What can I do for you?\");","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" public static String endMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":" public static String inputErrorMessage() {","lastModifiedDate":"2023-09-26"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":" return \"I\u0027m sorry, but I don\u0027t know what that means!\";","lastModifiedDate":"2023-09-26"},{"lineNumber":24,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":25,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":26,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":27,"author":{"gitId":"andytoh1"},"content":" * Displays an error message arising from mistakes in format.","lastModifiedDate":"2023-09-26"},{"lineNumber":28,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":29,"author":{"gitId":"andytoh1"},"content":" * @param type Type of command that is not properly formatted.","lastModifiedDate":"2023-09-26"},{"lineNumber":30,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":31,"author":{"gitId":"andytoh1"},"content":" public static String formatErrorMessage(String type) {","lastModifiedDate":"2023-09-26"},{"lineNumber":32,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":33,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":34,"author":{"gitId":"andytoh1"},"content":" switch(type) {","lastModifiedDate":"2023-09-26"},{"lineNumber":35,"author":{"gitId":"andytoh1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-26"},{"lineNumber":36,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"todo \u003ctask description\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":37,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":38,"author":{"gitId":"andytoh1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-26"},{"lineNumber":39,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"mark \u003ctask number\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":40,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":41,"author":{"gitId":"andytoh1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-26"},{"lineNumber":42,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"delete \u003ctask number\u003e\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":43,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":44,"author":{"gitId":"andytoh1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-26"},{"lineNumber":45,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"deadline \u003ctask description\u003e /by DD-MM-YYYY HH:MM\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":46,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":47,"author":{"gitId":"andytoh1"},"content":" case \"event\":","lastModifiedDate":"2023-09-26"},{"lineNumber":48,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Please use the format \\\"event \u003ctask description\u003e /from DD-MM-YYYY HH:MM \" + \"/to DD-MM-YYYY HH:MM\\\"!\");","lastModifiedDate":"2023-09-26"},{"lineNumber":49,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":50,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":51,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":52,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":53,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":54,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":55,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":56,"author":{"gitId":"andytoh1"},"content":" * Displays the list of tasks.","lastModifiedDate":"2023-09-26"},{"lineNumber":57,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":58,"author":{"gitId":"andytoh1"},"content":" * @param taskList The list of tasks to be displayed.","lastModifiedDate":"2023-09-26"},{"lineNumber":59,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":60,"author":{"gitId":"andytoh1"},"content":" public static String listTasks(TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":61,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":62,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":63,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Here is the list of relevant tasks:\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":64,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskList.getCount(); i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":65,"author":{"gitId":"andytoh1"},"content":" int listNumber \u003d i + 1;","lastModifiedDate":"2023-09-26"},{"lineNumber":66,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(listNumber + \". \");","lastModifiedDate":"2023-09-26"},{"lineNumber":67,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(i) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":68,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":69,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(i) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":70,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":71,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(i) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":72,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":73,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":74,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(i).isDone()) stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":75,"author":{"gitId":"andytoh1"},"content":" else stringBuilder.append(\"[ ] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":76,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(i).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":77,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":78,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":79,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":80,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":81,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":82,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":83,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":84,"author":{"gitId":"andytoh1"},"content":" * Handles the output of a delete command.","lastModifiedDate":"2023-09-26"},{"lineNumber":85,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":86,"author":{"gitId":"andytoh1"},"content":" * @param removeTask Index of the task to be removed from the list.","lastModifiedDate":"2023-09-26"},{"lineNumber":87,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object from which the task is to be deleted.","lastModifiedDate":"2023-09-26"},{"lineNumber":88,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":89,"author":{"gitId":"andytoh1"},"content":" public static String deleteMessage(int removeTask, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":90,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":91,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":92,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":93,"author":{"gitId":"andytoh1"},"content":" assert removeTask \u003e\u003d 0 : \"Value must be non-negative\";","lastModifiedDate":"2023-09-26"},{"lineNumber":94,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003e removeTask : \"Value must be a number in the list\";","lastModifiedDate":"2023-09-26"},{"lineNumber":95,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"This task will be removed!\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":96,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(removeTask) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":97,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":98,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(removeTask) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":99,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":100,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(removeTask) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":101,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":102,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":103,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(removeTask).isDone()) stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":104,"author":{"gitId":"andytoh1"},"content":" else stringBuilder.append(\"[ ] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":105,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(removeTask).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":106,"author":{"gitId":"andytoh1"},"content":" taskList.deleteTask(removeTask);","lastModifiedDate":"2023-09-26"},{"lineNumber":107,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":108,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":109,"author":{"gitId":"andytoh1"},"content":" return formatErrorMessage(\"delete\");","lastModifiedDate":"2023-09-26"},{"lineNumber":110,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":111,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":112,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":113,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":114,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":115,"author":{"gitId":"andytoh1"},"content":" /**","lastModifiedDate":"2023-09-26"},{"lineNumber":116,"author":{"gitId":"andytoh1"},"content":" * Handles the output of a mark command.","lastModifiedDate":"2023-09-26"},{"lineNumber":117,"author":{"gitId":"andytoh1"},"content":" *","lastModifiedDate":"2023-09-26"},{"lineNumber":118,"author":{"gitId":"andytoh1"},"content":" * @param doneTask Index of the task to be marked as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":119,"author":{"gitId":"andytoh1"},"content":" * @param taskList The TaskList object in which the task is to be marked as done.","lastModifiedDate":"2023-09-26"},{"lineNumber":120,"author":{"gitId":"andytoh1"},"content":" */","lastModifiedDate":"2023-09-26"},{"lineNumber":121,"author":{"gitId":"andytoh1"},"content":" public static String markMessage(int doneTask, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":122,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":123,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":124,"author":{"gitId":"andytoh1"},"content":" try {","lastModifiedDate":"2023-09-26"},{"lineNumber":125,"author":{"gitId":"andytoh1"},"content":" assert doneTask \u003e\u003d 0 : \"Value must be non-negative\";","lastModifiedDate":"2023-09-26"},{"lineNumber":126,"author":{"gitId":"andytoh1"},"content":" assert taskList.getCount() \u003e doneTask : \"Value must be a number in the list\";","lastModifiedDate":"2023-09-26"},{"lineNumber":127,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Well done! This task has been marked as done.\\n\");","lastModifiedDate":"2023-09-26"},{"lineNumber":128,"author":{"gitId":"andytoh1"},"content":" if (taskList.getTask(doneTask) instanceof Todo) {","lastModifiedDate":"2023-09-26"},{"lineNumber":129,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[T]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":130,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(doneTask) instanceof Deadline) {","lastModifiedDate":"2023-09-26"},{"lineNumber":131,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[D]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":132,"author":{"gitId":"andytoh1"},"content":" } else if (taskList.getTask(doneTask) instanceof Event) {","lastModifiedDate":"2023-09-26"},{"lineNumber":133,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[E]\");","lastModifiedDate":"2023-09-26"},{"lineNumber":134,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":135,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"[X] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":136,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(doneTask).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":137,"author":{"gitId":"andytoh1"},"content":" taskList.getTask(doneTask).markAsDone();","lastModifiedDate":"2023-09-26"},{"lineNumber":138,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":139,"author":{"gitId":"andytoh1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-26"},{"lineNumber":140,"author":{"gitId":"andytoh1"},"content":" return formatErrorMessage(\"mark\");","lastModifiedDate":"2023-09-26"},{"lineNumber":141,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":142,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":143,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":144,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":145,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":146,"author":{"gitId":"andytoh1"},"content":" public static String todoMessage(Todo todo, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":147,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":148,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":149,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(todo);","lastModifiedDate":"2023-09-26"},{"lineNumber":150,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [T] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":151,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":152,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":153,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":154,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":155,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":156,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":157,"author":{"gitId":"andytoh1"},"content":" public static String deadlineMessage(Deadline deadline, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":158,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":159,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":160,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(deadline);","lastModifiedDate":"2023-09-26"},{"lineNumber":161,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [D] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":162,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":163,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":164,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":165,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":166,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":167,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":168,"author":{"gitId":"andytoh1"},"content":" public static String eventMessage(Event event, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":169,"author":{"gitId":"andytoh1"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-26"},{"lineNumber":170,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":171,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(event);","lastModifiedDate":"2023-09-26"},{"lineNumber":172,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(\"Added this task: [E] \");","lastModifiedDate":"2023-09-26"},{"lineNumber":173,"author":{"gitId":"andytoh1"},"content":" stringBuilder.append(taskList.getTask(taskList.getCount() - 1).getDescription());","lastModifiedDate":"2023-09-26"},{"lineNumber":174,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(taskList);","lastModifiedDate":"2023-09-26"},{"lineNumber":175,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":176,"author":{"gitId":"andytoh1"},"content":" return stringBuilder.toString();","lastModifiedDate":"2023-09-26"},{"lineNumber":177,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":178,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":179,"author":{"gitId":"andytoh1"},"content":" public static String findMessage(String searchTerm, TaskList taskList) {","lastModifiedDate":"2023-09-26"},{"lineNumber":180,"author":{"gitId":"andytoh1"},"content":" assert searchTerm.length() \u003e 0;","lastModifiedDate":"2023-09-26"},{"lineNumber":181,"author":{"gitId":"andytoh1"},"content":" TaskList resultList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":182,"author":{"gitId":"andytoh1"},"content":" for (int i \u003d 0; i \u003c taskList.getCount(); i++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":183,"author":{"gitId":"andytoh1"},"content":" String taskDescription \u003d taskList.getTask(i).getDescription();","lastModifiedDate":"2023-09-26"},{"lineNumber":184,"author":{"gitId":"andytoh1"},"content":" for (int j \u003d 0; j \u003c\u003d taskDescription.length() - searchTerm.length(); j++) {","lastModifiedDate":"2023-09-26"},{"lineNumber":185,"author":{"gitId":"andytoh1"},"content":" if (taskDescription.substring(j, j+ searchTerm.length()).equals(searchTerm)) {","lastModifiedDate":"2023-09-26"},{"lineNumber":186,"author":{"gitId":"andytoh1"},"content":" resultList.addTask(taskList.getTask(i));","lastModifiedDate":"2023-09-26"},{"lineNumber":187,"author":{"gitId":"andytoh1"},"content":" break;","lastModifiedDate":"2023-09-26"},{"lineNumber":188,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":189,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":190,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":191,"author":{"gitId":"andytoh1"},"content":" return listTasks(resultList);","lastModifiedDate":"2023-09-26"},{"lineNumber":192,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":193,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":193}},{"path":"src/test/java/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class StorageTest {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" public void testSaveTasks() {","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" TaskList originalList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" Storage.load(originalList);","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" TaskList testList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" Task task1 \u003d new Task(\"Task 1\");","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" Task task2 \u003d new Task(\"Task 2\");","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":" testList.addTask(task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" testList.addTask(task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" Storage.saveTasks(testList);","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" TaskList verifyList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":" Storage.load(verifyList);","lastModifiedDate":"2023-09-26"},{"lineNumber":19,"author":{"gitId":"andytoh1"},"content":" assertEquals(verifyList.getTask(0), task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":20,"author":{"gitId":"andytoh1"},"content":" assertEquals(verifyList.getTask(1), task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":21,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":22,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":22}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-26"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-26"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-26"},{"lineNumber":5,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":6,"author":{"gitId":"andytoh1"},"content":" @Test","lastModifiedDate":"2023-09-26"},{"lineNumber":7,"author":{"gitId":"andytoh1"},"content":" public void testDeleteTask() {","lastModifiedDate":"2023-09-26"},{"lineNumber":8,"author":{"gitId":"andytoh1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-26"},{"lineNumber":9,"author":{"gitId":"andytoh1"},"content":" Task task1 \u003d new Task(\"Task 1\");","lastModifiedDate":"2023-09-26"},{"lineNumber":10,"author":{"gitId":"andytoh1"},"content":" Task task2 \u003d new Task(\"Task 2\");","lastModifiedDate":"2023-09-26"},{"lineNumber":11,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-26"},{"lineNumber":12,"author":{"gitId":"andytoh1"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-26"},{"lineNumber":13,"author":{"gitId":"andytoh1"},"content":"","lastModifiedDate":"2023-09-26"},{"lineNumber":14,"author":{"gitId":"andytoh1"},"content":" taskList.deleteTask(0);","lastModifiedDate":"2023-09-26"},{"lineNumber":15,"author":{"gitId":"andytoh1"},"content":" assertEquals(1, taskList.getCount());","lastModifiedDate":"2023-09-26"},{"lineNumber":16,"author":{"gitId":"andytoh1"},"content":" assertEquals(task2, taskList.getTask(0));","lastModifiedDate":"2023-09-26"},{"lineNumber":17,"author":{"gitId":"andytoh1"},"content":" }","lastModifiedDate":"2023-09-26"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"}","lastModifiedDate":"2023-09-26"}],"authorContributionMap":{"andytoh1":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andytoh1"},"content":"adkpqweqwdpaskda","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"andytoh1"},"content":"todo abc","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"andytoh1"},"content":"deadline abc by sunday","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"andytoh1"},"content":"deadline abc /by sunday","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"andytoh1":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"andytoh1"},"content":"java -classpath ..\\bin Chatbot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"andytoh1"},"content":"java -classpath ../bin Chatbot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andytoh1":1,"-":37}}] diff --git a/andytoh1_ip_master/commits.json b/andytoh1_ip_master/commits.json index 20493edc..0f844100 100644 --- a/andytoh1_ip_master/commits.json +++ b/andytoh1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"andytoh1":[{"date":"2023-08-24","commitResults":[{"hash":"be54eb62370c7bf4c5f42ebaa63560004397b72e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}},{"hash":"8c01edb381794a18a37bbc7fbe27ad976b28bc33","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"2952594b5ffc710a1ab7b015866ceeae49538a2d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"4afb4e8ac6cd143c44911523f54a1f2cf296c0df","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"f2860d0fd739b4f6e36b813d08ae352e8294aaa0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"7ff37d08406c0a99195331a4d853bf95e745c133","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"1cab9410d9a7a0145ed46617b8868386c2c8b7d8","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"537844575b5f68eb31dcd0052598ac599e883bc8","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"24743aca20e40d7a6f81a6912bdab27113eac915","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":482,"deletions":7}}},{"hash":"276add239f554cdee0d2894af190d30b2699107d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":370,"deletions":70}}}]},{"date":"2023-09-24","commitResults":[{"hash":"507a00467fee76523c9a6ca8b70a498365260f33","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"8f0342d8d73b53db07e14d87335aab775920831f","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-26","commitResults":[{"hash":"0a862f1f97500f32d880675d6f846f097cc9aaf4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":428,"deletions":375}}},{"hash":"de26dda3cb9f6f77bc8c9ad545b89acad0a53621","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Jar","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"338f4de7f2f8e130495839f00f65b8d79abebe1a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":1}}},{"hash":"18f38eeda7031ab39d3a79d25c6f28f16f581c21","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"8305bc353410d5418093467e19b66545b898e93c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"936366f6f480aec68162f9881ef14e763c3985d3","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":287,"deletions":67}}},{"hash":"27f48015ef321ae95556e6b58810191c9b71fd38","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There are several assumptions that are made at any point\nwithin the code. In some cases these will lead to errors.\n\nDocumenting these assumptions will lead to easier debugging\nand a smoother experience for the user if they can find out more easily\nabout their wrong inputs.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":6}}},{"hash":"766187e90d648ddedd6075cf6999e1e8a4129f5d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Code quality can contribute greatly to readability of the code.\n\nIn this change, multiple long and deeply-nested methods were\nbroken into smaller components so as to avoid confusion down the line.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":68}}},{"hash":"7f51920dff24bcbd742b63d866be9fb9e350e70e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from andytoh1/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"417acfbf6b0031b2d90a564c8f7abfd5997f4aa7","isMergeCommit":true,"messageTitle":"Merge pull request #3 from andytoh1/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"20de560dfc82bfca3d37bbbe7efd778fa9a42ab7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1},"md":{"insertions":66,"deletions":14}}}]}]},"authorFileTypeContributionMap":{"andytoh1":{"java":787,"md":59,"fxml":0,"sh":1,"bat":1,"gradle":20,"txt":4}},"authorContributionVariance":{"andytoh1":76307.93},"authorDisplayNameMap":{"andytoh1":"CS2103T-F11-3 TOH ..ANDY"}} +{"authorDailyContributionsMap":{"andytoh1":[{"date":"2023-08-24","commitResults":[{"hash":"be54eb62370c7bf4c5f42ebaa63560004397b72e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":10}}},{"hash":"8c01edb381794a18a37bbc7fbe27ad976b28bc33","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"2952594b5ffc710a1ab7b015866ceeae49538a2d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"4afb4e8ac6cd143c44911523f54a1f2cf296c0df","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"f2860d0fd739b4f6e36b813d08ae352e8294aaa0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"7ff37d08406c0a99195331a4d853bf95e745c133","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":16}}},{"hash":"1cab9410d9a7a0145ed46617b8868386c2c8b7d8","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"537844575b5f68eb31dcd0052598ac599e883bc8","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"24743aca20e40d7a6f81a6912bdab27113eac915","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":482,"deletions":7}}},{"hash":"276add239f554cdee0d2894af190d30b2699107d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":370,"deletions":70}}}]},{"date":"2023-09-24","commitResults":[{"hash":"507a00467fee76523c9a6ca8b70a498365260f33","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"8f0342d8d73b53db07e14d87335aab775920831f","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-26","commitResults":[{"hash":"0a862f1f97500f32d880675d6f846f097cc9aaf4","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":428,"deletions":375}}},{"hash":"de26dda3cb9f6f77bc8c9ad545b89acad0a53621","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Jar","A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"338f4de7f2f8e130495839f00f65b8d79abebe1a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":1}}},{"hash":"18f38eeda7031ab39d3a79d25c6f28f16f581c21","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}},{"hash":"8305bc353410d5418093467e19b66545b898e93c","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Javadoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"936366f6f480aec68162f9881ef14e763c3985d3","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":287,"deletions":67}}},{"hash":"27f48015ef321ae95556e6b58810191c9b71fd38","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"There are several assumptions that are made at any point\nwithin the code. In some cases these will lead to errors.\n\nDocumenting these assumptions will lead to easier debugging\nand a smoother experience for the user if they can find out more easily\nabout their wrong inputs.\n","tags":["A-FullCommitMessage","A-Assertions"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":9,"deletions":6}}},{"hash":"766187e90d648ddedd6075cf6999e1e8a4129f5d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Code quality can contribute greatly to readability of the code.\n\nIn this change, multiple long and deeply-nested methods were\nbroken into smaller components so as to avoid confusion down the line.\n","tags":["A-CodeQuality"],"fileTypesAndContributionMap":{"java":{"insertions":94,"deletions":68}}},{"hash":"7f51920dff24bcbd742b63d866be9fb9e350e70e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from andytoh1/branch-A-CodeQuality","messageBody":"Improve code quality","fileTypesAndContributionMap":{}},{"hash":"417acfbf6b0031b2d90a564c8f7abfd5997f4aa7","isMergeCommit":true,"messageTitle":"Merge pull request #3 from andytoh1/branch-A-Assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"20de560dfc82bfca3d37bbbe7efd778fa9a42ab7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-UserGuide"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1},"md":{"insertions":66,"deletions":14}}},{"hash":"b8cf9b7c61480c51a69414ec14e7106b08d6b0df","isMergeCommit":false,"messageTitle":"no message","messageBody":"","tags":["A-Release"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"andytoh1":{"java":792,"md":59,"fxml":0,"sh":1,"bat":1,"gradle":20,"txt":4}},"authorContributionVariance":{"andytoh1":76674.43},"authorDisplayNameMap":{"andytoh1":"CS2103T-F11-3 TOH ..ANDY"}} diff --git a/archive.zip b/archive.zip index 01ce7437cc3269cf511157fd47c3b3f46d6c5a26..d8dff153fc916b634c85d0826c89e66a6986848b 100644 GIT binary patch delta 151527 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

*-%+Pnz3>0m)Uyr@fc;QF;SnmX_={$ zgVRqRQMMWr_6Zqc%`t{_qFln*Z0>42`Gj7LoCG=G>9|@wKXR!h_U!k{eiCTt?Q7ud zB(}1SOfH$lz<*~&Oczp#ktDXI@!6aeTBsl0U`BmWo|r(Xt>O0`S>Hfb4Uo|W$1uo=C_8!7b-aVHoDGxJ1Mv{F$%B- z$Zcfr19CWbO<0ov>=AA{8!$Rf9vkpIi?aOk^1bn#tu+aKRf zg7Wz@?|;-jfBK62lYE+UE#gG-sxPCntzm!XY|9bhNRBnU$lm>Q`sT_0+18)5^N20; z?nxgTGis|H!}wMzEYU=y@m>EoOhlTXLu4G(N;Z;_2t}X16h}e-2lreAC@YN9x`Gvd zA`fo=nEv~t+?FUajB~t#nZUh^W@-O>c`8sw+J7wX!ce;OAjh|_;wVZTH}EgQiTorx zXs7Q#{Nv;CU%o$;hcHR+0-^d}WS`DL|DWWfbSCcY_rkxpOp9at;^m9yFZYIfPxqhi z?hT*4INICU*Wdif_tML?U!2BbT>9qIogF0$s5fHv-m*oJUz4&V%o)8*)9I_hzZZJIC0@s?Uo$56iUHX9+ix8xVWLIdy>aaU~{Mm*-`loRnY}}Xde%)MSn3Tp=u}G7TfL()< zf@YnMp+v6VqV&>FnzrQrWIoU&H@-H73J?eqx)`Q_%6&|{39j*YLu?G8cdo09f<8%a zrl8Y8V=8&YM@CDTm38)e&n!!wxS#tey46k5a2v>{-I9YIA~&x`Ya3V8d(2bY^rGx7 ze|prR>U)Q6l3|P`7H?sRZJLk5VY}~kCVxOfrYM_5zI%m$OVQy{Jj#eLD&>|L1US~= zz^-HexX*9+bySBpg#$9@9iC?{bH@{a8CnD#tJuu=VPxayiRt9j<0c@^&P%w6B+PhM zj`&99dN%gi&f-8AA^S<7-eM^`6TP`z{DqmleRR2t9;Pfn4JJLP=nP#wj-uuLvqeps z-8Vv(mtpFT`#2Le z-!~f7uFq~hnAQLkmj8y=VaidHudK^c-*(Gb*zWtTcynC%N{Pf-#(-hMFB2AN{mL4V z!^o-3R~*}h=q~l2)f*i^8YV|YXdsxpl9tM zVES`pNehSMPFkwm-cjbmowyIvg{IfXu+$Qfmkz35p5vwuxa-B-t_X0YW=1q)DXmVU zp6PmLLfp0@lvY}Yx#YZ-(R_7vU1}G&^^E?lT(O0-7|-X`$H^MOF4~2vqH2ySUGiR6 zal>UnSvjDs>KI_WwO3S;%#b*D9X=36`iAI}CcRx;I4O_jeAk<*O7^ESb$+|&UnA{s z5F5L`q-|q20A!f4u{XB9F_CLEjVB%hCe!_2I`aey=71?qN8=#4GCN2K8;j5HnM1;{hn_ zq+=hCxWaf(DeO-|X>h);Y|Wi=@IwXKxWIv4N!t~=j`Ppu4mZA^M=^P|)a}4b7vHY` z8;5hDjY)$jL-n!hKnzNwUel7v$r)*%gTLs@-BUf(WJgKjs$F98MY&x*m5za*Sqfz3 zQ2b{FxFc)Yhuvb8&~X$+fq&jiuG4FvaD*+I#(vjaHgaK;C?X zmTW4`zh15y+vb8Qs(SAq^>e4PVx@XEr6F8>(lbd#%_m+pkr@U04)_N5a-`M^pfe$`r;cIdSY*u#BAx-eWE}l=%@*wIKPQ3$Zu0YkAji3d0b1omKu5n|VqoI+T$9{{(PaT~W9#(Nh4^ zREPPn+7Nmpmp~X|@4uUYzjc`xx2xJLNxUS%FfB2GuEH^>Li=Y?N@V6!{WDriG}|hdznu zZ56*?P?4JjUx8nlq%`VuNtLhtyZ<}j7mJl;kqNhteRw71lII(AEZ%Q&1$wEu11l=M z`GFji@{+nLs6}*4(bCP=k}sBtv2ejQ=j zggB3~4*i03CVT<@1B@%Pkqe#&j!OqY0 z@q8>!l=&A~HqmrLT|V3IQnY>dtFiQU#L%GPLk=ihJf&e5W?~Kp(MuD6JP{NA8?w%; zvnFx%Z)b;19(W}UepMsa`2RH;w2<6x_t8G-f@9##v%l`rLzS@(tRC?9TjWy`{Nl6Z zAshDvZ-}}Cp2BA_+;%*c4(G+CjTsEtGhL&_DVG}%Zn8zE)eq6dZPtky@I7nQVSmh( zl^2X`(TVZ#9%b3z+gAY?$)e{c>ZMk=Xw!<*b&`5HZ`%uaywYqnDY!y^`#GXZ)1t*r zP&9ufDGKGZZ7YCvM{{G6@Jj6%1#2v`obXqCv>lBH8$$9p+=G=JqC~Y@;l5!h+YIEW zY2lZd|BOWRyFI_Bi5qL~V&|n08^n2nhWuc!FZ1jVje18ljhTM{*nH=8%Xd-I-fCBn zv(zR_xYh?7g0nkT9Fg!$*nBPgjf+WhqYg_by>B@!orr=gS{2|SmQ6#$oY~4S92(#; zVZHh%`icS=*6A&@otc{P1VX(04a5#giG%alr95w31KmjksrNF!^chpJ z7$DM(E$bTn*X|Mkw%>|22uSzPH&GJ#q4;xJ)ezKe*39wSSdX*@drjj{@^>TZ$yHjZ zPLi_)BujooUH>FNQ}Yrd?V{H|{t@K71{S^|x|RUZ!Rl#qTxgB1v;s-Rii|L#CY|15 zvT8-TW_?0b4}7GaTj4?|h(SLoWqP*m(hYGs&;?y@GSHw6_!*AKnCaT`tv(53_`VB= zskgGa)P()JO&Eu)3!$uLm8Mgb{>NKj|M!UHc`0p)p44Ov5=eA2@=8jGHVhBEHg$z zD}au;F&Jwa5uP4+zCTSIykEQn|0l5RC#nxZuLT5Tw-56F71&Px0|o}uRC~`(`XvUv z494Li`6=G4q`*=5rKtU?%^}M1iHRg}=-_=?1@#;vPM_8p1*ZY}r=`HpIcxE0QIv9u ze+fi8{^5-N64?I!&guIlk{t@iRc`R<$8OIB{3STe?aejs@rj{6at$E;XC>Ewfgv|t zL2(Buehzr(a07oO>0`sK_wy6m+~D5&!ul?`N##GWQ+^%?%uh>SlgH*$b-HQt4-em$ zAJQ<-yw&IE2{Z55S3<4Ayv{bC7*j3p)K@~_UA&o^pI9*#AMw|P7$@Z;;{L>L4ERF6 zRJMIw_=diUkyzyGfcYGS+T#-y`?Qp(`9Z%fgeE6Hj`Szy9>ib!sqXz*U~+9}FH&;( z5ENFEO)P)Imv}ho7XS8F8c-Mfv7Vn{nU(^TUznVmfK2`;mW3lI^HtUbwIHbACw6Zu z*hlthwI>R~6?|IboI(d*g5rNfgs4P5vAr-M#IJpO$`NAtDwXC{$nz`RGALnzFG2AO zU17?v^06(2Yro2xtPwW;%7v{{_+I^UK6(t17OYR}j8SB$<ieC?Y%sd&m) zk|@mLCtvr$w<2+dFQs;|q5@0t+WvPr?eCdv~Lf$)IecU z{6HZT;1VP*lT1~54=3juZ=Al)d{)co@)H-CY@;0&y)9MgCJ#ue@n)T}KI&}mkDfg4 z_Y->LkRHFe(;>)q6Piopl(hmWx*GcO)&oDYD=T8KH0?WsC;o>x+5z%?teya`-i^Tv-|IA zL8c|I=vDy!Vg#6sZa77TCdaCoTw%4VL+nsE84nVSn z)6`iTjnAjMX2h5Vo{_q%A*ny0Pr%NA0naF67kT%MnZ%Q}aH|-VFEU6kB&Zb;i&rq- z1nh_e>MyNjdR)U_folQAP)0!nUqp>_3-dk;=50mWSBOaboGaaeY$s(74u2G@HhzU~ zaiiIFd#e&j`CeF9?pTp+2$6`y%z&Q(K@OSf5WG|-LgRvn%-EpuBOGbgff$Kd7R5 z?TAdD(P-u)Bl69w4x+|uYRc{jTIq)nAjyfwG)3MbsvC3fIaRi9 z_U*#32u0~=JS@b6-SufbX}Ht62*?X_Nei>~gN{dw7`Vv8my8DBO#oMJu}JiU9C6#8njx%=RsqRnM6t&!^Gi_DdPsZa0FenF-6!< zBn%(CAJ|L4CI+ZzVO1@vgdf5e+W2!bdX&w58a%i&X|_sVS!lZZ9g%rdc4(8O0c$oY zG{4&~w?ml1l4&&H+?m(Yk3x+CkT0ZM5(+*#B=n(i6;9?uc$)?NZ3~~p(&%++1tl*b z!he7Idm%G=_Me*sU=4-TxlAr+7qd4TrYyFLvPBY0nleCTu!$dQ#%14)!JXVnKe}ZC z-c0$bSy`vR(*CL zkAK$70Y2ibr$#CN!o;7uGMMfmZivcZM<2S8|U4ylagWxjb6e;Q0hy-J-5Q|lt>=Hy{z-0RDGQF@*8Y}BYi<7o8&&V%JzZusSi57Ucj^Tux^-Y(wDrgh{OE3Q z0zGx{EJV5)JI<{0Ve-4Uh>(JC?D2T@L^Y9^8%w)ub1RT^ZhAsvkUE^^MDy=$rX(Ax zxit@@dFvoRz@9!4bPhe}xg)!<52*m&=v)xC1Q__qGFO{8Gltd?wNd8B(wtONpvSXu9?5?f)Uov?4dw};%Al_0d;}lKwP1ny`V0N$#8@4lnc;sTsqd#} z*Jp8hYE|??rxxN;>A%y7sgDlsER7;v76D*fS0EPX72rfEJu)bcD?AJ~xd?2{ZOgLK zLeHS568$dZgw!;9Xu~k6F$;5}gmoXPTaCpZUEcZ0-$5nDELrn`C7||p;!Y9a%6-IW z-@KpN37a*xU(R&6yj$AMH}C=)6&Hj>u*z+j{~7pFnAtKIh3~F*Pu;Gx{cg0@g8|sV zM#^?7ZHoU!sfOM@%}fQlH5SOM4tzShe!35!BP0y$xi!Fn>5Dc#@9;{1$f2=<>NKHFkSqK6 zDZ=C-?|dEfFQFlL>9G&JGb=8F(F`Do%(a7~_eWdB)!TfQ$e1gIi!e-RZH2M=Zi6PP z_mbzN^Yzaa)-zQGK9=c?IBFZDw>>fux{QY>U8N^}`3j-Yj4LQ2j9sv{{HbARQxWMf z?6lWrZYNAYWA;d|UrQ=-<8^(Nklb|jO#>^%1d7;%Qtfw|aA0#`aRmutrhS06?f&kQ z|IZ_YclvrNdv z!>@N|$rN!4A7Cu{^15wE95|BsC$e%FMishMvr_HGR+Ekgfa^;_+T1Maq(jkxaS9O38sGgNhj@KhLOF%~p}cNHgDg zM`(XOn(`b%J^-h4^B?~Z2w3%%~*M zzKQj7)*Z^sPZEpakih+VWDlcarpvfcm`PErU}g#3bmf75uO$L31x-p~W8r?r*YTJX zi*2W-%hD`SoYr*9AMD`!L&yjRl9NPfcRT`#r`g0?l|2*VMxXeSocDg4vGwd0oS^ikEQt`d_mzv4ihhuJ zm-h|3gN&`*4r{{HwPA0>$8Fd~?>XuB^W(tmxn3?ySUZJdeHYf9|xe ztPUXLzyExm3~Fs6{*x2?)RzSVF!h>Oeic z4H6TgGsG7{tX8YBfhuMXL@8ZX!hHuFtRtegmV6_%mu< z%)OZxvbHi6d0f7g01#2yaH(3tg}0`IQ~F7$I!t4g&f$V#BXrh%#u~13S4E107-|DX zR~xedDN>zxyeoTHLx24Zalg4n#~cQZ1KSh$Mg&2yzX!J)Uep&oh#JMf+|zcE@Zs3j zW~ZTu#!GII6kl+sje$$0fG~C0$L5TEvZ8sxAWJWlLNNAE2*3>i@?>;A-b!T}PGwk$ z@l8nQ**hEXbI?Z2W#57*qU)O+^h!yKgZ(PV`NksgImIcr*dGkXlx(dk-b_9b25~*}!Arpv zSv_;T!A4-mWdMC^bT6VCLxhjpj{71ZJ6S&x2w45pBT&I~tv&@eddoqBy%)-GdA>IY zDHzNwxHgZ?u4U88?ed9GX(p>O5Afd%e=1HE8~t3hib&SvKic2kso`c)J7L2~D$lDY z!{xh-wt@$pcto+?4^^y)q01@k+)krRvBVHsX<1R02LOLAxPDQvM;@N|bn=Q+R7JwR z37<7L;Rfq~3koX|$8(~YJ@okANmfHruoZuhNBRn61JeW>i%l$(1;}T?iM(wPF#py| zYm=I3l9+q5|0OP|5?t|~gc5R@YeA@Vo)aW>RQSPi=>L3KEZ37KG8ZUY%`1LvB@~x% zNPq857XlFE@PmrBUoJF~8q5>$c4M9#$YXsmVn+qwFwNHYNOMk=N{(TwgmGr2m6$_G z%mmV=`eWHh*n}8Ps`6gp8qgarANq0bFm!RPt>T&Y!i4QHc<#BQO+En=k~h%WO+w*9 zZH)lebDj!{Yo#=A1A|RwrbOs?7c)+ZqB8%Xxd5ye#7_>yDotedl(Q~UV48zKtrac| zK&4EwOBslE`T_)3(Nb+VhK_K-f!jFKC&9R2mM;aXG_eUI$ge6{6^kVzyoJegBT+2T zI?;fOg)RYM4L{pfD`|Q>|9BD_0t^Datm1LLTYmxqMk?;MLDKDpgRpTC90B|eqz@R8z!)8XfaB^Eoarh>F24R4 z!hbP(g0WhAO%)`NUb3lB(tal}C@?nZPz`*@UJlO*M>$D&Zr@}K=~9hbuRc@6kMS@+ zEf%ZxOwfy+T+)&ZH14tu-m6!(2|!{_yu!u}gFErh?S0NUjDZj-)uQ{JRUL{jOTX&{HC1Yut>a?eKb)obm4K)a`$Xq` z5$@lMh|r*%SbG%t%3wP4_`ewB4ov(Po${k)=tx*mS6W$q% z*k@1X!G+stVMFPEx(r8+K|j&2oK;khuAIyVlegQx{hB_BLln9H;ayj_z|tMgFWtt4 z+;`~AW?_HVawi~ErNzg3+X6@j0)GS2@o%Brq;C`mmY=l$QTU)s?;ix+?LP&p4+1vv z!;bP_!iolo&S7}$ZWw7N3qR~zjJAIZ+b^tV;07ob<6!baKVTN3pD5hx$as;qyNeaw zcWX27LuZt7w?Sw5nLg@O0&6TrfQRM%A`*e3}oWUE%bZfM)=3vyBVo1Ul+{ zc67YWiJ$*AJP2!jj%Y368n+1ii^F#OMXLM)7@>rYD26G6)Sv`?Jg|lhGh?w9wr=K- zzx>fKCWs`z055aeO!hV_ki&NtNX(>CG3WeF&am_DsP@2dUP6WSi3T}Tuw6rAu zixl{d9S@I_5%V4^N1E?Z4ey(lyY193kI2gc{4*{tsWSlhdWOxgcg`s&Sub+RUs_fb ztl-}=_WCnMEUXZ|ZkGy)KgDu;X$9Oi*P45Gpo3lbaeKPl%@d7EDr~rJad}}2eo?+V z4)Nc6O~8s=BcqHo8f}DO8iDy0;8$47H?jVb6e)D;nf;|5Ia!SF<;9!S3$t_4&rVC9 zsbm^#0J8&d0r>03@VP;BLJKVWZI|GK=oAes?qvF0I;3Yb8{mkOC>vtupSABq*^K4m z6?nOfNcfebgBqgL*dL3&b_*w1^@+bN?y-VE#@NS&{<`i5_eHm6;!->j`Np&qfBH99 z8H*axVTFM`YjGwzfVDV18$UOe_IqK8%&aD4;ifYmc>O;6<}@HM=ye%_Qwa zCNLlX5G>`-LO$;CvE+nD${5H~gNVGBq?aM79+28c^xBM7Pv!`l!Q)@grX1#JyOq2n zBh|iX3-}G;Hn$m%%PvCq2gK#B=$y4Eya$$MmxHQ4q5rzo5M1s;rOQyZRi{SQVD-go zQJz#|10Yv@A8fY`4$542zA;3t44)GnMkakcvr0+!ug(3_8)fmaO2ma7Y&$Mu)ZiLv3deAvN` z5bojh)ujtWHw;2=$um*?5#y)dxzmRTcpoh{IdZ60O#_2>fhmS=ySD4dw=+(pe>8#53+d-YkyVVnX(%={ z0*C3i0At}EhC%q!;rnQWt$`Pw%{Hp<#l45HlWFoFbxFY3!FLa7U{ne2G%i7;ArQR_ zJnwj}DDO=_wEK+S%RCO%doR!5Hd*7_Xf`yw-PQjrM79%GlxQ4ivdn5uI2NPv8ogJEm47o2xvQtYLbOGZyUSzj_%HA{ zhz0wGRW(i(mnqSfHwipcnFW8eS7_f-1be8&+$bp@u67$Uf(7J{?b3ltSRfGkEBaGMaX8X;rddl5>xU zVyGiK{w0vPDAFg^lnjiIsWb~5#t~N84{|~T1)61?USxD005!5E03v?V2WgnIY%TiZ!qJj%nSoj9W%<7CJIsC}YtGGTvJrZ~jl$<2m3X#0T;qd6;Y=r{CHu%cGp;yI zOTgUT-jcp(S;y^lkPBd6F}Sr`Q9GgXY2L+B)Diq`>`w*@fE;zp87$zXGFw!`Gq)&e zL9bHD)Z0t0RLRi8?xeL@H$ZK@4OQ`x(hSWG9ENf~e|AWKyY6R>=*u_abD6CRI8R$u z<*dQ{6TBiC$bg??;GSoHaFL!FMpjO$#u2|Am;P7TqrH?V^$;Kx~*{`Bu+PVJ;SDpP>_+zz?sXyXB(l!x8`*8X& z0*5~q9dW!NCG|O`nV=0E)x*BqeMJ>DpkMC(apuBb|La*ifXlV<&xX5!<6x`Lc}WCq zMbDh51Y~1p&z|T=#U=4jew|oFVqf<-S zp2h30bB(#_VtTg*zBFykD`%2j-FM71TJtBDSU^eGg%@kWv4FO^c$0xN5`0$=@T0Q9 zg+J?pc5HEY}Y=Os~th^g3n#^UwC z8}$PDT!&_nk|Q!DakhbUib;!q_0LHZIMLRpL#0@ts@;Y-B|E@P9)KU{9QWK%8Bs1$ zYGox&n2bD&45MSOM@dM`;>;uy6Rt!Q#*#vx7~;}ZF3uD{3;6&rU5im+ao$cOq1W6H_??DJ%7UwW6+QN~M{Onq9od#p5j z*M50Y^XFMJXwPmr4^E0C(>+rP@4@0U)lw?uZMdvfXZ9SC+X8%6Yw_8;uk%_s4 zagma0{7@xnp+7H^l)TF>Rky*FB6z@2PE^5G#`9;d&L|?jW9O|GZ%>Zg`k~9cWP!e` zJT0jIKiliB^hbsD-*F2~xxq*aDpw$FOvtBEifAeV2Hk7F*NUH2bB+e2J1`CU>>P;$ zjBocM$GkiN@ww7%tcK9zZVH;BAM%7-nx#0q{YXZ5Tng9i<{gy2@62>T&^Md>Hc5XB zx0~+|dEk3~Gm_uHAITuUVLDV-MWnqdi_=Oa;-0Z%rvBSHpR)hW?GAoJ62gQhJK@v8 z{c`!Tl+Jc=K{rmvYFL9dNZ!Pwf|IwjFA%;4<9@jga6DBABH+t<`*{zXwdz2Q7C5Xk z9exBsqoZ?cQFg8bNxD*bx#5jeX9e4OXhhdqvVVp`W4->$P>1e560EA-OD{L&|gngE!-93bx$>@Jx0i370wg$3h6LzT1Kn8X_F5Z=pd> zU9o}n{PAkCTb!#{PXtLXt>9mQhJ=s)#@29DO=OLJvj!xtwVqMVNSMnxt+52tp;;WR ziZKnF>w&swQ%pCkH4@0axQoh&HfG3ZLf>^OFgnSJfp0i>iWIA|FEIXHH?9oNyG0Nc zz)2<`pMxCva=eZPE$lEaD}Q3m!;&8QDD7q(?uCF_OH{?oQCd`LJRghrR&-Ttf~L;o zSkUWyn4z#vd>ua>QaK4uc{Le&V_pfQKenwb;T9$WZE{`E^e24{i_t>~B-w-Otp zpLSrZs(wmaa-4u&Nx(k8#}6x|15M#aFli@b20}Z>zXA8FYa@>=gfib0Jq$J8lX$p7Y@a~tw4YunQvFsy0dlB;8-exPOW zr)H2x)j7|#`0;J=eS8T761?1)Nxq7e!UU*IR5ZKZhG-#Q4D>JuzN2fW-!+q4*#qQp zQ(E9w%vd~_*mjB&h7~s4h|dXpr5;uD>S}qTjk_BXvP{9)+eK&T?*-GaSL*3!-Hl$R zJ-2jB$+AN2qRM*+Bv_@?^CN7j0|LwK(MhO{z;y9y1J&hA^qpx&(*vb`)c$6QmI1gC zYXslk$!%b2)cu%}kF$vC;gCp5epf*@x$bZU7F(iLiBj>Jz8cUHcTLB&VZtB*`_t7z z_Dz`eAPh$|lMLX^^zYEY`{%4WEqJUShz3mjRYglRMiKr!t*jt&LA#}h}vP?M`KJx_`F7LccKvmem6b`RB?NFf3!S3^4 zNeICQQM3cIG)fU4cc(%)Ad$mSm^)ArzKznzKg8&! z7t>DE>}m|C(BmqJ(WDdh{YTI51IZTqB#bUbg&sf1MtLFi+$wWgL&_;Dr?ml&pbnlkFc`Ur9%J z(_>Vl&$iQ%RHIJlWr{XsgotYnnuWQ5=Xom5u@lK)8t-?DFk~m@87nnw zNgb?vRFQbOxn?q`%1-4HGJ2OGupr%bgI+9~xT-A`5PCDNuHJM*BckCRAC99?R1~3XHqU4SO<2qHfr$)Up)Ak=}@{XefY-XXI2=&yB2@ zrAb{c6V?*oW}h=ub(1opg{t=Ffl34D`eap&ciLtj@8GnA6Z)_U%GNDkk)nK9zyMWeE!aZ;wr9n z{(HXWdx!q-(TUSd12HNqCJ+!cJn;X^IBdd9l#2c$=9N`S*{ysMsBpui^I$(|Qw%~l z$W8Of(pS8n10(a&3174`gKcR};ZH1+Oy=&3I+nyKljZY?u{X;we_?iiW#YeBUf)S% zOTSoNwJfq2#-Dy;sj{zM?5)4WvY4Mtt)@dXx%4kAh*a*|7mF`ENG|^?mN7-n`=hbQ zfwQUhMK0-+4VL_o3v!b#g#6+cC5%HuJ`U~EW!z34OX<@(>5&ikqK^HXkiXFT#Ej__ zh`)GxVSEZ@U$N{l3cz1}+`kpPX+QniMikh;ihh_==>6i$wc{%8e8uL`Djqj~`o$b7 zGJGZ8cdvN#MR%)KQi}Mx5PW7z>ZYH5X=6$RU&XYqE2-;zVi?@Y>|gUKNh_0oT`=!F zWu4DmXj-dQPX6M5y1pnoe{lvczN?geaX5cVtBicDYoVo*Z}&ML!l;VaR~?!QDjHw> z#YQq!!LM~+*i`?1ar{PdR1v@OTd!A53HXe4=TOuBqF^qHs|ibdV)$`tDqr)tW~z06 zQvQ;;pww9aLx|oJYT27=3Yjk=c45lv?5K8B8t!F{x!#AVM~JcCfoXw8Oq*{nEMnrQ z<&o4zKTam!p5~u88cm&fRPC`$XBhELO3M$VXm(&NMSHvDj ziCYKz5wosvmsQ=`Q#V#N5)b1XEw=aV1+Vfl7wdS+Y6h)IZREuhU^A0uI~53ADSENT zcZqd^`2)a1<*2gL?-BZD5sxR>Dsr#)C+Mov(&LmhW)#^|nXLTkKB6u?Jw4BppO!I- zQhcxipw@*ejxAWvkzF0r#vW&Kn!o`Ljae7rV%Hy+0bybO zy#^L?nW8sEn?W)0cC^=5)o9WKkj=xF8EF}1f*Z}Z>fO8 zk9R%xf0F{a;BaLGdwrlS8Mf5({E~vt zOH3szRrbtzNoFI95$3Qq%v1iM{BPs@?f~+mID;ojR_vBJqZI6LBB#kdcZX&}>jYE_ zmj;R1ay^=48#e1IzOdd_zwCpSFd@LtrM6a_XW9-u{<${%t4=<>x1hnDDU+LE#B}k@ zzxhbRQ(!3d(!LtI!t<(Prg~_Y?8J-{>z1NRM1cAz z%raz_T*g#)Y|4t5IV-l!4L-KpIFJ`P>A;M7k7-}XKnX}=7~XVink#x=am}Mm?pPVa z>;lBsIR*i-gQB`RRz$9M=E++i9S`6ko7i`TPM=_kf>ElRF(R(rxL8f+KK2AbA%gfj z1bTwtg0~>CqE`3h|hvWhwX@EXvXfA&HIUNd7z@j_s zSN^V1M*CqQx}rxJvUW@d?Z!X73pGxOHE!}B9hJE1T3w^7n?(%;;SL+-!2mLopji$R zdGJXGBzn{*vPx9hovxkOzrs0O)PdeSdNu@ju&U5TBb^!k8Z54A^Ar8xw4Lv-tw`Id zeNu$IDJ4XvHcY?#^SFrO-I~pG=-`FoN!_9BtTPKyg0cLqweswFXLP?d2TYfy8k2Ol zVo#`PrYO6r`Ug_b+#KqX9xFiD@;k~~uFcU@WmlEdDU~%5TJsqzv?k(u?#Rwn+WZVk zbFSI)oIJIrAX7)J?o4=(TWCaS<>PcieNw4LWspNC^2k$l>4{AO-`c{|(dn(HGCU3D zmG};?3d78k8RtLsH0R$U)6SyJ3G}4BA7^BtWQxhw{n_?2-V85TAM6LzT2(bs()j2J z=)j(ci8$VG?vu4$!O^3s;r7T^4gQ@%lsL3Bn%lofWJK#4tod2m5#nfGd0DI;Lsgu_ zf_9e@#L!Ekm3-$hKbh?tishEl6e{UIa#stf^McKqKyy7!mt9G@mQR;tBg8VNgsI38 z`Qz6~qvX!EP#2XR*=2XpKYj!{XdslNrqZmP`RuYsr zo{21bqC0OEhQ@Q-a}|$KSJ6T-8=$9<66Tsaq|-`q-htWCX?762=u-D2J)$?h5T+Hv zVT_D%mM%adcRWyhSQ{9F9GTl^0d)TkM3x2O^32`9W7v^QoJ$SJVNEDK6dpn}#^PfE zt51n}dz6-*X4qKAHGN`hfDWEbr5+_}Rm(8S6F+T3mK00FFtu3u}|?}KtR^$ z|C=)+im1*GXly)xc|tAr#M|x5B_)r-y$Ej5URk>0b%;acvRQ~?Ql&&}Op(u*RO~oq zdES8kASFxY_dWT>G_;g4Xs*NwN&_L|?|b_^EzI{tiD`*x`Inq<%-fiA;cYB0wK(wj z+_7(M$G`GS+_~2~-|p!hH$BW;{R-9+d&{8l#ESl=e|6H?XuI~fiuhjGdN(*ePk(82 zKDa#*%GU1u7V;*=+aI+Z-sNDYeg1p72FIYPY2oDlzSZ+(J1a4(V`1}1x=lM+N6xdo z-QVs$BjZ&R@8r8PwI}1%Y7TCzFFf2+T(UNjIu<~#qwm}e12T6S;HZCB(T)n*ad;2+ zJrWx9oQ>cT{<>a|#f|DI2OJg;>skV#*#V&iXKSE0XoaQm;tzo6ADm59oebW7L#)Wf zgLJt^=kSy3W55gCL-1nl!w-e7`;0+$jJqGQqi)+*HIG`jW49=vTNS7`6!&(~)A-lg zx2k}w@P)N@wQv%a@6a6c?x~q8^eM7YP{!Wr&$iV6_#BMz$m}lYH}GywrH-N3ZlQHN zw@vjV;XUr#y~{SN7z;-7*6pA~e@bQ*`kY2Rfp2)uW=40>3k1bds`RMw>?m8$TdVHq zKkD!gDm>S5!3g@?_8ebm&?%6W_H|ocAHoBw`g)(6^#*cIHW=Lj9qy0K_P%XH=b8U} z=j!05npF+Wv>Yph{|*4vbanauDzjsQPb~j2f3Tm!Rh=giMN_c`haDy%{1eRJKKf!! z#ZPbz=7Fl)^Tw3DG58SX2VLA)dQP_c^RID*3nGwxiY#<6-Fj8siZ*OE$0V#*O?MrD z?LKvbTasJw@x;x(!D&UJ9^}HM(zv|8T4-&T(wKa>9OO4qF2^?5v*97!N_4FS+M~_7 zzNfqXyrue=pPU1o)hBRQMgcF8xmYQ8pe!|(Ag zOp%WOZ?w`gv56=AscxY=f-hw4o0n+uNksp$k148>MMP}lE!GUzCW133-QL1vlu$C@7)5YFV0`@ z{RQ(R#+ZoOyO!aBS8q#}u{mF2mb31DI7CTbo~rGpHS&CXqpA~S=R(4qX;dB|L^Mk*Y$i(Ds>H&8hk}4=;tyBVtsvaH$xrb=< zv@T9d_;9Z5hb2l|`5)4Oz`Vuo)4RTX1Vnjnn>^ETf!-TsnWI(rZVk2X*!AJcugAv6 z;==naKAQ@qPv5>4?PTpD>4^e->Fg7EUkbtbt`dduU&rr~c0{iLt?|382>|V3$^~fD z23>BZ$!a@Ltow9+A@)09xQ~w!ibXlX_th-v9qSc3{JfNCnuVfPF0CHlswE@Ye6I_* zLL^MO(@-x%t)zz%S!Z!Xa3Kr~2Kno-l=k z;b(`Q#te-22+~1L+E%qHe6?(=QAIfjnL}lzc`38J3Hm9|3i5zcc15O|{tl;%&5$=V zaM>;&V!9*=GZcYSgc(4r7x_}?TI==(M19Sh7@1C)v=G!N}4Wp{8+X%X3$I?=J^OOMAmbH_>Vb`0F#Su}J8XalxI>TW0W$^?${^Qbg}* z_;RC7k+3LiFOBU23U{gn5WK)yO_Y8wi|Wjh(*NwU90o7(r(Ohby26^DC|Fg6Yl?be9le+M7!!ShQk?NF#e?o6t?43NDiPUV-8wP@3islazMQ*wWH zC>y*jq0!ZdvlOt7E(!V9K=8X7JNgv78gUb(w;yQVkb$&~!uO!HfNnS7{>92JdvEhH zm%eh?WvnO5Lo8BYlUs(0Wvv;c|HIWehF8)A3pg9w&c@!@wr$(Cd19Lz+qO2@*tTuk zxO>0cU-!?MnVPEVJ~jOuboX0Ttny}VNl#;tiZ;?L@W?X{;Js=dIu7a@I*BE zdhw+em+D_Y2^*~&=swrG05G5JRxZ1z=Iu_UGX8$!%FEkagWgGp+Qn8`hX6oIl#;@r z1-QltPm-y4%JcrA@)48;pAUO2J2kqdSp{~=`@y+0tJ;@&-ec!N1Hj}FP z_M?WgD!rN(pkIx<3zj*Oi2C;rRce~(DXS&O{R#VV_a_kh{A1~gZ^{9nL=G=H1O?8> zL)wO6KTzO`9w~q+x>ac}t^A(W2BrM~fOh*+5QjE~;BRtYS;{Cv$ zc+LrjKW>0vGfkv#g}bQJzw05+&B8tImidr|w0GJCQz%a^VnDe6U}rWQ;t^gSnQ+b1 zxQ|Lg=$N%qj>-=2-KmB}_?P(L=AonExq++Wr$l0xP*_n}b{bbUsKI!Gxi1yABO$Qv z=+_s-hF30Ixfvh$-12L`-GJeY82R?e`f*+BNR`wJ;I-5Wp+SR#cnppjZ5XrPE}-mc zKYoXbY{{#RLRBAB+$@Cj%0dpFaN_bl4@zC*r{+&)x!RhGH*RgtV*@w9)d3NaISso{ z0w`t`=2fbE3Uh9(WcW-P&f|L^IGaMR8~QTk!;CR(@-_pj4`wkm!|vkExf`ds{H~8? zznSE=+(NBIdFsO?o;?C4ULTWAP%$V}a;OR(<(c&7*C@Q52P|yN&T?g4gea@uO~;9 zxgdxD3kXjVQgPw>QoVQT1v3C&GHf=Yrzi)LKwl|8g>25hl`*l=GzF|Ll8Hu1e%Ybm zy@D0__5^{P%uPn{NtQclf<93M`&vRqekvqYyyxfAV}Mp!Fmy7&v8ZugaMhjF^IriO z1rFsAn(pm>Y}S?S5t|XB9*yGxiE#g4cARQ&a8Tw+?qv0jO1M>xo}$p6^R$N&7Vo?s zEhw?;!^i>glG!|hT$a%^xK)M&ygHjY;iwVn+$BB0 zC-1qIa(c?#BL-mstfZ@wG;#q$l*n$)Kh`&X)0ZDuj2{XW{koTyELAq(BGRxo8omTx zQn2XFDpcQ0t&uJzm>HERCklczxh2(czbb5?pY)~7%slU#EJu+SfvrnQ_V#gInWsU% zUI`8%10wj?5w?~bB>>Muz5LVd%DEy)j6$5EEx9Z?0++`lm7ua!nDULiq@OD5-dp^c!(#jcaa^Ai)U;u+nx>&rwNv}RisX@$-HV{8 z7x|zdYYuX&O5s@n?k_C<&tufmH3Mu2zw}E!01)w8OhqnOmXbQ|YExzynwshYg)pV< z31qS(5$R|JplG?;^Y-g=Cnj_!!TL&dw-b7)rriyV(KV?vo^p+t2uDQ>Kywtjq0^J- z-TR8(v0n%6^jlVa7?9IW=(bFcDF>|go;YkiuihcZzZX{b7z{K~%UI>5$<#Y;{;bZ* zu;ga6^tk@DlQYEyRRGdJM3mqy!mU~YgO7^X(w{pDNcmFrp4c;Rs$GJ`?sHB&<*#f0 z4aRIi=}heqO(w27lvK4ml%`Wf!fkp*RLdVOIClKIp$aWLzL_ly7AVVf%m50WPlESq z94T}f7*ZwK(8m@!NEOttDQ%-hT=Z7<$n#9m+q*M(8kk^X+@!Ga#cecRk;Li|%-jR$ zXXZ>E09H?s&q46gt(j)cA%>@h$*44ICFBxS6)g`%UIE4#dhiqTHbcsvBP+EtdtuF> zW*;F4ncqs~aGh~EjE$2C7>N_;hW;jSY)mP-W*9i68otDe`JSRxY&i+pGE^rulRIH!O$C`U@x@xTg{s%?`r#nE^54(a4Of zwrGZw&jerNYRZ@Q4RrcRQz|{_{$o9?YtQZP&#ygXLPSKSBgj7uos?JigtVSjG`d|5 zfV~O=0~3=OP;;REQ4RxEqoaFaas|r8qp=1+ws-6E^ULY^eNO7pmrn>Hg#P(>c6vfG z_0+%L2G+3zE}SS6qs-@lBtYU^C`Jn|DAEaRlD#CujX>8aWiOP7QcRPOqf5|aklnkC z0y!jG&0+|Cqb8o4HyKfx0o}0*b5}nI0Dp}CY7z{$UawqXRlzUMq4JHX)__&e5=A|F zX?nJ;A0T{+5U@T8ua|DM&7G8*uh}fBSfYoT1LroJdTLBZaP4L(J&>aLv+qf~s90~N4f5u{n%D(uj6|j62fv>1_x1Oq+$*D@h|Zs zmJJg@)7-Cdza(pz?Gqrx$*U)EsCxW9{ocN3h84%~acxl{=Kz283$8M*soxE%lz!-? zP2ImoON6Si8`!{_3@je8%cSm|20u9Q3VBIcgkryBz)v2^HUy)A>6_|G!hMQZH-ny% zSKpB1tfJBFE|k`IE-&jH5JxQ!-~n=x*^s&W@HjW}DO}+LN+-gYRfIAlu|V0f(GC)5 zAf&>z9BD++n32KEKP*7!nZupMzL2C7PvLnnxF}s&WCC8QctMWYa%p*3A_cn=OcG!m z(SCBt&iqKCPSd0!`9Se2%Y+S2`y2Eq9PX2gR4q4B36u@L{49tkCj?-XF$O3KE5HH? zOCp0^JJa_FP`=)|sdIVqk{acC+wPOnc{txJD_hVFyMh2K3#Lnhm66d%eEkOX#m?ds zGbNNn%g6K^PHxY0UI8iF&Mp6?H&S(@bWIQ*51aaDX2jLoEJcr434P&hZH)^kK9{|P zzi@n2B7FSOH(UJW^KsTyjRn9Ayo=Y%C5|qJW68;400Ok|h|KgW2R^{^7Xlg*q0gAi z_{;?mb;6(c&Ez8W*CYzuiQx2Ue`}T>KX8Jo0TbC|H+9XE37Ab?y|Wgpk_J4aDaTC? zniUO&Dq`AyxqT!4>78w7^9$A4QCPgIEqWVy0hfR4KKf)^wc&)al7LIL=@`THk1yTCq7?Ac zbm5>_-Ej?P>tB*A#RC?<3ySIul^g?owrDFC)GP8G3T6j?&KY2CrLG&-vgI6~p;0a31(aovaiv6S& zJ7=24`Yg~(rKv!=f=7{U#jVa24cdQlIohaC!a<8MW2+SGy(G)BHfU-)jAwGBB{~Pa z9mAXGxi`2tMO#?{((ux5q{ub2>`Lejp5T$+kv6KfCj~9LkjwY;O>ixE|NF0Mxu^kaYv?uh%y@ zIg?*^7if$k{J~>Zh_ufxMhB(Tb_06Q8>8$D-K6}g^VxL(wrnm5>vGe$@{PU$;ka zj&bo!RgF8v)Lr>gQVV%2?rdW=6A8ISQ-#eT19QIeS;@$5KWX6Z0Y(eLzk9O-)aGJ? zb`VGlU7i#GxWOOO=K7c%w3W(|&c!oHeJ+}bYVnwL^TVV@_NK^E3X z6~7`nUZ^fjRo0^ollY{jWeiQFiyNVSu$3=Ux)SgMCUUvE)Pbz;qZw<{5uOP*edTbj z8~j5wU3RgB-}a9TJ_C~!mP}@BNTDI=&&V{Ln<24k%yU5#tSiFAF}R6;KtSI)Opq;r zls_~-@RN{KEVAPf9d42j2uE*c7wu@X8PLmuwBHJ8qRb5J^83!UezZP&W@oLb7L2b} z2GrO9oLFtGb=hZ9S454Du&%>QGS#OHx@nOQ#Ja7G6opAzL^HMq8us<|A02=`XL%}l zVh?RPy5Z9+|E>6ho6;-BS?=k0@BnpK{3+!bkY7uOIvp_RggVXQc?c!0^E`t_wXO!Bb@6;tB69u8k-mgVcKpfUYyv@@+~xBv1-9XNck;z2D?!8M*%4QY0bPoA)EM8fE_An0=g zG?x$v?%UWZmtp32|H|3WasGV>jLTUD#9M1Ky6@K?Jf_c@!;C(dsl5`WH;>p*KCfD< zQX8!BVD*JnaT(^))pY#KTuf;qZQ!bX_Y3BR$B#Dwi_Dy|b7jUAhVJ03Pg`_dIOJO2 zWAHpL6<8zH9B9J6b%=95n4mw?_Woe4a3lFFO`G&5Xc>D2D)AHXACu0Y)(pV_G-#M7 zn+j4tM#N)1^&fOPU+Jk{eneNK?+b7t0NZ-tlKxovr8?L3x2maFJg7}m$ys8^^%+-N zkp!{R{dZ=!Sj;T1XAR)0Xyu$I z3?9lTG~S}Npo9U8Ga5^E-tMnMfD4bNmc(_lMSa3sGF91VMZp-PF8|%wZ%~7#=8$cf z#A-rB=o$qUmk_H_ODFUYfzmwH+$IJ8R)@k|9-P%1`+m-U({6S#u~Fi6){-~P9!e4-^2sR3U4k00pjFfdU?Xv zq1Fr$PerfWebKGxZYDsu^N4QvNsdmvkE-(M5STgy=Cp&NYBOw!%(@qaXH?FhLDKTw zG9$`)=3`LOrCyVaf=}|20%dGPNpG?soKK*6bV$4WP%UJqJOz#S4w^=qJ{F-T!ciB2 zhIS?tpNyIVYRr^iBAd(&0I`q1abLgJEsFjG3Kk2bXaU8Q*=?pIne@iL3Q17_f|onA zkTLZ9)kJ#E3)zcF=q8!T^%)RX(s(0o=*QK_`snox41S{p?0G9}J(>)u;T#itKU^IW zdj}^O2N(~j5pc35<3hwDQvdXG1uYMH)RYtC0@`Wx))?D!P-()M+(FLq2K z@Eh=ycz4k^|FVqRkvY+&lf}$aUOSABPsf>>``dK+kEQ~jo$d4mg5IXOdF=%v)Ag#K?om(8XqoF&4nZcVqWi0!s6WYR zg$vVruaDhkl-BgZfqW#z{(N~+6UI?T*DtM3R&Kys!oykXv=vspa@IM_T3v-hW&P11 z1#YMC7f2k6KR~!9(0?M=u+dy+W6e*I>9(nVuw9I~{<4blR;R15wb)(aLvfn*U`sH# z&NWer(zn~2$ebljxl+E+XSbQDL0M{dR*nm62ht!n`NWq5qnxQ=40~n9>))h8VsTHC z*i;FGAWaa^<}NL|_`TEXA`T@T2u5U~MqfNG-cZ)&Pk`zOz88erNUV!W8)cXEkiuay zQJts2JGR4(snpi-#SCSa7^lMpnCjGdYsj(=c{MSC-UjW^*eTVb(ilD1A=PpI<;dIbsii1xCuG2uv zV?z{&MpDfPnUJuNJbKsuj;Zf{bwFW--3FipNSFieE1HtiZ8tzS&=rzo0cz&VG%r5! z%eS6#))K{OZH9UT)#@aze`Kpq)kakqXw~wN4grn}%9=+G&e;09kjN~ud|2ZBZnnOO z)>OV~pI0oP&L9m;D|YeNY&t%dN5mXsW`9MmtYA=q$|nDyA%|D^8p4nu$3zdn(>nHA z=UYLq*`iaZdx@Bb!YKxJFL@fs?+!&`h&HFBr-HNe{tQ$hVfEgbwP$AUCaF|1YW6>1 zq69=M5?5E)6)7589walHEvh$8Had$D=B*rFQIHJ3hW~qAZ6|WEHCfe`Vnaa=?u_GV zA+oEcQT#Ejlg{0;e<{s`0(N5+v9G%}Apr+8rE3YtQX?a2&hBfYXw*+tBg3LYQkmjT z2lS&xxKMOAW!PbDYPrZ~s9->_m@x<<5-?8)VFfZ*7;456uBqrR=}3BuhG~zLI)od& zKrm!KvzJoZvx>$TooS+ISeL~NUATaeBKqUi!?bSLGXJE;=`(D9!=oms72bwU5cE!H zT83m#h|AWKIWg3v@bS}VXTqT8iVXu?_5JqlXn3;AmN1im_!mRW0jLer5(f7P0>Hz* z;Jg&kCp{jN$+Y(J0HN+hEe>P1$+Wf`m~c#W(s8aM>q92&y3YEB6vummKFS%c20iP3 z)YWupiC45;lvyw@UsH*8VuBg6#Bz{C+5VKW*)%;KLT;oiodF7_(2esYg*Ib=dnqM@ z*Mgx|b{#m&KUomWp+*!@3+^df006UiWw9hR>LGMpa7=Y!XU9uFl0)l=j0gOZ&Ri%Y3CMKqbe4&c8>$-G_2ZIVPAS7Lmp(&x<^J1pSN&YodV;o(B>*cCG8zgB|n4rZH`2 zx_rIQ>7%-~9K|yby=2V#a5+UoQBy;hgYpd0cz{F_)U3HF4>%K<&(r)G+d*z){K@za za2;`)bB&*}{xk)feccQCfcgc}Wv}X5i>pA)EjAM0hN1@1i7E)zN#k6E-*9>>sJLrf z{LOL|v=%)~EDIafiL84Xrzc$|j)9SZBnjr(Hkc$;@=U}2Sw!1nR)Tk%pN?r7l#7S^ zrX<&Xy-pen8F6xgc;Rd+8#o)1Y^a+c-shmQTGL!fT)2>YL#RL;fZf!Z5k~APPL-d` zPO?;d4GQ7Qjl){D)D{E*;`B1OVPZP6dPS5$^*eS>NlY%tXHv?L(F2tUlCB6l25`zp)tgcIb5ht5*N(P3e|Iv8L4Y&E^PtwPw(i4*n>!zKsPI@j-76fdX?Ei~`jG0^zdk3T zW~Mes6ALP#N@Blp9xMQ%8^DPR)A%S0=NqR(M=|c$>d5#hL8*!hsL@D@h!YlaU(eF? zYZd=RfMHCujv3RY&PT5DAsKm1i9e{WNso7~DUs@iN$q#_2Vg$_v_yw}eP`r-*-f#n zIv!&Sl3Luo5;{eiu!2_4UIUuP zF~X2$5k)jZB%oQ52uAr97%>5wi|k52cRJkRAX-tlgoWwza}$}Vi`wt*%C0x{)rICnAID=J{dsB4FJm6 zt5ND!$&59TBLi;ZTGFy>I|AdYy(>KK{hbwc?vB{6PC~CgR8Dw?ApnlE%FAW8n;oxq zY()QogZX7Uiw}P6T}G{*?eUWY7DD9DS51^J6>+#e4(?9@!|g>d5>&oC4>P@ww2zZ` zt#cdt9l$IUq62L#b%R|nW_Lcpb;0z`qJ+wr?{C@{yU*5yMQEtU;j8^?R{d?KAxi z_{3yE;IteP=W&LlrlGbZY0@0TL)F`VuDFq@Qvs^y!0QRhH!$izzZfUH8w5KI6^9aR zR}AR!A^}PEl{gH1VJjr4h`64y9zBc@(?+Fa^!#agukXM7i}Gu%RpaHUk@h40r7Ss1 zK&9C1X>$L__hQ3~;k?!igjx{d+ND0j_ijXg+Jas=E*K(}QM$=##3!*HsjfjGQZj3U z&IM5XPEicaenuwaI&mh(3R(vbNS{t2I*F0Mz-%#=LVbEa*{uRQ?NMUkik%&ji^>D;1iVZ!)Pi{c_&f(xDN zUhag=Vk>30jp+M;-`iqgLM*eo#fH3~O(Ae)-psr&Q2>!AQxmSFf}Jg)dD<)$DONTw zsK!$@wUyQ-Up6=mIhFr$-##scAFuRvT zp#d5KWtD{FnWDKj!veCaa>P;Wbi|=%T7T5xcRUz2*awk`2@8 z_^CA_AvnAAIfzVrIMNIbIaAVyti`lWWka1|G*aPZPEZ8_>;zzjaQ4%txE8+JJBX=H z)G9h}IW~5qEAGFR`F}$3U3c*QMdNlJir*$^jM;>P}bO=+@j92jIgs55P9eC=zz zdJ?u>KgH?Ujl~b$nb$(hPb1#rWm={&;r?l~+BFMSd@#8~883 z{lsTkqvCKGx((`zYqN3Qu@V);=+bKaUKBd+IWdRG@A!N$S4pAb z54kPKkDPSDVCsUEe0&?_kGPRUEF&_O#s06=SJucSpM1 zvL>~SWA>AfxbOopX~>jq(l8QumJXnb`8?XQ7AJhggjl~4J5Y4RhD0Fh!hO6Sa&{mv z4TU4H2uyIKU%4~@?LsofDl`mAEcx!aweA6HzTA_v{y`;FoRJf`4FBk)sDEX2aQ+>s zDG+fe+x{tOmBEwSAYjq|5)!^u)rt!%WUQ+3&QuT=u1`iMP_O}KW=nK;57{M5C}{lQ zE-s-9oZW@wE-u3(hz*Z3AY_TH;G#k8rb^31H86Hz&kktc-D#zf7oH7MM3{-f9NYV} z;ZFAmi_4A_hgawVCyXuDt@O>Zs!zJ_5p39YVt&er(r30gyH zdM~l&sHNBQf4}faFpe{B3|k_E2KXQ_evWvK>ZXAdi<>dylEkgNG!uuF6S=PaHv@D! z&bu}UFkcFzkRjmZ(q-zKAu8cdHey*9y#-70I#If-iJ;qVCoD0vfCVGqWQ5&BHdEa) z98^QR!n~T9F4^aAS}YQX;@m1BJXFZMw`h$Dlotn8TQ@&*cH@TXN5cKYS3Ok6b6vpEKD9J-93o%nb=6B*jXIM9%fOOV_kSv#f z+9ZV1U64p}1z3uKAg@rPGdSDnY(1_fA^kw2-q09>u`W?69I+;cAb{02sydKu`4tJW z8wo9+C@2ZYhEA&|<2w(Wk-}~~Uzn+fcs>2mAluGHDo~BUv8IXbjZkm8Cq_5QKtX&2 zn3}#K4f(*H$~RxuQ?Hich(&I6f)4ClE7e;2dlr z1HGbQ#?2h*#$x&+1^r43-rlAC@{;NSq$<(VTuer;mNcA;3onAx1A2%y7QsN*fd>2e zspE0TFA7oTq?HUeZaP)q?UGW=seIo z;};g2^G_rxUHNe+ccHCZE*+B73LDLp&xEvNtRpz9`Oz2NIq$wxfWK~JhH^i>R)XL= zydXFOqAarw5kmGEAVazBL#i}e1?2UV#V2Cijdr(gjn~YQk$ZXB2Z`m2b=yp zL)arYpo_;TX7^7Gi7oicp=@@RN7LUsA18k2ts#b-;c2$LIU#&FyY_?-VoVu=ESbgN z+~&!1;}`W!B(J1!k81VZK)8h?s)~t_ij6A}f+zBH%ma|F(1K$g0PyYqwipj2x-VZ;o2eL3P3qBGDQG?EVB$~Q<6<2p@pWiBH zKDo41Kk@X?^d95_K$DA#{YMC>Esd-+?N%%;O)(y%H(xI}p8QNZ0@y9Dl*r-pc5=PF zoa3G~!27VIcgLWDKii|$n!QAR+`qhUPK-A+`xD2 ztdB^B3PT+q5McrmTc}a+Yvah>r0Z_QJ*zVaRah24SC}~ZM+J$B0^fm3czPPt3$QLM z#8p9VPYd%cVJa_GRn`=&a_8Ya1`_T_*m{k<)<|G7@*QoFC7I8WJlS=1kw# zibJR2f@1V0n1sUJJs9SI+t5@{#gL-t1Y4XHwPxrzjWsi9?`mX z8Y$YtXEcusVYTGTS+wpf{^}k)CiSPZMCGgk>o}?J%jAihzScUQHYClIx~HQl4vUwt zb_BkbBme=}1@(RCAemzzS32R z@?sZ3i$R&uOs?KztAApxEt5^}fzE8syWy8R14RS!qQ%)3T$+B-5iz|gyNp!6pt;!D zuIfyjo~oVwHhj_|LM^|XnK8vXjKH75-R`6UR*RkzHMIu zG?Ntmlf}(zx_@I#Fo&8p-(_3l#f9o~=(WZv_@9y4!wyXJnXWFznTsZ%orAz4Gez(z{tMmEY zZb!Aw&No7q^QD9O{ob09b@jeug=wps_MMr&F+f+};y*7K=ejoE>D5C&b-S$pSC-0O z>4n;&ZKW6WedEkWkN%tS!t4J>o&0CUwxKs;|KAymtiIQGaKbh9L%!KE?{_U?W#i;4~;aQv;MSj~peHy)g=c9jAGcNiL zcDAW;(0BhxyN&t2--p?_F{;#m{(Lb^FusHM`3v6t8`vCO@jpEkWpk=;S)h^m(05N|+Rguu z(i`YEhy5N>^Jo?l-~I@QEp}!8vjuaop#2^eticvJasSDd(JZmQ^&W^U!#Mww`RP~& zd=FbN3ro~*67Xk(CG&snrsk=(qO_RyS{}>(r>uZvh5fB;`_l?m`ahYExfRcMm^z)U z+U5U~c@9{ee22+&-m2lhaHjsGwH5`Ocgc9Q4~48mtH16TA4-(gl^T{yb_v&fy=5nW z76(y4_jIX4k{5BeTzPMe%j7OKdqUnmD9wT=S_A?*pv z^f`e{*!7Ya;k7^yY6f9n{m^@3%mY~+8<_eIuI(UrINs13v( z9PK{u-=9CX^j$isjZdXUN&I{(epM&~EF-tJ=FGCy z{u(T0P*`hG*St}zf4G|u`8eptxQ$rpZ7JYM1&c z_Wl`ehi6MQ5G_4mLmv0s#oc}@=gvU1`K+8r=T-V?5*B|*<$bQhljME)Lc=gXC^ z*zMmBWKMmqk0H}S6kq#Oa+}~4&`YR`qodgyne0*qWwM*cjPu9*E=hOHoE5myT5*kC zBYtcYJND;s)t7VZCUOJt2B32coh!l$ly|qmjZon@kB@_~EM&J#dsD=$?Yijf&?Y`E z|1}^kE9&7_R)88)y2ot8nB-($#3~7n=4LcT%_w^VEG=27Wg@_Ga;)%WW=hw+`nQI(u_i{4NWL{ zrJF5ub90RA)MUcZdf)|!p|G1oH{v0S3f)9R902+67*lJwKB#Q5M<`ip53JDLuezGJ z)QJ%)I<=aObteIMUp~*HS8VTGD<`}P2#th|6P(~@plzt#BK(vc$-AwNrpeqL+j!02 z`d72CBPE(T`aG;b0|QC+D65!ElYQnlMH8#yw++SPjB6!8DRVB9C^yrNbISa+-j0gh zV~#$KvXa?6p52jTMmy}PnN+DtG#&|<`>4?lNfPh2xs3q&SqQ!Cg7Ib5Z&>BRNoO*1 z^An)z(_Xy+KNVpgiN&lgFMIjf)8C^uR^%`cK}mc@3)cIP6p66$23?)i8#>y=yjuC5?4 zOSDJ=O~5`*reRas9wr1$Pedl^wd?LL6LVnodff~lP^Od}tJsj} zN-0F5nmCi?7M04OSCRBas?#hHPc~x#0s;IT*T*Y>fY7K@^N9z-`bXc z1y>XL=8_h?pSgbyO_cLcF2||f;)#H)Qwevmz~s{u-5BDg==1e92Dm3RVOHIYx0e0_ zF*g#oMJy8>`AJ;Qx}b+sp%&P?cXsBR2{BMJbfwxifvf9$W6h zrZlWMYt1j{R0oXLFP!=u898Qt~I@x zRAP~xt1iXPpYmWQwz>{`=f?;pWO<#1<2&pWlpIH%m#jV+X+&c;9oqQv<@b?OqMnHT zN)i*WWJnN~NH~y&E6@4iWXm$wtqd;>ncOQyi3&))u>L&K)o$5%&=CM!4o5P&UR2zj zcHC9l?9QMiEhyMsDrow47c|_~0+S*A%i6iBF2`|M{7wbV2->Yl=#7U$8F6P*ELn2vhOoZ)BmVQMWdWHl^==k6f>9^F1v*OR?*hUHcPcNv* z`Zvd^KW^?Sfb$crKnsb^j?=}nv2y-g)XQk~in#?ux<#45I=-=E!o5F4mcpHoo?a2! zY#C9p)4L(0(>c|&-bon~m41hlAqNBi!@f-BOD1_1n181IsjB+QS zH)7?M@00tDka1iZ4@Qm_*{hD+tr|e;Pbq<$yEo48!}WH>vdu_nH?9*^Wfhy$f=!w8 zqj8!5k(D!yh+#};oKs8?P)YMzY$exw8Kgurp<{q|;Ip6GK~iLeoe1uwG!7 zM_rSX>YE;r7<6uT$DZ58{_5M!LKE!w)PC zxycfp;s_H1Yb0)%g%CISclaY#gf$R^SCDCf@>_B5W07eAn*cwVl}tYT))b$KY0_+n zR6%kHphZ(e40~~Z#M#$ruI}g#YV9^(^WjX#<9b*fE2FvE79DR2&>iFbF<0+h7MQ7{ zoQ;4o$}_DKjP(nIupdNGvX)^Bvh!j!5U~t9 zU}2r_Tu6V%_h}?)O_wDXC6|81JZuSUGXEkL=+6W-VlX09d}1vs@AE|#Z*3z#NCkFS^!{RDp5#5iC?7aOr2h>dn54p!C}}1rEH4NJ$_`XIB<+H4_vdbK z2nL_-qG*b`vo`i?-2KzSavItTUiA`5;{psT#0Y{0vZGCy` z+1}ay`LLAFfsK`IFq=;9s#uX{@ydrT?q=|_1Tg)#GYcRyY0_B7x4v#~I$~1l`w%EuuybE3J$Eqjp2o@^Fvl080NoVMs?vp-zSfT(Nw z-TNf+s?!Q9%;_YQtv9^zI)FXgw4fg*P(8@MRe35=e%$auVb%=6r6%&lOS@pkt_z8r zQR2_G;CQj6@~*ni?%Sr^`DV5=Lr@6|wh#V@_$OdvJhD@G@NG9X6oA~fQ;Z!W)j@!R zPz6tONfL#EG!p-+%QPD21_%XVQ{ys~8GJdbo!;?N_Vxf|T2%{<}3D*Y%|jT7}C z{!n0#C&HU~+(ISZ!qEw@p+k%CMr*usD|&wIMObk4v4ihdOV5q>6@(ksqFd}B;!-uD zivT2sQbDk+uj1Ll<Zfkk9{|CX(cX{dqM`!hw}6A=MJ0!fI9MmNrk z#Gt2k6_Jd)ARsU|6MoO4iUxk}X{knL;M_u)**&3pzLA3{cuG)0xbH44Tsk3yGYoav z?~XnLLS)4#V<<9iPEr!0tQM1%mecphLsAdyl^1U@SeJGAEWB=Kxq z5|T0Z4BHEBl-RH8^2@k& z3frjoG-15?8*Wn1l41L?ugi0O=ETSuJMPhDhn8)7LA@2;$N5~Ly0dKkuD&5?i2`8v zb+4mD#d_T-5Iea+?LyHW&xE1$_Mq`$0XvkHQn)w^Pfv69=!&pUUx%@xqHH#NhW<2Y zp@W~Lnv-A+#*cxtWnpk&#+II^M(|Z+J0UP*dcA+FAW$_`65bpzsW)+LOD**JWF&ci zc{M;EPfO%&n)iBE5yEBRgVqU_s|J)zLT|j+wR=L9&IibctV+vRQ7>Si`jMsHw{*Gvo4Vfos`EveOgN#| zh!(4GFEYrIlDUYi(ffNlrID2((exqNV@WZ18gLgc2+mG>pd_wgVyaCvd&4LkT zd1rEQbS?IJy>0M(6M34tsyVc|ae4uOFid~ky;XQvl=9x!j>{R)-XKlf`fZs_yzQ8! z_xfWmq|#;RDG!}uync*Lz2lv212%ZRIIN^L&?WY>{uQ3zWLL8EgjXd=w4QnY3=WeJ zDZfiQ>iCEpcJR?iDZe#?9RXPSf0pre$g4#@Lww%Pb1P<3MNJEeTl!jwm23Ln6!D6s zIy$3~yLD9_Yk+LoV<0<9@^H?Twd4QP)U~f=soCx&=#$X%xpH*f{G$8=ON6B@4%h|# zc%F6W!?`PpIuidnv;Zt`m1QTIMTm-9zDkiBDsc%;MMMj^J;E$_zXMWQv7=R1V9z2y znwVhbeIriK3$qTgj5`BV<9cn^Y3nP^H>@N1IA?fDd`-lDy1-p1l4I+5E+rJU9(ed% zPRs)$h6KqMXuB#2%pS6}SGXbEpR1OBq>9V-{eBjeBcjkr&BH)B(gdfQe;dB>sxUcB z{%{6?ZhD?fVV^`B;{^N_ERTsic&%m1e)^e80{ejvEuMv+yyJ@dry1G6Osr1G&?*}Q z>iu7yTdeBL(eC6PNG=i=52<*Hm2-E-hXY}rIk!KpVZAHPd^&~n?Z;otFn@$UGCd_+ z)vPUDY#vEJf~)Rfv?k}rx{@}hSDx^m7Sink-JEp}RS+abs>1^_cX`9d z#^S0JeUB^lZ7wl*{$!WJbvKfeWYv!cRUgB=7j{oMi=2(_oIZ4c~7a>yZu=HLhA=WZ*&~O zBKPO$xFo52*1Q05OFHNe_pCLS)V`6=**@!9la>5;I`(nVwMEY#Zk*FM7yWu?DF@oa zfAgPqu`gh6i5!blH_baCJAAVt@J$10I()nS9TROj)P_cT)i}-< z6f*9#s)z>@sKLW(yj%vBG^oFx6`-uHe8{mvXF#X#&H*mF4-IN+QX)+EoPSygMqqxI za!QtupOV)sys2l}NG}v8U#<)mzw&h57SEkeEZ=y)X32?>YgTopyDEPW!Q9W#cu1Jr z)sm!FxuUDD80b`#XHQl(q+0HAK*?;4KlzV%Y0tH$BiscSJo2#j53$fxc$krgGqrO@ zXCkc|=>R%3^M<-zh@MEo3z@>1(E68ejB=ma<$H$~hFs!6%$wnzueA=YeF6n~jva zs8Td}@wn~QZ%ENC@YJ>>fX4Xd3in24o{fenn!yZ&Ij1mMu%)wUAyjQ_RO1j67|vlL3+E5 z;RZ}R(G{VP>h*4qEk_y$6X%*J%PfB-7wjI#cfF8lA>9Vf+jdJ(3{$DT35rT46p5b5 zknGMBIh%EP)5m6RBcv4puPPFa+T<_n({_-j;F(H^lXn&Lyje=9f6cf$lVlkqNorXv+fMEv zy4y}$`b*ZPcB38>gWxdhvhI)F?=Jv!;%7Gt;+WJ)hyA96-(d$O4y$oYKrc&NAf&eyY zA1@0oZwC`@Nf5-YOPC>-U}D)5u6s&Al(r99#-7p3kh#v_fG_7MOj>DAw5bwO%mBsD z*dpx<*gy3Ec)t9@wd5En!2bYpK#jk@V$Q|j{4V>*o5+QQIL!W-{;Wq|prAw2$k3?f z>%c!)wLEqBlfyL_>cz>Y$SlyM<3%II^wP|Kpr5HyZ z36|*;&R0|qSI=PK+0OR%Hn7wjW=t*h#EGtoD@~WxZN6suQwqT8%|Cpo214&BHpdNr z16lZpSX(ckctUw0BjA$b`S`Aflab5Tn%3z{tk#p%(4h&!3EXP)V< z!k-MTpNO9NbV`uP=dp%g$7(u@Q-5XHoP6^2=M*^Sd$EFM-`6Xl*+?CgC#W?i4GB*F zn7;^(tW+zfg6r>~r(O>@y?}t}=U}FP<_&zA$kls4{e0E#Pv@Q1hCk^%Hv;}taP9Xg zC!hz6?0gQ$5$qU=$UgPyxkX+t`0R7UzR(4P^DxoX{drr~`t zaOEhDHq{-dcmnm$oUu@EGKPYGpVYFovuD_DYOlmHGd;UBR>e(;L76vj!;6c5jQ`!` zue#k(zk1c_sHip5Xht-Y5ltwE5ocTHyIkt#rH{(~$ydEomMmu39 z?Y8`T1nvX1Fr*<2q|_nkN_z9+P5ydxB68bp_bWy->?`7L0zY(I;UzjEdNFT68V*Pa z1M)@&-gJ;eQVu4HG#Nbv_96#=5qF5n*|{(CfO&q0c3c1I;C>Q~^m)^#59p5rNPB&u zt`=H>i4#zkgL%(7kIzi(UwLut1s7jNPF2jkjhId>2zCqqiXlEaHkn#3oojO+{qf*K znhSv*kCYf1ll$16NbaWTjTKHN#NMT82TV$cap=1;%2>NBwE;D>|A;?-FC6Up`t@rx zJHO+1!r}GE%}s3m~IV%O`FQ*I{WZE^IHl#d#>67O3H+4o=1UJ;- z@9rO2-K=L&Sdpc14z?(N+z1s@OViRPrnLV$963Jq!5{|)t29?*{KM3VoQcqi4o}|%>hY;gYd3$A>V>e8 zvyGocs?40H=O(3pD_sYzqlwKYULejk?$m4R&6_RPJ=;i)RaF97LsO}tmXBk0L*{*l z*wWL8i!$J(mnYoUP; zf$TomLGh~r?LY+b#thsb8Gpp===Dm#vULIi)^+H)skMPbjvj_lHi8h0Y8@(UgmE#f z%75I_MSI+st@U+qW9)!nb%eCM8mB3Di#&iMsMKYO1 zfhJEMD0hK>N{3kJxhN8z|D==4hLH{x5#Ct;84ZMD9;+1VHmcXbx3Nrjb|I_`H?8q( zb|YRD9!7UaR|uCzFSW=E_}cg4qscV6>piR-v&AFUZuYA|2))t`OS`WEJfcehr>z%i-0Gnb-DcKLl@AWSfQ&j|il!sNfp>3kr=t`3$Mou!i6g|79 zQb_24urWA&rSVJQEa|J$93(!?%Mqp1&LN8sZePK#_;&Fm0~%g7`m#5)tyeaBLYvuc zaKxD-%Z_7NANd17wQwoWn>#sICH0n-bMyw;-z;;Y4UrFX*CMwN#0imtqGP&+&o+*O zYsXiAk^>#A{@DhwpApmq_A>%+ONg89iew%>dp{_@dGkh)8-jXKu&c3l^pDkX{$qs;9JsH3Zu#pTDjPpV>0@69AsT{z}Vulhc+^pEgz`CW8)ba43k`0bJS*~o#~9M)fd zAnIHCEc?RJJ)hsP09-!hvT#*!xjaA5It8?6>j1Q8YXCIYi>JPG$3M@{)_`cw8X#I7 zKpTe*0PWd20PR^F{$2#L58HJHJbnUE>w_rN8$OVb7nn zjboN7IW5+z*skx_``vbxW3Mi9_&mIS{grt3+7jNkb_3Y5%7PxBUf4f=SJ#czmgKdG zr|FB(r;??V;ga8Tr`0AnI9C|f__jZqkE#Fi&y7Y1dhsq0@$Nj9(Y15#OA2t~Q^CQ) zG8L35Tg}0n*ZfX7K(?aO*P-K9I*D7lW_bda`@WD=-ZQ%EzYl@sX8He?JB~+xGLZeZ zp$otg%PZK{Eqxk=e*d*|E-S5p4RagW`u8RZll#Z?6X+cTFkA0Gc=86I0E|k=DNy_} znb%&a%Ma+iJ;ym)>l_Fxdz@$YdG2yfj0MIyGsHW`L*Q zD*Un0vE6#J(dFkNlkDDmBg*A}28^^*_KEGZn+-7Er`yi-1OJXsG-(-{)OHf#j5}41#WoL*N0o(lgS4ehqGuTduJPiYqdWL z47@I|QNv%Ng&JYmYd!?Z*Zjg#=(P`8sZAs@mpfk{AQ*aZ@QD1yC*^o^KA zbH9~>JW|71rH!&%*-IK9m3fYMWbk~C;%Y&>X+0`_>xiY(Tw=6wPZbFE2nmt-L(s2$ zyATN)fqR6&00}JzEHo`##BaUzfQ2^d^@vB}rSDBsCuF@@#JOVX;+Z=3I=2*kFlQOO zScGZ5BRNiVQYzY0*~7?xySS`!&~2msPNkx>cI}%Q{DgM-AFElaR$SV;MX;x=ATWt} zNR&*oASIJ&cCVN88T~N-yMril?&y#8WkuKfi%ZXUBN_CNYn<&TOs^tkk)#SovZqK# zx<|0DG-kq|1K&scM*vXw=v@RPNN7&4U&>e8{mkb5T{uIF~vMG1xW7cIxG?Gs_>B-#S|?UA@j!oTc@3W_#?? z>)MHgdtQ{K+F5RvZ*R_6o%hXc1oVgCSmqFQ4)oVOY_WWEYcyZe`t|rpmGz4f0{uD+ zU;jc<+Kg}eg`!Y@{e$`M-P*t^8n@JDYN#DPp`ZLQ;Rdj>QQ-M3Nsu|kZC~a7Pe!E4 zdG8=|fLp%GG>|m>(v!ZsPCHl|wh`PCRub&_EFs#DWF%c51bIjP$%H#Z&BFB#Z>)bLf5|5Mg<>;;aW`7#|I zoF066dHnk5%lm`VSMy4B{Xr=kV5P@UQ|nmwMlmz&g}KOb^QNgg3w&|*NhNpMMo|$f zZ67@`^NJ*W^dMrmf{c}zlO&9YON-Ng3uL7q^~zfbp%f0#$uD9NH@K5wLmdHds&ph~ zTk+3`a|qjiG?#Us^8i$bE7B$YfZn+hPI;RcQI`5IZVjU-&lPusguRDF6Wu{Pp%j8~M7m z?`7k=x%7P5dtinK%_{15kaC)IH>8_8o86h$r%cf4Q^+8WdLopUSrKxnDDY)QN`cr- z!y9gYW~|S{zWlqH+7>l~KF`bIgP~x3j#3%{NnFIpaauAn)Dx>=qu?*bw*8(}_iDJc1)W_8U_ZDns zS^w5!x|?e{HJ|ia>;8(Po__&a1;m0kC#39{(RW;zoD}BgVspN6HVdoPwdt>WL!ahw zNE<7(PPPn)>OpTlN60?x)RzIu#bea73g*o4^r(?#L^!v!Z^d;%TfDur5;m(A0%O^K z#l6Gt4splI*Y4CyeDaSbfw~$XZQUafmUsU_#@^qPcUMmfSV;d+ChV;LH(u~cl8ayO z$@X@C8|fc%q$>3Pqvs}c2hu;phWEAS-2#oxmSz z5qR+W$AiB)K`88$VdLl9SswqjKdUW{Z?9j+ zzS8h`5q_*p(FX#J_6X{fLt`h)Ssw0dInG8~5Y55CA^>*JerQfmr)b8`g;NyucKMEa z5cgFA&v(I_P)+I!s>Unbp1f9nUlvit(Mat!mJ>m;zaXJs-*qZVeus#XgbDhp*G0XlGC6rUsFN#H zQ{jXxJd} zcFW;*r&8l^8+B;Y_Qa*bh4_kYBb-{nVo#Qx+)AFK&qW%B4XrBzd|5S?*_A9(WE`-j zVGzrng*u45ZXJlXTQGClZ7l#Ts7D9A<~cRWfsEOvF$SN9n*dp;Psb8jg}A$H=WM3V zeGdV;5Ku+7Ag^BV5^FGj@}(0&N0V127=v6^&;!ssy9#inTjO#ilOen0uXrTBmq{#Q z5v6z~&K;`7mF64Jj}TOS;Mz-cdXU-erNx_?A^q2FTnIq|1`s`%W`%Q{g-AO675#MQd*v^Z?m zdtOfns2{A#ewLNkfme&<7hoeqm8#=L#RPpt8^WfPQcuMjoR!w(@TDmK}v5m?p7;7ETsL4 zK+Z-U7v!qcC6+GQb0fC3&gD4~B;g0(mytvkxE&lv_yPIANL%Ik42tBVhcTpe2F}t6 zKg;$Kh8&rDzXx+?HnI@ztOG8@Mj98|_}IaU&*!&}CSWQn9ZEBsTiM*kj5!plU!!!3 ztt+&D*oiJkUm9uOi;pH#@*hJ?j8HUw_R5l4&-}{LVV0gzFBCp+4aMOX23XpDeZBn_ z7Gbk?dHPhUu6CVTo-rtnKd;PUS2Wis(qdD5qwdKkcX1*oeTre!)mnU-oTDfTBYmo~ zbDXOy(rT+N3p#BCBU~YKi(7)r5s8++z1g{cx`8e_l}=ef_{Do6h5ob{Z+;_`uZwK+ zKpP!_$0A0j+(4GJKy4$43=}K#y2i)Bwc{(s=`cH8MBD?UPBAOUAK%nawEq$a=ViO| z)HV0x^qV(tgu-ZoYjL?hnF!}>W7FWj>>s`T{`K)mW#UcSU=X~_vgv2{ju}cX9}z-- zN6Q?ft&8?JNL%YD2bn1uoa=PuyFd$8(tz&J0?IB>LJI^JScwE0-~s}Ljd5X_e*-3{ zfp<=uAi&Nwz%Ml4VzL0+0JtcISaM)fTE<2a-{8#e zgKtuv`v4!LLsPqU8p&9F$!W{X%gPUbVCdr86xnG4Y9>OooeO!C8&@_dAzS^+2 z47*TbfgJWe9epk#UK#Cr<0zb@3ajz`aF>Mk?`2@8zx5E|!r7?|_{<$EH$jc&YkFgU zSLKZT+L;BTOR8<~tMJFRW$W)UGVlMdT56W$lBmaSwl9F_Znj>svy}T#{+GhK`g#(2 zZxl6sJuRDtlx_>F)c}}=b<^5^i}v`g0$%jg{RS-@_kS2 ztff9(QfQ`4yR>2X)pdBm96)6qRv<@-wRoe;D78~`@YhpUk#6mB)h@k%hIBEN3R|o9 zNWDB(#0Gz)T>b)m=`l?TFV5=4`46Js0&e+B9PZm36WkVsM}Zf7dL;3w024ab{kBpTn8v^~3TZ=`Dn0<>99+NMH9>rEsPQDX2GIOEn|-krRvk zXLS#@woG-#t*sizwvD=m>8r3G^pcF`d)6e;yD;U0D3PAp@DGV*eUTB$AobA@1TM@N zSZRY_1yK}S0SiJ|4gbGZ3Ld5}Y25zQwKuvtjhqowNrxRnfvF*X*i{aJE;v{SG~aGg z^_q&5-6u6PDd{!xn?41U`@2=9*hKGYN`L%&bh4e#kIs9;JTJ__a_bN zUpG~{WHjW};MT8z(WRIBx?1yERWEI6e^_dmduX8Qhe!g*UzwU_&I)N=O#zw3`zX9t zQn4}en^EiU(AzM7A$v-?9jh{O{mWD7m?@YmcIJXd$9f&Dk05yOUcr+)#?DKP#top2 zorVJ(Cfj!)9VVUE#WcUbD7j(@HcEbOi*%Iv#W2rS3$Q+1*#aCSn!9_cGAS@bt^`qI zh_)mFaJ(b&IO0b7qi`ZYhNs1Z5^X3=mQ=|dYe%}*eUw#yuNPzdP1Wg81EQY&LInjm~MEFDYt zsuT?F*ea8vvB1mIhCxLNAcaYx*u=H2G*Kv2ajqDo#p>Hjs!Sc)rocN0b~Ei(~+EJ&D{gpquJ6W64O!r6wV&1}J& zFdUoTw0srMB89`TH0o-j#IE!NZ6%3^s8I-`x2pa_`S@+lZ;xukZy`4bUpLCi^TBVu z3EF2S3BxKOfX_be@ah8n7qG4=1VuLi=IPPMW_y_qPOm3X0EgmA_btT~OskwTd25E2`Ot!Fi|X}P(`g>jSY1RSjwzJfAp z6boXsTJ#Fav~iL}?4GA2Lba^hs!u%r%WZ1-#IoosUI3{tC<4o!4$5Y=+dS@Gg@;vPTSq9jpCJLM< z&DLqA2vURB(4GbvZ6ylU8O9Np=m{!6`puvE#lkgNx+SAlpdsj0hnpdRfo+kC#qD_EvG@P?Dig zo%7#UA7mR@sFtvPmSmgG00BFH{&8kmllfDJU{W@1Bq*u{e7_weHqa>HA`TBE=2ef5ge& zkRiLYXN4C(z~-!B$p~!MVig|v-E_(XLYCpeRhWTxdHa3Z{=8W}FxU;rwiE-?+hX1# zOY2-@Teu-j!P#YjytTU#vgvklH$o;{-rcCRDmA2L8+8q9I)Dh%LG=bpH&FG4do9irm|^AYfJ zYBqH0=+sf8V<&#P_K{ z+>OAj*6A|$7S0TRp|^jt_9?rG-A#Xk&?E5qr#!*`qF@aW+1_3_)IO`$9D zbnn#wSkc?dLDq)r0dxic|I-t70mS*fkA+rK(A# zX5jkLOtL{2V$saUY8LS8lAi?;fQ3eZ`!q0}*0xv9x{F+zkoN+KC}xipGrm%O-TeLr zEcOUuQGXPu^WKTn2bzS3{mGT@O zL9KiAGE3Um|7b_%h1z!jJ?waQ3q5Khy(X&}(mm?O%4Y{4#|bcTt*!f3-6c%ndWG@% zeTF$uLM{@(+;`9IvHT(0Q|IngrJNWXd9GlSvuPRrM&#G8Z1eah0plo z26Vm^m}KjuiCV?vm^+*g5Cu zimpO+K>NyvD8MGsq{JBIXFSk%7E~)6Ds5wbxhNHb2;7rw-7f#0WNCK0SJxs3fUk*N zJODABfFMlNDVRucCjs7_A2x=l;X$i);Uv5b6Z|m17VB2HMz#VKI1QZ|tJxY(1N2bmX2F?*tK=RK_dRjarqr6ofjZ;F<^p! zDA?IN0SMqnWtEa>bunr_DDk0yorAMxIbfUWxhd+@MjT7u4G^c7awxwSXB(gX{8{}J z`}C`zUmuEZ8!F`6h9pZDZN?Dn);2nSJ+6u&$Xq^tGd!_8+|_jZ{eviS?r8GX7eS!= z#k%a&7lm`QmkfB?<%n-5=N{V3pWb-aQ>Vs#s7GJ_rD^)bR6Fi$h&iDnIf|F7&`j;G@o3q6G?v z{y1>utvUIg{e4TJ~)s(CPff3-gPrgWG&{p5t4&jI9Tj3#rK&wQcmmMgYRiLNK+ zr&#z_**O}b7tQ)$I*#Ndyq0s~5l?7@g94K8bMZ%nNiQ8ZI<% z>je$LlJB$+j2PjNiiU~SN6mM|M+_7ovqS(H*Qx^Amg{{XpKTrm(!KeA32;2`ltp42 zlpyORz#{3>zluK+PNLt(Q#sN!7>)us6Ki0bkos{c+vK&%G67}cmTjf2O+8?%0*oXe z9BHmCkHew}GL&&^k~1(52kUtt6V!H2z@~O6e(USNC%%m-^EGlBy4vv*`2nN*wcrmw zLmzPB+4=bvy{YKPr@n=MjSfDPes6U|C=3Bm{yn|GMK4RB-|nG@l`fCp`Z}P8pDb?~ zdW?@F0zd3DcmVvc^5As|KTp;HKTq3%pUk1N5duB^l_1d5h6t2un%Y^q6H3TB(ZTHW@Jim@gb`rUdAbHjdWu6*IxYi$O6i-J>h8H@$%>^D zsR_{2Fpr$))7MB)YjruEtwTzC)<8VUD@jC$P9@BWl7P!>0pjvT?yX9#ZPG-aFM zbkQC^_X_}gMi8a8PJ=SX^?f{1&oi{*MP`X8Mw69`K=$bm9WRJ`*hJwHK`3= zTEBj3$3;!4&(N}eXZ-u<84}L{bkm?LP-$v`$!xh4kj;Inz2v7Bx25k|Pkw6a1aOOf z9XfQW&-1!D1wCKgd~P;c+RlS&>!XD{sC23845-Bvc6uUiEcQ~I*y=NPg+Fblh zVTj)vq*}=$W z%5q+sLR5obX(+K#4o{y>KbN4XE-d}}QyjGy8oj%JQz7qu^nR0eD;r-?S?z;#+4u|(IB=I5h_#0qoKcA-+7nL`oRnoFC|)gG?cTIX_z z<(l zdJ21gX*mY3T65JxI5ZHj%fT9c>s*^9Bn<*7su#Ntb(n71*_8%PlH@n{v;&)DtW#uW8&YP+v-Zy)z_F00>3- zkmr5|E!3ceYLbZQoHCMYCy=aunLWzHdyjL<9hzP=t4TFv?Fh zTzK)}w8e05TkB0c_Q^}a)FeI)bA~0`nVV_U1D}6kMThfSM~mC?okaP8-~z5tYU>`w zzQy-U;pputummVGxx55N z*XmpM%>Vq?9cU>~fgN261pHh%c4mIUUk85Fe0Dk5Sl#15UG`oouOW_qI6DtSkWaEnmJ=2zMvoU|PGeB!q+}0_H;_($;#^CZGN8g?ZamZ^MKejd zNRt1jQFx(gz6@u+OSTbzz*`9jpalvZS!%ToJj2v?FV+Gh33DErf*~a;Qojlv%bCSdDCe{#h z+Om~4VDbDe$BPsaGAQ8N9){aZY#()aNo%L5#Uot`xIj zL=$rf$jT45QG86NpOX4v(~pARs-r-OG_$jyVQ^Ela3oO4w$YlP@R+X2EPz)9iqpSu zRX%E3T3;7_t+*C{)`eX=Zed+0O9ZwmO{~JURUu7iwk9P8vxSvu0;}-KpwOAFjGL+` zvDHB#bk*u)3e&Dus0s4ID}(}RxGof=1EXWPlxl`r;Z;7vvRgcMAu$s#Ty%eAAVd+`r>|Cf(L4I|>FE7%SWbXukD0VQViypm1gc>KT zETes0*e#8T)J4>cYd<8&v!h^Y+zr-#+ABJ5Z61+RsTv*?I;4%KrO`}OKUUwokWpW4 zf>^3IW;c8qetsyn#1OdLp*R!+2MaYsOY|atd<+*~Rtn zNUWW9gfD<qU7ij9w1 z498d#FS7#$wY160Sc!s6J&kx7D;W*l4bL{-`;vTtO?BCGNo-9dGAw*RObw-F;j=Ap zpiA~T+sL`8jGQHoN(|2LvWMP(M5b(31EQNaai>Ikf$NP_S7s)OEa7`sa$lH^AFGZr zMi7dL0eAu^3psBk$Cu{le49wwJ7_`)Y!!yPf) z+Xk6KDCh>@6QF7{tucpC!I>7BL#U`sx6C0so(EaEiyJ9HG=;Rn}$bj}#^<89W&81l=;AdDe9EXS@MEM}ZogQM6ER3xSYN3k7t zOwbYwR&W$E2-A+E*bY>BhVLl0(`GptTk{ArsU7R}WV-D-idhTPB5a~T1w*6p8($z7 zv1CFOX_U2w;v_!976pT#$p9BYpsXj*U6eiFTT@M*LDU z$aryQ^)6W>euPfvtPwv_2jM{2@i;aPq?ldle*ObuH=v3yP1y}=iSRc4(&@~m%*K_x zy9pz=0lNWJgaOzMs1i)!j#<4hqVnzJ`Gupa=#@b6O2AVX980Vs~ z64SPY#@Y!k?4}ogP1AeEMioEAX7QeBa?MyNYF*H^_R@x+Th1HT@S?F&`D>ADq4=Ct z7mYc!%W`e{WT1&JKMLf{7cUrx>5YV{@Sz}{;_GaqCol35?1+Ijm59M5l?HLWAdt~R zoVq4?91V4~);|Cmx zLJ<;k1m71+k!1Yaybj3#%8$3hk3Y&OOX(_BASqBv#Bu77ScyaKgofp5c31&Pz?cwR zHls zStWp!6~LAOWjbxka1^+0E&>XY@FF1KS1*~fwL6r5D_oVxS)Iw~uHWwq&%F{i6q+~> zOf*XZv#`63>fq4pY-6T2Y@oS*oBD>>*hv^kL2}*$h;iG6is0~B*IlUY4JWa&wbPdU zd#rtQ%IEE}19%YK;x0cT=aDd~9HU!w=M|x~bb4v3e)4r$yZoRWWVj6q!WM)mt9mh2 zbik^A)m?rZjioqj%PPiQe*6reV%%j%&y-b+Mc&>f^|qm4+=XInNWoYjq@-pXiCuwF z(l{aI8|O-jcou25Wut2}Znj#*C`e0QIN1*n-N-IffCj)}sNM{@xp?>bwiHzn+qFDg zti&NKW4f!0*lN*_?0iP(LHI=Ncb^mj0?N66hrBvYH&$ZWs}pN&9^o1F?Nz`NGylE9 zS|B5ZO3vh`^?SvmC!6BfaDUe_-3D&DCW=QDW)ajc!-wjJdh`H0wCrFX;J~utc7Wzv z_x-W<0{H$E87Cdepg1N+WZHA!a^?rqAS1=Se!AzG_yIG^Jkvp|3===}1!0)jkt;TT zhDqxmI^&n1pqEbgB`5%f%P-M^#xNI(j{$I(U&LmOj1s@D&74uvSlSkc#IJp$UKxg$ zxTIe8^kGZ<5-S)7XdcaU-Y>ujtpzkTM4yczlR3*22yMNux}2A7v%CD@7i6?}M#@TtiDsiQ z(}dK?Szwyl<(YtLIRMYZj)$@FOmpj5XN(gR6;r`DVT7PY7cSp~N~=)R3;@FHh?sS9 zPEehkbWg|GZf=czf{Nv6I4|=~`cYeq6Dv>$XdcaX-e1I&d_AC1BD%)>s0QADNIt0I znF4uJyo`hJ20XZ2C`Jx#x7tN^@D0Q{@xy1zoRiEDwi(~V51v8Bil>`g58s4T&FPeH z0xIVKd=tBLj*V~1++8~3n)sD;I^vr6;W}&Pn)o3+7y$F5c-F`@LG^Od9WBjXZjEPx zO6GLUGqIw6faVcCvA{EBc#^Jv1vJ72*~=OHQho))+!8w!haV}q%L=Fgnr}U)xwRL- zz30%2r@nI+6MH1dHBd}s98+2cp#Qd$nACDIzD~?ewj;}-rguZov*d9B6WEsTrOo*bF`($lumN}m%1kU!L_>xkb zT*iZ*Z9Mv?|M~C#?LYs2yZ`oo|M!1TKmVp5#r?`Lhkb-kah7o<{6_2s2Ar8T^~_JBe)Kqt6=E^sYZM*9_Lti3d= zK(mk-jzrX^Hw9EyX2nhM?oUOZ)<{mm>*A$Q9g%M(5P`LJ;20#hL2XzVhuLv301mUl zS@_Mf15+Rz=9hIT;BdAva?k;Qh97l;jIxBm;sOY%{CE)rQrXcWc1YDj?v>0I z^b3TkO=3hAG4+*yj1+gR{+~tSX@t_r^J!VC8Eq?p2t-kgs=jc%jJoaLWxtQ|2}{$I zs!zWC7D?;3$FCT359X(e+_@6BKSzE|ZLU=Z65j2x;!*evJrrXC;5xq^%!=9mr+@tK zy?^>&|4~Va|L1@FXZ2J4{_vmv@jr=w{xAO(l4$t#U|P6;N!igR$c(q=zG7{@^+;oD zFF+Vcl|m0YOF)(5+Yp-2&{#;cLa3koD@3bgD1 z5ddgeu^&Kx^XssC>;Y9$ngMMPCMf0r#a4h$S~i4~z_!8Qf%+)`;Ibn;?g!krVbTWX z@*_f4VJ?Agm`HcC0(G;65_b|5gP_VO?V~SLH>D~1vO`7y^lh;minaN5xS;IugExu_ zBQ3Bilu(z0}%Ev+AV_Y5zs$K$EUk8xH0a0A@BU=y?WJ@B6?*nqK^{Q!T`2)e$0yzw(ACE;u_CH8fTe|NtOn#4T)F3d zURDEt>L+E28>s@>!6V?63RPce$}6ygMUa8D=bdbAzV#e3)?R=>;gY-Rt(V}wn|tiI z4(JAA$7NW2H`O?M(A@&XV&pE~&+lYkydwLrBQ7WhlW?88Y8P%RA!{(Wvf?djwEsD4 z?uGiR$UC2r>&P2tO0CaZrGEcHv`n4kQne6&N29^S@q$4l<8T&@WIVX``EGZ(yZ7wLf6ngk@zbN-?PunjKYDI*S^33jB*&$1 z?rm>t{E3r0UuF-t#X(4_$YE*Z>IS6;p5Wd8)|-E zZ1*4kj(m|6j%LlS+FR;t3KxSo``%@eO!o(a^y{N=lKwi_QMC4l+1K~Sx2ykxfP0|6 z6$)+_wwI$>R>g(;ZX^Tnut1rwP0yEGf@~sx+j=F{5zHFVy`|4ydcL1MPq&HsrqM5{31JTK*6EhCe!v%DUX0tUt6I_YFndDRd>id&WdVg}RX47z*I36vHk}mT@ zyQ5Fy0HqeHc97PWn$J@Dz^pJx3F3-r`ps{?#jUJmi}&70F~DjciLsZIq4B%#^yI03 z=OuVcA5Xo})w|$1?drI^BMA{>8C}Z{j$$GgKC8DBmUGONEYeAD3LjjV!gM>O$f1<; z1Ug0Z8|h+e?vDbxsg2#Hrd^yh7);x)d%WWPd;dJ58;1%PlJ@UG2P3Df}DVm*B z!#ULLv8JfBvt370dZV8G=mlOe=Bw%Xp@B%rm$teQDOoZ?x3Yj4=6sQt zMaQkzv2%`vMm4QlT@@^DRXuv^bzxz9zl#6D9raO_Sf%Wvwho-)%J_NY*G$P7c)N z37RRP;5eAh65>TQX8ldhdp>@qw{I96jFJL(@=aP#y6~6FhhlGNKNGt$qpEwE+me0`5`LCt?uvd}5Lfa}^X(4y z%&)qX_idQh@-d5L;F{<8Is5bCkyvs3CV`xUfj4^ZC>dcc4U8Q>mTjNTr%#N$Sx{)5 zD9Z2CfPwp;AJ*5(v4cuTH8^&AjZ|G&nW^T-4k#RzcAD;Suv=W8HkXTk7S3J%obrL4 zJJI{l_eOWw$8V2*IQl@JTs!`3zH0g5D4&|gkDuPp=+(H?E+ToiQUSfA70}nq#Gv~J zEti^da^^Es-+Ddb2d%ji@+?9;=t@-cnVT=_UvTb_bUs7t;tW~aVioJ%iNc!beK|EHOf(ACeW zm&mB^Ouha=tR|9HAqKon+aiJ%lHWb&CQQ4J6DRRTl~d7o^slFX(F|C3&V2%rb@X>L z#nh6VQ*)?&nJrm^{Ln0Nc9klIS2s0xLk<;1NFo1h3z_!4)8kkTtS$p$EY*r zR=XD3`fm_4N?MQ1quwwARGD7q^L-zMKgkh!b;^XkIv7XcMC3rfEr!pwx5Xd{i_dn3 z+uN01iMBBy;>c2eF;KHvOn&BGVQ7GpJxlw>Zyhn+&+)3K2V{MBAXWeW|IJ<*kr7!} zw#@9Ay~!rZO4)nHH4<^{amdOJA-wBGAzfQ`NQDv^k++PB@H_V$pYOZ;?mu20=lOcQ zp8NHDz0SSotP`#-5Fwe8^@(mcWyU{fz^ehjaz$?Q#of_ld(3o%Td{ta*Ul9Q40LbV zT3D?<+?BV8GZe@v9v?Z4a*U1OyI3~Z})%(|pZC5LcS35<2OLcD`*)OLGp4m(L-fv13&C36D zy__Lyf1srl1Drk;u!8cJN@A0D^9m|SyL3@=O@}oPAG4+t@|(J3UegL< z-#cg$FLCxQf7mzM@capDL4~-hf?zh&#JzdvY!(&dh(!97opfUCyYRJ$T9=z4l!L#| zzmPr%{Mij6A-*!zuffSvjPH6>a?DYrCRd(*kZ9jeFy1t2=E!0- z_hS>_dl;kf+x+YG(@DCYauk!sd0)im_f;_JuH2Zgcf=2sK?y8pPh?3UZ+&At!0;(o zEVZy+nXdXm^6U$pTP<4y@h{TJx~aHT&1^>(gEk-JLsbq#glCI&AZZ}s{TqBq{Y@9W zDqUsXjOF&+Ry?zMePVzCd=~fe@J5PVKI{2Oo7I-dc>RegN}B!OUWaVBhrH=*hMqCi zM)A-?$33RxCVx zsG*kaO^2DL>45vcr=ft$6~L5SFX%u2x#CJ<&V<%5KUiPZGDuLNP|<9r^HLap9Z zpD81#Rr1Nl6c+H;noqGCgcVr&R>A^mI{GHV0>1sncNm_xy3?1|8=`wD;YR__F|6jN zUcO$#zoi4U z7=#1vo`zZvO#YT<(q(uCzDUkurW{e|Fi zs5C5_l3r+w3PkriDU=!3)w%nj=U~T_nhEWJ^?YhQw8jcY2XF{-(P6L}VZ`u-L9;M# zb7%nYoe6m`le5iXN)`~tPIH?W9+dz5?f3BHB%!wrV9e_7?N6}ND0JWc3M)ro?6xs% z6ckJNSvqJGKqTDl3e+Nu3Acomb3HBG?J|T7jfbCtl|2SNJ_C02t8x*Mu+VdQ5$x^| z9bR+9E)r_(e~74pl~ZYns)5Hdb3t{%20h=60^fCk3#;?vsCpFC8om-a0nbr+Ba#4? zt*$k)9p>4)FH%n(qHCv&I)Zi3!4kz`4PlFcQ4;VREU{6)U|lhOh)RTmq+&6uSQDbt z5sE%`YBq)F7TAG5q(@W1b9^g^?u2#qWG4C!Y5s05+eW zqs7ED#ni(LUFwLDGlC}aqq(CE575qW=O5TR14Hjn!JZSJdFKeu0tvf!JYgg66ULUq z!jxW*y$Fx@#v>N1290;WF;*B>&g-sNK{$Qw^V}_i=O~fBy9O&PE%ol=8K_4{>D{kz zl)2!?HNpb2P{jqxLRYi2 zJTm?`DiqS<&%>F^b}Ifj%B&aT&%s!bz&%pf$T3p)VqwLS2i@~xfMyF%zLx+y4cY!Z zKZrlTxbz_{CW9zp4xT)~I6>rC;|>WIgP?BH(+Lf*FiDFEyl_Z9yO`(;V?wftjj&bc zQxdyjMbwle#>2{y+)MO^g{dMyv%qw{R%jF0b69VpHG`o!Zhk~tzy^4=juwFo1#~b8 z&|ydola52f$u{XN9MeigNt`gT)1#z3MQ8xLuSxX8P>cC{5)qWID!B}kVFU6wB-<81 z7vqkSgX!T8^eMWqml^q{&~ZSROGXOi4X73TE9KZ5k4RGq;Pgl2l6nXB?j-NjESQxG zjj7;UE^tvr(~+79JIO<2+U!{fyC;)o=>fGCD$;ymI;$sXpJ3-ypiFOqb+g5oz69%Q z#yedTrsF}S`x!%h3r5oSVaLh)m@W?UJSv|d1k;_;&A6uz(Iw?%1i&^SEX$yUbt`Fo*+H@_`!h3imE~o2HEj1j zX&@4ISUq(Bj&Kb4`d3xhyw+7f7c2+o5wHvg%4zBx6WECzZ|CSy(SWmAApZCu0iWAB z41hvx6b)uMF~qY`xqIup-ujp) zc>4e2n-4hkDepX>Ncflf*<}m01i#VSh=#x5A@+onV?zB4i8XkT3ihWf%T)}MtDi18Y!l}1NG%JE#ZLaH0(>%p>-V2 zUBzW3S#VU!)RmY?L&RxcN^)Sy1$Rm);RK-|UP=aGKm!rcSrmOF&_xcc9dP=1=IPI zRa}F$HjZCe3}Znwl}m0Aoqc$v4XlXvyOl!{I1JbXh-opU&nwTsdFEMHWj4&XG1`=9lorEF`^X)(0>JU80!~26!H*nZ z;_`csR3Ku^%KJwhFkS8Hqb5gaB1eN-V_0Dr%i3``=#n1P1~EcciJNQbeW4ckh9?_X z81Uszo3L_x)9bQf#>oroxZwmMF;_PT3rMh4XA0BV=+#TYeKW1V4o`vJ+z5ZiMIAA5K9`AEPJtST~{sJ!&=lL31VA6*%$!I8mdAYpaunK#Q@Q(&7IM@?48--!Rw^}sL!ya2w*4PUhz@wq@ zJv^T7@5bW=P>Q@M8TR(x>rHQ92Pq0@^3a9mrRr#kfagseYZ`#(utWaS0n5gD@t-wV z&oqJmSe}7;xX1rf1Se|B&;KyM^YU)|GYC7NnvX-=lCfD0j>aO(<`r0BiLTA=aAMr+Xg+()Mm?;Txk$mwELah}4_}^#y=nR1mu8R!pD1@ch2{Ho zrDFy*{@V1>XBiQVv&Ji)q$qXx0pm?x$^fK zhjV*J3OR>c(@n%ruAXaMJ$jq*4V~Ry7y9^OJ#Pa^4@%AUbpGR!;`c3skM?X=YtuLuR|G6}_7V&7Iu67{sN9ntx zrX#m~KDN$H`-!%rrmD%yHF7_gl1Gl5oC7c4N<6Q$^=a-X_}RldcJv3=*41WuT@lrx z*Aj*}qZUvay(lU%k0!4?RIcxZ8rqLVu1A#zkJ^vY91XJ7rNVaCtQuuBALQYuFAd7D zPk&&mM&0bfIJqJ7JzozLU@pDtt)M3^p4!)M6iBRmPZqrtZpAWfY5UKW%KdYn{B7*M zy{MtlkPMh!-3c3&=zGc%Dci1`xf+~K%OP>B+LF&`C$40dQ@5_^3@`~19DeVwAam4wYCy^ElD0VXMevizgYAtgQgX$FQ)}K|K22hBlR#wp(K`>S z8}AoiyiqP@PI4N4Phr$8A2fwYKpXVXNQ>JDqweY7(gZDGegEs%LyUOdh4s|K~>AFAP(hUf9lPH|bOP$>1${glew|B`bHYI-ycscm4My z98tICdGiBEQ@iLdQ0hp^2pT-MH_n(H|G(+d_1o&+d`~&7{HnRNUC+rinpCJ&gdywL zp6ERsy<(94<*|tEUIIZXV@1=oupp zs`8ROc&}37Wlluq7#Y{tOTAI-pK-(H$%^W45|B$gRI9P~vAFxPHt$ZHoFF~*Pelt@<} zmle!B)Udfkp!h9eduoLd9Ym^@#;}sQO<4D6A%bEUS9sR^Oe=+pbrc=&;H>IoBz}VXa_zDU>hXqMc)``a8O3SK z&Jt$%vr1kPm&Z$I=SNTtUgIuh$;uc~uC!nb;aJ|%x{CQq!61o?gb`2NKO;!AqH~5# z>3B~E%}~x`85yUxz&oRJnQzy>_HiEwERmowXSvdTI7e+$xAHPKx0nZ{(O5=vwe->6 z;!>k}xh+-YKPRkEfEpez6^(iooM%KIQpBpG)a|VYjMEB@QB5K!XKo0hS#FV7HjW-F zNFK<^M6OIedJ|%ZAMgGpF>@o!?g;4brNd)sc>+eDD(E^Yg6d}dU!13hzpZX3k@S}2 zDV)`O%Ef+v7Td40M*gHGPp6-I<~wQ1=m0KgUQVI2pqD=1 z{cWp9$Ps-!ZLWd0czs{aH493XZJ(kW~VBUiAxm0fMwMf^>5ot}Vr{%oZf z(fthtBC&TLP^GCTQVZLO$qg~Q^kiiz3a;Vz{>qKb!@@-h1(jZODc&uj!a=i>B&A+u zI>kH#+iNyZX72s65|3mK<5Qnl*WXi{`JZ=dvGH$LyXmE|I{OoJ8_{s36~Dq;*)rb& zs^4uR&(RO(REDZJMaa%CdwIC5a=TpjMiF$|kf-|!M)XXJ@|m-Gx=&0UDzjq+2hd0ikGw`{>kow1`=m{$ z&+R)!#?=gFGxy9I-Ly(<6w?$p7@}7a7b3d&c0vngnL~&ieJIq@VjEP`Pe&MGFsP=Y zG5k7uLn#J=VVfrDyt>M$GpZs;f1*non!>~Pb zLZ`J^Z@7(R)89sgy04YRXFJvt=~Wg{`Oa)_1R;$s_uxW5x`m(ZzHJd+Yu7)tyxqZW zv@D67-nxjNsW@G@8UUCSyrf|qN3FBpdyNrFjUd^p_{trYk#&JW+CQ;D#FtX`dY{Jg zI-1bJ2)y3;6{47rA%66lRLq{)U0es(yGUFJC<<842+6-<6a^+G>GHPGo|+%kY+rEE z2Qo$Fi|bpP4|0c_%!x1WKHv?#e@ksF<7SZ8T{3CI!ZMc}Fugi(B`%DH@}d;%i_J1P zD}(PKM^1wtWYz(CkYeuq760}=7F47vhLOA|i1hKc{L>aUfm~MYrr?$i_IR#_B@_sM+*50WTFNrHu z!H}pA%WZ4zsXeEC?q*!Rgldq(b1XT}m3Hqb;aHgIw5h9A&Z@};z_mVmMK1D375Z=| zEG5dn=?CvN{xvt5M_rTUI>RV@mX>u(Mwwq{AETYKM#?kaZ<9W9@y<3?p|dfv;tHpH zUoSgo+f5PJDgLG2jyks$T%frJRr*ymrqvTGnaQJjXJ5yc{-|5GGe^mlk6~L2JC?6S z@s4%Kaw*WdK9_MrXvR{-JnDovouuVSIFgG@8jSb{}{bEU)SQubY4uYU?VNOV;1Zh zK^P`ofkc-_$}iX(@tAzJ-GFz_O19Q>)o7J7-pfRe_6vvQk0n##-nZK4Gx_B4ZM0-ez-`ljnTxjwOJ zUE=pE8Pv`#q2fPhD!kuKTq~~o`FqoF1sS2{NU>k}{pNu_5^=TN^QxXO@hp&art}O^%p*l=y#)DEqQdW%TN#| zW1^{7R(_@75R!i8OO>?mS3EWGRf*lAv3i%n*M4L_!YF6l1<@1k+m=J=U#0nmbl${r zO}--6DRn~$Q&r4`A*<^o;(kedmL&o!k)+tP8ZW$TA90;IuSzOjWd7#q0N=NA7ZUuY@x@D1CC0*pn z%AwPwO*Vq2Px|+`FQ1uNxF>NX8ZVM*r*qNX@*j2dZ5Zwy|L7^2a*c5#QQz~_d$vN*k#IfWI|Y2I%7pN&S1 zy(Agdcu1XdTnz;qG+M*YMK`+I^sWh8%FkF+tND6puuQ-0(W%X%FSjn|(ZQ#jxh{Bn zmh0tMy_a#xbi%eyBADzM3DTIaYOsV)jG(fsYo{DAT86nqEZzMaXEY`$PYq~uz9YMo zTONl}h_OEtU!tvsOfQVAdD@t1mC*>R%HM{nyuFKqE9;PmSmN`#mFU9YY2KFN_tWy> zt|4mT6jq|0BatN*jMjQ}YI{afuU4{Ouv{@*CUNv0M+zvb=8Odgij>KLZK6`!8zEzqi9rHThz_ zg1+KRKTNV0qViAOPGo7^9%UD(|JPG7OdM^-WTYEA?0cK6#t+Rn_|qcp${8(pb6PFr zr^NYQ;c+&(msgzba4FY0zvp?6)9tOcE$W*N&ac^z@a%wt(4VXC_nqdzQjMHz__@Eb z!K)ch53z4!%$sPDbOtq(bs`ppHM{EPZB+CF&$k~uuN+xdZ`67@qsruyjf$~eD2tTF z;~AU3&|ow`QYNL}?0ScParK>3rwmv=YJufrIiASp=;j$;txP_>yh0utY5$rAk-+i% zp0SLOyZY!Q$C~psX=+q>i1=x=HXuJK!O$- z_IvqV809@5e`BVDUH*eX6tp8yGbpxUS2(RU8D@6xVx6TqjX?mYsHCWc5ugP~?6pW!k`QnwlHS?wKleL%& z>i+sjs3EO`l!eIn_tgU$?e>Ao{liz<2W6jDw`4v2T`nCMg*ns7K)*KVL60n?45-`K zzMRSD#qn;M|H}MQr*q9v8gGU>wbQMVLU~Wx@*iwIha<;LQnay%7H7-@LNWU0??(Q4 zXj7x%kAnU&yieae(b_u@EjdDe;@?EaoR3tMVj@Q}^brVt)^eROb(rp*s6o?G(Xnt&;TkuR`TaN?rlD^^}K_*6*Fn3A}3 z{fJ+?7b?eol2qnx`7R|TiG)T~+lcE63wW!I3(1I<$xcL;NOc8XsBWPSJ>;#tbeXa!eD zJMqL?XXZt9+0A$S3c0&-S6dc0lt=F4=oAoV!+?9Q%=W@tGnz8TETJmn4qIa`Dq1x0MbdK(Z61ixR zmb~?L0M9n6O=K{ile}9lf&0EGaK#cVIl@@d%T!S&zgn@56r99J^E%2IEN6`vx)_ds zeTWC`lh=nr1Qj+_CS!94D^{A$4?oDeQ=-)$qv}g`M{n1)sG-J@6n!YJRbr+LmI))l zL6|&4@q|KYJQVUO3s;(D1EClhQ)0#PyY0hq+&LGQd2cX*n3&{t$wn+jeTd?8I^&>t zcDJuIUXEYCMt$WM!rGtvt~K4?(CCID53tqtZ9SYZlu?WH9l>WJ@;0P7T6^ zF=G7u%M(T@Nd>$$CiE%1c!#rR1=HOhy8+>q&j+RRmzn%yz@sgdlrj{R{-!~=hq&yy z;p?}lqIkb6_-ln4@(WB)Ub9oot8~#lMOiA9bSLdl;`&NMjzh^lsd0DSHiZTYQ9P$H zW86ai1WII2XW3|Il%*mi7U>H zQ#l%#FhkbnT4eONe&USH#G!!8SteeJCLys1eIPp7_!t39r0DE{lS<{7-bHf?t&~gT%cZTa1Rn-Q}{IcJxU(!!ArynV0Ej zwyUJC6q1*$cv&Y@T+wZQG(JuQ?r-jb`-An@6rI%jOogMhkM(;ZUrMuStgp&Gxq^iok!>G{Y`?J z@)7IcDV(owd=(Ns8}iV1yc{59{DdCD_Hh*S&}dLe*38R(Uj9ttawiwumOCnfC)p7+ ziT3Xfm*;&#L-9Y3tarUyQos{LUVCxo%SDAf*G=?92}9=?sxw78^jAd$E9Pt4F8Pp^ zM)R|Hb*T{kWIF%on>W53)tRk$;>T_&M!D;JIYN|I)@B}v_qP}^XSGq@uI$%v;~>!3mJ039)AmDI(hJA?BU&RpRBbh@nv)HP#s|Hdv>Vjp|<&Re!9siF6uIdvCjc`Aj7-lnRI2BHqkS~ zUCd~i8)>y|ewy6b{rk;^)J3zQj^LNY@6oXh=TWRFKhg}5P|C`1i3Q*B@%6nJryaU?7~?Wht70rc>Y_H*^HitJ_`B}jOUZc@ zQ|WyMwY&e&^hg&y+~dhD|8WnjV~MyL9Pc4h+or9wn(e6a+*kGs3NK4B_HjNhWYwW! zyFXv;_1>!QQY4myP2-i;Pm$|PnzIZ^S{pK&(vBMQ3y(9t;iKDft(F7x3a!LmtyH{V zX$%9)K{CCkS#QeU4Z1X;$li#^ZJ@p@mL~9z+ld^>H ze(ug-o=`H#n+*Z?5=MxUx3)ZB5E|FqMU7#+!Q;e>B%IARk;(3BH4?)5K2|8F%u?{g zzZE?3$0EvuL=H?fYd(GW;(mX&4{@fn^j>+|5K-g`@crQoU|27ZrAQD;G{a4&?z!Zn zrO~owcXh!u``o6#p9=MWuj2eNxsB*=moPc)`c-g|TolSwH-846sYZ<4_qsMduAw14 z1AdPunS}+6C><2do~=Qn73zV=YZa@`2XSJJId==LrHNv8DO%Kd6UxP{xR7e2KiWOc z9~o-=GcV_E@Ns^hDyB=M4O^0ucey^!(iSN;&y?E9DCKy|=>x&_&=8|1?s`u)lx_gC zN8t8z4cvb6(?za?{kZHVs?DYf$}UR6`Ft0dta$gLg@;sY@7uZ`6sT?zGPSf*Z#bBA zg=(KzS9poZ;JFkpUT6rIBq;-w+*Yk8R$?A@jn@*Yl;ORLcYMUQ=sF>^Z%{3+nkt}h zCMc!P%48Nr;vNw4>cLbijrHV{x1_noVPxscPYuh`bfgh_MOuQATRkiF!FR+f$P6fR znOW@fxvw(lHdw|#$#+J*=%i(>`Bf;7co)o3Xct^#bY-JuyEh6sQj4cu_BNYvO!&D# z`J`KcX!{mLivn-L2mhti?XTqO6G2y-dRC_G3RR>?)YAmW&!-putH^gwRGVrJ+y-2w zRvUY-$)d2duR#G+4~w~;l_i>Cp;N!odOqD`bVH-Rn$?qVh(xa&C85FN$DcB}gYUgZ zU>oS5^x;8z0|%ZoT04{rtv8OJZOmiF>J&QrhNSZSmak>Vn^PL~1aozZ#E$gG_un|P zJ_@BCcB{3DiiI1yZ=!>~5T*f=^UE|_eNSz2%quHrgQ2PCzfktQ-5PNdovzW5SRr?W zH%=%?CA^$by||lG+>Sj%;?nw;;vJGEIGOBwbT*un)(7I-@F;nfNn#svN_)ndWZzY< zNS43mU7u(4&oH9XUh~!peXNu197J6`@NkP*8l7s!g;uM@%bs-_@B|8fd#j1xuR5!G zZaK1qZ9GG&MyITv4DKSUqDJmQNj zq~oo5Z@!F{s}zdzWYprcilpy-7#;Thh9&bSv{z{cHerrZWH0x+X#SL*622335G+G2 zKhGF2vlsCLK>Jf_KCr=0wLOH2pJi2Rno$@} zE{$&11&w+QFFTFonTYkJlA(KPC?d+zjC*$)t}3ULZ~Slz!CYFIiU#?-POY}P5AG~a zd+xNXmt7poSj3CnJbWPdeNR5KP>oA{<2njpU4Ub??2HUoDR$+^@8;NmqAXrz&1Sl# zk~rSVQd#znd!eWlc;fklJ)R}&oDW)lV&{qI`1WsdSUKsdD3Y=w8v3x&`10KHDJ=@z zy+?W(zO~}*-%R7EtD|JC5%~>XYz@oihFxi8=i)1v>+V=fX#g?<)4;cb0C7CRC)CF5+Onep+=;ABlr0G z>4wC}dQ0x1$iaf^8r^q;8-kIbX9$yUGAAID(}-v9HT(>542=k-*)ZXByc~2y^O$Zk zN4aRW%J%3<+xmXvc0A=r5$=#Q5wT%%%WhlK8Xd}|YnYYAmx#F0_ZqL>2AHzydJSQ} z_?bLJC)Ft1OW5-!O4w1Adkt1CnoHU`j!k7pU6x`(^>K#zv+8&??uYaJ=)bxlJ6*n! z(j%dPRmjqO=SfhhdHS9Dkr&|8l;a}eK%`7Z$|TK&Och+rlXR^9NRn^V2y{C1Aye%v z$1)wh3r)WRcZOTOTB3bObla$7^~B>(kEYazCLTwrNd8NzwSJvs=}_7iv+gz984<|*QGx=NF@hA4(1xN{IiHM_HU1SfTK>Xm zRrWR|ZfvQj5$9;5WweE;#dWkR1^M_oD_v{W|l+UTCKHkT^U|iRp#d@-cpcD9&m_0o2MC?l* z+{tqsNm4OhxRa+kX0bEj9d!fnalGRqGP$ixXEi1Vj*BT;8XnU`Bky~@zE>a>peEXn zido&!=&M{QcUOpMutSts78oU#@mwUCdBa)yAq6?IeoC7wr~}W+tA6E3E-cenlrBAZ zgIeoz{bUvhE&-C^?mJ&tJs(+#-uv-v=;rQ|-n zDmQ@&5!Z1dAe*_)m6(s&HZmyQ>XWwfs$KWFL_9-aFgg}r${O=L_0AC+DBa!Sa> zutJ9EcD6Exge#3jk-Y3jN!aK=&Y^{vF7Z7>;duW-WO9b^c<Qf3@sO0~xYBqZ5{{W@-qk6MQw@FB8((Qd9<9~V8}De^IMW&~UUY-t zu>y4S+1Xtv-Sgi8j8*7$)Q|WZj7<*lRj1V1Htx>ve&Gxk2_op$V&F=%AHrkGSouV9 z!`A(Mi*!8aLHq$GZtA9+Kcdrcep@x|fLtYj$qhp8j z2rM<2I>L(=Gb&}A34~%i&m=g2f73_R_U~cY4pb`)b@5}zjiLl6&Ch2l{%r4SQM+|V z{O*yIHUlrX^N%mNznF<(`Gls9%}~8er^(3ktx+OzoAhZ{6Q{5__32g$>Ak)BqrT84 z@Wy(wd`!bGeo1dXYM5h1xAfDQyw9U!+>S=^mT2d(d(w@T(Kq+fUi3@c;Cy4gs;$v5 z23Fv=4OwLh89G)>o|=Dco2vG!E8nH-E<4@N*(6C-ZgD0($R-5vbIH7byN_2^m`W(N zOA^$WO`c(l5HMo&qV9Ldi>1_2(l81P5W4I3Wt?XYygS8&B1cvd<7F#`)0$QJkC(Ik zyGhZ#a5|pTPb$u-%;Qp5ndyr5GFTB4b2a>~rRkNv_jK(V%2unuPg8(hRO7YfIXN`_ zOLXX-!;^H6f+iJwX|$CQ7y9hv4@>Yn52iJ`qu*M#pJ_Z0F+XoaZxs^E+j_U^g>mS2 zgC_x@ROHhBd8h`FD}55znKbqdsaM7W6PFnMqjQ>($;PpPKdPx$-87gUDciq|X|&|9 zCN4J|+vuMb3|~}w#gyU86Q|dmBGSF4v7-y*-=`_;$ekuIcDHj(+ZJG#wd!xFOYr0w zAK+0FY#9aD16h*z3LxRF#rmO?afM4hSd#G4saLB@qqr0RoAuSpmt-7K4@QJE8nt9G z;JHp4i)18sd(QSN%m2G&sX?u4>(W{O<`R#8K<29w^VR#t=j~h9I|Iw>#tkLFjXqD( zorYBs)&Y{uAL6ld*13vtpf1nR#5-(;CoWvYH;zXQWR0xE>cJcJjYx0HJx^1V5-?L$ z2(&RTLKV$)61d%owlp=9%Iwck?Bm5SH!$kX)A~5+Q;cp`yibwJ_;IDaUc9X^we#kS z28prIQ#qqFJMDGV;mClA1B;<;@K)qX_BRE*Nx3cpjfvM^*!?`)!JA}jJX#JH#BpEr zSsGA^I6zKM)97OsJBPwhvL(x;TH#^WexP&=Xl*T~Y zhPKky0+YX=5nZ24kk;P4(TYR%`!(o}A?U`c@69(HEBZ~fDCY7xigKf-RkEUg8TEH& z@!9nyyT=o)ci2Q8*-nm6uT?s|2aiwpOj)XY2uGc;7OqmwrYou?UE}&h9b3DC$r1lv zVWkAWYB9)L#{%6&_1zs)WeQ8msAh`=zpWAg`X0TR5&e5-eeorueG}Lv{fYihn(cDtKS!VN zem!&vcs`d`omNwnGKs41|KXtYyF}^si@mL_uNG`5)USWPVy2X+P+Q-(5~=EEw_94@ zElm|E9{$>23OXo?IP(6rUunpubgh+@+f?}4)waWLRI|TBLv}W|rj(RgpEVY3u72MC z(QX&j9{lTD*Z$Pu@WIAR+o^{$rdJMs#vC|qv&`M1RJ#59_dw#|uWMHi_BO!>X|Z&$ zg(k6mCO)7v+&aYnfqMS665n9IhwX6ZtK9zMN^_0n6s5QA;al_H2dkc|PfNvZgip?) zjt)?V47eYM<`lTQP4FTRHC3m;ABUd8qeH+y4@H7sYSiJzYUAS?+1%g{BXEsHZmbT} z5aYq>Lyc&jV`TV$2pjM5B`;pA5k&Lqf5;iWW5k&cs|#If;=>w14FZ0wG1Rc+$C^To zdVZ`H)Y#)cCe{)-MluAjx|AS47SGmwpGOcN5aZOqngCXb9f$dO@dTY`Mj#k|AP}5? z{B#6?@JR%81+gN~pb>&tX1v)7AWsl{Eeoz2@bH^ujwS+O$B2($`>R`j6F$I!#b*bo zd9f4_EklM`5t0#sAk{@6*#Dxf-^T}{gs^9UISVW!#LhZ*?fnvP++96<1oAIhb~+$Z z2rCLvDW-+Ryr)4R^0W|$^M6s%UIj*lumTX%M?xUeGM+eq77)IOWrk3Fuz^QD3blq?}oZ%IfGunS`uAy`frge|op_`-kGNjP}7fDq8H zCFBHN@?a?->JK1{w^;@J62^)_z(o;|PWcNV&;kDN0$7he9`!a3cKrdtfABB}!g!QQ zz^VvV5bDk(ie)CJG9W^zh+3#vnWzC#VpwiIoI!{s{(bh20)dbcI;mvVEFy$~i|Wk) zPkn$!zViZP69FJX;{ytTsCrL$LeCl{L_k3U5zGZdJEV^9d+Rg;A$#$pi}-O81O1}J zNJwBo92-2L)NchW5r`lz0>p*CEF&mFjBvl@;Tqr>e9Im*iUF1f5~*4Y6umm07&w(f z%mxhvP5Op>@9{4k1VWG+AHnh0Kmj=rEiEutNlXP<0P=}#Nzol|as(od|D*z1KLd}& zvGhO$PbchTefn}i`BxAKnbwm|7Pf&Sg`G_9-SCqz(8;(!cVz#IgPWIuQxe#V(6nb< z-HU=f5r}A|lZq5I#Zl1%tv*<0h_owD694BJ1foC>fnfb>z`a+%1Bqi34@-dhP@E(I zjK@f5voC@FfO-X3aSb9qQovT46xI?1yW(JHX;R>YCMoBC-q?(T|A{9B$a6?JAf58# zj3d=b{g1K(0&!QC;Dpg1WRfD(?7eS#I!j3dr>!%5#r!Qvz{c49Rgu%M1bJ?OJ%an5H0_ILTgKdu~EW6j_|nUa>L6@1fVIz zazU{XGW6ZW0F*(!3-3gZW9ImeyhFVc7Q0@u?QH@WO09w??bPf@4p94%!v=tCdV@K^ zss;4-!^4wqn&J%@%3y^d>7ryn<>d4Mg)&$vNG|G_?adI^FXcviO1VHdC!v;Trac{ zCz8o}86|M4my#YpO&zCVV?}U?>SquPCwPc`kLZI!7dix@(&*%pGkY3%sd&8Pd;>e< zrE&t~O2_QWD}kd~c~b$8QB-gwLSiQ1;KoP@J`1p>Qo)G~y7nHthL`vj`1!vv_>@87 zOZ!v+nvD7n6@=no?O1ByK_)f-f0h}=!O%AM4A79c$_ZFfT@{gUR-fP(UEQHPHZJlQc{~;pJoNG+zeA;Oc>3 z-v45sQWex09WM|8{sjtb<^S+hd)y^Y3EU+~$dU#-RfZS9~F%5iRgo{n&Ruse_t3OAXYkgQ)`i z4e=j~?c6|oN(vb`5BJGvh;amrG>)SoLIWJY))UCnI3Dpe2;kqq(gCewbX@g@_&3Xjd4`xv$ep1aNf>} zYha4b0u6mCfc>*Ycm;CL5!u8kFk7}~@EHSfURV}cHfTi&42og_|q zY59PL*d{=LyNW+P^=mj%cqP3L_QBJ)128(+i;%Aw-A5RG23G@gHr|PK+{cXp=nZA~ zBTLBWf+Ck!GXMvJ3`~Hx?y)8kad1T&1pg67A3+#TfF3x|Jr+bn4+MtU0ewBJIK;9N zV{%OrSZ0X|oD9~GYrq3NtQbU<#_+yP!2p3Mzl@Inv&A1DOE(0>{#fiQ#P?lmAlb{fruQ1K11_tXUJc{_O_%6%Lq76Et|V$VZ1gHR(w z5S^sJq0*47Me1vnqM$~Uz*zXZtkbmwXpBH_|37_^7qhpzcjX@!P)8K%!Kz+ioYEU?I`zDZYd`$Kl1n|uQnSn>K%gi2Xd7f#Y%@S~>s??joSrAQoe8^aK}^yI`sDw>6lz zSpa)ea4Wd}{y6+j7jqYshanJK`h+LUF+l`eH$67T6?0456>z;slsajSzG$G{^jHNS zO+nTXY3Bj<^z&zdL7q<7+eFPkSZCrqP`q&dk9}bz4mMqYV0z#i@v-p~=qwcX!9~PD z?&MU`#=wTz@l@kj|0HI;6IR2d~l8GdRE|6JL?}igjO89{0f3;0k*Tpd{J0{ zV_cO3_$-bGwZ;L0CP0t{Rumeq1_bb*yk-OHSJ~*H4LStx;b6=65d6pfSI-jc?yUpd zvOG>4`8Xil0%*28&VU;rfPd>bXx4uA3;*SQ6)O<_jfG$)z>~`p&I*t%>6R&oqCw5a zh#(MPaQ*SY(s2O)igGXm!&b*0wTc@jmlJ~j*c7N(gKQ+)0Cv{La;D&bDK{KI4;0|M z6PFY|;?S{f;K2IW^M!1{D?x8LfT1OhKRiDi2M1_z0E40u!I1jAEMFqLe0_}Fk z+JA?G-?2dOAMq@34a-bw;=zUR2^AF)0g7K>xgbWGh6=)M!6%h?f+ZFEUyKBYaRI{# zTpZAhP&TYr8(7$(M<8xpJ(1rP$1VmY2c_39@DS8mpOou@1fUDx)>H23Xkm`gh6<3b4 zwchCao~aN7!k+PDwmvAwk;03oJ}3L5T(B~I2Ac103nJNpIj3U_8eOj?FqH+*al=kp zkU{_ucE*bH;4E0a8Z+GjdP6!`C$s$J4NcCx2rYGWduu>c42y)!RqqVi1rx{%P~PQ* z4?iLJHwfdI3<69yjy+ZT21pk@!wXEW@&1una&d5}Fdwj|$oI$6*L2I}?v^70G08`8 zLY#3qK7e1B4;}*2rSjA{-f__S*Fe|&JF4g(0L3m~zWaM)BO7&NY}x>Um}5J63?@~N zqZfs&e=tMrJpu0eoWVNoZ=bS1k zI=~xqNIRi7!P<+%ksom*Amo59j|w?wH{t z${{eVOqc$o_Q&9ZP)xIPG@4;wro0fC<3X?YLAg zo(%uq35Ein(8=RFcTV8(|EL_R_Ves)5s2@D_$T%tF+w;hW`NZlbWL1FlE*dvUs+cI zS5x-KZ!cR#WkQjiXkUpW35iM~TM<39X?d+u+8Fy9(T@^k$(}-Xs_8K_O7S@0@!^_g?vYeBS$>-#zy%zx^z4&}vgymubrLD1}!NcqEuYW}c~lqwf$HUYf$| zFN~TF?#lfwYPB)VRGlE5+4)~gp+e0}FtZ_1x$$~95$uS0jNN-_FZ( zylb=h&cafS%o`S5v?4q(FeV5}U0IIw*3k?{)G?qG);c~Q6v)Mv5zb-1#pDYy;CHDUk6_UYmwcoWSAy?YG4B%uiGV_23o z3;{Lo=T=;tzki%ROmHgeYe+1L>f`)z>(E>KGDa%em7f@K5M9%u1J*a}?(t$||CT>x zst$~?26>=$hi3kF^4orEkUJWRA=3FfF&QFa8UMFm@_gtQ3^4MYq!!I#CzQmN8Pg%E zkHxWAbkrJ5mDU1NHe@~-IW-%2)y0Mvf64_NH;0{in2CPQ%a#%@XxH0@3zf%3#Re~c zx>trg=g^)xmOZ$iiK@vA*NDU^KgaVn@S@U25Fr@F;ozEFhS70l18MV;3D900vf`NL zt0Vv>DPG30Sfkeh1gsaqumvm=6^cNslN$$c?qi@zN6B~d41#USpCITz+p5_)9UxbI zcq@_PKBl&mD4l=441gVN2MUH{LOi}mZvlkIGwZ&c0M9Y;6VKZA8Uao%)?t zBU)Q)q9o7PmGYR?Ia@A1I0&3lHg;=vuw}z@o%~USy+!v_J9Q6n(uVhzk+SYjorXVWNrxRD09ttUmY^07PqR*QG$%*Kf3`-j%aM+u$ zMAlmkx+XDc@<>7;um^-BvGkJ8Z$2-okbRs{@rd7`mkj5V%FL)5Up(4R)e_SNiYL<6 z4qOT9$!vlgl5rG^9uI~i9|jBD>~#cg_=m!JP~prX^vZ&cSG>`Hl%TI6R(ZjW(1dl; zH^c8~wja<7+dWdM>3(s8@hQwcm+U=nuZ~LPw*XY3BKLCo68Mx-hI5+2;;Whz9D%bt z32H~*P~Y(Ao{lcZ9mCwD*hNv*g$b!_2{T9I-S=OEu^mfWNX%WJIic!IBOl6(cT%yx z!?p~8!3Ty2{P{koriM9PQ3TVHC zsU^oH*tfg21keEmexXybmVA&|I6#DtLuV>{6uwX3`C}-|r)=q)z9$4Oe}^Lu=vs(DYjOrU)X?QYyS45P%U$cbWkSM!AX%b7;eT7hrcG?xIFfkTOh&>@{~vIl0Haa}z$YDO3oSAKDzm=^<5sbbBoUzJJ;+?e zbW{b&&>o-W1hW=63372=S0n5nKw*J56i(nG^$~ES>j*)T>KuVv>W_dX(-8t@Z?^{F zw!R~vV)F=HsBmQ($Cto2ex1yM%b-Gxb)LVIIBKN5Js#daLaL{plRkP0sGYu*lHSu zF>h$dX4`T-!cTULf(M181bt5?@VLVi?g)*S@EZwet`T^2D`yz4=geDB3U^6EShbfk ze7APyGf`AJ4m%C~{tRV$$tbC>Us>Y}m+O(1WCSVgW%tkKFOXZGVEii9&n@bmp|R1K zp8?8DxxbojR>RflWMn8YcRLP%$PGdR9Dic1vqLTdsH@ zdkkjD;-iD)aUdVce75-XGX1uCo5yf+{{@Ord5k|zz|fj34y-uw7R~+MBB{A|Kk$Pd z3LTlHO50f6_k{+>XrTF!BDXxI8IVr7P`3s@vhhD#_ zUGNh0eR3V8wcZSds!hDmWNb#)Cl9V|LM`xPrN9$G)ql^9g*O#r1yYfXux#yRIJ23_ zS3Lr1FIu~D!STTg1uXJqIaNb7qu$A$xTR#QR3!y;a0S19u7aFupXaUjdg264!F2{P z$65PBLk9MJc$}-C@6-0qZ2Kqr5gy~DY_L~L_|v-xfU1=>j9hjH#;w#r?g zMBKOH<13az@K&bCvJp^SuXKmVhweI1xs|ET=LGIoMPY$U(Bt6ReTPuYZ=hNbhmvzT zKyIcmP1SUB#AUB!^j!6&sm|$!gp^NpW;bdrc!gq~i|Hrv_Jex??D-I^fJW zNVz(WX8}4Ep$N;$+r!E%rl!vjAg&MG%3{6K*oF^oTpWVUoi6{fBr9NxAFMU8@C5?ArWLZ$)$%O^X3xQq% zWd_v4C|D5x+wNJo(dDyLLULZu4@juQl{1S1{Zj6H>N6^L>rX2kDFuqcP+GzxNXbX8Unpaaa> z#wwt^(?p6Eor12pY)j3wk?oAb(AccdQRPfT#^GEUq3RB4xyUs{2J^{>#TpZ#qT574 zV&^-;vY@WeWhdJxJANn9P5yHt5K;T#>FDUWy5*Tv(T?n_B z>;>Zky#&0!lEAahdclDTgn!uVMbOPn-4|mWbLrZ};;UXzQR~IqY`T@Qs`0+cYn+)s zk=?}_^q$cqZcJ>TzlTCGn;IudulgqK+g-FCa8qhM^o9uN$#z~k^GOlblXcJ;jm9`r zT>pp-V6g`^^jcq*)BfvO!E;wv3_`E=)ep(#*0s zo7H{Ad}R}|9iYJ#OZm-HlcDDytY-Scx;$iu9v7i8kIA~lUIZ3)0QbENNFqRq0c7rF z>Z%d})%EMA!0Y2v^q_|!+Y#7fAHutKQdkgCOm+7z`32`M|EKvI)*sULG3T}fAC_g? z5&*LxM3E8}*4~fk;}l5QkNa4DOv5ts>o$rIj&s@3LbBy$=o&&gkZO@#b{jsYx8k@^ zjNQfa%6*y&ZtBwniM6{*$Hn(CQGMmLio}h2&^VQohtG|VQ3TPA)RbkgMS)9@Wx{ds zPwaJRnL^|N#s>$Fo-j&5FDYYyG!T4b2c-wfY$&_t%-ht*3hQ#VmMWg2&C|HZ*n}Ye z7`XxpweEkIElMx(OQz#V~-!X)=16WM=<~1gzUweMeZVpX%1uhGVz4_a#ydfjon@=23+Oev- zX)RFFA1#+I2pMhnhNlJIg5|G;hp}~w{_zIK);myOaj+7 zOow)bxR5gI>o&n7Z%EnAZ?tR>Wool$UHXqj9=T*EwN>?Fp`Z{=(}fu`1fJ^H>dN$i z6VS7bmbw6orxAL#NF4gauC@(sgg_A#&u6Ox;CU4DVrF?vyMEm>e6~Rl$JKdDQ)mN^ z5mJ7MeDb5#9~!!FT#mmqG|bocg-~-}ftj&0w9~nU3=(%ynu&U4>k9|Q`toLmt{WyE zi+Wvza#(L8?S9*JzMQ*aoIC<@7L^&$v0A(FvFm2^13KXPiddf7ZG-j4mt>{pUnwCgS#GRLfls`lG6{$mZGcxCyhRLV;TzJWnv8NIrp$TUicSCz$!Tih!!G zy&vd%_z7J6E+-MLaq)w#K7N86NeIHSx%sf-Bn!gM61r}seo%A6PvG}yo4hehYf;N0cSfj&kIp-7_9~~|Cgt{qAhFwqN17+N7 zSfn#skgCoiu!S~-_2{_)Iw5Zmmg)LK+cT`s4rdUki36WA%w(=ZK=teE*>DYi2bi)v zeeeN++c!~|&+JjfHus@llskIq^%yjYg(e_s4wPoh(WBE&Y2Q5j{olEh(aJoQDnZpH zlvbbw@1DiioxL*$;$O`X=o+JQ*xIqLVDverYZek*whD3-r! zp|J%ud!?n+bo+&a;sP_>$Ak4uPE1286RGJQvk;0eupI7-i<+NOu&(cB(z+)6&mXj& z`t!*bI)Z=Mq+D^w8ogUfYwTG^X?2@7R^HEhSw8_a@iUx$@n{#@1wi-d0lM@I1+Dk1 z)BIWsT#UaoPg<|v7)mRU8T%5P{)dMGAg4H>KXt|_6Rsz4xst;A;Gnb?nByF$K~0BH zD^{T)6i?>1eu3a)7s#^_J&-nBu{Ps9hHc8F(s_gdfn2maEY?3XEH-#>v!B{+p!u7> zZ~z^Cs{OC!fsmOgto_KItf4oMOKxjPYj3?d5M8twMffCnxScJnooe)7eGU9Oq2sv> z8BrX3nLY^Q6mkCH@t~qRUa)e}&-U%Pg^u`4@?po`An-jCB-n_UPhj1n6xM~cSLX^=>Qt0i z)=xDUEc*oO(!(FLrU?X&(xxy!(^OTb?s|Cd2}yw9bch3hsWYKe$yD_ld|0+3iU7D@ z^&-|p91;ioATw44pNq^ItwKP5>8 zX9;|5atN#q3K3*dEqc$63r92Eh%nNfoa%Ts;b< zmob01<6?+F-Ao#*Yv+$D@q&spggsSC==qb4rX$MMpGWzL{i)V)eek=2wQfIWE2vfY zlel8dA8$nHt$LClp1U0rkkbd-I_M|4=^lsYFwpfPRBj=QCRMw0+yD)!#H1}HR00;G z^sCR+{__-h)3Yqb;v2lwl=3}N&SBtWE{<%ftyS)O)GBev!{ffZ|mZ9W@Sd& z9Jkd$%8GYK!P|0VMe;K>J^sM?_n1roJVb(DC>lo4M_XXkALtAavhxJEwHxmKf!hxV zpnVldty+hJXP0p11`ybn!1nDa+yT~;Zv;M!A7m}(K>1Z$tz`bW$Xqr4CgjBmgy|=$uEqMMjgqkKR6jP6aUPWF5SGi(@aiNPlWu-NR{5cm?>&) zEKO0YbB0+rFcb1)YW1I@;)4zxEIyJoMBRBGx}>ZEV{`irSK*; z)xIsH-bD4I=n=zmtK@wtDL$nnw|dw}%Extb=yx zv{+X?Uk_F_%qCo`|59m+%v^0L)l*Nh2~}tQtPOeD=^9*x40sdAxyge=<~M)lmH!1rO1aW~4r!zp(Mg=PUq+B?~&k%rC12I_3~5>mEtV1hcAg z568v08oJ+O1L{eDO?3p2+ECTYzZ^}(?8Ge$M8r0<+8B!OVR%Ry(SQ}GW;w@0gF`$X zD4Q0~96eIzREw4WQvx$<@tigRvIy|4ngG3F97e-Nh)(^R%Z+}mhQ~>8Tc0?)`LB5b z7m7={3f$zqh%8wW@(z>6+zfN#IM+038qU%#0mi#02uzmy_H*~iChw^x((t1mwP4$I zNJ|s>q~3RFi}K4cy*E-tx>TdFJOPX|6L@~7Z5UHu<+lKp)9at)&9FQH+Sey^2ETg= zg85kW0Eg+_9a<)skNX79vB5xWG#+93!IqYF2wxaMVg6_Xj zTOqfO`AQ9=a~c|O&Xg;qzS6ZkLdBvp(q)siYuld2;c0`;mzc%dH!cLr_K7S*NoZ&P zee&}vbdfIMT0}pQk-XlXzv_k2K7^@0zPU(a-A_A`O;T zbW6gsh5on^0F%db1WmSi`n5-I^Ac_}6I&c5IBqu?{h9tJffxtul zM!2{n32JX733SLR0+-#Our3snZ-n|D`7q8f8Q!=j>+<`t2yFHQ;VL@{3lwN7!m{^! zAo~gPBL6_3^{Xq%+*F^bFyUE_KyP+_iZ*+Ta|#z6?w=5%2%$FH5G$X0w0nt2da%haww z?F(jt+P_2qu7mkY+_*`)v+PXwlPRb({y{Gfm(v7)_FZ7nOFXuXRB(nohBq@H(4G90 zwZI_h$J~1L8@gCN=wgX;DHSPT`HJ~X%l~mZ8-pI=opk9g()+6*^%WjcB8{0+4Xy0a zVR(*$AP)KS$`^C4m{16W4a__>(;2`BKvl{48&jfu!JvQH9FcjDS zmkuXy`&}!2c?=HWifpOw*gBSw4xn$an3Q%W4%OQ*YpKDJ=Yae*dQCrENUbBW>+8qk z688*gyw)$DkXli37Q3=Y5 zeRIdjy?xM8Fq4kot9MI4qt#Ltz?1PhE^G0$4khyvDthruZyE=S8rV!f_)zB_jq-8g zm2{>r`apF9V>`_@x4oYH!g2rmX#>gX9T4%Btc7Ulv#_1Kd&;NJwh!bSw`z;Do#&4d zdOjdu`TBF_R2ZUR<2C406+!@o5k`NgLi_HXk!7?=YZfcPdPvjUHf$>a>Ps(D;r`l-YYk+I?FF zrdrE+pMX}8gs^OxEo8oDF3cYU_~Z=F-eZQF%wgAm@IlKH%VGSL<$@R@7-6-?mzHz# zFhz6>l-|NM4?=z#aan46==CoK{N1+W5)kRtm+&FUZ_zPaJ6&p)mg*Byb4t~&Z>Rp< za2#)7Qbp|hD8oSUFH3+#Cldgd@P8!J$jjf5A`d0Z{D8~KKW37)%jp9axm_nk z1L@0-JX#oEjLJ6;6~6doL3$Y^$ z#XRFIDIQ(sJa7ZYgF36OocEcA!&c`wvDzCPCv!ac$ef!L%jPUj8N^WFO zlpN0`7d~fxU~Ey&jXaEIUZcMzHg=KkSHkd5Y<43*;V1+QgLR*nnrYW!q0im<9Ji&l z^qkh#@r0@?G~y#XBYehZ%P)c5XQtjl5Kv9Nz6!GcUL`Oc=MiqRUw<{Op4!+zT@7pD zz{g*H3&Qn`xeBS}=-z)dI1E|MI~R0r=Cq43N=6~5M;tOP{se?7+RD{ijLhSMZ8M4TcC5ZJHBiu`pIGk^NBsY z{l;P_!`J6+mOF9Wk^jjguH|G`LM4cy;=kh?EZ0EYccH8mDjg#|G5Wp}D&u+z3@c`a zwh~fa)-u-{pTCT|D86=+ptK3O;75~nHO-?Naf`+rXK7aDy$nj4n7Fo_QEqYt+xm5jw8>7h zHft+sOt;xdsV|$BieLG?Qj|YuXimN{7!_5itu*!sezN(9k|tj^*WrT=AMmR#TryXg~t29k;%MxX{ z?lLTs<-VncUPw5RlKGu0yopaM3qs@Ab{&mh*xD4hY?UU z|GELjX>Mc-0z}__BXo~jLgyArK1bov0_iG!H$r{HMnMR-17Vq7D4c7d zxPJqsigMj~&~B;Z)v1@vTjLSVqBqVWhQortH5K63QpsCP*MSwkKSfWe(_rb948Iwr zL*3AHb|nL8@cow9zITJtp}ku=yOM#xCan-oUYZWsThay1P9*S$Gz#m1+3s|Kg{>lG zZJ(q=uf}xTj7jd$AT@Qxdq`AeFDcA+e-Su@z&9GwVP$JJ#AgWdv?(2Kw`OD9whbaZ z+&00mnVSUhpAUgGXKn(s$W4M-JxJiJ-!?&0<0f5r&<6Kvkr#a>@Pn5W7DQAYY6v$a zZpM4kHVdM)?F4SUg2Mb&cC?bW2+MxG0-EYdK0WWGjzCcj%v4wMdb9tl|K-2HF|R;X zCicm;nnEEyM#bdoGQTJl^mLcpm3llkhJcEO(uOL6E<+}~27QhjA1@WA{u?szD3aN{ z*ytFud7x6}$=@nP{iNU8uJD?^fa9K)N%KSP4rhRANd|9`D6R9tfrbo zcg6tV&S2n&o6U<1Z!IUJa^Y4}cFmFEyvgTdeDfQKLUICZjAEF57x9QV1 zhQ#mEZi5a)Rh~2>+xQKjoAwsAPo1<;@$G*WDky1h(5DjjeNr&=)I_cJLuuMROLuTZ z7kck~>4A$~3kWH{?$bMYWZGWrbS1ju;tGf1?|Et}dGivvJgLkH9sK!Uq{C=aPN>+0 zA*6-dH(oA`!sV&wXgI{YbP>l|i}BKKmrY}C%F)Nxk?MlwcHpPQbU~KO0QI)m+j*!9 zdI{zk=QC?7ROW9Ltbv$J9$vM|3Ar;%8d0ksq_my*3nWP!E7h~dZbN>*fTJie-LGJh zw$h5uOX@Xcbd)>C?MjtS?u{>7Ax~S$uWkLMjncH$1wLytRd3W@so(a0{+Zm|P(_fn zwGF@4O+_&ti_}l_%Hk5_;o+eQurkJD(4<8>X-k9o}|9HG)qvmm{939hZ^RjAv30qzf*(!@C1cG zoC`9}xMk&TR@1K#G;rtQ6K&S#Xh9lh?9&SdYxkR_uQqJh_t9$2C;Gq1Mr(Hp&$Eg-==W$sg*yk2<9;kMqHho0dUF;l9E%l-L%^c_ zkk(1buVNKBz{o8x^lTYbpw8TdCsQ?nFp=-L>KIma&02NAa=J33b~F zZ;*_~#@IKeu7MpjIKK^_DUtW(h%w7X(a$_6m&%Gh%j0;rk#tV5rlF%B@G6v<7I}F_Up6E z>d6??tg@4aYF<}&adF{ug6NIev{lvJ@%8WT!t3sAaC-DWz|0he_F#Mzf`Dq+;N7ss zZMVREIz!-`#NAN5emCEFnzxJDShp{7B! zld!c<(LVGQaryE;c7uEU?#@tLyIZhSvA-w2+3YSY6D(CUA}m{C0pY!r`hshH2?tC- zNOr}Z6xmWQAvrkBq7)UR2YMf3$zQT!4{o0djq#rw5F8z}fJXCF11$X9?%3&Rn9%GrsfSHY4|k{7VXZ{rNU01bnJuh z>QI@M5hihYR@ANRr{B%_s`QG`@qcEo-D@zP}BWf@c%FlXX#H|@;B z=$K6LlUDX<#6D=6w@;Ve9YSAxVC!csEo7?Qcs-3cRCzF!(h8jM{rzxQMx^Zn`L2Be zf2390rdI7Rw!QU6YIrZ?P+I;TbUJ~q{jrK}U-rS!cKZeK*j571(A*CTd+irwWL^@u zVa9&YiV#u{F+})OIE8UL7x_jQcn$e*@8o{?R=!`LY3?Ab9&&L%7ZD|o3s2zhrzG@7 zMp!Uc^8m7Plw6U}yf#@J6g1Ie7_K*ZNT=+a{sE{lKOji*7Vd5_zNZeZ**iZ@FX2S&;sw7qmPeOIpueTORnHMoi*mgx-@kYu9?F@Ub18)5 z)ElK|OK#pKRKn|2Nw2z?kTDx|5VWQp~~zBf-#Kqb!ptSLKBKj8G8><-I>@C8<&WJAg;^G{}6aC zI3!pOPTuw@faGt-`Aciem``a1>!_ps3|(WfjmAIu;CC+{g3mRF1Ux_aaZt;-bMRv5 zBxw}4{njBk|KgBLa5xlf((XbRiRrTW-1V6r%P@e*+%Gi+`<&Sm z!E^YN%Y+-=4RX0>s)yGPqG;ADZOdfb5_g6!|K;ZHO!M{-=!dg-RXPkRVG z9~yn@9rREO^{32A>R`9mgE|Y62okL>G)=tduoETzL?>zQ6$XT!=iK>js#DyEf7xH! z);TG#$P(Ln_#9)Rt$x$>ZV$&jdE2B;<~KZrXsNWKWA$!AlG75DwUnQh7!0oFbJ4i> zDI$SiN2U5e#R`S)U#PakJQO`@O~k_!L7BT9gjq4uvx5LjM-xD>cY;>%mK0sy0-Dy$ z$~#yi5ReZ(*6iUm2&is+dISo;91*G<0&BdZFxrFv*8gawMmAXX(zpQBhZP7IYT>F) z>1voVdeKHYq*sR&z{_z30){HbDm40M6mX%j_%AL7a+i(gGYmALIm*DZ^HxlIw*P5w zyus-o&j@xtwYrwGD-8L*HHKGWdD84u2xdlw0(qLzdFJ8ks78W5NX^9`eJL#-?fp+5 zs}CfaD7+A~78mk^LuavD>h=eo$UKLhN;Oe>Y9SZuuLzI9t2xNtHmd)+pMEhZ2kq^0 zbV0;PN1MCQ-j>X5pA78x$l+j`#2?-QE_n z?>jxDsz)~GIP{u-Tp%NQI+bTUF*l?0yVTL}jit1_GeAdRgt>Vn*)wzvqkFNN)^rWD z?a_ic7_-5;|Ka7)VJX^0ldDo!_@D)$=l8zG*!T8)hRt-rW{Q1)C5wyTUT#rm$T1khS4(HZZYU1> zg>|${;McDsu>GSV@N0FV6GVJqEuoLxBV|tSX_-KaSU4c(d>;w!4$M7HKtO%^q!XMo z-mYQh)4Vk@YrUa0Aa84;c@VE^^*Ve4hL@b+_l?kT&;Hb9<5rYz`+L#_Q`IwIIgI(; z@?rSy7dntUj49Fr0^ko1A;4Q?TAAO%zaDMtgqg0ncq6)qLGiNw9*#j_mi{-!I!%SRmXHJ@L?RY%t6F9@jVem%*}jSnT;2$a_BraEG5vnGG& zo`?NjU@qm&Y}->%IOS9)de)fw(MtwiF000V=c-Hf_r{TwRxt9NHo#jIrj_eY{)ZoYDs)a{*G5WEvzwos6223&1LdR{RX^sMza zK{5M)DLJv+8bpJ|C}xOfj>67wOM-=?82=n5z?z#-K8j`jzY}0d9dvPK5v3=&FW{Z| zS!h4vtRU3eM&M)@3ghoz_?#7_E?$zdmo;ZW{mogyhz=c%aKM|h;4_-lokkE#w{tLl z=DA+Y8vttwJjk2E9h;fZ!Udal{2;iyu-+_0K(+9~IjE{WCrBQY6ZnhCdFbqTUJxsF z9)s|=A?NY<;&}m6g&?d}Q*fSJ5I@Om65aSja}CbZVuwGQgcdtdx_qs7;XmRZ`@csg z-EL`u+PM5Dvp5b9p2!XaLIrG>?$k5QMm+tb^tDnW!HEjUXs1ZXmEq>tX_%G$-qxBdj(sw3zdf`zQEAs&APAjbt89N&cdW9lGl* z4LB~wGve^(?L3rKJ15=Pq=th002P?nDCt&0t{Y>$+{s&qMY!W71p(4nA>uB)bz{+o zeBoKob;$O|a2Y|IjJD}t0v2OR_=O3o6dqoR&M3yFM&NEsv3A!UNNM@`qqHvd=d{P7 zCAf$7MO<&MRV6SyyF_3J2R`XrRf$G6ua&gk)0-(RpOmGe8$1q2_s+eN&7P$wk#9?Q zTS8x%Wsi)(1q_SDCg6o*Dd*)sI|kmmC=KXn z@2Z&8`qDg(`@>0^tStA02oJ_YxgN+JwP)di2b0*h1ekddG{-Y<$t9p&n@{MMUc`5b zRe^aQkdJ3vmNp(Ai^3~W$D>VuU12Mb-}|I!@;dl7o-v@gCj!s2z|E6|D8k=#ME(%` R8NYyRPi6O3b~

sz;h49Tiu*{LfjM#X_uqJ0}F}on^ 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